【文献】
中原 啓貴等,FPGA向けディープラーニング開発環境GUINNESSについて,電子情報通信学会技術研究報告,日本,一般社団法人電子情報通信学会,2017年 9月18日,Vol.117 No.221
【文献】
On-Chip Memory Based Binarized Convolutional Deep Neural Network Applying Batch Normalization Free Technique on an FPGA,2017 IEEE International Parallel and Distributed Processing Symposium Workshops,2017年 7月 3日,98-105頁
(58)【調査した分野】(Int.Cl.,DB名)
【発明を実施するための形態】
【0013】
以下、図面を参照して本発明を実施するための形態(以下、「本実施形態」という)におけるディープニューラルネットワークについて説明する。
(背景説明)
図1は、ディープニューラルネットワーク(DNN)の構造の一例を説明する図である。
図1に示すように、ディープニューラルネットワーク(DNN)1は、入力層(input layer)11、任意の数の中間層である隠れ層(hidden layer)12、出力層(output layer)13を有して構成される。
入力層(input layer)11は、複数個(ここでは8)の入力ノード(ニューロン)を有する。隠れ層12は、複数(ここでは3層(hidden layer1,hidden layer2,hidden layer3))である。実際には、隠れ層12の層数nは、例えば20〜100に達する。出力層13は、識別対象の数(ここでは4)の出力ノード(ニューロン)を有する。なお、層数およびノード数(ニューロン数)は、一例である。
ディープニューラルネットワーク1は、入力層11と隠れ層12のノード間が全て結合し、隠れ層12と出力層13のノード間が全て結合している。
【0014】
入力層11、隠れ層12および出力層13には、任意の数のノード(
図1の○印参照)が存在する。このノードは、入力を受け取り、値を出力する関数である。入力層11には、入力ノードとは別に独立した値を入れるバイアス(bias)ノードがある。構成は、複数のノードを持つ層を重ねることで構築される。伝播は、受け取った入力に対して重み(weight)をかけ、受け取った入力を次層に活性化関数(activation function)で変換して出力する。活性化関数は、sigmoid関数やtanh関数などの非線形関数、ReLU(Rectified Linear Unit function:正規化線形関数)がある。ノード数を増やすことで、扱う変数を増やし、多数の要素を加味して値/境界を決定できる。層数を増やすことで、直線境界の組み合わせ、複雑な境界を表現できる。学習は、誤差を計算し、それを基に各層の重みを調整する。学習は、誤差を最小化する最適化問題を解くことであり、最適化問題の解法は誤差逆伝播法(Backpropagation)を使うのが一般的である。誤差は、二乗和誤差を使うのが一般的である。汎化能力を高めるために、誤差に正則化項を加算する。誤差逆伝播法は、誤差を出力層13から伝播させていき、各層の重みを調整する。
【0015】
図1のディープニューラルネットワーク1の構成を2次元に展開することで画像処理に適したCNNを構築できる。また、ディープニューラルネットワーク1にフィードバックを入れることで、双方向に信号が伝播するRNN(Recurrent Neural Network:再帰型ニューラルネットワーク)を構成することができる。
【0016】
図1の太破線三角部に示すように、ディープニューラルネットワーク1は、多層のニューラルネットワークを実現する回路(以下、ニューラルネットワーク回路という)2から構成されている。
本技術は、ニューラルネットワーク回路2を対象とする。ニューラルネットワーク回路2の適用箇所および適用数は限定されない。例えば、隠れ層12の層数n:20〜30の場合、これらの層のどの位置に適用してもよく、またどのノードを入出力ノードとするものでもよい。さらに、ディープニューラルネットワーク1に限らず、どのようなニューラルネットワークでもよい。ただし、入力層11または出力層13のノード出力には、2値化出力ではなく多ビット出力が求められるので、ニューラルネットワーク回路2は、対象外である。ただし、出力層13のノードを構成する回路に、乗算回路が残ったとしても面積的には問題にはならない。
なお、入力データに対し学習済のものを評価していくことを前提としている。したがって、学習結果として重みwiは既に得られている。
【0017】
<ニューラルネットワーク回路>
図2は、比較例のニューラルネットワーク回路の構成の一例を示す図である。
比較例のニューラルネットワーク回路20は、
図1のディープニューラルネットワーク1を構成するニューラルネットワーク回路2に適用できる。なお、以下の各図の表記において、値が多ビットである場合は太実線矢印とバンドルで、また値が2値である場合は細太実線矢印で示す。
ニューラルネットワーク回路20は、入力値(判別データ)X1〜Xn(多ビット)を入力する入力ノードおよび重みW1〜Wn(多ビット)を入力する入力部21と、バイアスW0(多ビット)を入力するバイアスW0入力部22と、入力値X1〜Xnおよび重みW1〜Wnを受け取り、入力値X1〜Xnに重みW1〜Wnをそれぞれ乗算する複数の乗算回路23と、各乗算値とバイアスW0との総和を取る総和回路24と、総和を取った信号Yを活性化関数fact(Y)で変換する活性化関数回路25と、を備えて構成される。
以上の構成において、ニューラルネットワーク回路20は、入力値X1〜Xn(多ビット)を受け取り、重みW1〜Wnを乗算した後に、バイアスW0を含めて総和を取った信号Yを活性化関数回路25を通すことで人間のニューロンに模した処理を実現している。
【0018】
図3は、前記
図2に示すニューラルネットワーク回路20における活性化関数fact(Y)を示す図である。
図3は、横軸に総和を取った信号Y、縦軸に活性化関数fact(Y)の値をとる。
図3の符号○印は、±1の範囲の値をとる正側の活性化値(状態値)、
図3の符号×印は、±1の範囲の値をとる負側の活性化値である。
ニューラルネットワーク回路20(
図2参照)は、多ビットで高い認識精度を実現している。このため、活性化関数回路25(
図2参照)において、非線形な活性化関数fact(Y)を用いることができる。すなわち、
図4に示すように、非線形な活性化関数fact(Y)は、傾きが非ゼロとなる部分(
図4の破線囲み部分参照)に±1の範囲の値をとる活性化値を設定できる。このため、ニューラルネットワーク回路20は、多様な活性を実現でき、認識精度は実用的な値になっていた。しかし、ニューラルネットワーク回路20は、大量の乗算回路23が必要になる。加えて、ニューラルネットワーク回路20は、入出力・重みが多ビットであることにより、大量のメモリが必要であり、読み書きの速度(メモリ容量・帯域)も問題である。
【0019】
<単に2値化した2値化ニューラルネットワーク回路>
図2に示す比較例のニューラルネットワーク回路20は、短精度(多ビット)による積和演算回路で構成されている。このため、多数の乗算回路21が必要であり、面積・消費電力が多大になる欠点があった。また、入出力・重みが多ビットであることで大量のメモリが必要であり、読み書きの速度(メモリ容量・帯域)が問題となっていた。
そこで、2値化した精度、すなわち+1と−1のみ用いてニューラルネットワーク回路2(
図1参照)を構成する回路が提案された(非特許文献1〜4)。具体的には、
図2に示すニューラルネットワーク回路20の乗算回路21を、論理ゲート(例えばXNORゲート回路)に置き換えることが考えられる。
【0020】
図4は、比較例の
図2に示すニューラルネットワーク回路20の乗算回路21をXNORゲート回路に置き換えた2値化ニューラルネットワーク回路の構成の一例を示す図である。
比較例の2値化ニューラルネットワーク回路30は、
図1のニューラルネットワーク回路2に適用できる。
図4に示すように、比較例の2値化ニューラルネットワーク回路30は、入力値x1〜xn(2値)を入力する入力ノードおよび重みw1〜wn(2値)を入力する入力部31と、バイアスw0(2値)を入力するバイアスw0入力部32と、入力値x1〜xnおよび重みw1〜wnを受け取り、XNOR(Exclusive NOR:否定排他的論理和)論理を取る複数のXNORゲート回路33と、XNORゲート回路33の各XNOR論理値とバイアスw0との総和を取る総和回路34と、総和を取った信号Yのバッチ正規化した信号Bを活性化関数fsgn(B)で変換する活性化関数回路35と、を備えて構成される。
2値化ニューラルネットワーク回路30は、乗算回路23(
図2参照)がXNOR論理を実現するXNORゲート回路33に置き換えられている。このため、乗算回路23を構成する際に必要であった面積を削減することができる。また、入力値x1〜xn、出力値z、および重みw1〜wnは、いずれも2値(−1と+1)であるため、多値である場合と比較してメモリ量を大幅に削減でき、メモリ帯域を向上させることができる。
【0021】
図5は、比較例の前記
図4に示す2値化ニューラルネットワーク回路30における活性化関数fsgn(B)を示す図である。
図5は、横軸に総和を取った信号Y、縦軸に活性化関数fsgn(B)の値をとる。
図5の符号○印は、±1の範囲の値をとる正側の活性化値、
図5の符号×印は、±1の範囲の値をとる負側の活性化値である。
2値化ニューラルネットワーク回路30は、入力値x1〜xnおよび重みw1〜wnを単に2値化している。このため、
図5の符号aに示すように、±1のみ扱う活性化関数しか扱えないため、誤差が頻繁に生じてしまう。また、傾きが非ゼロとなる区間(
図5の破線囲み部分参照)が不均等となり学習が上手く行われない。すなわち、
図6の符号bに示すように、不均等な幅により微分が定義できない。その結果、単に2値化した2値化ニューラルネットワーク回路40は、認識精度が大幅に落ち込んでしまう。
そこで、非特許文献1〜4には、既存の2値化ニューラルネットワークの精度を維持するためにバッチ正規化を行う技術が記載されている。
【0022】
<バッチ正規化回路を備える2値化ニューラルネットワーク回路>
図6は、比較例の2値化した精度を是正して、CNNの認識精度を保つバッチ正規化回路(BN:Batch Normalization)を備える2値化ニューラルネットワーク回路40の構成の一例を示す図である。
図4と同一構成部分には同一符号を付している。
図6に示すように、比較例の2値化ニューラルネットワーク回路40は、入力値x1〜xn(2値)を入力する入力ノードx1〜xn、重みw1〜wn(2値)を入力する入力部31と、バイアスB(多ビット)を入力するバイアスB入力部32と、入力値x1〜xnおよび重みw1〜wnを受け取り、XNOR(Exclusive NOR:否定排他的論理和)論理を取る複数のXNORゲート回路33と、XNORゲート回路33の各XNOR論理値とバイアスBとの総和を取る総和回路34と、2値化によるバラツキの偏りを正規化範囲を広げ中心をシフトさせる処理で是正するバッチ正規化回路41と、総和を取った信号Yのバッチ正規化した信号Bを活性化関数fsgn(B)で変換する活性化関数回路35と、を備えて構成される。
【0023】
バッチ正規化回路41は、重み総和を取った信号Yと平均値(μ
B)との差分をとる減算器42と、減算器42出力とミニバッチの分散値(σ
2B)および定数(ε)の和の根の逆数とを乗算する第1乗算回路43と、第1乗算回路43出力に、スケーリング(γ)値(多ビット)による正規化を行う第2算回路44と、スケーリング係数(γ)による正規化後、シフト値(β)(多ビット)によりシフトして2分類を行う加算器45とを有する。スケーリング係数(γ)およびシフト値(β)の各パラメータは、事前に学習時に求めておく。
【0024】
学習データ毎に重みを更新していると、計算時間がかかり特定のデータに依存してしまう。そこで、バッチというまとまったデータ数単位で更新を行う手法が採られる。ミニバッチとは、バッチを更に小さくした単位であり、現在はこのミニバッチを用いる。
【0025】
2値化ニューラルネットワーク回路40は、バッチ正規化回路41を備えることで、2値化した精度を是正して、CNNの認識精度を保つようにする。
なお、入力値x1〜xnと重みw1〜wnとのXNOR論理を取る論理回路であれば、XNORゲートに限らずどのような論理ゲートでもよい。例えば、XOR回路を用いて総和をとり、活性化関数の否定を取ってもよい。
【0026】
<バッチ正規化回路が必要となる理由>
比較例の2値化ニューラルネットワーク回路40のバッチ正規化回路41が必要となる理由について説明する。
図7および
図8は、比較例の2値化ニューラルネットワーク回路40のバッチ正規化による効果を説明する図である。
図7は、比較例のスケーリング係数(γ)による正規化を示す図、
図8は、比較例のシフト値(β)による−1〜+1の制限を示す図である。
バッチ正規化とは、2値化によるバラツキの偏りを是正する回路であり、重み総和後、スケーリング係数(γ)による正規化を行った後、シフト値(β)による適切な活性化による2分類を行う。これらのパラメータは事前に学習時に求めておく。具体的には、下記の通りである。
【0027】
図7の白抜矢印および符号cに示すように、バッチ正規化回路41の乗算回路42(
図6参照)は、重み総和後の信号(結果)Yを、スケーリング係数(γ)により、幅「2」(
図7の網掛け部参照)に正規化する。これにより、
図5の幅(
図5の網掛け部参照)と比較して分かるように、単に2値化した2値化ニューラルネットワーク回路30では、不均等な幅により微分が定義できなかった不具合が、スケーリング係数(γ)により幅「2」に正規化することで、不均等な幅が抑制される。
【0028】
その上で、
図8の白抜矢印および符号dに示すように、バッチ正規化回路41の加算器45(
図6参照)は、スケーリング係数(γ)による正規化後の値を、シフト値(β)により−1〜+1の範囲になるよう制限する。すなわち、
図5の幅(
図5の網掛け部参照)と比較して分かるように、
図5の幅(
図5の網掛け部参照)が、+1側により多くシフトしている場合には、シフト値(β)により、スケーリング係数(γ)による正規化後の値を−1〜+1に制限することで、この幅の中心を0とする。
図5の例では、負側の活性化値(
図5の破線囲み部の符号×印参照)が、本来あるべき負側に戻される。これにより、誤差の発生が減少し、認識精度を高めることができる。
このように、比較例の2値化ニューラルネットワーク回路40には、バッチ正規化回路41が必要である。
【0029】
<バイアス項による補正の必要性>
上述したように、学習を進めると重みが均等に分布する。しかし、学習データには偏りが存在するため、完全には均等に分布せず、その調整のためにごくわずかなバイアス項による補正が必要であった。学習データにもよるがバイアス項の精度は、固定小数点精度で30〜40ビットになり、浮動小数点精度を使ったとしても、加算器などの回路が必要であった。
【0030】
すなわち、学習データの偏りが存在するので完全に均等分布は非常に困難であり、それを調整するためにバイアス(もしくはバイアスに相当する操作)が必要となる。このため、バイアスは多ビットである必要がある。また、バイアス値は、学習データや学習期間に応じて、刻々と変化する。
バイアスがない場合、実用に耐えない。例えば、後記する
図10の例では、Classification Errorが90%程度になると想定される。
バイアスがあることの直接的な課題は、高精度による回路が必要とされることである。このような高精度な回路は、面積・消費電力が大きいものとなる。
【0031】
(本発明の原理説明)
本発明の着眼点は、バッチ正規化の操作を導入したNNに対して、これと等価なNNを解析的に求めると、バイアス項が不要なNNを得ることができることを発見したことである。
すなわち、重み積和後に2値化ニューラルネットワーク回路40のバッチ正規化回路41(
図6参照)に入力される信号をYとすると、バッチ正規化回路41から出力される信号(Yと等価となる信号)Y’(中間値)は、次式(1)で示される。
【0032】
【数1】
ただし、
γ:スケーリング係数
β:シフト値
μ
B:ミニバッチの平均値
σ
2B:ミニバッチの分散値
ε:定数(0による除算を避けるための定数)
【0033】
ここで、上記スケーリング係数(γ)、シフト値(β)、ミニバッチの平均値(μ
B)、ミニバッチの分散値(σ
2B)、および定数(ε)は、学習時にバッチ正規化により得られる値である。
【0034】
2値化ニューラルネットワーク回路40の活性化関数を通した出力は、+1または−1(信号の割り当てによっては0または1)である。また、上記式(1)の係数γ/√(σ
2B+ε)
−1により、2値化ニューラルネットワーク回路40の中間信号を変換しても活性化関数を通した値は変化しないので、無視できる。
したがって、上記式(1)は、次式(2)となる。
【0036】
ここで、2値化活性化関数の値は、中間値Y’が正か負かで+1または−1(信号の割り当てによっては0または1)である。したがって、2値化活性化関数の値f’sgn(Y)は、下記式(3)の条件で決まる。
【0038】
よって、これらの解析的な操作から重み積和演算は、下記式(4)のように得られる。
【0040】
さて、単に2値化した2値化ニューラルネットワーク回路20(
図2参照)より、入力値x0=1である。このとき、w0はバイアス値であったから、上記式(4)は、下記式(5)となる。
【0042】
ここで、上記式(5)の第1項の総和演算がi=1で始まることに注意されたい。すなわち、上記式(5)の第1項は、バイアス値が含まれないニューラルネットワークを表している。ちなみに、上記式(4)の第1項の総和演算はi=0で始まっている。
ここで、上記式(5)にw0−μ
B=μ’
Bを導入すると、上記式(5)は、下記式(6)となる。μ’
Bは、バイアスを除く平均値である。
【0044】
上記式(6)は、次のことを意味する。すなわち、上記式(6)は、バイアスを除いたニューラルネットワークとバッチ正規化を用いて学習することで、正しく2値化ニューラルネットワークが実現できることを表している。このとき、上記式(6)を実現する回路構成は、μ’
Bを学習する、すなわち、従来学習していたミニバッチの平均値とバイアス値を減算した値を学習するものといえる。
【0045】
従来のニューラルネットワークでは、中間層、特に後半部になるにつれて学習が収束する。後半部になるにつれて学習が収束することで、重みの分散が一定となる。このため、それを調整するバイアス値が極めて小さくなる問題があった。
上記式(6)は、バイアス値を個別に学習しなくても等価な2値ニューラルネットワークが学習できることを示している。解析的な洞察がなければ成り立たない。
【0046】
[実施形態の構成]
図9は、本発明の実施形態に係るニューラルネットワークの2値化ニューラルネットワーク回路の構成を示す図である。比較例の
図6と同一構成部分には、同一符号を付している。
本実施形態の2値化ニューラルネットワーク回路は、ディープニューラルネットワークへの実装技術を提供する。
2値化ニューラルネットワーク回路100は、
図1のニューラルネットワーク回路2に適用できる。
2値化ニューラルネットワーク回路100(ニューラルネットワーク回路装置)は、バイアスが不要な2値化ニューラルネットワーク回路である。
図9に示すように、2値化ニューラルネットワーク回路100は、入力値x1〜xn(xi)(2値)を入力する入力ノードおよび重みw1〜wn(wi)(2値)を入力する入力部101と、入力値x1〜xnおよび重みw1〜wnを受け取り、XNOR論理を取るXNORゲート回路102(論理回路部)と、各XNOR論理値の総和を取る総和回路103(総和回路部)と、2値化によるバラツキの偏りを正規化範囲を広げ中心をシフトさせる処理で是正するバッチ正規化回路41と、総和を取った信号Yのバッチ正規化した信号Bを活性化関数fsgn(B)で変換する活性化関数回路35と、を備えて構成される。
2値化ニューラルネットワーク回路100は、前記式(6)で示されるバイアス項を不要とする2値化CNNである。
【0047】
2値化ニューラルネットワーク回路100は、ディープニューラルネットワーク1の隠れ層12(
図1参照)に適用される。ここでは、ディープニューラルネットワーク1において、入力値に対し学習済のものを評価していくことを前提としている。
なお、NNでは、重みが、クライアントの認識物体毎に全て異なる。また学習により毎回異なることがある。画像処理では係数は、全て同じであり、この点でNNと画像処理では、HWが大きく異なる。
【0048】
XNORゲート回路102は、排他的論理和を含むどのような論理回路部でもよい。すなわち、入力値x1〜xnと重みw1〜wnとの論理を取る論理回路であれば、XNORゲートに限らずどのようなゲート回路でもよい。例えば、XORゲートにNOTゲートを組み合わせる、AND,ORゲートを組み合わせる、さらにはトランジスタスイッチを用いて作製するなど、論理的に等しいものであればどのようなものでもよい。
【0049】
2値化ニューラルネットワーク回路100は、バイアスが不要な2値化ニューラルネットワーク回路であり、比較例の2値化ニューラルネットワーク回路40(
図6参照)で必要であったバイアスb入力部32が削除されている。
したがって、総和回路103は、各XNOR論理値の総和のみを取る。すなわち、総和回路103は、比較例の2値化ニューラルネットワーク回路40(
図6参照)総和回路35のように、各XNOR論理値とバイアスbとの総和を取ることはない。
【0050】
バッチ正規化回路41は、重み総和を取った信号Yと平均値(μ
B)との差分をとる減算器42と、減算器42出力とミニバッチの分散値(σ
2B)および定数(ε)とを乗算する第1乗算回路43と、第1乗算回路43出力に、スケーリング(γ)値(多ビット)による正規化を行う第2乗算回路44と、スケーリング係数(γ)による正規化後、シフト値(β)(多ビット)によりシフトして2分類を行う加算器45と、からなる。
【0051】
活性化回路35は、総和を取った信号Yに対して符号ビットのみを出力する活性化関数回路を模擬する回路となっている。符号ビットは、総和を取った多ビット信号Yを活性化するかしないかで示す2値信号である。
【0052】
このように、2値化ニューラルネットワーク回路100は、総和回路103が、式(6)で示されるように各XNOR論理値の総和のみを取る。このため、2値化ニューラルネットワーク回路100は、バイアスが不要なニューラルネットワーク回路となっている。
【0053】
以下、上述のように構成された2値化ニューラルネットワーク回路100の動作について説明する。
2値化ニューラルネットワーク回路100は、
図1に示すディープニューラルネットワーク1のニューラルネットワーク回路2に用いられる。この場合、2値化ニューラルネットワーク回路100の入力ノードx1〜xnは、
図1に示すディープニューラルネットワーク1のhidden layer1の入力ノードである。入力部101には、隠れ層12のhidden layer1の入力ノードの入力値x1〜xn(2値)および重みw1〜wn(2値)が入力される。
乗算の代わりとなるXNORゲート回路102では、入力値x1〜xnおよび重みw1〜wnを受け取り、XNOR論理により2値(−1/+1)の乗算を行う。XNORゲート回路102を通した後、総和回路103は、各XNOR論理値の総和を取る。そして、バッチ正規化回路41は、総和を取った信号Yをバッチ正規化する。活性化関数回路35は、総和を取った信号Yのバッチ正規化した信号Bを活性化関数fsgn(B)で変換する。
【0054】
2値化ニューラルネットワーク回路100は、比較例の多ビット構成の乗算回路21(
図2参照)がXNOR論理を実現するXNORゲート回路102に置き換えられている。このため、乗算回路21を構成する際に必要であった面積を削減することができる。また、入力値x1〜xnおよび重みw1〜wnは、いずれも2値(−1/+1)であるため、多ビット(多値)である場合と比較してメモリ容量を大幅に削減でき、メモリ帯域を向上させることができる。
【0055】
[学習の実施例]
本実施形態の効果を確認するため、VGG11(隠れ層が11層) ベンチマークNNを実装し、学習が成功するか確認した。VGG11は、良く使われているベンチマークで再現性があるものである。
図10は、比較例および本実施形態の2値化VGG11モデルを用いて画像認識タスクCIFAR10を学習させた結果の認識精度を説明する図である。
図10(a)は「バッチ正規化なし」(バイアス項あり)で構成したニューラルネットワーク回路30(
図4参照)の認識精度、
図10(b)は「バッチ正規化あり」(バイアス項あり)で構成した2値化ニューラルネットワーク回路40(
図6参照)の認識精度、
図10(c)は「バッチ正規化あり」(バイアス項なし)で構成した本実施形態の2値化ニューラルネットワーク回路100(
図9参照)の認識精度をそれぞれ示す。
図10(c)は、本実施形態をVGG11 ベンチマークNNで実装し確認したものである。
図10の横軸は、利用した学習データに対して更新を終えたサイクルであるエポック(epoch)数(学習回数)、縦軸は誤認識率(Classification error)である。また、
図10は、ディープニューラルネットワーク用のフレームワークソフトウェアChainer(登録商標)のfloat32 精度CNNを用いている。
【0056】
<バッチ正規化の効果>
図10(a)の「バッチ正規化なし」に示すように、比較例の単に2値化した2値化ニューラルネットワーク回路30(
図4参照)では、誤認識率が大きく(エポック数200以上;誤認識率約70%)認識精度は悪い。また、学習を続けても認識精度の改善は見られない(学習が成功していない)。
これに対して、比較例の
図10(b)の「バッチ正規化あり」(バイアス項あり)で構成した2値化ニューラルネットワーク回路40(
図6参照)と本実施形態の
図10(c)の「バッチ正規化あり」(バイアス項なし)で構成した2値化ニューラルネットワーク回路100(
図9参照)は、どちらも学習を続けるに従って誤認識率が落ちており、エポック数400以上で誤認識率は小さくなり(約20%)、学習が成功していることを示している。
このように、バッチ正規化回路41が無ければ学習が成功していない。2値化ニューラルネットワーク回路30では、バッチ正規化回路41が必要であることがあらためて確認された。
【0057】
<バイアス項を不要とする2値化CNNバッチ正規化の効果>
比較例の
図10(b)の「バッチ正規化あり」(バイアス項あり)と本実施形態の
図10(c)の「バッチ正規化あり」(バイアス項なし)とを比較して分かるように、バッチ正規化回路41がある場合には、バイアス項の有無については、認識精度にほとんど影響を与えないことが確認された。
すなわち、
図10(c)の「バッチ正規化あり」(バイアス項なし)で構成した本実施形態のニューラルネットワーク回路100(
図9参照)は、比較例の
図10(b)の「バッチ正規化あり」(バイアス項あり)で構成したニューラルネットワーク回路40と比較して、バイアス項をなくしても認識精度を落とさないことが確認された。
【0058】
図11は、本実施形態の2値化ニューラルネットワーク回路100をFPGA(Digilent 社 NetFPGA-1G-CML)上に実装し、既存の多ビット実装法との比較を行った結果を表にして示す図である。
図11の表は、表下欄外に表記した[Zhao et al.]〜[FINN]の学会発表者(論文発表年)のニューラルネットワークと本実施形態のニューラルネットワークをFPGA (Digilent社 ZedBoard)上に実現した場合に、各項目を対比して示したものである。
図11の表の用語は下記の通りである。
Implementationは、実装した手法・研究グループ名である。
(Year)は、関連文献が発表された年である。
FPGA Boardは、FPGA(field-programmable gate array)搭載ボードの名称である。
(FPGA)は、FPGA搭載ボードに搭載されているFPGAの型番であり、比較条件を揃えるため同一のFPGAを使用する。
Clock [MHz] は、FPGAの動作周波数である。動作周波数が大きいほど高速に動作する。
#LUTsは、FPGAのLUT(Look-Up Table)消費量であり、面積を意味する。
#18Kb BRAMsは、FPGAの内部メモリブロックの消費量であり、面積を意味する。
#DSP Blocksは、FPGAの内部積和演算ブロックの消費量であり、面積を意味する。
Test Errorは、テスト画像のエラー率であり、認識精度を意味する。
Time [msec] は、認識時間(単位はミリ秒)である。
(FPS)は、Frames Per Secondの略で単位時間当たりに認識できる画像数である。(FPS)の数値が大きいほど高速である。
Power [W]は、消費電力(単位はワット)である。
FPS/Wattは、消費電力効率である。
FPS/LUTは、面積効率である。
FPS/BRAMは、メモリ量効率である。
【0059】
図11の表は、「Platform」(プラットフォーム)、「FPGA Board」(使用FPGAボード)、「Clock(MHz)」(同期化のための内部クロック)、「LUT, BRAM,DSP Block」(メモリ・DSP数)、「Test Error」(誤認識率)、「Time(msec)(FPS)」(処理時間(処理速度))、「Power(W)」(消費電力)、「FPS/Watt, FPS/ LUT, FPS/BRAM」(データ転送待ち時間/外部にメモリを付けた場合の転送速度)、の各項目を対比して示した。この表において、特に注目すべき事項は下記の通りである。
【0060】
<消費電力>
本実施形態の2値化ニューラルネットワーク回路100は、表の従来例と比較して、電力のバランスが取れていることが挙げられる。従来例では、「Power(W)」に示すように、4.7W,2.5Wと消費電力が大きい。消費電力が大きいので、これを回避する制御方法が複雑である。「Power(W)」に示すように、本実施形態では、従来例[Zhao et al.]と比較して消費電力を2.3Wと約1/2に低減することができた。
【0061】
<チップ面積>
本実施形態の2値化ニューラルネットワーク回路100は、バイアスが不要であること、乗算回路が2値論理ゲートであること、から、表の「LUTs, BRAM,DSP Block」に示すように、チップ面積が46900から14509と約1/3に減り、外付けメモリが不要となる、メモリコントローラが単純になることなどの効果がある。チップ面積は価格に比例するので、価格も2桁程度安くなることが期待できる。
【0062】
<性能等価>
本実施形態の2値化ニューラルネットワーク回路100は、表の「FPS/Watt, FPS/ LUT, FPS/BRAM」に示すように、性能パワー効率は、面積を見ずにパワー効率だけを見たものでも35.7と182.6と約5倍となっている。さらに、データ転送速度も168と120と約3倍となっている。
【0063】
[実装例]
図12は、本発明の実施形態に係る2値化ニューラルネットワーク回路の実装例を説明する図である。
<STEP1>
まず、与えられたデータセット(今回はImageNet、画像認識タスク用にデータ)を既存のディープニューラルネットワーク用のフレームワークソフトウェアであるChainer (登録商標)を用いてGPU(Graphics Processing Unit)を有するコンピュータ201上で学習を行った。学習は、GPU上で実行する。このコンピュータ201は、ARMプロセッサなどのCPU(Central Processing Unit)と、メモリと、ハードディスクなどの記憶手段(記憶部)と、ネットワークインタフェースを含むI/Oポートとを有する。このコンピュータは、CPU201が、メモリ上に読み込んだプログラム(2値化したニューラルネットワークの実行プログラム)を実行することにより、後記する各処理部により構成される制御部(制御手段)を動作させる。
【0064】
<STEP2>
次に、自動生成ツールを用いて、本実施形態の2値化ニューラルネットワーク回路100と等価なC++コードを自動生成し、C++コード202を得た。
【0065】
<STEP3>
次に、FPGA ベンダの高位合成ツール(Xilinx 社SDSoC) (登録商標)を用いて、FPGA(field-programmable gate array)合成用にHDL(hardware description language)203を生成した。例えば、高位合成ツール(Xilinx 社SDSoC)では、実現したい論理回路をハードウェア記述言語(Verilog HDL/VHDL)を用いて記述し、提供されたCADツールでビットストリームに合成する。そして、FPGAにこのビットストリームを送信するとFPGAに回路が実現する。
【0066】
<STEP4>
次に、従来のFPGA合成ツールVivado (登録商標)を用いて、FPGA上に実現(FPGA合成204)して画像認識タスクの検証を行った。
【0067】
<STEP5>
検証後、基板205を完成させた。基板205には、2値化ニューラルネットワーク回路100がハードウェア化されて実装されている。
【0068】
以上説明したように、本実施形態に係る2値化ニューラルネットワーク回路100(
図9参照)は、入力値x1〜xn(xi)(2値)を入力する入力ノードおよび重みw1〜wn(wi)(2値)を入力する入力部101と、入力値x1〜xnおよび重みw1〜wnを受け取り、XNOR論理を取るXNORゲート回路102と、各XNOR論理値の総和を取る総和回路103と、2値化によるバラツキの偏りを正規化範囲を広げ中心をシフトさせる処理で是正するバッチ正規化回路41と、総和を取った信号Yのバッチ正規化した信号Bを活性化関数fsgn(B)で変換する活性化関数回路35と、を備える。総和を取った信号Yは、式(6)で示される。
【0069】
また、ニューラルネットワーク処理方法では、入力値x1〜xn(xi)および重みw1〜wn(wi)を入力するステップと、入力値x1〜xnおよび重みw1〜wnを受け取り、XNOR論理を取るステップと、式(6)で示されるように、各XNOR論理値の総和のみを取るステップと、バッチ正規化を行うステップと、総和を取った信号Yのバッチ正規化した信号Bを活性化関数fsgn(B)で変換するステップと、を実行する。
【0070】
学習時にバイアス項を不要とする2値化CNNで学習を行い、回路実現時もバイアス項を不要とする。
【0071】
これにより、バイアス項を保持するメモリ・加算器回路が不要であり、CNNを2値の入力・重みとバッチ正規化回路41で実現できる。このため、認識精度をほとんど落とすことなく面積・消費電力・速度において優れるCNNを実現できる。
例えば、
図11の表に示すように、本実施形態に係る2値化ニューラルネットワーク回路100は、消費電力(Power [W])を半分に削減でき、面積を約30分の1(FPS/Watt,FPS/LUT,FPS/BRAMの相乗効果)に削減できた。
【0072】
本実施形態では、2値化ニューラルネットワーク回路40(
図6参照)で必須であったバイアス自体を不要とすることから面積が削減でき、メモリ量も削減できる。また、
図10(b)(c)を比較してわかるように、本実施形態の2値化ニューラルネットワーク回路100は、認識精度について差がない。
【0073】
図13は、各FPGA実装のハードウェアの量を比較して示す図である。ザイリンクス社のFPGAを用いて固定小数点精度,2値化,本実施形態がそれぞれ要求するハードウェアの量を計算した。具体的には、TensorFlowチュートリアルCNNを実装した。また、Digilent社のNetFPGA-1G-CMLボード上に実装した。
各FPGA実装の比較は、本実施形態(2値化(バッチ正規化+バイアスなし))、比較例の固定小数点(16ビット)、および比較例の2値化(バイアスのみ)である。FPGA実装のハードウェアの量は、FF(flip-flop)数、LUT数、18Kb BRAM 数、およびDSP(digital signal processor) 48E 数で示される。
【0074】
図13に示すように、本実施形態(2値化(バッチ正規化+バイアスなし))および2値化(バイアスのみ)は、固定小数点精度に対して、FF数、LUT数、18Kb BRAM 数、およびDSP48E 数の、いずれのハードウェア量も減少していることが確かめられた。また、本実施形態(2値化(バッチ正規化+バイアスなし))は、2値化(バイアスのみ)に対してもハードウェア量(面積)が1〜2%程度の増加で済んでいることが分かる。
【0075】
さらに、本実施形態の効果について述べる。
(1)バッチ正規化なしのCNNとの比較
本実施形態は、バッチ正規化なしのCNNと比較して、バイアス項回路が不要になる、かつ、学習時にバイアスが不要になるので学習が容易になる利点がある。ただし、バッチ正規化項用の回路が必要である。また、
図13の本実施形態(2値化(バッチ正規化+バイアスなし))と比較例の2値化(バイアスのみ)との比較から分かるように、ハードウェア量(面積)、電力が数%増加する。
【0076】
(2)学習時の比較
前記
図10(b)(c)に示すように、本実施形態の2値化ニューラルネットワーク回路100の認識の精度(
図10(c)参照)と、比較例の「バッチ正規化あり」(バイアス項あり)で構成した2値化ニューラルネットワーク回路40の認識精度(
図10(b)参照)、および学習時間に差はなく、ほぼ同じとみてよいことが分かる。なお、回路実現時の差異は、
図13で示されている。
【0077】
(3)設計容易性
バイアス値がある場合、その値が極めて小さい値(固定小数点30〜40ビット)であるので回路設計に留意すべきである。
【0078】
本実施形態によれば、既存のバイアスを有する2値化ニューラルネットワーク回路と比較して、消費電力を半分に削減でき、面積を約30分の1に削減(
図11参照)しつつ、
図10に示したように認識精度はほぼ等価なCNNを構成できることが判明した。ディープラーニングを用いたADAS(Advanced Driver Assistance System:先進運転支援システム)カメラ画像認識用のエッジ組み込み装置ハードウェア方式として実用化が期待される。特にADASでは、車載する上で高信頼性と低発熱が要求される。本実施形態に係る2値化ニューラルネットワーク回路100は、
図11の表に示すように、消費電力(Power [W])が格段に低減していることに加え、外付けメモリが不要であるので、メモリを冷却する冷却ファンや冷却フィンも不要である。ADASカメラに搭載して好適である。
【0079】
[変形例]
図14は、変形例1のディープニューラルネットワークの2値化ニューラルネットワーク回路の構成を示す図である。
図9と同一構成部分には同一符号を付して重複箇所の説明を省略する。
変形例1の2値化ニューラルネットワーク回路100Aは、
図1のニューラルネットワーク回路2に適用できる。
2値化ニューラルネットワーク回路100A(ニューラルネットワーク回路装置)は、バイアスが不要な2値化ニューラルネットワーク回路である。
図14に示すように、2値化ニューラルネットワーク回路100Aは、
図9の2値化ニューラルネットワーク回路100にさらに、バイアス値を記憶するバイアスメモリ110(記憶部,バイアス値入力部)を備えて構成される。
【0080】
2値化ニューラルネットワーク回路100Aは、バイアスメモリ110に記憶されたバイアス値を読み出して総和回路103に出力する。この場合、2値化ニューラルネットワーク回路100Aは、バイアスを用いる2値化ニューラルネットワーク回路40(
図6参照)と同様に、総和回路103にバイアス値が入力される構成となる。総和回路35は、XNORゲート回路34の各XNOR論理値とバイアス値との総和を取ることになり、2値化ニューラルネットワーク回路100Aは、バイアスを用いる2値化ニューラルネットワーク回路40(
図6参照)と等価なニューラルネットワーク処理方法を実現できる。
一方、2値化ニューラルネットワーク回路100Aは、バイアスメモリ110に記憶されたバイアス値の読み出しに代えて、総和回路103に0を書き込むことで、式(6)の回路を実行する2値化ニューラルネットワーク回路100Aのニューラルネットワーク処理方法を実現できる。この場合、2値化ニューラルネットワーク回路100Aは、バイアスを不要とする2値化CNNである。
【0081】
変形例1によれば、2値化ニューラルネットワーク回路100Aを、バイアスを用いる既存の2値化ニューラルネットワーク回路40(
図6参照)に置き換え(流用して)使用することができ、汎用的に適用可能である。特に、バイアスを用いる既存の2値化ニューラルネットワーク回路40そのもの、またバイアスを用いる既存の2値化ニューラルネットワーク回路40に接続されるメモリや読出し/書込み制御部の設計変更や検証を行うことなく適用できる。また、既存の2値化ニューラルネットワーク回路40で蓄積した資源を活用することができる。
【0082】
図15は、変形例2のディープニューラルネットワークの2値化ニューラルネットワーク回路の構成を示す図である。
図9と同一構成部分には同一符号を付して重複箇所の説明を省略する。
変形例2の2値化ニューラルネットワーク回路100Bは、
図1のニューラルネットワーク回路2に適用できる。
2値化ニューラルネットワーク回路100B(ニューラルネットワーク回路装置)は、バイアスが不要な2値化ニューラルネットワーク回路である。
図15に示すように、2値化ニューラルネットワーク回路100Bは、
図9の2値化ニューラルネットワーク回路100にさらに、バイアス値Bを入力するバイアス値入力部120と、バイアス値Bの総和回路103への入力をオンオフするスイッチ121と、を備えて構成される。
【0083】
2値化ニューラルネットワーク回路100Bは、バイアスメモリ110に記憶されたバイアス値を読み出して総和回路103に出力する。この場合、2値化ニューラルネットワーク回路100Bは、バイアスを用いる2値化ニューラルネットワーク回路40(
図6参照)と同様に、総和回路103にバイアス値Bが入力される構成となる。総和回路35は、XNORゲート回路34の各XNOR論理値とバイアス値Bとの総和を取ることになり、2値化ニューラルネットワーク回路100Bは、バイアスを用いる2値化ニューラルネットワーク回路40(
図6参照)と等価なニューラルネットワーク処理方法を実現できる。
一方、2値化ニューラルネットワーク回路100Bは、スイッチ121をオフにすることで、バイアス値Bの総和回路103への入力をオフし、式(6)の回路を実行する2値化ニューラルネットワーク回路100Aのニューラルネットワーク処理方法を実現できる。
【0084】
変形例2によれば、2値化ニューラルネットワーク回路100Bを、バイアスを用いる既存の2値化ニューラルネットワーク回路40(
図6参照)に置き換え(流用して)使用することができ、変形例1の場合と同様の効果を得ることができる。変形例2は、変形例1の2値化ニューラルネットワーク回路100Aに比べ構成がより簡素であり、さらに汎用的に適用できる。
【0085】
本発明は上記の実施形態例に限定されるものではなく、特許請求の範囲に記載した本発明の要旨を逸脱しない限りにおいて、他の変形例、応用例を含む。
例えば、乗算回路としての論理ゲートに代えて、LUT(Look-Up Table)を用いてもよい。このLUTは、XNOR論理を行うXNORゲート回路102(
図9参照)に代えて、FPGA の基本構成要素であるルックアップテーブルを用いる。LUTは、2入力(x1,w1)に対する2値(−1/+1)のXNOR論理結果Yを格納する。LUTを用いることで、バッチ正規化回路の面積とパラメータを格納するメモリ面積・メモリ帯域を無くすことができ、かつ、性能的には等価な回路構成を実現することができる。LUTは、FPGAの基本構成要素であり、FPGA合成の際の親和性が高く、FPGAによる実装が容易である。
【0086】
また、上記した実施形態例は本発明をわかりやすく説明するために詳細に説明したものであり、必ずしも説明した全ての構成を備えるものに限定されるものではない。また、ある実施形態例の構成の一部を他の実施形態例の構成に置き換えることが可能であり、また、ある実施形態例の構成に他の実施形態例の構成を加えることも可能である。また、実施形態例は、その他の様々な形態で実施されることが可能であり、発明の要旨を逸脱しない範囲で、種々の省略、置き換え、変更を行うことができる。これら実施形態やその変形例は、発明の範囲や要旨に含まれるとともに、特許請求の範囲に記載された発明とその均等の範囲に含まれる。
【0087】
また、上記実施形態において説明した各処理のうち、自動的に行われるものとして説明した処理の全部または一部を手動的に行うこともでき、あるいは、手動的に行われるものとして説明した処理の全部または一部を公知の方法で自動的に行うこともできる。この他、上述文書中や図面中に示した処理手順、制御手順、具体的名称、各種のデータやパラメータを含む情報については、特記する場合を除いて任意に変更することができる。
また、図示した各装置の各構成要素は機能概念的なものであり、必ずしも物理的に図示の如く構成されていることを要しない。すなわち、各装置の分散・統合の具体的形態は図示のものに限られず、その全部または一部を、各種の負荷や使用状況などに応じて、任意の単位で機能的または物理的に分散・統合して構成することができる。
【0088】
また、上記の各構成、機能、処理部、処理手段等は、それらの一部または全部を、例えば集積回路で設計する等によりハードウェアで実現してもよい。また、上記の各構成、機能等は、プロセッサがそれぞれの機能を実現するプログラムを解釈し、実行するためのソフトウェアで実現してもよい。各機能を実現するプログラム、テーブル、ファイル等の情報は、メモリや、ハードディスク、SSD(Solid State Drive)等の記録装置、または、IC(Integrated Circuit)カード、SD(Secure Digital)カード、光ディスク等の記録媒体に保持することができる。
また、上記実施の形態では、装置は、ニューラルネットワーク回路装置という名称を用いたが、これは説明の便宜上であり、名称はディープニューラルネットワーク回路、ニューラルネットワーク装置、パーセプトロン等であってもよい。また、方法およびプログラムは、ニューラルネットワーク処理方法という名称を用いたが、ニューラルネットワーク演算方法、ニューラルネットプログラム等であってもよい。