IP Force 特許公報掲載プロジェクト 2022.1.31 β版

知財求人 - 知財ポータルサイト「IP Force」

▶ 国立大学法人 熊本大学の特許一覧

<>
  • 特開-演算装置、及び演算方法 図1
  • 特開-演算装置、及び演算方法 図2
  • 特開-演算装置、及び演算方法 図3
  • 特開-演算装置、及び演算方法 図4
  • 特開-演算装置、及び演算方法 図5
  • 特開-演算装置、及び演算方法 図6
  • 特開-演算装置、及び演算方法 図7
  • 特開-演算装置、及び演算方法 図8
  • 特開-演算装置、及び演算方法 図9
  • 特開-演算装置、及び演算方法 図10
  • 特開-演算装置、及び演算方法 図11
  • 特開-演算装置、及び演算方法 図12
  • 特開-演算装置、及び演算方法 図13
< >
(19)【発行国】日本国特許庁(JP)
(12)【公報種別】公開特許公報(A)
(11)【公開番号】P2022082257
(43)【公開日】2022-06-01
(54)【発明の名称】演算装置、及び演算方法
(51)【国際特許分類】
   G06N 3/063 20060101AFI20220525BHJP
   G06F 17/10 20060101ALI20220525BHJP
   G06F 7/499 20060101ALI20220525BHJP
