(19)【発行国】日本国特許庁(JP)
(12)【公報種別】特許公報(B2)
(11)【特許番号】
(24)【登録日】2023-06-19
(45)【発行日】2023-06-27
(54)【発明の名称】情報処理装置、情報処理方法および情報処理プログラム
(51)【国際特許分類】
G06N 3/0495 20230101AFI20230620BHJP
G06N 3/084 20230101ALI20230620BHJP
【FI】
G06N3/0495
G06N3/084
(21)【出願番号】P 2019080454
(22)【出願日】2019-04-19
【審査請求日】2022-01-11
(73)【特許権者】
【識別番号】000005223
【氏名又は名称】富士通株式会社
(74)【代理人】
【識別番号】100107766
【氏名又は名称】伊東 忠重
(74)【代理人】
【識別番号】100070150
【氏名又は名称】伊東 忠彦
(72)【発明者】
【氏名】坂井 靖文
【審査官】多賀 実
(56)【参考文献】
【文献】米国特許出願公開第2018/0107925(US,A1)
【文献】Fengfu Li et al.,"Ternary weight networks",arXiv.org [online],arXiv:1605.04711v2,米国,Cornell University,2016年11月,pp.1-5,[令和4年11月15日 検索], インターネット:<URL:https://arxiv.org/abs/1605.04711v2>
(58)【調査した分野】(Int.Cl.,DB名)
G06N 3/00-99/00
G06F 17/10-17/18
(57)【特許請求の範囲】
【請求項1】
ニューラルネットワークの計算を実行する情報処理装置であって、
前記計算に使用する変数を量子化する場合の区切り位置を
順次変更し、前記区切り位置の変更毎に量子化前後の変数の差分に基づく量子化誤差を算出し、前記量子化誤差が最小になる前記区切り位置を量子化に使用する前記区切り位置に設定する位置設定部と、
前記位置設定部が設定した前記区切り位置に基づいて変数を量子化する量子化部と、を有することを特徴とする情報処理装置。
【請求項2】
前記位置設定部は、
複数の前記区切り位置を1つずつ変更して前記量子化誤差が最小になる複数の前記区切り位置を見つける処理を、複数の前記区切り位置が変更されなくなるまで繰り返し実行し、
変更されなくなった前記区切り位置を、量子化に使用する前記区切り位置に設定すること、を特徴とする
請求項1に記載の情報処理装置。
【請求項3】
前記位置設定部は、式(4)を用いて前記量子化誤差L
OSSを算出すること、を特徴とする
請求項1または請求項2に記載の情報処理装置。
【数4】
n:量子化する個数(nは2以上の自然数)
k
i:量子化対象の変数W
iの非ゼロ要素の要素数
W
ki:変数W
iと同じ要素数を持ち、かつ変数W
iから絶対値の大きい順にk個の要素を取り出し、それ以外の要素は0とした変数
【請求項4】
前記位置設定部は、前記量子化誤差の変化が下に凸の特性を示す場合、黄金分割探索アルゴリズムを用いて前記量子化誤差が最小になる前記区切り位置を探索すること、を特徴とする
請求項1に記載の情報処理装置。
【請求項5】
前記位置設定部は、前記量子化誤差の変化が下に凸の特性を示す場合、前記区切り位置を隣接する前記区切り位置側から順次変更し、前記量子化誤差が減少から増加に転じた場合に前記量子化誤差が最小になったと判定すること、を特徴とする
請求項1に記載の情報処理装置。
【請求項6】
前記位置設定部は、前記区切り位置の間隔が均等に設定された初期状態から、前記区切り位置を設定する処理を開始すること、を特徴とする
請求項1ないし請求項5のいずれか1項に記載の情報処理装置。
【請求項7】
前記位置設定部は、
各変数の絶対値を用いて前記区切り位置を設定すること、を特徴とする
請求項1ないし請求項6のいずれか1項に記載の情報処理装置。
【請求項8】
前記位置設定部は、正負が区別された変数を用いて前記区切り位置を設定すること、を特徴とする
請求項1ないし請求項6のいずれか1項に記載の情報処理装置。
【請求項9】
前記位置設定部は、2のm乗個(mは1以上の自然数)に量子化する個数に対応する数の前記区切り位置を設定すること、を特徴とする
請求項1ないし請求項8のいずれか1項に記載の情報処理装置。
【請求項10】
前記情報処理装置は、前記ニューラルネットワークの入力側から計算を順次実行する順伝播処理と、前記ニューラルネットワークの出力側から計算を順次実行する逆伝播処理と、前記逆伝播処理の結果に基づいて変数を更新する更新処理とを含むバッチを繰り返し実行し、
前記位置設定部は、各バッチにおいて前記更新処理の後に、次のバッチで使用する前記区切り位置を設定すること、を特徴とする
請求項1ないし請求項9のいずれか1項に記載の情報処理装置。
【請求項11】
前記情報処理装置は、前記位置設定部により設定された前記区切り位置を用いて、前記ニューラルネットワークの推論で使用する変数を量子化すること、を特徴とする
請求項1ないし請求項9のいずれか1項に記載の情報処理装置。
【請求項12】
ニューラルネットワークの計算を実行する情報処理装置による情報処理方法であって、
前記計算に使用する変数を量子化する場合の区切り位置を
順次変更し、前記区切り位置の変更毎に量子化前後の変数の差分に基づく量子化誤差を算出し、前記量子化誤差が最小になる前記区切り位置を量子化に使用する前記区切り位置に設定し、
設定した前記区切り位置に基づいて変数を量子化すること、を特徴とする情報処理方法。
【請求項13】
ニューラルネットワークの計算を実行する情報処理装置が実行する情報処理プログラムであって、
前記情報処理装置に、
前記計算に使用する変数を量子化する場合の区切り位置を
順次変更し、前記区切り位置の変更毎に量子化前後の変数の差分に基づく量子化誤差を算出し、前記量子化誤差が最小になる前記区切り位置を量子化に使用する前記区切り位置に設定させ、
設定した前記区切り位置に基づいて変数を量子化させること、を特徴とする情報処理プログラム。
【発明の詳細な説明】
【技術分野】
【0001】
本発明は、情報処理装置、情報処理方法および情報処理プログラムに関する。
【背景技術】
【0002】
アナログ的にコンダクタンスが変化するニューロモルフィック素子を利用して、ニューラルネットワークの処理に必要な積和演算を実行する手法が提案されている(例えば、特許文献1参照)。音声符号化装置において、数値計算での桁落ちによる線形予測係数の精度の低下をニューラルネットワークの学習機能を用いて防止する手法が提案されている(例えば、特許文献2参照)。音声と画像とを用いて音声の認識を行う場合に、音声と画像とのそれぞれの特徴パラメータを最適に統合し、認識装置における認識性能を向上させる手法が提案されている(例えば、特許文献3参照)。
【先行技術文献】
【特許文献】
【0003】
【文献】特許第6293963号
【文献】特開平5-303398号公報
【文献】特開2000-200098号公報
【発明の概要】
【発明が解決しようとする課題】
【0004】
例えば、ニューラルネットワークの計算に使用するデータや重みなどの各種変数を浮動小数点数で表現する場合、ニューラルネットワークの計算の精度を向上できるが、使用する演算器の規模は大きくなり、計算時間は長くなる。一方、データや重みなどの各種変数を量子化して固定小数点数で表現する場合、演算器の規模を削減でき、計算時間も短くできるが、ニューラルネットワークの計算の精度は低下するおそれがある。計算の精度が低下した場合、ニューラルネットワークの学習の精度は低下し、学習により構築されたニューラルネットワークを用いた推論処理等の精度は低下する。
【0005】
1つの側面では、本発明は、量子化した変数を使用してニューラルネットワークの計算を実行する場合に、計算の精度が低下することを抑止することを目的とする。
【課題を解決するための手段】
【0006】
一つの観点によれば、情報処理装置は、ニューラルネットワークの計算を実行する情報処理装置であって、前記計算に使用する変数を量子化する場合の区切り位置を順次変更し、前記区切り位置の変更毎に量子化前後の変数の差分に基づく量子化誤差を算出し、前記量子化誤差が最小になる前記区切り位置を量子化に使用する前記区切り位置に設定する位置設定部と、前記位置設定部が設定した前記区切り位置に基づいて変数を量子化する量子化部と、を有することを特徴とする。
【発明の効果】
【0007】
1つの側面では、本発明は、量子化した変数を使用してニューラルネットワークの計算を実行する場合に、計算の精度が低下することを抑止することができる。
【図面の簡単な説明】
【0008】
【
図1】一実施形態における情報処理装置の一例を示すブロック図である。
【
図2】
図1の情報処理装置の動作の一例を示す説明図である。
【
図3】別の実施形態における情報処理装置の一例を示すブロック図である。
【
図4】
図3の情報処理装置の動作の一例を示す説明図である。
【
図5】
図4で説明した更新処理により最適化された区切り位置と、最適化された区切り位置により量子化された変数を示す説明図である。
【
図6】
図3の情報処理装置によるニューラルネットワークの学習の一例を示すフロー図である。
【
図7】
図6のステップS12の一例を示すフロー図である。
【
図8】他の情報処理装置によるニューラルネットワークの学習の一例を示すフロー図である。
【
図9】学習を繰り返した場合のニューラルネットワークの認識精度の一例を示す説明図である。
【
図10】
図7のステップS12の別の例を示すフロー図である。
【
図11】
図7のステップS12のさらなる別の例を示すフロー図である。
【
図12】別の実施形態における情報処理装置の動作の一例を示すフロー図である。
【
図13】さらなる別の実施形態における情報処理装置の動作の一例を示すフロー図である。
【
図14】別の実施形態における情報処理装置の動作の一例を示すフロー図である。
【
図15】別の実施形態における情報処理装置の動作の一例を示すフロー図である。
【発明を実施するための形態】
【0009】
以下、図面を用いて実施形態を説明する。
【0010】
図1は、一実施形態における情報処理装置の一例を示す。
図1に示す情報処理装置100は、例えば、ニューラルネットワークを用いた画像処理等の学習または推論に使用される。情報処理装置100は、通信バス40で相互に接続されたCPU(Central Processing Unit)10、メモリ20およびアクセラレータ30を有する。なお、情報処理装置100は、CPU10の代わりに他のプロセッサを有してもよい。また、情報処理装置100は、図示した以外の要素を含んでもよく、さらに、情報処理装置100は、アクセラレータ30を持たなくてもよい。
【0011】
CPU10は、図示しない演算器と、位置設定部12および量子化部14とを有する。位置設定部12および量子化部14は、ハードウェアにより実現されてもよく、CPU10がメモリ20に保持された情報処理プログラムを実行することで実現されてもよい。位置設定部12および量子化部14の機能は、後述する。
【0012】
メモリ20は、OS(Operating System)およびアプリケーションプログラム等の各種プログラムと、ニューラルネットワークの処理で使用するデータおよび変数等とを記憶する。メモリ20は、ニューラルネットワークの計算の途中で生成される中間データ等を記憶してもよい。アクセラレータ30は、例えば、GPU(Graphics Processing Unit)またはDSP(Digital Signal Processor)等であり、CPUに代わってニューラルネットワークの積和演算や行列演算等を実行可能である。
【0013】
なお、この実施形態では、例えば、固定小数点数データを用いてニューラルネットワークの計算が実行されるため、CPU10およびアクセラレータ30は、図示しない固定小数点演算器を有する。また、固定小数点数データを用いてニューラルネットワークの計算を実行する場合に計算の精度を低下させないために、CPU10は、浮動小数点数データを量子化して固定小数点数データに変換する場合、量子化の区切り位置(閾値)を最適化する処理を実行する。量子化の区切り位置の最適化については、
図2で説明する。
【0014】
位置設定部12は、ニューラルネットワークの計算に使用する重み等の変数を量子化する場合の閾値である区切り位置を、量子化前の変数と量子化後の変数との差分に基づいて算出される量子化誤差を小さくするように設定する。
【0015】
量子化部14は、例えば、メモリ20に記憶された浮動小数点数データ(入力データや重み)を読み出し、位置設定部12が設定した区切り位置に基づいて、浮動小数点数データを量子化することで、固定小数点数データに変換する。あるいは、量子化部14は、位置設定部12が設定した区切り位置に基づいて、ニューラルネットワークの計算で得られた中間データ等の固定小数点数データの区切り位置を変更する。そして、情報処理装置100は、区切り位置が最適化された固定小数点数データを用いて、順伝播(forward propagation)、誤差逆伝播(back-propagation)および重みを更新する最適化(optimization)等のディープニューラルネットワークの処理を実行する。
【0016】
図2は、
図1の情報処理装置100の動作の一例を示す。例えば、
図2に示す動作は、CPU10が実行する情報処理プログラムにより実現される。すなわち、
図2は、情報処理装置100による情報処理方法および情報処理装置100が実行する情報処理プログラムによる動作の例を示す。
【0017】
図2に示す例では、ニューラルネットワークの計算で使用する変数の1つである重みを量子化する動作について説明するが、入力データやレイヤー間での中間データを量子化する場合も同様である。例えば、
図2では、ニューラルネットワークにおけるレイヤーのいずれかで使用する重み(丸印)を、数直線上に並べている。
図2の数直線は、図の左側ほど値が大きく、図の右側ほど値が小さい。また、重みの値は、丸印の中心で示される。
【0018】
図2に示す例では、各重みは、4値(2進数の”11”、”10”、”01”、”00”)のいずれかに量子化される。量子化後の値の個数である量子化数(量子化する個数)は、2
2個である。量子化数を2のm乗個(mは1以上の自然数)に設定することで、量子化後の変数を、mビットの2進数の全ての値を用いて表すことができ、固定小数点数データとしてニューラルネットワークの演算を通常の演算器を使用して実行することができる。この例では、量子化後の重みは、2ビットの固定小数点数で表される。
【0019】
浮動小数点数データを固定小数点数データに量子化することで、浮動小数点数データを用いて演算を実行する場合に比べて、乗算器等の演算器の構成を簡易にすることができ、CPU10またはアクセラレータ30に搭載できる演算器の数を増やすことができる。これにより、浮動小数点数データの演算を実行する場合に比べて、ニューラルネットワークの演算の処理性能を向上することができる。
【0020】
量子化数を”4”にする場合、位置設定部12は、量子化の上限Δ0と下限Δ4との間に、量子化するときの閾値である区切り位置Δ1、Δ2、Δ3を設定する。なお、以下では、上限Δ0および下限Δ4も、区切り位置と称する場合もある。量子化後の値の個数である量子化数は、2値以上であれば、4値以外でもよいが、上述したように、2のm乗個であることが好ましい。
【0021】
例えば、位置設定部12は、互いに隣接する2つの区切り位置(Δ0とΔ1、Δ1とΔ2、Δ2とΔ3、Δ3とΔ4)の間隔が均等な初期状態から、区切り位置Δ1、Δ2、Δ3を設定する処理を開始する。区切り位置Δ1、Δ2、Δ3を設定する前の初期状態において、区切り位置の間隔を均等にすることで、区切り位置Δ1、Δ2、Δ3を最適化するための計算量を減らすことができる。
【0022】
例えば、位置設定部12は、重みの最大値maxを量子化の上限Δ0に設定し、重みの最小値minを量子化の下限Δ4に設定する。なお、量子化する重みの上限を予め上限Δ0に決めてもよい。この場合、上限Δ0を超える重みの値は、上限Δ0の値に変更される。同様に、量子化する重みの下限を予め下限Δ4に決めてもよい。この場合、下限Δ4を下回る重みの値は、下限Δ4の値に変更される。
【0023】
位置設定部12は、例えば、区切り位置Δ1、Δ2、Δ3を順次変更し、変更する毎に、量子化前の重みと量子化後の重みとの値の差分に基づいて量子化誤差を算出する。例えば、位置設定部12は、まず、区切り位置Δ1を、区切り位置Δ0と区切り位置Δ2との間で順次変更して量子化誤差を算出し、量子化誤差が最小となる区切り位置Δ1を新たな区切り位置Δ1とする。
【0024】
次に、位置設定部12は、区切り位置Δ2を、新たな区切り位置Δ1と区切り位置Δ3との間で順次変更して量子化誤差を算出し、量子化誤差が最小となる区切り位置Δ2を新たな区切り位置Δ2とする。次に、位置設定部12は、区切り位置Δ3を、新たな区切り位置Δ2と区切り位置Δ4との間で順次変更して量子化誤差を算出し、量子化誤差が最小となる区切り位置Δ3を新たな区切り位置Δ3とする。
【0025】
この後、位置設定部12は、新たに設定した区切り位置Δ1、Δ2、Δ3を順次変更し、変更する毎に、量子化前の重みと量子化後の重みとの値の差分に基づいて量子化誤差を算出する。そして、新たな区切り位置Δ1、Δ2、Δ3を求める処理を、区切り位置Δ1、Δ2、Δ3が変化しなくなるまで繰り返し実行し、量子化誤差が最小となる区切り位置Δ1、Δ2、Δ3の組合せを決定する。
【0026】
区切り位置Δ1-Δ3を順次変更して量子化誤差を算出することで、最適な区切り位置Δ1、Δ2、Δ3が見つけられるため、例えば、簡易な情報処理プログラムによるループ処理を繰り返すことで、量子化誤差の最小値を検出することができる。なお、最適な区切り位置Δ1、Δ2、Δ3を求める手法は、上述に限定されず、計算量は増加するが、総当たりで求めてもよい。
【0027】
位置設定部12は、式(1)を用いて量子化誤差LOSSを算出してもよい。
【0028】
【数1】
式(1)において、nは、量子化数(nは2以上の自然数)であり、k
iは、量子化対象の変数W
iの非ゼロ要素の要素数である。W
kiは、変数W
iと同じ要素数を持ち、かつ変数W
iから絶対値の大きい順にk個の要素を取り出し、それ以外の要素は0とした変数である。
【0029】
式(1)は、量子化前の変数の集合Wと、量子化後の変数の集合WQの量子化誤差を二乗誤差で表した式(2)を展開することで得られ、量子化された変数の量子化誤差が最小となる条件式である。
【0030】
【数2】
式(2)において、Wは、量子化前のパラメータの集合であり、W
Qは、量子化後のパラメータの集合である。
【0031】
位置設定部12が最適な区切り位置Δ1、Δ2、Δ3を設定した後、量子化部14は、位置設定部12が設定した区切り位置Δ0、Δ1、Δ2を閾値として、浮動小数点数で表された各重みを4値のいずれかに量子化する。例えば、量子化部14は、式(3)を使用して、重みを量子化する。
【0032】
【数3】
式(3)において、W
Qiは、量子化後の変数の値である。k
i*は、量子化対象の重みのテンソルの非ゼロ要素の要素数を示し、量子化誤差L
OSSを最小化するkの値である。W
k1*は、設定された区切り位置によって分割された量子化対象の重みの各テンソルを用いて得られる集合を示す。
【0033】
そして、情報処理装置100は、それぞれ最適に量子化された変数等を用いて、ニューラルネットワークの計算を実行する。例えば、情報処理装置100は、ニューラルネットワークを用いた推論において、ニューラルネットワークの入力側から計算を順次実行する順伝播処理を実行する。また、情報処理装置100は、ニューラルネットワークを用いた学習において、順伝播処理に続いて、ニューラルネットワークの出力側から計算を順次実行する逆伝播処理を実行する。さらに、情報処理装置100は、逆伝播処理の結果に基づいて変数を更新する更新処理を実行する。
【0034】
なお、量子化するための区切り位置は、ミニバッチ毎に設定されてもよく、順伝播処理、逆伝播処理および更新処理の各々に対応して設定されてもよい。量子化するための区切り位置を、量子化誤差LOSSが最小となるように設定することで、区切り位置を変更しない場合に比べて、ニューラルネットワークの計算の精度を向上することができる。例えば、画像中の物体を認識するニューラルネットワークにおいて、区切り位置を変更しない場合に比べて、画像の認識率を向上することができる。
【0035】
また、量子化によりビット数を削減した固定小数点数データを使用してニューラルネットワークの計算を実行する場合の認識率を、浮動小数点数データを使用してニューラルネットワークの計算を実行する場合の認識率と同等以上にすることできる。この結果、浮動小数点数データを使用する場合に比べて、CPU10の演算効率を向上することができ、電力効率を向上することができる。
【0036】
以上、
図1および
図2に示す実施形態では、区切り位置を、量子化誤差が最小となるように設定することで、区切り位置を変更しない場合に比べて、ニューラルネットワークの計算の精度を向上することができる。すなわち、量子化した変数を使用してニューラルネットワークの計算を実行する場合に、認識精度が低下することを抑止することができる。
【0037】
例えば、固定小数点数データを用いてニューラルネットワークの演算を実行することができるため、浮動小数点数データで演算を実行する場合に比べて、乗算器等の演算器の構成を簡易にすることができ、CPU10に搭載できる演算器の数を増やすことができる。この結果、浮動小数点数データで演算を実行する場合に比べて、ニューラルネットワークの演算の処理性能を向上することができる。CPU10の演算効率を向上することができ、電力効率を向上することができる。
【0038】
図3は、別の実施形態における情報処理装置の一例を示す。
図1と同様の要素については、同じ符号を付し、詳細な説明は省略する。
図3に示す情報処理装置100Aは、
図1に示した情報処理装置100と同様に、例えば、ニューラルネットワークにおける画像処理等の学習または推論に使用される。情報処理装置100Aは、通信バス40で相互に接続されたCPU10A、メモリ20、アクセラレータ30、補助記憶装置50および通信インタフェース60を有する。なお、情報処理装置100Aは、図示した以外の要素を含んでもよい。
【0039】
CPU10Aは、図示しない演算器と、位置設定部12Aおよび量子化部14Aとを有する。CPU10Aおよびアクセラレータ30は、上述した実施形態と同様に、図示しない固定小数点演算器を有する。位置設定部12Aおよび量子化部14Aは、ハードウェアにより実現されてもよく、CPU10Aがメモリ20に保持された情報処理プログラムを実行することで実現されてもよい。位置設定部12Aは、例えば、重み等の変数を8値のいずれかに量子化するための7個の区切り位置を設定することを除き、
図1に示した位置設定部12の機能と同様の機能を有する。量子化部14Aは、位置設定部12Aにより設定された7個の区切り位置に基づいて、変数を量子化することを除き、
図1に示した量子化部14の機能と同様の機能を有する。
【0040】
補助記憶装置50は、CPU10Aが実行するOS(Operating System)およびアプリケーションプログラム等の各種プログラムと、ニューラルネットワークの計算で使用するデータ、重み等の各種変数等とを記憶する。補助記憶装置50が記憶するプログラム等は、メモリ20に転送され、CPU10Aにより実行される。通信インタフェース60は、例えば、ネットワークを介して他の情報処理装置等と通信する機能を有する。これにより、ニューラルネットワークの計算を複数の情報処理装置を使用して並列に実行することが可能になる。
【0041】
図4および
図5は、
図3の情報処理装置100Aの動作の一例を示す。
図2で説明した動作と同様の動作については、詳細な説明は省略する。例えば、
図4および
図4で説明する動作は、CPU10Aが実行する情報処理プログラムにより実現される。すなわち、
図4および
図5は、情報処理装置100Aによる情報処理方法および情報処理装置100Aが実行する情報処理プログラムによる動作の説明を示す。
【0042】
図4に示す例においても、
図2と同様に、ニューラルネットワークの計算で使用する変数の1つである重みを量子化する例について説明する。なお、入力データ、活性化関数(activation functions)、ニューラルネットワークに含まれるレイヤーから出力される中間データ等が、ニューラルネットワークの計算で使用するために量子化されてもよい。
図4および
図5の数直線は、絶対値を示しており、正負は区別されない。数直線は、図の左側ほど絶対値が大きく、図の右側ほど絶対値が小さい。なお、量子化する前の変数(重み)は、浮動小数点数(32ビットまたは16ビット等)で表される。
【0043】
この実施形態では、各重みの絶対値は、8値(2進数の”111”、”110”、”101”、”100”、”011”、”010”、”001”、”000”)のいずれかに量子化される。すなわち、量子化により振り分けられる値の個数である量子化数は、8個(2の3乗個)である。この場合、量子化の上限Δ0と下限Δ8との間に、量子化するときの閾値である7個の区切り位置Δ1、Δ2、Δ3、Δ4、Δ5、Δ6、Δ7が設定される。この場合、量子化後の重みは、3ビットの固定小数点数で表される。
【0044】
なお、
図4では、上限Δ0より値が大きい重みは、上限Δ0に変更され、下限Δ8より値が小さい重みは、下限Δ8に変更される。例えば、上限Δ0および下限Δ8は、ニューラルネットワークの設計者や、ニューラルネットワークを使用する使用者により、予め決められる。
【0045】
図4の上側の太い曲線は、浮動小通点数データで表される量子化対象の変数(この例では重み)の分布を示し、符号W
1-W
8は、区切り位置Δ1-Δ7により分割された量子化対象の変数群を示す。
図4の下側の矩形は、区切り位置Δ1-Δ7を閾値として量子化した場合の変数の分布を示し、符号W
Q1-W
Q8は、量子化された変数を示す。なお、量子化数は、ニューラルネットワークの設計者や、ニューラルネットワークを使用する使用者により、n個(nは2以上の自然数)に予め指定される。
【0046】
例えば、位置設定部12Aは、重みを量子化する処理を開始する前に、区切り位置Δ1、Δ2、Δ3、Δ4、Δ5、Δ6、Δ7を、上限Δ0と下限Δ8との間に等間隔に配置する。そして、位置設定部12Aは、量子化対象の重みのテンソルに含まれる要素を絶対値が大きい順に並べ替える。このため、符号W1-W8の各々で示される変数群は、正値と負値の両方を含み得る。次に、位置設定部12Aは、並べ替えた重みを、区切り位置にしたがって8個の集合に分割する。
【0047】
位置設定部12Aは、重みを分割した後に、
図2で説明した処理と同様に、重みを量子化する区切り位置のうち、区切り位置Δ1を、区切り位置Δ0から区切り位置Δ2の範囲を順次変更する毎に、上述した式(1)を用いて量子化誤差を計算する。位置設定部12Aは、区切り位置Δ1を動かした範囲内で量子化誤差の値が最小となった位置に区切り位置Δ1を更新する。
【0048】
次に、位置設定部12Aは、区切り位置Δ2を、更新された新たな区切り位置Δ1から区切り位置Δ3の範囲を順次変更する毎に、上述した式(1)を用いて量子化誤差を計算する。位置設定部12Aは、区切り位置Δ2を動かした範囲内で量子化誤差の値が最小となった位置に区切り位置Δ2を更新する。
【0049】
位置設定部12Aは、区切り位置Δ3、Δ4、Δ5、Δ6、Δ7の各々について、上述した区切り位置Δ1、Δ2の更新処理と同様に更新処理を順次行う。さらに、位置設定部12Aは、更新した区切り位置Δ1-Δ7の各々について、上述した区切り位置Δ1、Δ2の更新処理と同様に更新処理を順次行う。位置設定部12Aは、区切り位置Δ1-Δ7の少なくともいずれかが更新された場合、更新後の区切り位置Δ1-Δ7を使用して、さらなる更新処理を実行する。すなわち、位置設定部12Aは、全ての区切り位置Δ1-Δ7が更新されなくなるまで、更新処理を繰り返し実行する。
【0050】
なお、
図4に示す最適な区切り位置Δ1-Δ7を求める処理を、正負が区別されない絶対値を用いて実施する場合、正負を区別する場合に比べて、量子化のための計算量を少なくすることができる。一方で、ニューラルネットワークでの認識率の劣化量(すなわち、量子化誤差量)は、正負を区別する場合に比べて多くなる。このため、量子化のための計算量を抑えたい場合、正負が区別されない絶対値を用いて最適な区切り位置を求める処理を実行することが好ましい。
【0051】
図5は、
図4で説明した更新処理により最適化された区切り位置Δ1-Δ7と、最適化された区切り位置Δ1-Δ7により量子化された変数を示す。すなわち、
図5は、更新されなくなった場合の区切り位置Δ1-Δ7を示している。
【0052】
位置設定部12Aによる区切り位置Δ1-Δ7の更新処理が完了した場合、量子化部14Aは、上述した式(3)を用いて、重みの量子化を行う。すなわち、量子化部14Aは、設定された区切り位置によって分割された量子化対象の重みの各テンソルを用いて得られる集合(Wk1*~Wkn*)と、それらテンソルの非ゼロ要素の要素数(k1*~kn*)を用いて、変数の量子化を行う。これにより、量子化対象の重みは、量子化後の値WQ1-WQ8のいずれかに振り分けられる。なお、値WQ1-WQ8は、正負が区別されていない絶対値である。
【0053】
これにより、情報量の多い16ビットまたは32ビットの浮動小数点数データを、情報量の少ない3ビットの固定小数点数データに量子化する場合にも、ニューラルネットワークの計算の精度が低下することを抑止できる。例えば、画像中の物体を認識するニューラルネットワークにおいて、区切り位置を変更しない場合に比べて、画像の認識率を向上することができる。
【0054】
図6は、
図3の情報処理装置100によるニューラルネットワークの学習の一例を示す。例えば、
図6に示すフローは、CPU10Aが実行する情報処理プログラムにより実現される。すなわち、
図6に示すフローは、情報処理装置100Aによる情報処理方法および情報処理装置100Aが実行する情報処理プログラムによる動作の例を示す。例えば、
図6は、エポック毎に実行される。1エポックは、ニューラルネットワークの学習を行うデータサイズに相当するサイズの処理を行う単位であり、所定数のミニバッチの処理を含む。
【0055】
まず、CPU10Aは、ステップS10において、ニューラルネットワークの学習を行うために、重み等の各種変数の初期値の設定、ミニバッチサイズの設定等の設定の初期化を行う。
【0056】
次に、CPU10Aの位置設定部12Aは、ステップS12において、量子化誤差を最小にするために、
図4および
図5で説明したように、量子化処理に使用する区切り位置を設定する。区切り位置の設定処理の例は、
図7で説明する。次に、CPU10Aの量子化部14Aは、ステップS14において、ステップS12で設定された区切り位置を閾値として使用して、
図5で説明したように、重み等の変数を量子化する。例えば、位置設定部12Aは、上述した式(3)を用いて、変数を量子化する。なお、量子化される変数は、ニューラルネットワークに入力される入力データおよびニューラルネットワークのレイヤー間で入出力される中間データを含んでもよく、その場合、区切り位置の設定は、変数毎に実施されてもよい。
【0057】
次に、CPU10Aは、ステップS16において、ニューラルネットワークへの入力データおよびニューラルネットワークに設定された重み等の変数に基づいて、ニューラルネットワークの入力層から出力層に向けた計算、すなわち順伝播の計算を実行する。順伝播の計算の結果、ニューラルネットワークの出力層の出力を関数とする損失関数(loss function)の値が計算される。
【0058】
ニューラルネットワークの学習の目的は、ニューラルネットワークに設定される重みの値を更新することである。このため、CPU10Aは、ステップS16の後、ステップS18において、ニューラルネットワークの出力層から入力層に向けた計算、すなわち、誤差逆伝播の計算の行うことで、重みの更新幅を決定する。例えば、誤差逆伝播の計算に使用される重みの更新幅を決定するアルゴリズムとして、勾配降下法(gradient descent)が使用される。
【0059】
次に、CPU10Aは、誤差逆伝播の計算の後、ステップS20において、算出された重みの更新幅を用いて、重みの値を更新する。次に、ステップS22において、CPU10Aは、1エポックの学習に対応する入力データが全て入力された場合、処理を終了し、入力されていない入力データがある場合、処理をステップS12に戻す。
【0060】
そして、CPU10Aは、1エポックの学習に対応する入力データが全て入力されるまで、順伝播の計算、誤差逆伝播の計算、重みの更新の操作を繰り返し実行する。例えば、ステップS12、S14、S16、S18、S20の処理は、ミニバッチサイズ毎に実行される。換言すれば、1エポックの処理が完了するまで、ミニバッチが繰り返し実行される。この実施形態では、ミニバッチ毎に繰り返される学習毎にステップS12により区切り位置が更新され、ステップS14により変数が量子化され、量子化誤差が最小となる位置で変数が量子化される。これにより、量子化された重み等の変数を使用するニューラルネットワークの認識率の劣化を低減することができる。
【0061】
なお、
図6に示す処理では、ミニバッチ毎に、ニューラルネットワークの計算の前に、区切り位置が設定され、設定された区切り位置にしたがって重み等が量子化される。そして、ニューラルネットワークの計算は、当該ミニバッチで設定された区切り位置を使用して量子化された重み等を使用して実行される。このため、ニューラルネットワークの計算は、区切り位置を設定し、重み等を量子化したCPU10Aにより実行されることが、他の情報処理装置へのデータ転送を発生させない点で効率的である。
【0062】
図7は、
図6のステップS12の一例を示す。まず、ステップS120において、位置設定部12Aは、量子化対象の変数である重み等の変数を絶対の大きさ順に並べる。すなわち、変数は正負の区別なく並べられる。次に、ステップS121において、位置設定部12Aは、量子化対象の変数である重み等の変数を現在の区切り位置にしたがって分割する。
【0063】
次に、ステップS122において、位置設定部12Aは、区切り位置を示す変数Sを”0”に設定し、値が最大の区切り位置S7を示す変数Smaxを”7”に設定する。次に、ステップS123において、位置設定部12Aは、変数Sを”1”増加させる。
【0064】
次に、ステップS124において、位置設定部12Aは、
図4で説明したように、変数Sで示される区切り位置ΔSを、区切り位置ΔS-1から区切り位置ΔS+1まで順次変更し、各区切り位置ΔSでの量子化誤差を算出する。例えば、S=”1”の場合、位置設定部12Aは、区切り位置Δ1を区切り位置Δ0から区切り位置Δ2まで順次変更させて、各区切り位置Δ1での量子化誤差を算出する。例えば、位置設定部12Aは、上述した式(1)を用いて、量子化誤差を算出する。
【0065】
次に、ステップS125において、位置設定部12Aは、ステップS124で算出した量子化誤差のうち、最小の量子化誤差が算出された区切り位置ΔSを新たな区切り位置ΔSに設定する。
【0066】
次に、ステップS126において、位置設定部12Aは、変数Sが変数Smaxに等しい場合、全ての区切り位置Δ1-Δ7を変更して量子化誤差を算出したため、処理をステップS127に移行する。位置設定部12Aは、変数Sが変数Smaxでない場合、変更していない区切り位置があるため、処理をステップS123に戻す。
【0067】
ステップS127において、位置設定部12Aは、直前に処理したステップS124、S125において、更新された区切り位置がある場合、最小の量子化誤差に対応する区切り位置の収束が完了していないため、処理をステップS120に戻す。一方、位置設定部12Aは、直前に処理したステップS124、S125において、更新された区切り位置がない場合、最小の量子化誤差に対応する区切り位置の収束が完了したと判断し、
図7の処理を終了し、
図6のステップS14の処理に移行する。すなわち、連続する2回のステップS124、S125の処理において、区切り位置に変更がない場合、
図7の処理は終了される。
【0068】
図8は、他の情報処理装置によるニューラルネットワークの学習の一例を示す。
図6と同様の処理については、同じ符号を付し、詳細な説明を省略する。
図8に示す学習では、
図6に示したステップS10の代わりにステップS11が実行され、ステップS11の後、
図6に示したステップS16、S18、S20、S22が繰り返し実行される。すなわち、
図8では、
図6に示したステップS12、S14は実行されない。
【0069】
ステップS11では、
図6に示したステップS10の処理に加えて、量子化処理に使用する区切り位置が設定される。例えば、区切り位置は、
図4の初期状態に示すように等間隔に設定される。等間隔に設定された区切り位置は、ステップS16、S18、S20の学習において、変更されずに使用される。
【0070】
図9は、学習を繰り返した場合のニューラルネットワークの認識精度の一例を示す。
図9の上側は、
図6に示す処理により学習を繰り返した場合の認識精度の遷移を示し、
図9の下側は、
図8に示す処理により学習を繰り返した場合の認識精度の遷移を示す。学習の繰り返し回数はエポック数で示される。
【0071】
図6に示す処理による学習(
図9の上側)では、量子化後のビット数を8ビット、6ビット、4ビット、3ビットのいずれに設定する場合にも、ニューラルネットワークの認識精度(認識率)に優位差はない。すなわち、3ビットまたは4ビットに量子化する場合にも、8ビットに量子化する場合と同等の認識精度を得ることができる。また、所望の認識精度(例えば、0.9)に到達するまでのエポック数は、3ビットの場合、20回程度になるが、4ビットの場合は、8ビットおよび6ビットの場合と有意差がない。換言すれば、3ビットにおいても、学習回数を増やすことで、所望の認識精度を得ることができる。この結果、例えば、ビット数の少ない簡易な演算器を多数搭載したアクセラレータ30(
図3)を用いることで、ビット数の多い演算器を用いて学習する場合に比べて、学習の効率を向上することができ、消費電力も削減することができる。
【0072】
一方、
図8に示す処理による学習(
図9の下側)では、3ビットまたは4ビットに量子化したときの認識精度は、6ビットまたは8ビットに量子化したときの認識精度に比べて大きく劣化し、実用に耐えないレベルである。また、6ビットに量子化したときの認識精度も、8ビットに量子化したときの認識精度に比べて劣化する。さらに、8ビット以外では、学習を繰り返しても所望の認識精度(例えば、0.9)に到達することができない。
【0073】
図9の上側に示すように、ミニバッチ毎に、最小の量子化誤差に対応する区切り位置を設定することで、区切り位置を固定で設定する場合に比べて、ニューラルネットワークの認識精度を向上することができ、少ないエポック数により学習を収束させることができる。
【0074】
図10は、
図7のステップS12の別の例を示す。
図7と同様の処理については、同じ符号を付し、詳細な説明を省略する。
図10では、
図7のステップS124の代わりにステップS124Aが実行される。その他の処理は、
図7と同様である。なお、
図10に示す処理は、量子化誤差の変化が下に凸の特性を示す場合に使用される。
【0075】
ステップS124Aでは、位置設定部12Aは、黄金分割探索アルゴリズムを用いて区切り位置ΔSを変更し、量子化誤差が最も小さい区切り位置ΔSを見つける。例えば、量子化誤差は、上述した式(1)を用いて算出される。
【0076】
黄金分割探索アルゴリズムを用いることにより、量子化誤差を小さくする区切り位置ΔSを見つけるまでの探索回数を低減することができ、最適な区切り位置ΔSを算出するための計算量を削減することができる。この結果、黄金分割探索アルゴリズムを用いない場合に比べて、
図6に示した学習に掛かる時間を削減することができる。
【0077】
図11は、
図7のステップS12のさらなる別の例を示す。
図7と同様の処理については、同じ符号を付し、詳細な説明を省略する。
図11では、
図7のステップS124の代わりにステップS124Bが実行される。その他の処理は、
図7と同様である。なお、
図11に示す処理は、量子化誤差の変化が下に凸の特性を示す場合に使用される。
【0078】
ステップS124Bでは、位置設定部12Aは、区切り位置ΔSを、隣接する区切り位置の一方から他方(例えば、ΔS-1からΔS+1)に向けて移動し、量子化誤差が減少から増加に転じた場合に、量子化誤差が最小になったと判定する。例えば、量子化誤差は、上述した式(1)を用いて算出される。
【0079】
図11では、区切り位置ΔSを、ΔS-1からΔS+1まで全て移動して量子化誤差を算出する場合に比べて、量子化誤差を算出する回数を削減することができ、学習に掛かる時間を削減することができる。
【0080】
以上、
図3から
図11に示す実施形態においても、
図1から
図2に示す実施形態と同様に、区切り位置を、量子化誤差が最小となるように変更することで、区切り位置を変更しない場合に比べて、ニューラルネットワークの計算の精度を向上することができる。すなわち、量子化した変数を使用してニューラルネットワークの計算を実行する場合に、計算の精度が低下することを抑止することができる。例えば、固定小数点数データを用いてニューラルネットワークの演算を実行することができるため、浮動小数点数データを用いる場合に比べて、CPU10Aの演算効率を向上することができ、電力効率を向上することができる。
【0081】
さらに、
図3から
図11に示す実施形態では、ニューラルネットワークを学習させるミニバッチ毎に区切り位置を最適化し、学種を繰り返すことで、所望の認識率に到達するまでの学習回数を削減することができ、学習効率を向上することができる。また、最適な区切り位置Δ1-Δ7を求める処理を、正負が区別されない絶対値を用いて実施することで、正負を区別する場合に比べて、量子化のための計算量を少なくすることができる。
【0082】
図12は、別の実施形態における情報処理装置の動作の一例を示す。
図6と同様の処理については、同じ符号を付し、詳細な説明を省略する。
図12に示すフローを実行する情報処理装置は、例えば、
図3に示す情報処理装置100Aである。情報処理装置100Aは、情報処理プログラムを実行することで、
図12に示す処理を実現する。すなわち、
図12に示すフローは、情報処理装置100Aによる情報処理方法および情報処理装置100Aが実行する情報処理プログラムによる動作の例を示す。
【0083】
図12では、ステップS12が、ステップS20とステップS22との間に配置される。但し、ステップS12による処理は、ステップS20の完了時だけでなく、ステップS16の完了時およびステップS18の完了時にそれぞれ開始されてもよい。なお、
図12のステップS12で実行される処理は、
図7、
図10または
図11に示したステップS12のいずれかである。
【0084】
例えば、ステップS16において順伝播により生成された中間データ(次のレイヤーへの入力データ)を用いて、次回のミニバッチで中間データを量子化するための区切り位置が設定される。ステップS18において逆伝播により生成された中間データ(次のレイヤーへの入力データ)を用いて、次回のミニバッチで中間データを量子化するための区切り位置が設定される。同様に、ステップS20において更新された重み等の変数を用いて、次回のミニバッチで変数を量子化するための区切り位置が設定される。
【0085】
なお、初回のミニバッチでは、区切り位置が設定されていない。このため、初回のミニバッチでの変数の量子化は、デフォルトの区切り位置を用いて実行される。例えば、デフォルトの区切り位置は、
図4の初期状態に示すように等間隔に設定され、ステップS10で設定される。また、各ミニバッチでの変数の量子化は、前回のミニバッチで設定された区切り位置を用いて実行される。
【0086】
ステップS12による区切り位置の設定処理を、学習後であって次回のミニバッチの投入前に実行することで、順伝播、逆伝播および重みの更新の計算が終了次第、それぞれに対応する区切り位置の設定処理を開始することができる。これにより、例えば、順伝播、逆伝播および重みの更新のそれぞれに対応する区切り位置の設定処理を複数の情報処理装置100Aで並列に実行することができる。この結果、
図6に比べて、区切り位置を設定するための計算時間を短縮することができ、ニューラルネットワークの学習時間を短縮することができる。
【0087】
図13は、さらなる別の実施形態における情報処理装置の動作の一例を示す。
図6と同様の処理については、同じ符号を付し、詳細な説明を省略する。
図13に示すフローを実行する情報処理装置は、例えば、
図3に示す情報処理装置100Aである。情報処理装置100Aは、情報処理プログラムを実行することで、
図13に示す処理を実現する。すなわち、
図13に示すフローは、情報処理装置100Aによる情報処理方法および情報処理装置100Aが実行する情報処理プログラムによる動作の例を示す。
【0088】
図13では、ステップS12、S14が、ステップS20とステップS22との間に配置される。但し、
図12と同様に、ステップS12、S14による処理は、ステップS20の完了時だけでなく、ステップS16の完了時およびステップS18の完了時にそれぞれ開始されてもよい。また、
図12と同様に、初回のミニバッチでの変数の量子化は、デフォルトの区切り位置を用いて、ステップS10により実行される。そして、2回目以降のミニバッチでの変数の量子化は、前回のミニバッチで設定された区切り位置を用いて実行される。なお、
図13のステップS12で実行される処理は、
図7、
図10または
図11に示したステップS12のいずれかである。
【0089】
図13に示す実施形態においても、
図12に示した実施形態と同様に、順伝播、逆伝播および重みの更新の計算が終了次第、それぞれに対応する区切り位置の設定処理を開始することができる。さらに、変数の量子化を、区切り位置が設定され次第開始することができる。これにより、例えば、順伝播、逆伝播および重みの更新のそれぞれに対応する区切り位置の設定処理と変数の量子化とを複数の情報処理装置100Aで並列に実行することができる。この結果、
図6および
図12に比べて、区切り位置を設定および変数を量子化するための計算時間を短縮することができ、ニューラルネットワークの学習時間を短縮することができる。
【0090】
図14は、別の実施形態における情報処理装置の動作の一例を示す説明図である。
図7と同様の処理については、同じ符号を付し、詳細な説明を省略する。
図14に示すステップS12のフローを実行する情報処理装置は、例えば、
図3に示す情報処理装置100Aである。情報処理装置100Aは、情報処理プログラムを実行することで、
図14に示す処理を実現する。すなわち、
図14に示すフローは、情報処理装置100Aによる情報処理方法および情報処理装置100Aが実行する情報処理プログラムによる動作の例を示す。
【0091】
情報処理装置100Aは、
図6に示す処理を実行する。
図14では、
図7のステップS120の代わりにステップS120Cが実行される。その他の処理は、
図7と同様である。位置設定部12Aは、ステップS120Cにおいて、量子化対象の変数である重み等の変数を、正負を含めた大きさ順に並べる。すなわち、変数は正負を区別して並べられる。この後のステップS121からステップS127の処理は、
図7の説明と同様である。
【0092】
この実施形態では、変数が正負を含めた大きさ順に並べられるため、例えば、ステップS121において、正値と負値とは別々に分割される。最適な区切り位置を求める処理を、正負が区別して大きさ順に並べた値を用いて実施する場合、正負を区別しない場合に比べて、量子化のための計算量は多くなる。一方で、ニューラルネットワークでの認識率の劣化量(すなわち、量子化誤差量)は、正負を区別しない場合に比べて、少なくなる。このため、認識率の劣化量を抑えたニューラルネットワークを構築したい場合、正負が区別した値を用いて最適な区切り位置を求める処理を実行することが好ましい。
【0093】
図14に示す実施形態においても、
図1から
図11に示した実施形態と同様の効果を得ることができる。さらに、
図14に示す実施形態では、正負を区別して最適な区切り位置を設定することで、正負を区別する場合に比べて、学習後のニューラルネットワークの認識率を向上することができる。なお、
図10および
図11に示すステップS120が、
図14に示すステップS120Cに置き換えられてもよい。
【0094】
図15は、別の実施形態における情報処理装置の動作の一例を示す。
図6と同様の処理については、同じ符号を付し、詳細な説明を省略する。
図15に示すフローを実行する情報処理装置は、例えば、
図3に示す情報処理装置100Aである。情報処理装置100Aは、情報処理プログラムを実行することで、
図15に示す処理を実現する。すなわち、
図15に示すフローは、情報処理装置100Aによる情報処理方法および情報処理装置100Aが実行する情報処理プログラムによる動作の例を示す。
【0095】
図15では、
図6に示す動作に対して、ステップS18、S20の処理が削除されている。すなわち、
図15では、予め実施された学習に基づいてニューラルネットワークによる推論が実行される。推論を実行する場合にも、
図6と同様に、ミニバッチ毎に区切り位置を更新し、更新した区切り位置を用いて変数を量子化することで、量子化された変数を使用するニューラルネットワークの認識率の劣化を低減することができる。なお、
図15のステップS12で実行される処理は、
図7、
図10または
図11に示したステップS12のいずれかである。また、上述した
図12および
図13からステップS18、S20の処理が削除され、予め実施された学習に基づいて推論が実行されてもよい。
【0096】
以上の詳細な説明により、実施形態の特徴点および利点は明らかになるであろう。これは、特許請求の範囲がその精神および権利範囲を逸脱しない範囲で前述のような実施形態の特徴点および利点にまで及ぶことを意図するものである。また、当該技術分野において通常の知識を有する者であれば、あらゆる改良および変更に容易に想到できるはずである。したがって、発明性を有する実施形態の範囲を前述したものに限定する意図はなく、実施形態に開示された範囲に含まれる適当な改良物および均等物に拠ることも可能である。
【符号の説明】
【0097】
10、10A CPU
12、12A 位置設定部
14、14A 量子化部
20 メモリ
30 アクセラレータ
40 通信バス
50 補助記憶装置
60 通信インタフェース
100、100A 情報処理装置
Δ0-Δ8 区切り位置