(57)【要約】【課題】バイアスが不要なニューラルネットワーク回路装置、ニューラルネットワーク、ニューラルネットワーク処理方法およびニューラルネットワークの実行プログラムを提供する。【解決手段】２値化ニューラルネットワーク回路１００は、入力値ｘ１〜ｘｎ（ｘｉ）（２値）を入力する入力ノードおよび重みｗ１〜ｗｎ（ｗｉ）（２値）を入力する入力部１０１と、入力値ｘ１〜ｘｎおよび重みｗ１〜ｗｎを受け取り、ＸＮＯＲ論理を取るＸＮＯＲゲート回路１０２と、各ＸＮＯＲ論理値の総和を取る総和回路１０３と、２値化によるバラツキの偏りを正規化範囲を広げ中心をシフトさせる処理で是正するバッチ正規化回路４１と、総和を取った信号Ｙのバッチ正規化した信号Ｂを活性化関数ｆsgn(B)で変換する活性化関数回路３５と、を備える。【選択図】図９
2019057072.tif 000002
【特許請求の範囲】
【請求項１】
入力層、１以上の中間層、および、出力層を少なくとも含むニューラルネットワーク回路装置であって、
前記中間層の中で、２値の入力値ｘｉおよび重みｗｉを受け取り、論理演算を行う論理回路部と、
前記論理回路部の出力の総和を取る総和回路部と、
２値化によるバラツキの偏りを正規化範囲を広げ中心をシフトさせる処理で是正するバッチ正規化回路部と、
総和を取った信号Ｙのバッチ正規化した信号Ｂを活性化関数ｆsgn(B)で変換する活性化関数回路部と、を備え、
前記総和を取った信号Ｙは、下記式で示される
【数６】
2019057072.tif 000010
ただし、
γ：スケーリング係数
β：シフト値
μ’Ｂ：バイアスを除く平均値。入力値ｘ０のときのバイアス値ｗ０とし、ミニバッチの平均値μＢとするとき、ｗ０−μＢ
σ２Ｂ：ミニバッチの分散値
ε：定数
ことを特徴とする記載のニューラルネットワーク回路装置。
【請求項２】
前記総和を取った信号Ｙが、下記式（４）で示される場合、
【数４】
2019057072.tif 000011
ただし、
μＢ：ミニバッチの平均値
入力値ｘ０＝１、このときのバイアス値ｗ０をもとに、前記式（４）を、下記式（５）に変形し、
【数５】
2019057072.tif 000012
さらに、前記バイアス値ｗ０から前記ミニバッチの平均値μＢを減じた値を前記μ’Ｂに置き換えて、下記式（６）とする
【数６】
2019057072.tif 000013
ことを特徴とする請求項１に記載のニューラルネットワーク回路装置。
【請求項３】
バイアス値を入力するバイアス値入力部を備え、
前記総和回路部は、
前記論理回路部の出力と前記バイアス値との総和を取る
ことを特徴とする請求項１に記載のニューラルネットワーク回路装置。
【請求項４】
前記バイアス値を記憶する記憶部を備え、
前記バイアス値入力部は、
前記記憶部に記憶された前記バイアス値を読み出して前記総和回路部に出力するとともに、前記バイアス値の非使用時には前記総和回路部に０を書き込んで、下記式（６）の回路を実行する
【数６】
2019057072.tif 000014
ことを特徴とする請求項３に記載のニューラルネットワーク回路装置。
【請求項５】
前記バイアス値の前記総和回路部への入力をオンオフするスイッチを備え、
前記バイアス値の非使用時には前記スイッチをオフして、下記式（６）の回路を実行する
【数６】
2019057072.tif 000015
ことを特徴とする請求項３に記載のニューラルネットワーク回路装置。
【請求項６】
前記論理回路部は、否定排他的論理和または排他的論理和を含む
ことを特徴とする請求項１に記載のニューラルネットワーク回路装置。
【請求項７】
請求項１乃至６のいずれか１項に記載のニューラルネットワーク回路装置を備えるニューラルネットワーク。
【請求項８】
入力層、１以上の中間層、および、出力層を少なくとも含むニューラルネットワーク処理方法であって、
前記中間層の中で、２値の入力値ｘｉおよび重みｗｉを受け取り、論理演算を行うステップと、
論理回路部の出力の総和を取るステップと、
２値化によるバラツキの偏りを正規化範囲を広げ中心をシフトさせる処理で是正するステップと、
総和を取った信号Ｙのバッチ正規化した信号Ｂを活性化関数ｆsgn(B)で変換するステップと、を有し、
前記総和を取った信号Ｙは、下記式で示される
【数６】
2019057072.tif 000016
ただし、
γ：スケーリング係数
β：シフト値
μ’Ｂ：バイアスを除く平均値。入力値ｘ０のときのバイアス値ｗ０とし、ミニバッチの平均値μＢとするとき、ｗ０−μＢ
σ２Ｂ：ミニバッチの分散値
ε：定数
ことを特徴とする記載のニューラルネットワーク処理方法。
【請求項９】
入力層、１以上の中間層、および、出力層を少なくとも含むニューラルネットワーク回路装置としてのコンピュータを、
前記中間層の中で、２値の入力値ｘｉおよび重みｗｉを受け取り、論理演算を行う論理回路手段、
論理回路部の出力の総和を取る総和回路手段、
２値化によるバラツキの偏りを正規化範囲を広げ中心をシフトさせる処理で是正するバッチ正規化回路手段、
総和を取った信号Ｙのバッチ正規化した信号Ｂを活性化関数ｆsgn(B)で変換する活性化関数回路手段、
ただし、前記総和を取った信号Ｙは、下記式で示される
【数６】
2019057072.tif 000017
γ：スケーリング係数
β：シフト値
μ’Ｂ：バイアスを除く平均値。入力値ｘ０のときのバイアス値ｗ０とし、ミニバッチの平均値μＢとするとき、ｗ０−μＢ
σ２Ｂ：ミニバッチの分散値
ε：定数
として機能させるためのニューラルネットワークの実行プログラム。
【発明の詳細な説明】
【技術分野】
【０００１】
本発明は、ニューラルネットワーク回路装置、ニューラルネットワーク、ニューラルネットワーク処理方法およびニューラルネットワークの実行プログラムに関する。
【背景技術】
【０００２】
古典的な順伝搬型ニューラルネットワーク（ＦＦＮＮ：Feedforward Neural Network）、ＲＢＦ（Radial Basis Function）ネットワーク、正規化したＲＢＦネットワーク、自己組織化マップなどがある。ＲＢＦＮは、誤差逆伝搬法に用いる活性化関数に放射基底関数を用いる。しかし、中間層が多く取れず高精度認識判定が難しかったり、ＨＷ規模が大きく処理時間がかかる、などの問題があり手書き文字認識など応用分野が限定されていた。
近年、ＡＤＡＳ（advanced driver assistance system）用の画像認識や自動翻訳などで注目を集める新方式として畳み込みニューラルネットワーク（ＣＮＮ：Convolutional Neural Network）（層間が全結合でないＮＮ）や再帰型ニューラルネットワーク（双方向伝搬）が登場している。ＣＮＮは、ディープニューラルネットワーク（ＤＮＮ：Deep Neural Network）に畳込み演算を付加したものである。
【０００３】
特許文献１には、誤り訂正符号の検査行列に基づいて、階層型ニューラルネットワークにおける疎結合のノード間で学習された重みの値と入力信号とを用いて、問題を解く処理部を備える処理装置が記載されている。
【０００４】
既存のＣＮＮは、短精度（多ビット）による積和演算回路で構成されており、多数の乗算回路が必要である。このため、面積・消費電力が多大になる欠点があった。そこで、２値化した精度、すなわち＋１と−１（または０と１）のみ用いてＣＮＮを構成する回路が提案されている（例えば、非特許文献１〜４参照）。
【０００５】
非特許文献１〜４の技術では、精度を２値に落とすことでＣＮＮの認識精度も落としてしまう。これを避けて２値化ＣＮＮの精度を維持するためには、バッチ正規化回路が必要である。
【先行技術文献】
【特許文献】
【０００６】
【特許文献１】特開２０１６−１７３８４３号公報
【非特許文献】
【０００７】
【非特許文献１】M. Courbariaux, I. Hubara, D. Soudry, R.E.Yaniv, Y. Bengio, “Binarized neural networks: Training deep neural networks with weights and activations constrained to +1 or -1," Computer Research Repository (CoRR)、「２値化ＮＮのアルゴリズム」、[online]、２０１６年３月、［平成２８年１０月５日検索］、<URL:http:// arxiv.org/pdf/1602.02830v3.pdf >
【非特許文献２】Mohammad Rastegari, Vicente Ordonez, Joseph Redmon, Ali Farhadi, “XNOR-Net: ImageNet Classification Using Binary Convolutional Neural Networks,”Computer Vision and Pattern recognition、「２値化ＮＮのアルゴリズム」、[online]、２０１６年３月、［平成２８年１０月５日検索］、<URL: https://arxiv.org/pdf/1603.05279v4 >
【非特許文献３】Hiroki Nakahara, Haruyoshi Yonekawa, Tsutomu Sasao, Hisashi Iwamoto and Masato Motomura, ” A Memory-Based Realization of a Binarized Deep Convolutional Neural Network,” Proc. of the 2016 International Conference on Field-Programmable Technology (FPT), Xi'an, China, Dec 2016 (To Appear).
【非特許文献４】Eriko Nurvitadhi, David Sheffield, Jaewoong Sim, Asit Mishra, Ganesh Venkatesh, Debbie Marr,”Accelerating Binarized Neural Networks: Comparison of FPGA, CPU, GPU, and ASIC,” Proc. of the 2016 International Conference on Field-Programmable Technology (FPT), Xi'an, China, Dec 2016 (To Appear).
【発明の概要】
【発明が解決しようとする課題】
【０００８】
ＣＮＮでは、学習を進めると重みが均等に分布する。しかし、学習データには偏りが存在するため、完全には均等に分布せず、その調整のためにバイアスによる補正が必要であった。学習データにもよるが、バイアスの精度は固定小数点精度で３０〜４０ビットになり、浮動小数点精度を使ったとしても、加算器などの回路が必要であった。バイアスがあることで、面積・消費電力が増大するという課題があった。
【０００９】
本発明は、このような事情に鑑みてなされたものであり、バイアスが不要なニューラルネットワーク回路装置、ニューラルネットワーク、ニューラルネットワーク処理方法およびニューラルネットワークの実行プログラムを提供することを課題とする。
【課題を解決するための手段】
【００１０】
前記した課題を解決するため、本発明に係るニューラルネットワーク回路装置は、入力層、１以上の中間層、および、出力層を少なくとも含むニューラルネットワーク回路装置であって、前記中間層の中で、２値の入力値ｘｉおよび重みｗｉを受け取り、論理演算を行う論理回路部と、前記論理回路部の出力の総和を取る総和回路部と、２値化によるバラツキの偏りを正規化範囲を広げ中心をシフトさせる処理で是正するバッチ正規化回路部と、総和を取った信号Ｙのバッチ正規化した信号Ｂを活性化関数ｆsgn(B)で変換する活性化関数回路部と、を備え、前記総和を取った信号Ｙは、下記式で示される
【数６】
2019057072.tif 000003
ただし、
γ：スケーリング係数
β：シフト値
μ’Ｂ：バイアスを除く平均値。入力値ｘ０のときのバイアス値ｗ０とし、ミニバッチの平均値μＢとするとき、ｗ０−μＢ
σ２Ｂ：ミニバッチの分散値
ε：定数
ことを特徴とする。
その他の手段については、発明を実施するための形態のなかで説明する。
【発明の効果】
【００１１】
本発明によれば、バイアスが不要なニューラルネットワーク回路装置、ニューラルネットワーク、ニューラルネットワーク処理方法およびニューラルネットワークの実行プログラムを提供することができる。
【図面の簡単な説明】
【００１２】
【図１】ディープニューラルネットワーク（ＤＮＮ）の構造の一例を説明する図である。
【図２】比較例のニューラルネットワークのニューラルネットワーク回路の構成の一例を示す図である。
【図３】図２に示すニューラルネットワーク回路における活性化関数ｆact(Y)を示す図である。
【図４】図２に示すニューラルネットワーク回路の乗算回路をＸＮＯＲゲート回路に置き換えた２値化ニューラルネットワーク回路の構成の一例を示す図である。
【図５】図４に示す２値化ニューラルネットワーク回路における活性化関数ｆsgn(B)を示す図である。
【図６】比較例のバッチ正規化回路を備える２値化ニューラルネットワーク回路の構成の一例を示す図である。
【図７】ニューラルネットワークの２値化ニューラルネットワーク回路のスケーリング（γ）による正規化を示す図である。
【図８】ニューラルネットワークの２値化ニューラルネットワーク回路のシフト（β）による−１〜＋１の制限を示す図である。
【図９】本発明の実施形態に係るディープニューラルネットワークの２値化ニューラルネットワーク回路の構成を示す図である。
【図１０】本発明の実施形態に係るディープニューラルネットワークの「バッチ正規化なし」、「バッチ正規化あり」（バイアス項あり）および「バッチ正規化あり」（バイアス項なし）の認識精度を説明する図である。
【図１１】本発明の実施形態に係るディープニューラルネットワークの２値化ニューラルネットワーク回路と既存の２値化ニューラルネットワーク回路との比較を行った結果を表にして示す図である。
【図１２】本発明の実施形態に係るディープニューラルネットワークの２値化ニューラルネットワーク回路の実装例を説明する図である。
【図１３】各ＦＰＧＡ実装のハードウェアの量を比較して示す図である。
【図１４】変形例１のディープニューラルネットワークの２値化ニューラルネットワーク回路の構成を示す図である。
【図１５】変形例２のディープニューラルネットワークの２値化ニューラルネットワーク回路の構成を示す図である。
【発明を実施するための形態】
【００１３】
以下、図面を参照して本発明を実施するための形態（以下、「本実施形態」という）におけるディープニューラルネットワークについて説明する。
（背景説明）
図１は、ディープニューラルネットワーク（ＤＮＮ）の構造の一例を説明する図である。
図１に示すように、ディープニューラルネットワーク（ＤＮＮ）１は、入力層（input layer）１１、任意の数の中間層である隠れ層（hidden layer）１２、出力層（output layer）１３を有して構成される。
入力層（input layer）１１は、複数個（ここでは８）の入力ノード（ニューロン）を有する。隠れ層１２は、複数（ここでは３層（hidden layer1，hidden layer2，hidden layer3））である。実際には、隠れ層１２の層数ｎは、例えば２０〜１００に達する。出力層１３は、識別対象の数（ここでは４）の出力ノード（ニューロン）を有する。なお、層数およびノード数（ニューロン数）は、一例である。
ディープニューラルネットワーク１は、入力層１１と隠れ層１２のノード間が全て結合し、隠れ層１２と出力層１３のノード間が全て結合している。
【００１４】
入力層１１、隠れ層１２および出力層１３には、任意の数のノード（図１の○印参照）が存在する。このノードは、入力を受け取り、値を出力する関数である。入力層１１には、入力ノードとは別に独立した値を入れるバイアス（bias）ノードがある。構成は、複数のノードを持つ層を重ねることで構築される。伝播は、受け取った入力に対して重み（weight）をかけ、受け取った入力を次層に活性化関数（activation function）で変換して出力する。活性化関数は、sigmoid関数やtanh関数などの非線形関数、ReLU（Rectified Linear Unit function：正規化線形関数）がある。ノード数を増やすことで、扱う変数を増やし、多数の要素を加味して値／境界を決定できる。層数を増やすことで、直線境界の組み合わせ、複雑な境界を表現できる。学習は、誤差を計算し、それを基に各層の重みを調整する。学習は、誤差を最小化する最適化問題を解くことであり、最適化問題の解法は誤差逆伝播法（Backpropagation）を使うのが一般的である。誤差は、二乗和誤差を使うのが一般的である。汎化能力を高めるために、誤差に正則化項を加算する。誤差逆伝播法は、誤差を出力層１３から伝播させていき、各層の重みを調整する。
【００１５】
図１のディープニューラルネットワーク１の構成を２次元に展開することで画像処理に適したＣＮＮを構築できる。また、ディープニューラルネットワーク１にフィードバックを入れることで、双方向に信号が伝播するＲＮＮ（Recurrent Neural Network：再帰型ニューラルネットワーク）を構成することができる。
【００１６】
図１の太破線三角部に示すように、ディープニューラルネットワーク１は、多層のニューラルネットワークを実現する回路（以下、ニューラルネットワーク回路という）２から構成されている。
本技術は、ニューラルネットワーク回路２を対象とする。ニューラルネットワーク回路２の適用箇所および適用数は限定されない。例えば、隠れ層１２の層数ｎ：２０〜３０の場合、これらの層のどの位置に適用してもよく、またどのノードを入出力ノードとするものでもよい。さらに、ディープニューラルネットワーク１に限らず、どのようなニューラルネットワークでもよい。ただし、入力層１１または出力層１３のノード出力には、２値化出力ではなく多ビット出力が求められるので、ニューラルネットワーク回路２は、対象外である。ただし、出力層１３のノードを構成する回路に、乗算回路が残ったとしても面積的には問題にはならない。
なお、入力データに対し学習済のものを評価していくことを前提としている。したがって、学習結果として重みｗｉは既に得られている。
【００１７】
<ニューラルネットワーク回路>
図２は、比較例のニューラルネットワーク回路の構成の一例を示す図である。
比較例のニューラルネットワーク回路２０は、図１のディープニューラルネットワーク１を構成するニューラルネットワーク回路２に適用できる。なお、以下の各図の表記において、値が多ビットである場合は太実線矢印とバンドルで、また値が２値である場合は細太実線矢印で示す。
ニューラルネットワーク回路２０は、入力値（判別データ）Ｘ１〜Ｘｎ（多ビット）を入力する入力ノードおよび重みＷ１〜Ｗｎ（多ビット）を入力する入力部２１と、バイアスＷ０（多ビット）を入力するバイアスＷ０入力部２２と、入力値Ｘ１〜Ｘｎおよび重みＷ１〜Ｗｎを受け取り、入力値Ｘ１〜Ｘｎに重みＷ１〜Ｗｎをそれぞれ乗算する複数の乗算回路２３と、各乗算値とバイアスＷ０との総和を取る総和回路２４と、総和を取った信号Ｙを活性化関数ｆact(Y)で変換する活性化関数回路２５と、を備えて構成される。
以上の構成において、ニューラルネットワーク回路２０は、入力値Ｘ１〜Ｘｎ（多ビット）を受け取り、重みＷ１〜Ｗｎを乗算した後に、バイアスＷ０を含めて総和を取った信号Ｙを活性化関数回路２５を通すことで人間のニューロンに模した処理を実現している。
【００１８】
図３は、前記図２に示すニューラルネットワーク回路２０における活性化関数ｆact(Y)を示す図である。図３は、横軸に総和を取った信号Ｙ、縦軸に活性化関数fact(Y)の値をとる。図３の符号○印は、±１の範囲の値をとる正側の活性化値（状態値）、図３の符号×印は、±１の範囲の値をとる負側の活性化値である。
ニューラルネットワーク回路２０（図２参照）は、多ビットで高い認識精度を実現している。このため、活性化関数回路２５（図２参照）において、非線形な活性化関数ｆact(Y)を用いることができる。すなわち、図４に示すように、非線形な活性化関数ｆact(Y)は、傾きが非ゼロとなる部分（図４の破線囲み部分参照）に±１の範囲の値をとる活性化値を設定できる。このため、ニューラルネットワーク回路２０は、多様な活性を実現でき、認識精度は実用的な値になっていた。しかし、ニューラルネットワーク回路２０は、大量の乗算回路２３が必要になる。加えて、ニューラルネットワーク回路２０は、入出力・重みが多ビットであることにより、大量のメモリが必要であり、読み書きの速度（メモリ容量・帯域）も問題である。
【００１９】
<単に２値化した２値化ニューラルネットワーク回路>
図２に示す比較例のニューラルネットワーク回路２０は、短精度（多ビット）による積和演算回路で構成されている。このため、多数の乗算回路２１が必要であり、面積・消費電力が多大になる欠点があった。また、入出力・重みが多ビットであることで大量のメモリが必要であり、読み書きの速度（メモリ容量・帯域）が問題となっていた。
そこで、２値化した精度、すなわち＋１と−１のみ用いてニューラルネットワーク回路２（図１参照）を構成する回路が提案された（非特許文献１〜４）。具体的には、図２に示すニューラルネットワーク回路２０の乗算回路２１を、論理ゲート（例えばＸＮＯＲゲート回路）に置き換えることが考えられる。
【００２０】
図４は、比較例の図２に示すニューラルネットワーク回路２０の乗算回路２１をＸＮＯＲゲート回路に置き換えた２値化ニューラルネットワーク回路の構成の一例を示す図である。
比較例の２値化ニューラルネットワーク回路３０は、図１のニューラルネットワーク回路２に適用できる。
図４に示すように、比較例の２値化ニューラルネットワーク回路３０は、入力値ｘ１〜ｘｎ（２値）を入力する入力ノードおよび重みｗ１〜ｗｎ（２値）を入力する入力部３１と、バイアスｗ０（２値）を入力するバイアスｗ０入力部３２と、入力値ｘ１〜ｘｎおよび重みｗ１〜ｗｎを受け取り、ＸＮＯＲ（Exclusive NOR：否定排他的論理和）論理を取る複数のＸＮＯＲゲート回路３３と、ＸＮＯＲゲート回路３３の各ＸＮＯＲ論理値とバイアスｗ０との総和を取る総和回路３４と、総和を取った信号Ｙのバッチ正規化した信号Ｂを活性化関数ｆsgn(B)で変換する活性化関数回路３５と、を備えて構成される。
２値化ニューラルネットワーク回路３０は、乗算回路２３（図２参照）がＸＮＯＲ論理を実現するＸＮＯＲゲート回路３３に置き換えられている。このため、乗算回路２３を構成する際に必要であった面積を削減することができる。また、入力値ｘ１〜ｘｎ、出力値ｚ、および重みｗ１〜ｗｎは、いずれも２値（−１と＋１）であるため、多値である場合と比較してメモリ量を大幅に削減でき、メモリ帯域を向上させることができる。
【００２１】
図５は、比較例の前記図４に示す２値化ニューラルネットワーク回路３０における活性化関数ｆsgn(B)を示す図である。図５は、横軸に総和を取った信号Ｙ、縦軸に活性化関数ｆsgn(B)の値をとる。図５の符号○印は、±１の範囲の値をとる正側の活性化値、図５の符号×印は、±１の範囲の値をとる負側の活性化値である。
２値化ニューラルネットワーク回路３０は、入力値ｘ１〜ｘｎおよび重みｗ１〜ｗｎを単に２値化している。このため、図５の符号ａに示すように、±１のみ扱う活性化関数しか扱えないため、誤差が頻繁に生じてしまう。また、傾きが非ゼロとなる区間（図５の破線囲み部分参照）が不均等となり学習が上手く行われない。すなわち、図６の符号ｂに示すように、不均等な幅により微分が定義できない。その結果、単に２値化した２値化ニューラルネットワーク回路４０は、認識精度が大幅に落ち込んでしまう。
そこで、非特許文献１〜４には、既存の２値化ニューラルネットワークの精度を維持するためにバッチ正規化を行う技術が記載されている。
【００２２】
<バッチ正規化回路を備える２値化ニューラルネットワーク回路>
図６は、比較例の２値化した精度を是正して、ＣＮＮの認識精度を保つバッチ正規化回路（ＢＮ：Batch Normalization）を備える２値化ニューラルネットワーク回路４０の構成の一例を示す図である。図４と同一構成部分には同一符号を付している。
図６に示すように、比較例の２値化ニューラルネットワーク回路４０は、入力値ｘ１〜ｘｎ（２値）を入力する入力ノードｘ１〜ｘｎ、重みｗ１〜ｗｎ（２値）を入力する入力部３１と、バイアスＢ（多ビット）を入力するバイアスＢ入力部３２と、入力値ｘ１〜ｘｎおよび重みｗ１〜ｗｎを受け取り、ＸＮＯＲ（Exclusive NOR：否定排他的論理和）論理を取る複数のＸＮＯＲゲート回路３３と、ＸＮＯＲゲート回路３３の各ＸＮＯＲ論理値とバイアスＢとの総和を取る総和回路３４と、２値化によるバラツキの偏りを正規化範囲を広げ中心をシフトさせる処理で是正するバッチ正規化回路４１と、総和を取った信号Ｙのバッチ正規化した信号Ｂを活性化関数ｆsgn(B)で変換する活性化関数回路３５と、を備えて構成される。
【００２３】
バッチ正規化回路４１は、重み総和を取った信号Ｙと平均値（μＢ）との差分をとる減算器４２と、減算器４２出力とミニバッチの分散値（σ２Ｂ）および定数（ε）の和の根の逆数とを乗算する第１乗算回路４３と、第１乗算回路４３出力に、スケーリング（γ）値（多ビット）による正規化を行う第２算回路４４と、スケーリング係数（γ）による正規化後、シフト値（β）（多ビット）によりシフトして２分類を行う加算器４５とを有する。スケーリング係数（γ）およびシフト値（β）の各パラメータは、事前に学習時に求めておく。
【００２４】
学習データ毎に重みを更新していると、計算時間がかかり特定のデータに依存してしまう。そこで、バッチというまとまったデータ数単位で更新を行う手法が採られる。ミニバッチとは、バッチを更に小さくした単位であり、現在はこのミニバッチを用いる。
【００２５】
２値化ニューラルネットワーク回路４０は、バッチ正規化回路４１を備えることで、２値化した精度を是正して、ＣＮＮの認識精度を保つようにする。
なお、入力値ｘ１〜ｘｎと重みｗ１〜ｗｎとのＸＮＯＲ論理を取る論理回路であれば、ＸＮＯＲゲートに限らずどのような論理ゲートでもよい。例えば、ＸＯＲ回路を用いて総和をとり、活性化関数の否定を取ってもよい。
【００２６】
<バッチ正規化回路が必要となる理由>
比較例の２値化ニューラルネットワーク回路４０のバッチ正規化回路４１が必要となる理由について説明する。
図７および図８は、比較例の２値化ニューラルネットワーク回路４０のバッチ正規化による効果を説明する図である。図７は、比較例のスケーリング係数（γ）による正規化を示す図、図８は、比較例のシフト値（β）による−１〜＋１の制限を示す図である。
バッチ正規化とは、２値化によるバラツキの偏りを是正する回路であり、重み総和後、スケーリング係数（γ）による正規化を行った後、シフト値（β）による適切な活性化による２分類を行う。これらのパラメータは事前に学習時に求めておく。具体的には、下記の通りである。
【００２７】
図７の白抜矢印および符号ｃに示すように、バッチ正規化回路４１の乗算回路４２（図６参照）は、重み総和後の信号（結果）Ｙを、スケーリング係数（γ）により、幅「２」（図７の網掛け部参照）に正規化する。これにより、図５の幅（図５の網掛け部参照）と比較して分かるように、単に２値化した２値化ニューラルネットワーク回路３０では、不均等な幅により微分が定義できなかった不具合が、スケーリング係数（γ）により幅「２」に正規化することで、不均等な幅が抑制される。
【００２８】
その上で、図８の白抜矢印および符号ｄに示すように、バッチ正規化回路４１の加算器４５（図６参照）は、スケーリング係数（γ）による正規化後の値を、シフト値（β）により−１〜＋１の範囲になるよう制限する。すなわち、図５の幅（図５の網掛け部参照）と比較して分かるように、図５の幅（図５の網掛け部参照）が、＋１側により多くシフトしている場合には、シフト値（β）により、スケーリング係数（γ）による正規化後の値を−１〜＋１に制限することで、この幅の中心を０とする。図５の例では、負側の活性化値（図５の破線囲み部の符号×印参照）が、本来あるべき負側に戻される。これにより、誤差の発生が減少し、認識精度を高めることができる。
このように、比較例の２値化ニューラルネットワーク回路４０には、バッチ正規化回路４１が必要である。
【００２９】
<バイアス項による補正の必要性>
上述したように、学習を進めると重みが均等に分布する。しかし、学習データには偏りが存在するため、完全には均等に分布せず、その調整のためにごくわずかなバイアス項による補正が必要であった。学習データにもよるがバイアス項の精度は、固定小数点精度で３０〜４０ビットになり、浮動小数点精度を使ったとしても、加算器などの回路が必要であった。
【００３０】
すなわち、学習データの偏りが存在するので完全に均等分布は非常に困難であり、それを調整するためにバイアス（もしくはバイアスに相当する操作）が必要となる。このため、バイアスは多ビットである必要がある。また、バイアス値は、学習データや学習期間に応じて、刻々と変化する。
バイアスがない場合、実用に耐えない。例えば、後記する図１０の例では、Classification Errorが９０％程度になると想定される。
バイアスがあることの直接的な課題は、高精度による回路が必要とされることである。このような高精度な回路は、面積・消費電力が大きいものとなる。
【００３１】
（本発明の原理説明）
本発明の着眼点は、バッチ正規化の操作を導入したＮＮに対して、これと等価なＮＮを解析的に求めると、バイアス項が不要なＮＮを得ることができることを発見したことである。
すなわち、重み積和後に２値化ニューラルネットワーク回路４０のバッチ正規化回路４１（図６参照）に入力される信号をＹとすると、バッチ正規化回路４１から出力される信号（Ｙと等価となる信号）Ｙ’（中間値）は、次式（１）で示される。
【００３２】
【数１】
2019057072.tif 000004
ただし、
γ：スケーリング係数
β：シフト値
μＢ：ミニバッチの平均値
σ２Ｂ：ミニバッチの分散値
ε：定数（０による除算を避けるための定数）
【００３３】
ここで、上記スケーリング係数（γ）、シフト値（β）、ミニバッチの平均値（μＢ）、ミニバッチの分散値（σ２Ｂ）、および定数（ε）は、学習時にバッチ正規化により得られる値である。
【００３４】
２値化ニューラルネットワーク回路４０の活性化関数を通した出力は、＋１または−１（信号の割り当てによっては０または１）である。また、上記式（１）の係数γ／√（σ２Ｂ＋ε）−１により、２値化ニューラルネットワーク回路４０の中間信号を変換しても活性化関数を通した値は変化しないので、無視できる。
したがって、上記式（１）は、次式（２）となる。
【００３５】
【数２】
2019057072.tif 000005
【００３６】
ここで、２値化活性化関数の値は、中間値Ｙ’が正か負かで＋１または−１（信号の割り当てによっては０または１）である。したがって、２値化活性化関数の値ｆ’sgn(Y)は、下記式（３）の条件で決まる。
【００３７】
【数３】
2019057072.tif 000006
【００３８】
よって、これらの解析的な操作から重み積和演算は、下記式（４）のように得られる。
【００３９】
【数４】
2019057072.tif 000007
【００４０】
さて、単に２値化した２値化ニューラルネットワーク回路２０（図２参照）より、入力値ｘ０＝１である。このとき、ｗ０はバイアス値であったから、上記式（４）は、下記式（５）となる。
【００４１】
【数５】
2019057072.tif 000008
【００４２】
ここで、上記式（５）の第１項の総和演算がｉ＝１で始まることに注意されたい。すなわち、上記式（５）の第１項は、バイアス値が含まれないニューラルネットワークを表している。ちなみに、上記式（４）の第１項の総和演算はｉ＝０で始まっている。
ここで、上記式（５）にｗ０−μＢ＝μ’Ｂを導入すると、上記式（５）は、下記式（６）となる。μ’Ｂは、バイアスを除く平均値である。
【００４３】
【数６】
2019057072.tif 000009
【００４４】
上記式（６）は、次のことを意味する。すなわち、上記式（６）は、バイアスを除いたニューラルネットワークとバッチ正規化を用いて学習することで、正しく２値化ニューラルネットワークが実現できることを表している。このとき、上記式（６）を実現する回路構成は、μ’Ｂを学習する、すなわち、従来学習していたミニバッチの平均値とバイアス値を減算した値を学習するものといえる。
【００４５】
従来のニューラルネットワークでは、中間層、特に後半部になるにつれて学習が収束する。後半部になるにつれて学習が収束することで、重みの分散が一定となる。このため、それを調整するバイアス値が極めて小さくなる問題があった。
上記式（６）は、バイアス値を個別に学習しなくても等価な２値ニューラルネットワークが学習できることを示している。解析的な洞察がなければ成り立たない。
【００４６】
［実施形態の構成］
図９は、本発明の実施形態に係るニューラルネットワークの２値化ニューラルネットワーク回路の構成を示す図である。比較例の図６と同一構成部分には、同一符号を付している。
本実施形態の２値化ニューラルネットワーク回路は、ディープニューラルネットワークへの実装技術を提供する。
２値化ニューラルネットワーク回路１００は、図１のニューラルネットワーク回路２に適用できる。
２値化ニューラルネットワーク回路１００（ニューラルネットワーク回路装置）は、バイアスが不要な２値化ニューラルネットワーク回路である。
図９に示すように、２値化ニューラルネットワーク回路１００は、入力値ｘ１〜ｘｎ（ｘｉ）（２値）を入力する入力ノードおよび重みｗ１〜ｗｎ（ｗｉ）（２値）を入力する入力部１０１と、入力値ｘ１〜ｘｎおよび重みｗ１〜ｗｎを受け取り、ＸＮＯＲ論理を取るＸＮＯＲゲート回路１０２（論理回路部）と、各ＸＮＯＲ論理値の総和を取る総和回路１０３（総和回路部）と、２値化によるバラツキの偏りを正規化範囲を広げ中心をシフトさせる処理で是正するバッチ正規化回路４１と、総和を取った信号Ｙのバッチ正規化した信号Ｂを活性化関数ｆsgn(B)で変換する活性化関数回路３５と、を備えて構成される。
２値化ニューラルネットワーク回路１００は、前記式（６）で示されるバイアス項を不要とする２値化ＣＮＮである。
【００４７】
２値化ニューラルネットワーク回路１００は、ディープニューラルネットワーク１の隠れ層１２（図１参照）に適用される。ここでは、ディープニューラルネットワーク１において、入力値に対し学習済のものを評価していくことを前提としている。
なお、ＮＮでは、重みが、クライアントの認識物体毎に全て異なる。また学習により毎回異なることがある。画像処理では係数は、全て同じであり、この点でＮＮと画像処理では、ＨＷが大きく異なる。
【００４８】
ＸＮＯＲゲート回路１０２は、排他的論理和を含むどのような論理回路部でもよい。すなわち、入力値ｘ１〜ｘｎと重みｗ１〜ｗｎとの論理を取る論理回路であれば、ＸＮＯＲゲートに限らずどのようなゲート回路でもよい。例えば、ＸＯＲゲートにＮＯＴゲートを組み合わせる、ＡＮＤ，ＯＲゲートを組み合わせる、さらにはトランジスタスイッチを用いて作製するなど、論理的に等しいものであればどのようなものでもよい。
【００４９】
２値化ニューラルネットワーク回路１００は、バイアスが不要な２値化ニューラルネットワーク回路であり、比較例の２値化ニューラルネットワーク回路４０（図６参照）で必要であったバイアスｂ入力部３２が削除されている。
したがって、総和回路１０３は、各ＸＮＯＲ論理値の総和のみを取る。すなわち、総和回路１０３は、比較例の２値化ニューラルネットワーク回路４０（図６参照）総和回路３５のように、各ＸＮＯＲ論理値とバイアスｂとの総和を取ることはない。
【００５０】
バッチ正規化回路４１は、重み総和を取った信号Ｙと平均値（μＢ）との差分をとる減算器４２と、減算器４２出力とミニバッチの分散値（σ２Ｂ）および定数（ε）とを乗算する第１乗算回路４３と、第１乗算回路４３出力に、スケーリング（γ）値（多ビット）による正規化を行う第２乗算回路４４と、スケーリング係数（γ）による正規化後、シフト値（β）（多ビット）によりシフトして２分類を行う加算器４５と、からなる。
【００５１】
活性化回路３５は、総和を取った信号Ｙに対して符号ビットのみを出力する活性化関数回路を模擬する回路となっている。符号ビットは、総和を取った多ビット信号Ｙを活性化するかしないかで示す２値信号である。
【００５２】
このように、２値化ニューラルネットワーク回路１００は、総和回路１０３が、式（６）で示されるように各ＸＮＯＲ論理値の総和のみを取る。このため、２値化ニューラルネットワーク回路１００は、バイアスが不要なニューラルネットワーク回路となっている。
【００５３】
以下、上述のように構成された２値化ニューラルネットワーク回路１００の動作について説明する。
２値化ニューラルネットワーク回路１００は、図１に示すディープニューラルネットワーク１のニューラルネットワーク回路２に用いられる。この場合、２値化ニューラルネットワーク回路１００の入力ノードｘ１〜ｘｎは、図１に示すディープニューラルネットワーク１のhidden layer1の入力ノードである。入力部１０１には、隠れ層１２のhidden layer1の入力ノードの入力値ｘ１〜ｘｎ（２値）および重みｗ１〜ｗｎ（２値）が入力される。
乗算の代わりとなるＸＮＯＲゲート回路１０２では、入力値ｘ１〜ｘｎおよび重みｗ１〜ｗｎを受け取り、ＸＮＯＲ論理により２値（−１／＋１）の乗算を行う。ＸＮＯＲゲート回路１０２を通した後、総和回路１０３は、各ＸＮＯＲ論理値の総和を取る。そして、バッチ正規化回路４１は、総和を取った信号Ｙをバッチ正規化する。活性化関数回路３５は、総和を取った信号Ｙのバッチ正規化した信号Ｂを活性化関数ｆsgn(B)で変換する。
【００５４】
２値化ニューラルネットワーク回路１００は、比較例の多ビット構成の乗算回路２１（図２参照）がＸＮＯＲ論理を実現するＸＮＯＲゲート回路１０２に置き換えられている。このため、乗算回路２１を構成する際に必要であった面積を削減することができる。また、入力値ｘ１〜ｘｎおよび重みｗ１〜ｗｎは、いずれも２値（−１／＋１）であるため、多ビット（多値）である場合と比較してメモリ容量を大幅に削減でき、メモリ帯域を向上させることができる。
【００５５】
［学習の実施例］
本実施形態の効果を確認するため、VGG11（隠れ層が１１層） ベンチマークＮＮを実装し、学習が成功するか確認した。VGG11は、良く使われているベンチマークで再現性があるものである。
図１０は、比較例および本実施形態の２値化VGG11モデルを用いて画像認識タスクCIFAR10を学習させた結果の認識精度を説明する図である。図１０（ａ）は「バッチ正規化なし」（バイアス項あり）で構成したニューラルネットワーク回路３０（図４参照）の認識精度、図１０（ｂ）は「バッチ正規化あり」（バイアス項あり）で構成した２値化ニューラルネットワーク回路４０（図６参照）の認識精度、図１０（ｃ）は「バッチ正規化あり」（バイアス項なし）で構成した本実施形態の２値化ニューラルネットワーク回路１００（図９参照）の認識精度をそれぞれ示す。図１０（ｃ）は、本実施形態をVGG11 ベンチマークＮＮで実装し確認したものである。
図１０の横軸は、利用した学習データに対して更新を終えたサイクルであるエポック（epoch）数（学習回数）、縦軸は誤認識率（Classification error）である。また、図１０は、ディープニューラルネットワーク用のフレームワークソフトウェアChainer（登録商標）のfloat32 精度CNNを用いている。
【００５６】
<バッチ正規化の効果>
図１０（ａ）の「バッチ正規化なし」に示すように、比較例の単に２値化した２値化ニューラルネットワーク回路３０（図４参照）では、誤認識率が大きく（エポック数２００以上；誤認識率約７０％）認識精度は悪い。また、学習を続けても認識精度の改善は見られない（学習が成功していない）。
これに対して、比較例の図１０（ｂ）の「バッチ正規化あり」（バイアス項あり）で構成した２値化ニューラルネットワーク回路４０（図６参照）と本実施形態の図１０（ｃ）の「バッチ正規化あり」（バイアス項なし）で構成した２値化ニューラルネットワーク回路１００（図９参照）は、どちらも学習を続けるに従って誤認識率が落ちており、エポック数４００以上で誤認識率は小さくなり（約２０％）、学習が成功していることを示している。
このように、バッチ正規化回路４１が無ければ学習が成功していない。２値化ニューラルネットワーク回路３０では、バッチ正規化回路４１が必要であることがあらためて確認された。
【００５７】
<バイアス項を不要とする２値化ＣＮＮバッチ正規化の効果>
比較例の図１０（ｂ）の「バッチ正規化あり」（バイアス項あり）と本実施形態の図１０（ｃ）の「バッチ正規化あり」（バイアス項なし）とを比較して分かるように、バッチ正規化回路４１がある場合には、バイアス項の有無については、認識精度にほとんど影響を与えないことが確認された。
すなわち、図１０（ｃ）の「バッチ正規化あり」（バイアス項なし）で構成した本実施形態のニューラルネットワーク回路１００（図９参照）は、比較例の図１０（ｂ）の「バッチ正規化あり」（バイアス項あり）で構成したニューラルネットワーク回路４０と比較して、バイアス項をなくしても認識精度を落とさないことが確認された。
【００５８】
図１１は、本実施形態の２値化ニューラルネットワーク回路１００をFPGA(Digilent 社 NetFPGA-1G-CML)上に実装し、既存の多ビット実装法との比較を行った結果を表にして示す図である。
図１１の表は、表下欄外に表記した[Zhao et al.]〜[FINN]の学会発表者（論文発表年）のニューラルネットワークと本実施形態のニューラルネットワークをFPGA (Digilent社 ZedBoard)上に実現した場合に、各項目を対比して示したものである。
図１１の表の用語は下記の通りである。
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は、メモリ量効率である。
【００５９】
図１１の表は、「Platform」(プラットフォーム)、「FPGA Board」(使用FPGAボード)、「Clock（MHz）」(同期化のための内部クロック)、「LUT, BRAM,DSP Block」(メモリ・DSP数)、「Test Error」（誤認識率）、「Time（msec）（FPS）」（処理時間(処理速度)）、「Power（W）」(消費電力)、「FPS/Watt, FPS/ LUT, FPS/BRAM」(データ転送待ち時間／外部にメモリを付けた場合の転送速度)、の各項目を対比して示した。この表において、特に注目すべき事項は下記の通りである。
【００６０】
<消費電力>
本実施形態の２値化ニューラルネットワーク回路１００は、表の従来例と比較して、電力のバランスが取れていることが挙げられる。従来例では、「Power（W）」に示すように、4.7W,2.5Wと消費電力が大きい。消費電力が大きいので、これを回避する制御方法が複雑である。「Power（W）」に示すように、本実施形態では、従来例[Zhao et al.]と比較して消費電力を2.3Wと約１／２に低減することができた。
【００６１】
<チップ面積>
本実施形態の２値化ニューラルネットワーク回路１００は、バイアスが不要であること、乗算回路が２値論理ゲートであること、から、表の「LUTs, BRAM,DSP Block」に示すように、チップ面積が46900から14509と約１／３に減り、外付けメモリが不要となる、メモリコントローラが単純になることなどの効果がある。チップ面積は価格に比例するので、価格も２桁程度安くなることが期待できる。
【００６２】
<性能等価>
本実施形態の２値化ニューラルネットワーク回路１００は、表の「FPS/Watt, FPS/ LUT, FPS/BRAM」に示すように、性能パワー効率は、面積を見ずにパワー効率だけを見たものでも35.7と182.6と約５倍となっている。さらに、データ転送速度も168と120と約３倍となっている。
【００６３】
［実装例］
図１２は、本発明の実施形態に係る２値化ニューラルネットワーク回路の実装例を説明する図である。
<STEP1>
まず、与えられたデータセット（今回はImageNet、画像認識タスク用にデータ）を既存のディープニューラルネットワーク用のフレームワークソフトウェアであるChainer （登録商標）を用いてＧＰＵ（Graphics Processing Unit）を有するコンピュータ２０１上で学習を行った。学習は、ＧＰＵ上で実行する。このコンピュータ２０１は、ＡＲＭプロセッサなどのＣＰＵ（Central Processing Unit）と、メモリと、ハードディスクなどの記憶手段（記憶部）と、ネットワークインタフェースを含むＩ／Ｏポートとを有する。このコンピュータは、ＣＰＵ２０１が、メモリ上に読み込んだプログラム（２値化したニューラルネットワークの実行プログラム）を実行することにより、後記する各処理部により構成される制御部（制御手段）を動作させる。
【００６４】
<STEP2>
次に、自動生成ツールを用いて、本実施形態の２値化ニューラルネットワーク回路１００と等価なＣ++コードを自動生成し、Ｃ++コード２０２を得た。
【００６５】
<STEP3>
次に、FPGA ベンダの高位合成ツール(Xilinx 社SDSoC) （登録商標）を用いて、ＦＰＧＡ（field-programmable gate array）合成用にＨＤＬ（hardware description language）２０３を生成した。例えば、高位合成ツール(Xilinx 社SDSoC)では、実現したい論理回路をハードウェア記述言語（Verilog HDL/VHDL）を用いて記述し、提供されたＣＡＤツールでビットストリームに合成する。そして、FPGAにこのビットストリームを送信するとFPGAに回路が実現する。
【００６６】
<STEP4>
次に、従来のＦＰＧＡ合成ツールVivado （登録商標）を用いて、ＦＰＧＡ上に実現（ＦＰＧＡ合成２０４）して画像認識タスクの検証を行った。
【００６７】
<STEP5>
検証後、基板２０５を完成させた。基板２０５には、２値化ニューラルネットワーク回路１００がハードウェア化されて実装されている。
【００６８】
以上説明したように、本実施形態に係る２値化ニューラルネットワーク回路１００（図９参照）は、入力値ｘ１〜ｘｎ（ｘｉ）（２値）を入力する入力ノードおよび重みｗ１〜ｗｎ（ｗｉ）（２値）を入力する入力部１０１と、入力値ｘ１〜ｘｎおよび重みｗ１〜ｗｎを受け取り、ＸＮＯＲ論理を取るＸＮＯＲゲート回路１０２と、各ＸＮＯＲ論理値の総和を取る総和回路１０３と、２値化によるバラツキの偏りを正規化範囲を広げ中心をシフトさせる処理で是正するバッチ正規化回路４１と、総和を取った信号Ｙのバッチ正規化した信号Ｂを活性化関数ｆsgn(B)で変換する活性化関数回路３５と、を備える。総和を取った信号Ｙは、式（６）で示される。
【００６９】
また、ニューラルネットワーク処理方法では、入力値ｘ１〜ｘｎ（ｘｉ）および重みｗ１〜ｗｎ（ｗｉ）を入力するステップと、入力値ｘ１〜ｘｎおよび重みｗ１〜ｗｎを受け取り、ＸＮＯＲ論理を取るステップと、式（６）で示されるように、各ＸＮＯＲ論理値の総和のみを取るステップと、バッチ正規化を行うステップと、総和を取った信号Ｙのバッチ正規化した信号Ｂを活性化関数ｆsgn(B)で変換するステップと、を実行する。
【００７０】
学習時にバイアス項を不要とする２値化ＣＮＮで学習を行い、回路実現時もバイアス項を不要とする。
【００７１】
これにより、バイアス項を保持するメモリ・加算器回路が不要であり、ＣＮＮを２値の入力・重みとバッチ正規化回路４１で実現できる。このため、認識精度をほとんど落とすことなく面積・消費電力・速度において優れるＣＮＮを実現できる。
例えば、図１１の表に示すように、本実施形態に係る２値化ニューラルネットワーク回路１００は、消費電力（Power [W]）を半分に削減でき、面積を約３０分の１（FPS/Watt,FPS/LUT,FPS/BRAMの相乗効果）に削減できた。
【００７２】
本実施形態では、２値化ニューラルネットワーク回路４０（図６参照）で必須であったバイアス自体を不要とすることから面積が削減でき、メモリ量も削減できる。また、図１０（ｂ）（ｃ）を比較してわかるように、本実施形態の２値化ニューラルネットワーク回路１００は、認識精度について差がない。
【００７３】
図１３は、各ＦＰＧＡ実装のハードウェアの量を比較して示す図である。ザイリンクス社のＦＰＧＡを用いて固定小数点精度，２値化，本実施形態がそれぞれ要求するハードウェアの量を計算した。具体的には、TensorFlowチュートリアルＣＮＮを実装した。また、Digilent社のNetFPGA-1G-CMLボード上に実装した。
各ＦＰＧＡ実装の比較は、本実施形態（２値化(バッチ正規化＋バイアスなし)）、比較例の固定小数点(１６ビット)、および比較例の２値化(バイアスのみ)である。ＦＰＧＡ実装のハードウェアの量は、ＦＦ(flip-flop)数、ＬＵＴ数、18Kb BRAM 数、およびＤＳＰ（digital signal processor） 48E 数で示される。
【００７４】
図１３に示すように、本実施形態（２値化(バッチ正規化＋バイアスなし)）および２値化(バイアスのみ)は、固定小数点精度に対して、ＦＦ数、ＬＵＴ数、18Kb BRAM 数、およびＤＳＰ48E 数の、いずれのハードウェア量も減少していることが確かめられた。また、本実施形態（２値化(バッチ正規化＋バイアスなし)）は、２値化(バイアスのみ)に対してもハードウェア量（面積）が１〜２％程度の増加で済んでいることが分かる。
【００７５】
さらに、本実施形態の効果について述べる。
（１）バッチ正規化なしのＣＮＮとの比較
本実施形態は、バッチ正規化なしのＣＮＮと比較して、バイアス項回路が不要になる、かつ、学習時にバイアスが不要になるので学習が容易になる利点がある。ただし、バッチ正規化項用の回路が必要である。また、図１３の本実施形態（２値化(バッチ正規化＋バイアスなし)）と比較例の２値化(バイアスのみ)との比較から分かるように、ハードウェア量（面積）、電力が数％増加する。
【００７６】
（２）学習時の比較
前記図１０（ｂ）（ｃ）に示すように、本実施形態の２値化ニューラルネットワーク回路１００の認識の精度（図１０（ｃ）参照）と、比較例の「バッチ正規化あり」（バイアス項あり）で構成した２値化ニューラルネットワーク回路４０の認識精度（図１０（ｂ）参照）、および学習時間に差はなく、ほぼ同じとみてよいことが分かる。なお、回路実現時の差異は、図１３で示されている。
【００７７】
（３）設計容易性
バイアス値がある場合、その値が極めて小さい値（固定小数点３０〜４０ビット）であるので回路設計に留意すべきである。
【００７８】
本実施形態によれば、既存のバイアスを有する２値化ニューラルネットワーク回路と比較して、消費電力を半分に削減でき、面積を約３０分の１に削減（図１１参照）しつつ、図１０に示したように認識精度はほぼ等価なＣＮＮを構成できることが判明した。ディープラーニングを用いたＡＤＡＳ（Advanced Driver Assistance System：先進運転支援システム）カメラ画像認識用のエッジ組み込み装置ハードウェア方式として実用化が期待される。特にＡＤＡＳでは、車載する上で高信頼性と低発熱が要求される。本実施形態に係る２値化ニューラルネットワーク回路１００は、図１１の表に示すように、消費電力（Power [W]）が格段に低減していることに加え、外付けメモリが不要であるので、メモリを冷却する冷却ファンや冷却フィンも不要である。ＡＤＡＳカメラに搭載して好適である。
【００７９】
［変形例］
図１４は、変形例１のディープニューラルネットワークの２値化ニューラルネットワーク回路の構成を示す図である。図９と同一構成部分には同一符号を付して重複箇所の説明を省略する。
変形例１の２値化ニューラルネットワーク回路１００Ａは、図１のニューラルネットワーク回路２に適用できる。
２値化ニューラルネットワーク回路１００Ａ（ニューラルネットワーク回路装置）は、バイアスが不要な２値化ニューラルネットワーク回路である。
図１４に示すように、２値化ニューラルネットワーク回路１００Ａは、図９の２値化ニューラルネットワーク回路１００にさらに、バイアス値を記憶するバイアスメモリ１１０（記憶部，バイアス値入力部）を備えて構成される。
【００８０】
２値化ニューラルネットワーク回路１００Ａは、バイアスメモリ１１０に記憶されたバイアス値を読み出して総和回路１０３に出力する。この場合、２値化ニューラルネットワーク回路１００Ａは、バイアスを用いる２値化ニューラルネットワーク回路４０（図６参照）と同様に、総和回路１０３にバイアス値が入力される構成となる。総和回路３５は、ＸＮＯＲゲート回路３４の各ＸＮＯＲ論理値とバイアス値との総和を取ることになり、２値化ニューラルネットワーク回路１００Ａは、バイアスを用いる２値化ニューラルネットワーク回路４０（図６参照）と等価なニューラルネットワーク処理方法を実現できる。
一方、２値化ニューラルネットワーク回路１００Ａは、バイアスメモリ１１０に記憶されたバイアス値の読み出しに代えて、総和回路１０３に０を書き込むことで、式（６）の回路を実行する２値化ニューラルネットワーク回路１００Ａのニューラルネットワーク処理方法を実現できる。この場合、２値化ニューラルネットワーク回路１００Ａは、バイアスを不要とする２値化ＣＮＮである。
【００８１】
変形例１によれば、２値化ニューラルネットワーク回路１００Ａを、バイアスを用いる既存の２値化ニューラルネットワーク回路４０（図６参照）に置き換え（流用して）使用することができ、汎用的に適用可能である。特に、バイアスを用いる既存の２値化ニューラルネットワーク回路４０そのもの、またバイアスを用いる既存の２値化ニューラルネットワーク回路４０に接続されるメモリや読出し／書込み制御部の設計変更や検証を行うことなく適用できる。また、既存の２値化ニューラルネットワーク回路４０で蓄積した資源を活用することができる。
【００８２】
図１５は、変形例２のディープニューラルネットワークの２値化ニューラルネットワーク回路の構成を示す図である。図９と同一構成部分には同一符号を付して重複箇所の説明を省略する。
変形例２の２値化ニューラルネットワーク回路１００Ｂは、図１のニューラルネットワーク回路２に適用できる。
２値化ニューラルネットワーク回路１００Ｂ（ニューラルネットワーク回路装置）は、バイアスが不要な２値化ニューラルネットワーク回路である。
図１５に示すように、２値化ニューラルネットワーク回路１００Ｂは、図９の２値化ニューラルネットワーク回路１００にさらに、バイアス値Ｂを入力するバイアス値入力部１２０と、バイアス値Ｂの総和回路１０３への入力をオンオフするスイッチ１２１と、を備えて構成される。
【００８３】
２値化ニューラルネットワーク回路１００Ｂは、バイアスメモリ１１０に記憶されたバイアス値を読み出して総和回路１０３に出力する。この場合、２値化ニューラルネットワーク回路１００Ｂは、バイアスを用いる２値化ニューラルネットワーク回路４０（図６参照）と同様に、総和回路１０３にバイアス値Ｂが入力される構成となる。総和回路３５は、ＸＮＯＲゲート回路３４の各ＸＮＯＲ論理値とバイアス値Ｂとの総和を取ることになり、２値化ニューラルネットワーク回路１００Ｂは、バイアスを用いる２値化ニューラルネットワーク回路４０（図６参照）と等価なニューラルネットワーク処理方法を実現できる。
一方、２値化ニューラルネットワーク回路１００Ｂは、スイッチ１２１をオフにすることで、バイアス値Ｂの総和回路１０３への入力をオフし、式（６）の回路を実行する２値化ニューラルネットワーク回路１００Ａのニューラルネットワーク処理方法を実現できる。
【００８４】
変形例２によれば、２値化ニューラルネットワーク回路１００Ｂを、バイアスを用いる既存の２値化ニューラルネットワーク回路４０（図６参照）に置き換え（流用して）使用することができ、変形例１の場合と同様の効果を得ることができる。変形例２は、変形例１の２値化ニューラルネットワーク回路１００Ａに比べ構成がより簡素であり、さらに汎用的に適用できる。
【００８５】
本発明は上記の実施形態例に限定されるものではなく、特許請求の範囲に記載した本発明の要旨を逸脱しない限りにおいて、他の変形例、応用例を含む。
例えば、乗算回路としての論理ゲートに代えて、ＬＵＴ（Look-Up Table）を用いてもよい。このＬＵＴは、ＸＮＯＲ論理を行うＸＮＯＲゲート回路１０２（図９参照）に代えて、FPGA の基本構成要素であるルックアップテーブルを用いる。ＬＵＴは、２入力（ｘ１，ｗ１）に対する２値（−１／＋１）のＸＮＯＲ論理結果Ｙを格納する。ＬＵＴを用いることで、バッチ正規化回路の面積とパラメータを格納するメモリ面積・メモリ帯域を無くすことができ、かつ、性能的には等価な回路構成を実現することができる。ＬＵＴは、ＦＰＧＡの基本構成要素であり、ＦＰＧＡ合成の際の親和性が高く、ＦＰＧＡによる実装が容易である。
【００８６】
また、上記した実施形態例は本発明をわかりやすく説明するために詳細に説明したものであり、必ずしも説明した全ての構成を備えるものに限定されるものではない。また、ある実施形態例の構成の一部を他の実施形態例の構成に置き換えることが可能であり、また、ある実施形態例の構成に他の実施形態例の構成を加えることも可能である。また、実施形態例は、その他の様々な形態で実施されることが可能であり、発明の要旨を逸脱しない範囲で、種々の省略、置き換え、変更を行うことができる。これら実施形態やその変形例は、発明の範囲や要旨に含まれるとともに、特許請求の範囲に記載された発明とその均等の範囲に含まれる。
【００８７】
また、上記実施形態において説明した各処理のうち、自動的に行われるものとして説明した処理の全部または一部を手動的に行うこともでき、あるいは、手動的に行われるものとして説明した処理の全部または一部を公知の方法で自動的に行うこともできる。この他、上述文書中や図面中に示した処理手順、制御手順、具体的名称、各種のデータやパラメータを含む情報については、特記する場合を除いて任意に変更することができる。
また、図示した各装置の各構成要素は機能概念的なものであり、必ずしも物理的に図示の如く構成されていることを要しない。すなわち、各装置の分散・統合の具体的形態は図示のものに限られず、その全部または一部を、各種の負荷や使用状況などに応じて、任意の単位で機能的または物理的に分散・統合して構成することができる。
【００８８】
また、上記の各構成、機能、処理部、処理手段等は、それらの一部または全部を、例えば集積回路で設計する等によりハードウェアで実現してもよい。また、上記の各構成、機能等は、プロセッサがそれぞれの機能を実現するプログラムを解釈し、実行するためのソフトウェアで実現してもよい。各機能を実現するプログラム、テーブル、ファイル等の情報は、メモリや、ハードディスク、ＳＳＤ（Solid State Drive）等の記録装置、または、ＩＣ（Integrated Circuit）カード、ＳＤ（Secure Digital）カード、光ディスク等の記録媒体に保持することができる。
また、上記実施の形態では、装置は、ニューラルネットワーク回路装置という名称を用いたが、これは説明の便宜上であり、名称はディープニューラルネットワーク回路、ニューラルネットワーク装置、パーセプトロン等であってもよい。また、方法およびプログラムは、ニューラルネットワーク処理方法という名称を用いたが、ニューラルネットワーク演算方法、ニューラルネットプログラム等であってもよい。
【符号の説明】
【００８９】
１  ディープニューラルネットワーク
２  ニューラルネットワーク回路
１１  入力層
１２  隠れ層（中間層）
１３  出力層
３５  活性化回路（活性化回路部，活性化回路手段）
４１  バッチ正規化回路
４２  減算器
４３  第１乗算回路
４４  第２乗算回路
４５  加算器
１００，１００Ａ，１００Ｂ  ２値化ニューラルネットワーク回路（ニューラルネットワーク回路装置）
１０１  入力部
１０２  ＸＮＯＲゲート回路（論理回路部，論理回路手段）
１０３  総和回路（総和回路部，総和回路手段）
１１０  バイアスメモリ（記憶部，バイアス値入力部）
１２０  バイアス値入力部
１２１  スイッチ
ｘ１〜ｘｎ（ｘｉ）  入力値（２値）
ｗ１〜ｗｎ（ｗｉ）  重み（２値）
【図１】
2019057072.tif 000018
【図２】
2019057072.tif 000019
【図３】
2019057072.tif 000020
【図４】
2019057072.tif 000021
【図５】
2019057072.tif 000022
【図６】
2019057072.tif 000023
【図７】
2019057072.tif 000024
【図８】
2019057072.tif 000025
【図９】
2019057072.tif 000026
【図１０】
2019057072.tif 000027
【図１１】
2019057072.tif 000028
【図１２】
2019057072.tif 000029
【図１３】
2019057072.tif 000030
【図１４】
2019057072.tif 000031
【図１５】
2019057072.tif 000032