【FI】
G06N3/063
G06F17/10 A
G06F7/499 101
【審査請求】未請求
【請求項の数】9
【出願形態】OL
(21)【出願番号】P 2020193718
(22)【出願日】2020-11-20
【国等の委託研究の成果に係る記載事項】(出願人による申告)平成30年度、国立研究開発法人新エネルギー・産業技術総合開発機構、「高効率・高速処理を可能とするAIチップ・次世代コンピューティングの技術開発/革新的AIエッジコンピューティング技術の開発/再帰再構成型ニューロモルフィックアクセラレータの研究開発」委託開発、産業技術力強化法第17条の適用を受ける特許出願
(71)【出願人】
【識別番号】504159235
【氏名又は名称】国立大学法人 熊本大学
(74)【代理人】
【識別番号】100106909
【弁理士】
【氏名又は名称】棚井 澄雄
(74)【代理人】
【識別番号】100126664
【弁理士】
【氏名又は名称】鈴木 慎吾
(74)【代理人】
【識別番号】100188558
【弁理士】
【氏名又は名称】飯田 雅人
(74)【代理人】
【識別番号】100189337
【弁理士】
【氏名又は名称】宮本 龍
(72)【発明者】
【氏名】木山 真人
(72)【発明者】
【氏名】尼崎 太樹
(72)【発明者】
【氏名】飯田 全広
【テーマコード(参考)】
5B056
【Fターム(参考)】
5B056BB26
(57)【要約】
【課題】固定小数点の形式の入力値に対する学習モデルの出力値の精度を向上できる演算装置、及び演算方法を提供すること。
【解決手段】演算装置は、ニューラルネットワーク形式の学習モデルのパラメータの小数点のシフト量を特定する情報を取得する取得部と、取得部が取得したパラメータの小数点のシフト量を特定する情報に基づいて、入力値に対する学習モデルの出力値を求め、求めた出力値と出力値の小数点のシフト量とに基づいて、求めた出力値の小数点をシフトさせる演算部とを備え、入力値は、固定小数点の形式である。
【選択図】図1
【特許請求の範囲】
【請求項1】
ニューラルネットワーク形式の学習モデルのパラメータの小数点のシフト量を特定する情報を取得する取得部と、
前記取得部が取得したパラメータの小数点のシフト量を特定する情報に基づいて、入力値に対する前記学習モデルの出力値を求め、求めた前記出力値と出力値の小数点のシフト量とに基づいて、求めた前記出力値の小数点をシフトさせる演算部と
を備え、
前記入力値は、固定小数点の形式である、演算装置。
【請求項2】
前記パラメータには、複数の層の各々のパラメータが含まれる、請求項1に記載の演算装置。
【請求項3】
前記パラメータには、ウエイトおよび出力が含まれる、請求項2に記載の演算装置。
【請求項4】
前記パラメータには、バイアスがさらに含まれる、請求項3に記載の演算装置。
【請求項5】
前記パラメータは、固定小数点の形式である、請求項1から請求項4のいずれか一項に記載の演算装置。
【請求項6】
前記学習モデルは、ディープニューラルネットワーク形式の学習済モデルに基づいて、パラメータを固定小数点の形式に変換することによって作成されたものである、請求項1から請求項5のいずれか一項に記載の演算装置。
【請求項7】
前記演算部は、前記パラメータに基づいて、入力値に対して、MAC(multiply-accumulate)演算を行う、請求項1から請求項6のいずれか一項に記載の演算装置。
【請求項8】
前記演算部は、異なるビット幅で固定小数点の形式へ変換された複数の前記入力値に対する前記学習モデルの出力値を求め、求めた複数の前記出力値の各々と出力値の小数点のシフト量とに基づいて、求めた複数の前記出力値の各々の小数点をシフトさせ、
前記演算装置は、
複数の前記出力値の各々の小数点をシフトさせた結果の精度を導出する導出部
を備える、請求項1から請求項7のいずれか一項に記載の演算装置。
【請求項9】
ニューラルネットワーク形式の学習モデルのパラメータの小数点のシフト量を特定する情報を取得するステップと、
取得する前記ステップで取得したパラメータの小数点のシフト量を特定する情報に基づいて、入力値に対する前記学習モデルの出力値を求め、求めた前記出力値と出力値の小数点のシフト量とに基づいて、求めた前記出力値の小数点をシフトさせるステップと
を有し、前記入力値は、固定小数点の形式である、コンピュータが実行する演算方法。
【発明の詳細な説明】
【技術分野】
【0001】
本発明の実施形態は、演算装置、及び演算方法に関する。
【背景技術】
【0002】
エッジデバイスやAI(artificial intelligence)チップは、GPU(Graphics Processing Unit)を備えたコンピュータと比較すると資源が少ない。そのため、学習済ディープニューラルネットワークモデル(DNN(Deep Neural Network))の実行は、エッジデバイスでは困難となる。そこで、モデルの重みを軽量化するため、量子化が行われる。
通常、DNNの内部では、32ビット演算精度の浮動小数点が演算で使われる。積和演算時の桁あふれ検出やAIチップでの動作検証のため、量子化ではその精度を8ビットなど、より少ないビット幅へ変換し、演算を行うことで重みを軽量化する。
【0003】
ニューラルネットワークの重みを量子化する技術に関して、パラメータを量子化するとき、前段階、学習中、推論中でパラメータを変更可能にする技術が知られている(例えば、特許文献1参照)。この技術では、桁あふれなどはその都度調べられ、パラメータが更新される。
また、CNN(Convolutional neural network)に対して重みを量子化し、実行する技術が知られている(例えば、特許文献2参照)。
また、浮動小数点で学習されたモデルの重みを固定小数点に変換する技術が知られている(例えば、特許文献3参照)。この技術では、統計に基づいてビット幅、シフト量などのパラメータの決定、CNNのチャンネルごとにパラメータの設定が可能である。
【先行技術文献】
【特許文献】
【0004】
【特許文献1】特開2020-64635号公報
【特許文献2】特開2020-060967号公報
【特許文献3】特開2019-032833号公報
【発明の概要】
【発明が解決しようとする課題】
【0005】
本発明は、前述した問題を解決すべくなされたもので、固定小数点の形式の入力値に対する学習モデルの出力値の精度を向上できる演算装置、及び演算方法を提供することを目的とする。
【課題を解決するための手段】
【0006】
本発明の一実施形態は、ニューラルネットワーク形式の学習モデルのパラメータの小数点のシフト量を特定する情報を取得する取得部と、前記取得部が取得したパラメータの小数点のシフト量を特定する情報に基づいて、入力値に対する前記学習モデルの出力値を求め、求めた前記出力値と出力値の小数点のシフト量とに基づいて、求めた前記出力値の小数点をシフトさせる演算部とを備え、前記入力値は、固定小数点の形式である、演算装置である。
本発明の一実施形態は、前述の演算装置において、前記パラメータには、複数の層の各々のパラメータが含まれる。
本発明の一実施形態は、前述の演算装置において、前記パラメータには、ウエイトおよび出力が含まれる。
本発明の一実施形態は、前述の演算装置において、前記パラメータには、バイアスがさらに含まれる。
本発明の一実施形態は、前述の演算装置において、前記パラメータは、固定小数点の形式である。
本発明の一実施形態は、前述の演算装置において、前記学習モデルは、ディープニューラルネットワーク形式の学習済モデルに基づいて、パラメータを固定小数点の形式に変換することによって作成されたものである。
本発明の一実施形態は、前述の演算装置において、前記演算部は、前記パラメータに基づいて、入力値に対して、MAC(multiply-accumulate)演算を行う。
本発明の一実施形態は、前述の演算装置において、前記演算部は、異なるビット幅で固定小数点の形式へ変換された複数の前記入力値に対する前記学習モデルの出力値を求め、求めた複数の前記出力値の各々と出力値の小数点のシフト量とに基づいて、求めた複数の前記出力値の各々の小数点をシフトさせ、前記演算装置は、複数の前記出力値の各々の小数点をシフトさせた結果の精度を導出する導出部を備える。
【0007】
本発明の一実施形態は、ニューラルネットワーク形式の学習モデルのパラメータの小数点のシフト量を特定する情報を取得するステップと、取得する前記ステップで取得したパラメータの小数点のシフト量を特定する情報に基づいて、入力値に対する前記学習モデルの出力値を求め、求めた前記出力値と出力値の小数点のシフト量とに基づいて、求めた前記出力値の小数点をシフトさせるステップとを有し、前記入力値は、固定小数点の形式である、コンピュータが実行する演算方法である。
【発明の効果】
【0008】
本発明の実施形態によれば、固定小数点の形式の入力値に対する学習モデルの出力値の精度を向上できる演算装置、及び演算方法を提供できる。
【図面の簡単な説明】
【0009】
図1】本発明の実施形態に係る演算装置の構成図である。
図2】本実施形態に係る演算装置が有する学習モデルの一例を示す図である。
図3】本実施形態に係る演算装置が処理する浮動小数点の形式の入力値の一例を説明するための図である。
図4】本実施形態に係る演算装置が処理する固定小数点の形式の入力値の一例を説明するための図である。
図5】本実施形態に係る演算装置が実行する演算の一例を説明するための図である。
図6】本実施形態に係る端末装置のパラメータの小数点のシフト量の導出を説明するための図である。
図7】本実施形態に係る端末装置が有する学習モデルの一例を示す図である。
図8】本実施形態に係る演算装置の動作の一例を示すフローチャートである。
図9】本実施形態に係る端末装置の動作の一例を示すフローチャートである。
図10】本実施形態に係る演算装置の精度を説明するための図である。
図11】実施形態の変形例に係る演算装置の構成図である。
図12】実施形態の変形例に係る演算装置の動作の一例を示すフローチャートである。
図13】本実施形態の変形例に係る演算装置の出力の精度の導出結果の一例を示す図である。
【発明を実施するための形態】
【0010】
次に、本発明の実施形態に係る演算装置、及び演算方法を、図面を参照しつつ説明する。以下で説明する実施形態は一例に過ぎず、本発明が適用される実施形態は、以下の実施形態に限られない。
なお、実施形態を説明するための全図において、同一の機能を有するものは同一符号を用い、繰り返しの説明は省略する。
また、本願でいう「XXに基づく」とは、「少なくともXXに基づく」ことを意味し、XXに加えて別の要素に基づく場合も含む。また、「XXに基づく」とは、XXを直接に用いる場合に限定されず、XXに対して演算や加工が行われたものに基づく場合も含む。「XX」は、任意の要素(例えば、任意の情報)である。
【0011】
(実施形態)
[全体構成]
図1は、本発明の実施形態に係る演算装置の構成図である。
演算装置100に、入力値が入力される。入力値の一例は、浮動小数点の形式である。以下、入力値が、浮動小数点の形式である場合について説明を続ける。
演算装置100は、入力された入力値を受け付ける。演算装置100は、受け付けた入力値を浮動小数点の形式から固定小数点の形式へ変換する。固定小数点の形式へ変換するときの桁数(ビット幅)nは、予め設定されている。
【0012】
演算装置100は、学習モデルに基づいて、その学習モデルに含まれるパラメータの小数点のシフト量を特定する情報を取得する。学習モデルの一例は、ディープニューラルネットワークなどのニューラルネットワーク形式の学習モデルである。学習モデルの一例は、Pytonで記述されている。
演算装置100は、固定小数点の形式へ変換後の入力値およびパラメータの小数点のシフト量を特定する情報に基づいて、入力値に対する学習モデルの出力値を演算する。
演算装置100は、学習モデルの出力値の演算結果を導出する際に、出力値の小数点のシフト量osfに基づいて、積和演算の結果の小数点をシフトさせることによって最終出力値を導出する。演算装置100は、導出した最終出力値を出力する。
以下、演算装置100について説明する。
【0013】
[演算装置100]
演算装置100は、スマートフォン、携帯端末、又はパーソナルコンピュータ、タブレット端末装置、あるいはその他の情報処理機器として実現される。演算装置100は、例えば、入力部110と、受付部120と、取得部125と、演算部130と、出力部140と、記憶部150とを備える。
【0014】
入力部110は、入力デバイスを備える。入力部110には、入力値を特定する情報が入力される。入力部110は、入力された入力値を特定する情報を取得する。入力値の一例は、32ビットの浮動小数点の形式の数である。以下、一例として、入力値が32ビットの浮動小数点の形式の数である場合について説明を続ける。
【0015】
記憶部150は、HDD(Hard Disk Drive)やフラッシュメモリ、RAM(Random Access Memory)、ROM(Read Only Memory)などにより実現される。記憶部150は、学習モデル152とシフト量情報154とが記憶される。
学習モデル152の一例は、ディープニューラルネットワーク形式の学習モデルである。この学習モデル152は、量子化されている。学習モデルを量子化する方法については、後述する。以下、学習モデル152が、ディープニューラルネットワーク形式の量子化された学習モデルである場合について説明を続ける。
【0016】
図2は、本実施形態に係る演算装置が有する学習モデルの一例を示す図である。図2は、学習モデル152の一例として、ディープニューラルネットワーク形式の量子化された学習モデル152を示す。
学習モデル152は、入力層151-1と、中間層151-2と、出力層151-3とを備える。入力層151-1は一または複数のユニットを有し、中間層151-2は一または複数のユニットを有し、出力層151-3は一または複数のユニットを有する。入力層151-1に含まれる一または複数のユニットの各々は、中間層151-2に含まれる一または複数のユニットの各々と、一または複数のリンクによって接続される。中間層151-2に含まれる一または複数のユニットの各々は、出力層151-3に含まれる一または複数のユニットの各々と、一または複数のリンクによって接続される。
【0017】
一または複数のユニットの各々は、一または複数の他のユニットが出力した情報を取得し、取得した情報を処理する。一または複数のユニットの各々は、情報を処理した結果を出力する。具体的には、一または複数のユニットの各々は、一または複数の入力値を取得する。一または複数のユニットの各々は、取得した一または複数の入力値とパラメータとに基づいて、出力を導出する。ここで、パラメータには、ウエイトが含まれる。
さらに、パラメータには、バイアスが含まれてもよい。一例として、パラメータには、ウエイトとバイアスとが含まれる場合について説明を続ける。一または複数のユニットの各々は、一または複数の入力値と一または複数のウエイトとをそれぞれ乗算した結果の和とバイアスとを加算する。
【0018】
シフト量情報154は、学習モデル152に含まれる入力層151-1と中間層151-2と出力層151-3との各々の入力値の小数点のシフト量を特定する情報と、パラメータの小数点のシフト量を特定する情報と、入力層151-1と中間層151-2と出力層151-3との各々の出力の小数点のシフト量を特定する情報とを記憶する。パラメータには、ウエイトとバイアスとが含まれる。
つまり、パラメータの小数点のシフト量を特定する情報には、ウエイトの小数点のシフト量wsfを特定する情報とバイアスの小数点のシフト量を特定する情報とが含まれる。入力層151-1と中間層151-2と出力層151-3との各々の入力値の小数点のシフト量を特定する情報と、パラメータの小数点のシフト量と、入力層151-1と中間層151-2と出力層151-3との各々の出力の小数点のシフト量とを導出する方法については、後述する。
【0019】
受付部120は、入力部110に入力された入力値を特定する情報を取得し、取得した入力値を特定する情報を受け付ける。受付部120が受け付けた入力値を特定する情報は、演算部130へ出力される。
取得部125は、受付部120が入力値を特定する情報を受け付けた場合に、記憶部150のシフト量情報154に記憶されている入力層と中間層と出力層との各々の入力値の小数点のシフト量を特定する情報と、パラメータの小数点のシフト量を特定する情報と、入力層と中間層と出力層との各々の出力の小数点のシフト量を特定する情報とを取得する。取得部125が取得した入力層と中間層と出力層との各々の入力値の小数点のシフト量を特定する情報と、パラメータの小数点のシフト量を特定する情報と、入力層と中間層と出力層との各々の出力の小数点のシフト量を特定する情報とは、演算部130へ出力される。
【0020】
演算部130は、受付部120が受け付けた入力値を特定する情報を取得する。演算部130は、取得した入力値を特定する情報と、入力値の小数点のシフト量を特定する情報とに基づいて、式(1)を演算することによって入力値を固定小数点の形式へ変換する。
【数1】
式(1)において、「xint」は浮動小数点の形式の数値を固定小数点の形式の数値へ変換したものである。「x」は浮動小数点の形式の数値である。「sf」は小数点のシフト量である。「xq」は、浮動小数点の形式の数値を固定小数点の形式の数値へ変換したものを浮動小数点の形式の数値へ変換したものである。「clamp(-2n-1,2n-1-1,xint)」は、xintが-2n-1以下である場合には-2n-1とし、xintが2n-1-1以上である場合には2n-1-1とすることを表す。
例えば、演算部130は、ビット幅nを8とした場合には、32ビットの浮動小数点の形式の入力値を、8ビットの固定小数点の形式に変換する。
【0021】
図3は、本実施形態に係る演算装置が処理する浮動小数点の形式の入力値の一例を説明するための図である。
図3に示すように、浮動小数点形式の入力値200は、符号ビット210、指数部220および仮数部230を含む。浮動小数点は、1つの数を、小数点部分を示す部分と小数点位置を示す部分とに分けて表現する表記法である。仮数部230は、小数点部分を示す部分であり、指数部220は小数点位置を示す部分である。符号ビット210は、入力値200の符号を決定する部分である。
【0022】
図4は、本実施形態に係る演算装置が処理する固定小数点の形式の入力値の一例を説明するための図である。
図4に示すように、固定小数点形式の入力値205は、符号ビット215、整数部225、小数部235および小数点245を含む。固定小数点は、小数点を使用して固定された桁数の小数を示す表記法を意味する。符号ビット215は入力値205の符号を決定し、整数部225は入力値205の整数を示す部分に対応し、小数部235は入力値205の小数を示す部分に対応する。小数点245は、入力値205の整数部225および小数部235を区分する基準になる点を示す。
【0023】
演算部130は、取得部125が取得した入力層と中間層と出力層との各々の入力値の小数点のシフト量を特定する情報と、パラメータの小数点のシフト量を特定する情報と、入力層と中間層と出力層との各々の出力の小数点のシフト量を特定する情報とを取得する。
演算部130は、取得した入力層と中間層と出力層との各々の入力値の小数点のシフト量を特定する情報と、パラメータの小数点のシフト量を特定する情報と、入力層と中間層と出力層との各々の出力の小数点のシフト量を特定する情報とに基づいて、入力値に対する学習モデル152の出力値を演算する。
【0024】
図5は、本実施形態に係る演算装置が実行する演算の一例を説明するための図である。図5は、演算部130が実行するMAC(multiply-and-accumulate)演算を示す。
演算部130は、乗算器10と加算器20と加算器30とを備え、積和演算を行う。演算部130は、入力値inとパラメータの小数点のシフト量を特定する情報とを取得する。ここで、入力値inは、入力値の小数点のシフト量isfを特定する情報に基づいて、固定小数点の形式に変換されたものである。
演算部130は、パラメータの小数点のシフト量を特定する情報に基づいて、ウエイトWEの小数点をシフトさせる。
演算部130において、乗算器10は、入力値inと小数点をシフトさせたウエイトWEとを乗算する。加算器20は、入力値inと小数点をシフトさせたウエイトWEとを乗算した結果とを加算する。加算器30は、加算器20の出力値OUと出力の小数点のシフト量osfとに基づいて、出力値OUの小数点をシフトさせることによって、最終出力を導出する。具体的には、加算器30は、出力値OUに0.5を加算する。出力値OUの小数点をシフトさせることによって、出力値OUの精度を向上させることができる。
【0025】
ここで、入力値の小数点のシフト量を特定する情報と、パラメータの小数点のシフト量の導出する処理について説明する。
入力値の小数点のシフト量を特定する情報と、パラメータの小数点のシフト量との導出は、端末装置によって実行される。
端末装置は、記憶している学習モデルから入力層を取得し、取得した入力層に含まれるウエイトとバイアスとに基づいて、入力層のウエイトの小数点のシフト量とバイアスの小数点のシフト量とを導出する。端末装置は、導出した入力層のウエイトの小数点のシフト量を特定する情報とバイアスの小数点のシフト量を特定する情報とを記憶する。
端末装置は、ウエイトとバイアスとを固定小数点の形式に変換する。端末装置は、固定小数点の形式に変換したウエイトとバイアスとを含む入力層を新たに作成する。端末装置は、記憶している学習モデルの入力層を、新たに作成した入力層に交換する。
【0026】
端末装置は、記憶している学習モデルから中間層を取得し、取得した中間層に含まれるウエイトとバイアスとに基づいて、中間層のウエイトの小数点のシフト量とバイアスの小数点のシフト量とを導出する。端末装置は、導出した中間層のウエイトの小数点のシフト量を特定する情報とバイアスの小数点のシフト量を特定する情報とを記憶する。
端末装置は、ウエイトとバイアスとを固定小数点の形式に変換する。端末装置は、固定小数点の形式に変換したウエイトとバイアスとを含む中間層を新たに作成する。端末装置は、記憶している学習モデルの中間層を、新たに作成した中間層に交換する。
【0027】
端末装置は、記憶している学習モデルから出力層を取得し、取得した出力層に含まれるウエイトとバイアスとに基づいて、出力層のウエイトの小数点のシフト量とバイアスの小数点のシフト量とを導出する。端末装置は、導出した出力層のウエイトの小数点のシフト量を特定する情報とバイアスの小数点のシフト量を特定する情報とを記憶する。
端末装置は、ウエイトとバイアスとを固定小数点の形式に変換する。端末装置は、固定小数点の形式に変換したウエイトとバイアスとを含む出力層を新たに作成する。端末装置は、記憶している学習モデルの出力層を、新たに作成した出力層に交換する。以上で、量子化した学習モデルが完成する。
【0028】
量子化した学習モデルに含まれるウエイトとバイアスとは、浮動小数点の形式から固定小数点の形式へ変換されている。量子化した学習モデルを使用することによって、積和演算などを固定小数点の形式で実行できる。このため、エッジデバイスやAIチップでそのまま実行できる。
ただし、このままでは、学習モデルの演算結果の精度が低下する。この学習モデルの演算結果の精度の低下は、演算精度の減少だけが原因ではない。浮動小数点の形式の学習モデルでは、出力部分で(式1)の演算を行っている。
しかし、量子化された学習モデルの出力部分では(式1)と同等の処理をしてない。そのため、すべての層において、入力値、ウエイト、出力のシフト量から、整数でも実行できるようにすることによって、量子化された学習モデルの各層において、出力OUに、出力の小数点のシフト量を適用する。このように構成することによって、演算結果の精度の低下を防止できる。
【0029】
端末装置は、入力された入力値を特定する情報を取得し、取得した入力値を特定する情報を受け付ける。端末装置は、記憶している入力層と中間層と出力層との各々のパラメータの小数点のシフト量を特定する情報を取得する。端末装置は、取得した入力値を特定する情報に基づいて、入力値を固定小数点の形式に変換する。
端末装置は、取得した入力層のウエイトの小数点のシフト量を特定する情報とバイアスの小数点のシフト量を特定する情報に基づいて、固定小数点の形式に変換した入力値に対する量子化した学習モデルの入力層の出力を導出する。端末装置は、導出した入力層の出力に基づいて、入力層の出力の小数点のシフト量を導出する。このように構成することによって、仮に入力層の出力が量子化されていない場合でも、量子化を行うことができる。端末装置は、導出した入力層の出力の小数点のシフト量、換言すれば中間層の入力値の小数点のシフト量を特定する情報を記憶する。
【0030】
端末装置は、取得した中間層のウエイトの小数点のシフト量を特定する情報とバイアスの小数点のシフト量を特定する情報に基づいて、量子化した学習モデルの入力層の出力値に対する量子化した学習モデルの中間層の出力を導出する。端末装置は、導出した中間層の出力に基づいて、中間層の出力の小数点のシフト量を導出する。
このように構成することによって、仮に中間層の出力が量子化されていない場合でも、量子化を行うことができる。端末装置は、導出した中間層の出力の小数点のシフト量、換言すれば出力層の入力値の小数点のシフト量を特定する情報を記憶する。
【0031】
端末装置は、取得した出力層のウエイトの小数点のシフト量を特定する情報とバイアスの小数点のシフト量を特定する情報に基づいて、量子化した学習モデルの中間層の出力値に対する量子化した学習モデルの出力層の出力を導出する。
端末装置は、導出した出力層の出力に基づいて、分散などの演算を行うことによって、出力層の出力の小数点のシフト量を導出する。このように構成することによって、仮に出力層の出力が量子化されていない場合でも、量子化を行うことができる。端末装置は、導出した出力層の出力の小数点のシフト量を特定する情報を記憶する。
以下、端末装置300について説明する。
図6は、本実施形態に係る端末装置のパラメータの小数点のシフト量の導出を説明するための図である。
【0032】
[端末装置300]
端末装置300は、パーソナルコンピュータ、サーバー、タブレットコンピュータ又は産業用コンピュータ等の装置によって実現される。端末装置300は、例えば、入力部310と、受付部320と、取得部325と、演算部330と、出力部340と、記憶部350とを備える。
【0033】
記憶部350は、HDDやフラッシュメモリ、RAM、ROMなどにより実現される。記憶部350は、学習モデル352とシフト量情報354とが記憶される。
学習モデル352の一例は、ディープニューラルネットワーク形式の学習済の学習モデルである。以下、学習モデル352が、ディープニューラルネットワーク形式の学習済の学習モデルである場合について説明を続ける。
【0034】
図7は、本実施形態に係る端末装置が有する学習モデルの一例を示す図である。
学習モデル352は、入力層351-1と、中間層351-2と、出力層351-3とを備える。入力層351-1は一または複数のユニットを有し、中間層351-2は一または複数のユニットを有し、出力層351-3は一または複数のユニットを有する。
入力層351-1に含まれる一または複数のユニットの各々は、中間層351-2に含まれる一または複数のユニットの各々と、一または複数のリンクによって接続される。中間層351-2に含まれる一または複数のユニットの各々は、出力層351-3に含まれる一または複数のユニットの各々と、一または複数のリンクによって接続される。
【0035】
一または複数のユニットの各々は、一または複数の他のユニットが出力した情報を取得し、取得した情報を処理する。一または複数のユニットの各々は、情報を処理した結果を出力する。具体的には、一または複数のユニットの各々は、一または複数の入力値を取得する。一または複数のユニットの各々は、取得した一または複数の入力値とパラメータとに基づいて、出力を導出する。ここで、パラメータには、ウエイトとバイアスとが含まれる。一または複数のユニットの各々は、一または複数の入力値と一または複数のウエイトとをそれぞれ乗算した結果の和とバイアスとを加算する。
【0036】
演算部330は、記憶部350の学習モデル352から入力層351-1を取得する(1)。演算部330は、取得した入力層351-1に含まれるウエイトとバイアスとに基づいて、分散などの演算を行うことによって、入力層351-1のウエイトの小数点のシフト量とバイアスの小数点のシフト量とを導出する。演算部330は、導出した入力層351-1のウエイトの小数点のシフト量を特定する情報とバイアスの小数点のシフト量を特定する情報とを記憶部350のシフト量情報354に記憶させる。
演算部330は、ウエイトとバイアスとを固定小数点の形式に変換する。演算部330は、固定小数点の形式に変換したウエイトとバイアスとを含む入力層351a-1を作成する(2)。演算部330は、記憶部350の学習モデル352の入力層351-1を、作成した入力層351a-1に交換する(3)。
【0037】
演算部330は、中間層351-2を取得する。演算部330は、取得した中間層351-2に含まれるウエイトとバイアスとに基づいて、分散などの演算を行うことによって、中間層351-2のウエイトの小数点のシフト量とバイアスの小数点のシフト量とを導出する。演算部330は、導出した中間層351-2のウエイトの小数点のシフト量を特定する情報とバイアスの小数点のシフト量を特定する情報とを、記憶部350のシフト量情報354に記憶させる。
演算部330は、ウエイトとバイアスとを固定小数点の形式に変換する。演算部130は、固定小数点の形式に変換したウエイトとバイアスとを含む中間層351a-2を作成する。演算部330は、学習モデル352の中間層351-2を、作成した中間層351a-2に交換する。
【0038】
演算部330は、出力層351-3を取得する。演算部330は、取得した出力層351-3に含まれるウエイトとバイアスとに基づいて、分散などの演算を行うことによって、出力層351-3のウエイトの小数点のシフト量とバイアスの小数点のシフト量とを導出する。
演算部330は、導出した出力層351-3のウエイトの小数点のシフト量を特定する情報とバイアスの小数点のシフト量を特定する情報とを、記憶部350のシフト量情報354に記憶させる。
演算部330は、ウエイトとバイアスとを固定小数点の形式に変換する。演算部330は、固定小数点の形式に変換したウエイトとバイアスとを含む出力層351a-3を作成する。演算部330は、学習モデル352の出力層351-3を、作成した出力層351a-3に交換する(4)。
前述した処理を行うことによって、演算部330は、学習モデル352から、量子化した学習モデル352aを作成する。
演算部330は、入力層351-1のウエイトの小数点のシフト量とバイアスの小数点のシフト量と、中間層351-2のウエイトの小数点のシフト量とバイアスの小数点のシフト量と、出力層351-3のウエイトの小数点のシフト量wsfとバイアスの小数点のシフト量とを導出できる。
【0039】
入力部310は、入力デバイスを備える。例えば、この入力デバイスには、キーボード等の文字情報を入力するデバイス、マウス、タッチパネル等のポインティングデバイス、釦、ダイヤル、ジョイスティック、タッチセンサ、タッチパッド等が含まれる。入力部310に入力値を特定する情報が入力される。入力部310は、入力された入力値を特定する情報を取得する。入力値の一例は、32ビットの浮動小数点の形式の数である。以下、一例として、入力値が32ビットの浮動小数点の形式の数である場合について説明を続ける。
【0040】
受付部320は、入力部310に入力された入力値を特定する情報を取得し、取得した入力値を特定する情報を受け付ける。受付部320が受け付けた入力値を特定する情報は、演算部330へ出力される。
【0041】
取得部325は、受付部320が入力値を特定する情報を受け付けた場合に、記憶部350のシフト量情報354に記憶されている入力層と中間層と出力層との各々のパラメータの小数点のシフト量を特定する情報を取得する。取得部325が取得した入力層と中間層と出力層との各々のパラメータの小数点のシフト量を特定する情報は、演算部330へ出力される。
【0042】
演算部330は、受付部320が受け付けた入力値を特定する情報を取得する。演算部330は、取得した入力値を特定する情報に基づいて、入力値を固定小数点の形式に変換する。
演算部330は、取得部325から入力層と中間層と出力層との各々のパラメータの小数点のシフト量を特定する情報を取得する。演算部330は、取得した入力層351-1のウエイトの小数点のシフト量を特定する情報とバイアスの小数点のシフト量を特定する情報に基づいて、固定小数点の形式に変換した入力値に対する量子化した学習モデル352aの入力層351a-1の出力を導出する。
演算部330は、導出した入力層351a-1の出力に基づいて、分散などの演算を行うことによって、入力層351a-1の出力の小数点のシフト量を導出する。このように構成することによって、仮に入力層351a-1の出力が量子化されていない場合でも、量子化を行うことができる。演算部330は、導出した入力層351a-1の出力の小数点のシフト量、換言すれば中間層351a-2の入力の小数点のシフト量を特定する情報を記憶部350のシフト量情報354に記憶させる。
【0043】
演算部330は、取得した中間層351a-2のウエイトの小数点のシフト量を特定する情報とバイアスの小数点のシフト量を特定する情報に基づいて、学習モデル352aの入力層351a-1の出力値に対する量子化した学習モデル352aの中間層351a-2の出力を導出する。
演算部330は、導出した中間層351a-2の出力に基づいて、分散などの演算を行うことによって、中間層351a-2の出力の小数点のシフト量を導出する。このように構成することによって、仮に中間層351a-2の出力が量子化されていない場合でも、量子化を行うことができる。演算部330は、導出した中間層351a-2の出力の小数点のシフト量、換言すれば出力層351a-3の入力の小数点のシフト量を特定する情報を記憶部350のシフト量情報354に記憶させる。
演算部330は、取得した出力層351a-3のウエイトの小数点のシフト量を特定する情報とバイアスの小数点のシフト量を特定する情報に基づいて、学習モデル352aの中間層351a-2の出力値に対する量子化した学習モデル352aの出力層351a-3の出力を導出する。
【0044】
演算部330は、導出した出力層351a-3の出力に基づいて、分散などの演算を行うことによって、出力層351a-3の出力の小数点のシフト量を導出する。このように構成することによって、仮に出力層351a-3の出力が量子化されていない場合でも、量子化を行うことができる。演算部330は、導出した出力層351a-3の出力の小数点のシフト量を特定する情報を記憶部350のシフト量情報354に記憶させる。
前述した処理を行うことによって、演算部330は、入力層351a-1の出力の小数点のシフト量、換言すれば中間層351a-2の入力の小数点のシフト量と、中間層351a-2の出力の小数点のシフト量、換言すれば出力層351a-3の入力の小数点のシフト量と、出力層351a-3の出力の小数点のシフト量とを導出する。
端末装置300によって作成された量子化した学習モデル352aが、演算装置100において学習モデル152として使用される。端末装置300によって作成されたシフト量情報354が、演算装置100においてシフト量情報154として使用される。
【0045】
(演算装置100の動作)
図8は、本実施形態に係る演算装置の動作の一例を示すフローチャートである。
(ステップS1-1)
演算装置100において、受付部120は、入力部110に入力された入力値を特定する情報を取得し、取得した入力値を特定する情報を受け付ける。
(ステップS2-1)
演算装置100において、取得部125は、記憶部150のシフト量情報154に記憶されている入力層と中間層と出力層との各々のパラメータの小数点のシフト量を特定する情報と、入力層と中間層と出力層との各々の出力の小数点のシフト量を特定する情報とを取得する。入力層と中間層と出力層との各々の出力の小数点のシフト量を特定する情報には、入力層の入力値の小数点のシフト量を特定する情報と、中間層の入力値の小数点のシフト量を特定する情報と、出力層の入力値の小数点のシフト量を特定する情報とが含まれる。
【0046】
(ステップS3-1)
演算装置100において、演算部130は、受付部120が受け付けた入力値を特定する情報を取得する。演算部130は、取得した入力値を特定する情報と、入力値の小数点のシフト量を特定する情報とに基づいて、入力値を固定小数点の形式へ変換する。
(ステップS4-1)
演算装置100において、演算部130は、取得部125が取得した入力層と中間層と出力層との各々のパラメータの小数点のシフト量を特定する情報と、入力層と中間層と出力層との各々の出力の小数点のシフト量を特定する情報とを取得する。演算部130は、取得した入力層と中間層と出力層との各々のパラメータの小数点のシフト量を特定する情報と、入力層と中間層と出力層との各々の出力の小数点のシフト量を特定する情報とに基づいて、入力値に対する出力値OUを演算する。
(ステップS5-1)
演算装置100において、演算部130は、出力値OUと出力の小数点のシフト量osfとに基づいて、出力値OUの小数点をシフトさせることによって、最終出力を導出する。
【0047】
(端末装置300の動作)
図9は、本実施形態に係る端末装置の動作の一例を示すフローチャートである。
(ステップS1-2)
端末装置300において、演算部330は、記憶部350の学習モデル352から入力層351-1を取得する。演算部330は、取得した入力層351-1に含まれるウエイトとバイアスとに基づいて、入力層351-1のウエイトの小数点のシフト量とバイアスの小数点のシフト量とを導出する。
演算部330は、導出した入力層351-1のウエイトの小数点のシフト量を特定する情報とバイアスの小数点のシフト量を特定する情報とを記憶部350のシフト量情報354に記憶させる。
(ステップS2-2)
端末装置300において、演算部330は、入力層351-1のウエイトとバイアスとを固定小数点の形式に変換する。
【0048】
(ステップS3-2)
端末装置300において、演算部330は、固定小数点の形式に変換したウエイトとバイアスとを含む入力層351a-1を作成する。演算部330は、記憶部350の学習モデル352の入力層351-1を、作成した入力層351a-1に交換する。
(ステップS4-2)
端末装置300において、演算部330は、記憶部350の学習モデル352から中間層351-2を取得する。演算部330は、取得した中間層351-2に含まれるウエイトとバイアスとに基づいて、中間層351-2のウエイトの小数点のシフト量とバイアスの小数点のシフト量とを導出する。演算部330は、導出した中間層351-2のウエイトの小数点のシフト量を特定する情報とバイアスの小数点のシフト量を特定する情報とを記憶部350のシフト量情報354に記憶させる。
(ステップS5-2)
端末装置300において、演算部330は、中間層351-2のウエイトとバイアスとを固定小数点の形式に変換する。
【0049】
(ステップS6-2)
端末装置300において、演算部130は、固定小数点の形式に変換したウエイトとバイアスとを含む中間層351a-2を作成する。演算部330は、学習モデル352の中間層351-2を、作成した中間層351a-2に交換する。
(ステップS7-2)
端末装置300において、演算部330は、記憶部350の学習モデル352から出力層351-3を取得する。演算部330は、取得した出力層351-3に含まれるウエイトとバイアスとに基づいて、出力層351-3のウエイトの小数点のシフト量を導出する。演算部330は、導出した出力層351-3のウエイトの小数点のシフト量を特定する情報とバイアスの小数点のシフト量を特定する情報とを記憶部350のシフト量情報354に記憶させる。
【0050】
(ステップS8-2)
端末装置300において、演算部330は、出力層351-3のウエイトとバイアスとを固定小数点の形式に変換する。
(ステップS9-2)
端末装置300において、演算部330は、固定小数点の形式に変換したウエイトとバイアスとを含む出力層351a-3を作成する。演算部330は、学習モデル352の出力層351-3を、作成した出力層351a-3に交換する。
(ステップS10-2)
端末装置300において、受付部320は、入力部310に入力された入力値を特定する情報を取得し、取得した入力値を特定する情報を受け付ける。
【0051】
(ステップS11-2)
端末装置300において、取得部325は、記憶部350のシフト量情報354に記憶されている入力層と中間層と出力層との各々のパラメータの小数点のシフト量を特定する情報を取得する。
(ステップS12-2)
端末装置300において、演算部330は、受付部320が受け付けた入力値を特定する情報を取得する。演算部330は、取得した入力値を特定する情報と、入力値の小数点のシフト量を特定する情報とに基づいて、入力値を固定小数点の形式に変換する。
(ステップS13-2)
端末装置300において、演算部330は、取得部325から入力層と中間層と出力層との各々のパラメータの小数点のシフト量を特定する情報を取得する。演算部330は、取得した入力層351-1のウエイトの小数点のシフト量を特定する情報とバイアスの小数点のシフト量を特定する情報とに基づいて、固定小数点の形式に変換した入力値に対する量子化した学習モデル352aの入力層351a-1の出力を導出する。
演算部330は、導出した入力層351a-1の出力に基づいて、入力層351a-1の出力の小数点のシフト量を導出する。演算部330は、導出した入力層351a-1の出力の小数点のシフト量、換言すれば中間層351a-2の入力値の小数点のシフト量を特定する情報を記憶部350のシフト量情報354に記憶させる。
【0052】
(ステップS14-2)
端末装置300において、演算部330は、取得した中間層351a-2のウエイトの小数点のシフト量を特定する情報とバイアスの小数点のシフト量を特定する情報とに基づいて、学習モデル352aの入力層351a-1の出力値に対する量子化した学習モデル352aの中間層351a-2の出力を導出する。
演算部330は、導出した中間層351a-2の出力に基づいて、中間層351a-2の出力の小数点のシフト量を導出する。演算部330は、導出した中間層351a-2の出力の小数点のシフト量、換言すれば出力層351a-3の入力値の小数点のシフト量を特定する情報を記憶部350のシフト量情報354に記憶させる。
(ステップS15-2)
端末装置300において、演算部330は、取得した出力層351a-3のウエイトの小数点のシフト量を特定する情報とバイアスの小数点のシフト量を特定する情報とに基づいて、学習モデル352aの中間層351a-2の出力値に対する量子化した学習モデル352aの出力層351a-3の出力を導出する。
演算部330は、導出した出力層351a-3の出力に基づいて、分散などの演算を行うことによって、出力層351a-3の出力の小数点のシフト量を導出する。演算部330は、導出した出力層351a-3の出力の小数点のシフト量を特定する情報を記憶部350のシフト量情報354に記憶させる。
【0053】
本実施形態に係る演算装置100の最終的な出力値の精度について説明する。
図10は、本実施形態に係る演算装置100の精度の一例を説明するための図である。図10は、入力値を固定小数点の形式へ変換するときの桁数(ビット幅)nを2から8とした場合の各々について、出力値OUの小数点をシフトさせたものを最終出力値とした場合と、出力値OUを最終出力値とした場合について、最終出力値の精度の一例を示す。
図10によれば、ビット幅が6桁までは、出力値OUの小数点をシフトさせたか否かにかかわらず、小数点第二位まで等しい精度が得られているのが分かる。ビット幅が5桁では、出力値OUの小数点をシフトさせない場合と小数点をシフトさせた場合とでは、小数点第二位に差が生じている。ビット幅が4桁以下では、小数点をシフトさせない場合は、出力値OUの小数点をシフトさせた場合と比較して、精度が大きく低下する。
【0054】
前述した実施形態では、学習モデルの一例として、ディープニューラルネットワーク形式の学習モデルについて説明したがこの例に限られない。例えば、学習モデルに、畳み込みニューラルネットワーク形式の学習モデルが使用されてもよい。積和演算が含まれる層を有する学習モデルが使用可能である。
前述した実施形態では、学習モデルの一例が、Pytonで記述されている場合について説明したが、この例に限られない。例えば、学習モデルの一例が、Pytorch、Tensorflowなどのライブラリーで記述されていてもよい。
前述した実施形態では、入力値の一例として、32ビットの浮動小数点の形式の数である場合について説明したが、この例に限られない。例えば、入力値として、16ビットの浮動小数点の形式の数などの32ビット以外の浮動小数点の形式の数を使用してもよい。
前述した実施形態において、学習モデル152と学習モデル352との各々は、複数の中間層を備えてもよい。複数の中間層を備える場合に、複数の中間層の各々について、ウエイトの小数点のシフト量とバイアスの小数点のシフト量と出力の小数点のシフト量(入力の小数点のシフト量)が導出される。
前述した実施形態において、演算装置100は、出力値OUと出力の小数点のシフト量osfとに基づいて、出力値OUの小数点をシフトさせるか否かを選択できるようにしてもよい。例えば、図10に示すように、ビット幅nが6から8では、出力値OUの小数点をシフトさせたものを最終出力値とした場合と、出力値OUを最終出力値とした場合との間で精度の差が小さいため、出力値OUの小数点をシフトさせる必要がないためである。このように構成することによって、出力値OUの小数点をシフトさせるハードウェアを削減できる。
【0055】
実施形態に係る演算装置によれば、演算装置100は、ニューラルネットワーク形式の学習モデル152のパラメータの小数点のシフト量を特定する情報を取得する取得部125と、取得部125が取得したパラメータの小数点のシフト量を特定する情報に基づいて、入力値に対する学習モデル152の出力値を演算する演算部130と、出力値と出力値の小数点のシフト量とに基づいて、出力値の小数点をシフトさせ、小数点をシフトさせた出力値を出力する出力部140とを備え、入力値は、固定小数点の形式である。
このように構成することによって、演算装置100は、学習モデル152のパラメータの小数点のシフト量を特定する情報に基づいて、固定小数点の形式の入力値に対する学習モデル152の出力値を演算し、出力値と出力値の小数点のシフト量とに基づいて、出力値の小数点をシフトさせ、小数点をシフトさせた出力値を出力する。
出力値と出力値の小数点のシフト量とに基づいて、出力値の小数点をシフトさせることができるため、入力値を固定小数点の形式に変換した場合に演算精度を向上できる。このため、ハードウェアに実装する前に正確な精度を求めることができる。ハードウェアと同等のエミュレーションができるため、ハードウェアのデバッグに使用できる。エミュレーションの段階で、桁あふれをチェックできる。通常使用されているディープニューラルネットワークフレームワークと併用して使用できる。
【0056】
また、パラメータには、複数の層の各々のパラメータが含まれる。このように構成することによって、演算装置100は、学習モデル152の複数の層の各々のパラメータに基づいて、入力値に対する学習モデル152の出力値を演算できるため、入力値を固定小数点の形式に変換した場合に、演算精度を向上できる。
また、パラメータには、ウエイトおよび出力が含まれる。このように構成することによって、演算装置100は、学習モデル152の複数のウエイトの各々の小数点のシフト量と複数の層の各々の出力の小数点のシフト量とを特定する情報に基づいて、入力値に対する学習モデル152の出力値を演算できるため、入力値を固定小数点の形式に変換した場合に、演算精度を向上できる。
また、パラメータには、バイアスがさらに含まれる。このように構成することによって、演算装置100は、学習モデル152の複数のバイアスの各々の小数点のシフト量を特定する情報にさらに基づいて、入力値に対する学習モデル152の出力値を演算できるため、入力値を固定小数点の形式に変換した場合に、演算精度を向上できる。
【0057】
また、パラメータは、固定小数点の形式である。このように構成することによって、演算装置100は、量子化された学習モデル152のパラメータの小数点のシフト量を特定する情報に基づいて、固定小数点の形式の入力値に対する学習モデル152の出力値を演算し、出力値と出力値の小数点のシフト量とに基づいて、出力値の小数点をシフトさせ、小数点をシフトさせた出力値を出力できる。このため、ハードウェアに実装する前に正確な精度を求めることができる。ハードウェアと同等のエミュレーションができるため、ハードウェアのデバッグに使用できる。通常使用されているディープニューラルネットワークフレームワークと併用して使用できる。
また、学習モデルは、ディープニューラルネットワーク形式の学習済モデルに基づいて、パラメータを固定小数点の形式に変換することによって作成されたものである。このように構成することによって、学習済モデルから学習モデルを用意できる。
また、演算部130は、パラメータに基づいて、入力値に対して、MAC(multiply-accumulate)演算を行う。このように構成することによって、入力値に対してMAC演算を行うことによって、入力値に対する学習モデル152の出力値を演算できる。
【0058】
ニューラルネットワークを用いたシステムは、その応用範囲の広さから、様々な用途で使われ、特にエッジデバイスでの使用がされている。しかし、ニューラルネットワークは大量の計算が必要であるため、エッジデバイスで実行するには、計算量を削減する量子化が必須となる。このため、実施形態に係る演算装置の応用先としては監視カメラ、組込みカメラなどで使われるニューラルネットワークの量子化が挙げられる。特に演算方法は実際のハードウェアをエミュレーションすることが可能であり、検証をすばやく行える。また、どのようなニューラルネットワークにも対応可能であり、新しいモデルに対しても量子化を試すことができる。
【0059】
(実施形態の変形例)
[全体構成]
図11は、実施形態の変形例に係る演算装置の構成図である。
ユーザーUは、演算装置100aに、入力値を入力する操作を行う。入力値の一例は、浮動小数点の形式である。以下、入力値が、浮動小数点の形式である場合について説明を続ける。
演算装置100aは、ユーザーUが入力した入力値を受け付ける。演算装置100aは、受け付けた入力値を浮動小数点の形式から固定小数点の形式へ変換する。固定小数点の形式へ変換するときの桁数(ビット幅)nは、予め設定されている。ここで、本実施形態の変形例に係る演算装置100aでは、複数のビット幅nが設定されている。具体的には、n=6、7、8、9、10、16などである。
【0060】
演算装置100aは、ディープニューラルネットワーク形式の学習モデルに基づいて、その学習モデルに含まれるパラメータを取得する。パラメータの一例は、浮動小数点の形式である。以下、入力値が、浮動小数点の形式である場合について説明を続ける。演算装置100aは、取得したパラメータを固定小数点の形式へ変換する。固定小数点の形式へ変換するときの桁数(ビット幅)nは、予め設定されている。
【0061】
演算装置100aは、固定小数点の形式へ変換後の複数の入力値およびパラメータに基づいて、複数の入力値の各々に対する出力値ouを演算することによって導出する。演算装置100aは、導出した複数の出力値ouと出力値の小数点のシフト量osfとに基づいて、複数の出力値ouの各々の小数点をシフトさせることによって最終出力値を導出する。
演算装置100aは、複数の最終出力値の各々について、最終出力値の精度を導出する。演算装置100aは、入力値を固定小数点の形式へ変換するときの複数のビット幅nの各々について、ビット幅と精度とを関連付けて出力する。
以下、演算装置100aについて説明する。
【0062】
[演算装置100a]
演算装置100aは、スマートフォン、携帯端末、又はパーソナルコンピュータ、タブレット端末装置、あるいはその他の情報処理機器として実現される。演算装置100aは、例えば、入力部110と、受付部120と、取得部125と、演算部130aと、導出部135と、出力部140aと、記憶部150とを備える。
【0063】
演算部130aは、取得部125が取得した入力層と中間層と出力層との各々のパラメータの小数点のシフト量を特定する情報と、入力層と中間層と出力層との各々の出力の小数点のシフト量を特定する情報とを取得する。演算部130aは、取得した入力層と中間層と出力層との各々のパラメータの小数点のシフト量を特定する情報と、入力層と中間層と出力層との各々の出力の小数点のシフト量を特定する情報とに基づいて、入力値に対する学習モデル152の出力値を演算する。
【0064】
演算部130aが実行するMAC演算は、図5を適用できる。演算部130aは、乗算器10と加算器20と加算器30とを備え、積和演算と加算演算とを行う。演算部130aは、入力値inとパラメータの小数点のシフト量を特定する情報とを取得する。ここで、入力値inは、入力値の小数点のシフト量を特定する情報に基づいて、固定小数点の形式に変換されたものである。
演算部130aは、パラメータの小数点のシフト量を特定する情報に基づいて、ウエイトWEの小数点をシフトさせる。演算部130aにおいて、乗算器10は、入力値inと小数点をシフトさせたウエイトWEとを乗算する。加算器20は、入力値inと小数点をシフトさせたウエイトWEとを乗算した結果とを加算する。
【0065】
加算器30は、加算器20の出力値OUと出力の小数点のシフト量osfとに基づいて、出力値OUの小数点をシフトさせることによって、最終出力を導出する。具体的には、加算器30は、出力値OUに0.5を加算する。
導出部135は、演算部130aから、複数のビット幅nの各々について、最終出力を取得する。導出部135は、取得した複数の最終出力に基づいて、最終出力の精度を導出する。
出力部140aは、導出部135から、入力値を固定小数点の形式に変換したときの複数のビット幅の各々と、最終出力の精度とを関連付けた情報を取得する。出力部140aは、取得した複数のビット幅の各々と、最終出力の精度とを関連付けた情報を出力する。
【0066】
(演算装置100aの動作)
図12は、実施形態の変形例に係る演算装置の動作の一例を示すフローチャートである。
(ステップS1-3)
演算装置100aにおいて、受付部120は、入力部110に入力された入力値を特定する情報を取得し、取得した入力値を特定する情報を受け付ける。
(ステップS2-3)
演算装置100aにおいて、取得部125は、記憶部150のシフト量情報154に記憶されている入力値の小数点のシフト量を特定する情報と、入力層と中間層と出力層との各々のパラメータの小数点のシフト量を特定する情報と、入力層と中間層と出力層との各々の出力の小数点のシフト量を特定する情報とを取得する。
(ステップS3-3)
演算装置100aにおいて、演算部130aは、ビット幅を設定する。
【0067】
(ステップS4-3)
演算装置100aにおいて、演算部130aは、受付部120が受け付けた入力値を特定する情報を取得する。演算部130aは、取得した入力値を特定する情報と設定したビット幅とに基づいて、入力値を固定小数点の形式へ変換する。
(ステップS5-3)
演算装置100aにおいて、演算部130aは、取得部125が取得した入力層と中間層と出力層との各々のパラメータの小数点のシフト量を特定する情報と、入力層と中間層と出力層との各々の出力の小数点のシフト量を特定する情報とを取得する。演算部130aは、取得した入力層と中間層と出力層との各々のパラメータの小数点のシフト量を特定する情報と、入力層と中間層と出力層との各々の出力の小数点のシフト量を特定する情報とに基づいて、入力値に対する学習モデル152の出力値を演算する。
【0068】
(ステップS6-3)
演算装置100aにおいて、演算部130aは、出力値と出力の小数点のシフト量osfとに基づいて、出力値OUの小数点をシフトさせることによって、最終出力を導出する。
(ステップS7-3)
演算装置100aにおいて、演算部130aは、全てのビット幅で最終出力を導出したか否かを判定する。最終出力を導出していないビット幅がある場合には、ステップS3-3へ戻る。
(ステップS8-3)
演算装置100aにおいて、導出部135は、演算部130aが全てのビット幅で最終出力を導出したと判定した場合に、演算部130aから、複数のビット幅nの各々について、最終出力を取得する。導出部135は、取得した複数の最終出力に基づいて、最終出力の精度を導出する。
【0069】
(ステップS9-3)
演算装置100aにおいて、出力部140aは、導出部135から、入力値を固定小数点の形式に変換したときの複数のビット幅の各々と、最終出力の精度とを関連付けた情報を取得する。出力部140aは、取得した複数のビット幅の各々と、最終出力の精度とを関連付けた情報を出力する。
図12では、全てのビット幅で最終出力を導出した後に、最終出力の精度が導出される場合について説明したが、この例に限られない。例えば、最終出力が導出されるたびに、最終出力の精度が導出されるようにしてもよい。
【0070】
実施形態の変形例に係る演算装置100aによれば、演算装置100aは、前述した演算装置100において、演算部130aは、異なるビット幅で固定小数点の形式へ変換された複数の入力値に対する学習モデルの出力値を求め、求めた複数の出力値の各々と出力値の小数点のシフト量とに基づいて、求めた複数の出力値の各々の小数点をシフトさせる。演算装置100aは、複数の出力値の各々の小数点をシフトさせた結果の精度を導出する導出部を備える。
このように構成することによって、演算装置100aは、複数のビット幅の各々について、学習モデルの出力値の小数点をシフトさせた結果の精度を導出できる。このため、仮に学習モデルに要求される精度が設定された場合に、その要求される精度を満足するビット幅を求めることができる。つまり、複数の学習モデルが用意された場合に、許容できるビット幅を求めることができる。また、エミュレーションの時点で、量子化によってどの程度精度が低下するかが分かる。
【0071】
図13は、本実施形態の変形例に係る演算装置の出力の精度の導出結果の一例を示す図である。図13において、横軸は入力値の形式であり、縦軸は精度を示す。
「FP32」は浮動小数点形式の32ビットであり、「FP16」は浮動小数点形式の16ビットである。「INT16」は固定小数点形式の16ビットであり、「INT10」は固定小数点形式の10ビットであり、「INT9」は固定小数点形式の9ビットである。「INT8」は固定小数点形式の8ビットであり、「INT7」は固定小数点形式の7ビットであり、「INT6」は固定小数点形式の6ビットである。
ImageNetとCIFAR100とで学習された学習モデルを使用して、精度の評価を行った。ここでは、学習モデルの一例として、AlexNetと、VGG16と、MobileNet-v2とについて示す。
【0072】
図13によれば、ImageNetで学習されたAlexNet(Innet_AlexNet)の場合には、FP32、FP16、INT16、INT10、INT9に比べて、INT8、INT7、INT6については精度が低下することが分かる。
ImageNetで学習されたVGG16(Innet_VGG16)の場合には、FP32、FP16、INT16、INT10、INT9、INT8に比べて、INT7、INT6については精度が低下することが分かる。
ImageNetで学習されたMobileNet-v2(Innet_MobileNet-v2)の場合には、FP32、FP16、INT16、INT10に比べて、INT9、INT8、INT7、INT6については精度が低下することが分かる。
【0073】
さらに、図13によれば、CIFAR100で学習されたAlexNet(C100_AlexNet)の場合には、FP32、FP16、INT16、INT10、INT9に比べて、INT8、INT7、INT6については精度が低下することが分かる。
CIFAR100で学習されたVGG16(C100_VGG16)の場合には、FP32、FP16、INT16、INT10、INT9、INT8に比べて、INT7、INT6については精度が低下することが分かる。
CIFAR100で学習されたMobileNet-v2(C100_MobileNet-v2)の場合には、FP32、FP16、INT16、INT10、INT9に比べて、INT8、INT7、INT6については精度が低下することが分かる。
さらに、図13によれば、CIFAR100で学習されたAlexNetにGAP(Global average Pooling)を適用(C100_AlexNet_GAP)の場合には、FP32、FP16、INT16、INT10、INT9に比べて、INT8、INT7、INT6については精度が低下することが分かる。
CIFAR100で学習されたVGG16にGAPを適用(C100_VGG16_GAP)の場合には、FP32、FP16、INT16、INT10、INT9、INT8に比べて、INT7、INT6については精度が低下することが分かる。
図13によれば、学習モデルが用意された場合に、許容される精度に基づいて、何ビットまで許容できるか求めることができる。
【0074】
以上、本発明の実施形態を説明したが、これらの実施形態は、例として提示したものであり、発明の範囲を限定することは意図していない。これら実施形態は、その他の様々な形態で実施されることが可能であり、発明の要旨を逸脱しない範囲で、種々の省略、置き換え、変更、組合わせを行うことができる。これら実施形態及びその変形例は、発明の範囲や要旨に含まれると同時に、特許請求の範囲に記載された発明とその均等の範囲に含まれるものである。
なお、前述の演算装置100、端末装置300、演算装置100aは内部にコンピュータを有している。そして、前述した各装置の各処理の過程は、プログラムの形式でコンピュータ読み取り可能な記録媒体に記憶されており、このプログラムをコンピュータが読み出して実行することによって、上記処理が行われる。ここでコンピュータ読み取り可能な記録媒体とは、磁気ディスク、光磁気ディスク、CD-ROM、DVD-ROM、半導体メモリなどをいう。また、このコンピュータプログラムを通信回線によってコンピュータに配信し、この配信を受けたコンピュータが当該プログラムを実行するようにしてもよい。
また、上記プログラムは、前述した機能の一部を実現するためのものであってもよい。
さらに、前述した機能をコンピュータシステムにすでに記録されているプログラムとの組み合わせで実現できるもの、いわゆる差分ファイル(差分プログラム)であってもよい。
【符号の説明】
【0075】
10…乗算器、 20、30…加算器、100、100a…演算装置、 110…入力部、 120…受付部、 125…取得部、 130、130a…演算部、 135…導出部、 140、140a…出力部、 150…記憶部、 151-1…入力層、 151-2…中間層、 151-3…出力層、 152…学習モデル、 154…シフト量情報、 200、205…入力値、 210、215…符号ビット、 220…指数部、 225…整数部、 230…仮数部、 235…小数部、 245…小数点、300…端末装置、 310…入力部、 320…受付部、 325…取得部、 330…演算部、 340…出力部、 350…記憶部、 352、352a…学習モデル、 354…シフト量情報、 351-1、351a-1…入力層、 351-2、351a-2…中間層、 351-3、351a-3…出力層
図1
図2
図3
図4
図5
図6
図7
図8
図9
図10
図11
図12
図13