(57)【要約】【課題】メモリ量を削減してオンチップに配置が可能なニューラルネットワーク回路装置、ニューラルネットワーク、ニューラルネットワーク処理方法およびニューラルネットワークの実行プログラムを提供する。【解決手段】３状態ニューラルネットワーク回路２００は、中間層の中で、畳み込みを行う入力値Ｘｉと、重みＷｉを受け取り、畳み込み演算を行う非ゼロ畳み込み演算回路２１と、畳み込み演算された各演算値とバイアスＷ０との総和を取る総和回路２２と、総和を取った信号Ｙを活性化関数ｆ(u)で変換する活性化関数回路２３と、を備える。非ゼロ畳み込み演算回路２１は、重みＷｉがゼロの重みをスキップし、非ゼロの重みと当該非ゼロの重みに対応する入力値Ｘｉをもとに畳み込み演算を行う。【選択図】図２
2019200553.tif 000002
【特許請求の範囲】
【請求項１】
入力層、１以上の中間層、および、出力層を少なくとも含むニューラルネットワーク回路装置であって、
前記中間層の中で、畳み込みを行う入力値Ｘｉと、重みＷｉを受け取り、畳み込み演算を行う畳み込み演算回路と、畳み込み演算された各演算値とバイアスＷ０との総和を取る総和回路と、総和を取った信号Ｙを活性化関数ｆ(u)で変換する活性化関数回路と、を備え、
前記畳み込み演算回路は、重みＷｉがゼロの重みをスキップし、非ゼロの重みと当該非ゼロの重みに対応する入力値Ｘｉをもとに畳み込み演算を行う
ことを特徴とするニューラルネットワーク回路装置。
【請求項２】
入力層、１以上の中間層、および、出力層を少なくとも含むニューラルネットワーク回路装置であって、
前記中間層は、第１中間層と、第２中間層とを含み、
前記第１中間層および前記第２中間層の中で、畳み込みを行う入力値Ｘｉと、重みＷｉを受け取り、畳み込み演算を行う畳み込み演算回路と、畳み込み演算された各演算値とバイアスＷ０との総和を取る総和回路と、総和を取った信号Ｙを活性化関数ｆ(u)で変換する活性化関数回路と、を備え、
前記第１中間層の前記畳み込み演算回路は、３状態｛−多ビット，０，＋多ビット｝の重みＷｉがゼロの重みをスキップし、非ゼロの重みと当該非ゼロの重みに対応する入力値Ｘｉをもとに畳み込み演算を行い、
前記第２中間層の前記畳み込み演算回路は、３値化｛−１，０，＋１｝または２値化｛−１，＋１｝の重みＷｉがゼロの重みをスキップし、非ゼロの重みと当該非ゼロの重みに対応する入力値Ｘｉをもとに畳み込み演算を行う
ことを特徴とするニューラルネットワーク回路装置。
【請求項３】
前記畳み込み演算回路は、３状態｛−Ｗ(多ビット)，０，＋Ｗ(多ビット｝の重みＷｉと入力値Ｘｉとの畳み込み演算を行う
ことを特徴とする請求項１に記載のニューラルネットワーク回路装置。
【請求項４】
前記畳み込み演算回路は、前記重みＷｉが、下記式で示される
ことを特徴とする請求項１に記載のニューラルネットワーク回路装置。
【数３】
2019200553.tif 000006
ただし、
Ｗhid：多ビット重みＷｉ
ρ：閾値
ことを特徴とする請求項１に記載のニューラルネットワーク回路装置。
【請求項５】
前記畳み込み演算回路は、３値化｛−１，０，＋１｝の重みＷｉと入力値Ｘｉとの畳み込み演算を行う
ことを特徴とする請求項１に記載のニューラルネットワーク回路装置。
【請求項６】
前記畳み込み演算回路は、２値化｛−１，＋１｝の重みＷｉと入力値Ｘｉとの畳み込み演算を行う
ことを特徴とする請求項１に記載のニューラルネットワーク回路装置。
【請求項７】
前記畳み込み演算回路は、非ゼロの重みと畳み込みを行う入力値Ｘｉの相対アドレスを格納する第１記憶手段と、入力値Ｘｉのアドレスを格納する第２記憶手段と、を有し、
ゼロの重みをスキップする演算の際、前記第１メモリから該当する非ゼロの重みとその相対アドレスを読み込み、
読み込んだ相対アドレスと現在のアドレスから前記第２記憶手段を参照して次の畳み込みを行う入力値Ｘｉを読み出し、
前記第２記憶手段から読み出した入力値Ｘｉと該当する非ゼロの重みをもとに畳み込み演算を行う
ことを特徴とする請求項１または請求項２に記載のニューラルネットワーク回路装置。
【請求項８】
前記畳み込み演算回路は、非ゼロの重みと畳み込みを行う入力値Ｘｉの絶対アドレスを格納する第３記憶手段を有し、
ゼロの重みをスキップする演算の際、前記第３記憶手段から絶対アドレスを指定して該当する非ゼロの重みと入力値Ｘｉを読み出し、
読み出した入力値Ｘｉと該当する非ゼロの重みをもとに畳み込み演算を行う
ことを特徴とする請求項１または請求項２に記載のニューラルネットワーク回路装置。
【請求項９】
ニューラルネットワークを順伝搬して得られた出力と学習データとの誤差を計算し、当該ニューラルネットワークを逆伝搬させて前記重みＷｉを更新する、学習を繰り返す場合、
前記学習が終了するまでは少なくとも前記中間層の中では、前記重みＷｉを丸め処理しない
ことを特徴とする請求項１または請求項２に記載のニューラルネットワーク回路装置。
【請求項１０】
ニューラルネットワークを順伝搬して得られた出力と学習データとの誤差を計算し、当該ニューラルネットワークを逆伝搬させて前記重みＷｉを更新する、学習を繰り返す場合、
前記学習終了後、丸め処理をしない状態で保っていた前記重みＷｉをゼロにして、重みが疎なニューラルネットワークを生成する
ことを特徴とする請求項１または請求項２に記載のニューラルネットワーク回路装置。
【請求項１１】
入力層、１以上の中間層、および、出力層を少なくとも含むニューラルネットワーク処理方法であって、
前記中間層の中で、畳み込みを行う入力値Ｘｉと、重みＷｉを受け取り、畳み込み演算を行う畳み込み演算ステップと、
畳み込み演算された各演算値とバイアスＷ０との総和を取るステップと、
総和を取った信号Ｙを活性化関数ｆ(u)で変換するステップと、を有し、
前記畳み込み演算ステップでは、重みＷｉがゼロの重みをスキップし、非ゼロの重みと当該非ゼロの重みに対応する入力値Ｘｉをもとに畳み込み演算を行う
ことを特徴とするニューラルネットワーク処理方法。
【請求項１２】
ニューラルネットワークを順伝搬して得られた出力と学習データとの誤差を計算し、当該ニューラルネットワークを逆伝搬させて前記重みＷｉを更新する、学習を繰り返す場合、
前記学習が終了するまでは少なくとも前記中間層の中では、重みＷｉを丸め処理しない
ことを特徴とする請求項１１に記載のニューラルネットワーク処理方法。
【請求項１３】
ニューラルネットワークを順伝搬して得られた出力と学習データとの誤差を計算し、当該ニューラルネットワークを逆伝搬させて前記重みＷｉを更新する、学習を繰り返す場合、
前記学習終了後、丸め処理をしない状態で保っていた前記重みＷｉをゼロにして、重みが疎なニューラルネットワークを生成する
ことを特徴とする請求項１１に記載のニューラルネットワーク回路装置。
【請求項１４】
入力層、１以上の中間層、および、出力層を少なくとも含むニューラルネットワーク回路装置としてのコンピュータを、
前記中間層の中で、畳み込みを行う入力値Ｘｉと、重みＷｉを受け取り、畳み込み演算を行う畳み込み演算回路手段、
畳み込み演算された各演算値とバイアスＷ０との総和を取る総和回路手段、
総和を取った信号Ｙを活性化関数ｆ(u)で変換する活性化関数回路手段、として機能させ、
前記畳み込み演算回路手段は、重みＷｉがゼロの重みをスキップし、非ゼロの重みと当該非ゼロの重みに対応する入力値Ｘｉをもとに畳み込み演算を行う
ニューラルネットワークの実行プログラム。
【発明の詳細な説明】
【技術分野】
【０００１】
本発明は、ニューラルネットワーク回路装置、ニューラルネットワーク、ニューラルネットワーク処理方法およびニューラルネットワークの実行プログラムに関する。
【背景技術】
【０００２】
古典的な順伝搬型ニューラルネットワーク（ＦＦＮＮ：Feedforward Neural Network）、ＲＢＦ（Radial Basis Function）ネットワーク、正規化したＲＢＦネットワーク、自己組織化マップなどがある。ＲＢＦＮは、誤差逆伝搬法に用いる活性化関数に放射基底関数を用いる。しかし、中間層が多く取れず高精度認識判定が難しかったり、ＨＷ規模が大きく処理時間がかかる、などの問題があり手書き文字認識など応用分野が限定されていた。
近年、ＡＤＡＳ（advanced driver assistance system）用の画像認識や自動翻訳などで注目を集める新方式として畳み込みニューラルネットワーク（ＣＮＮ：Convolutional Neural Net-work）（層間が全結合でないＮＮ）や再帰型ニューラルネットワーク（双方向伝搬）が登場している。ＣＮＮは、ディープニューラルネットワーク（ＤＮＮ：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).
【発明の概要】
【発明が解決しようとする課題】
【０００９】
ニューロンを増大したディープニューラルネットワークは、機能を増やすことができ、かつ認識精度を格段に向上させることができる。しかしながら、このようなディープニューラルネットワークは、数十億〜数百億の積和演算が必要である。このためには、大量の演算器およびメモリアクセスが不可欠となる。演算器およびメモリアクセスの増大は、いずれも高機能なディープニューラルネットワークを実現する上で大きな障害となっている。演算器については、微細化技術の進展によって増やすことは可能である。これに対して、外部基板に接続する基板ピン数の物理的制約から、メモリアクセスを増やすことは非常に困難である（実装上限界）。メモリ量を削減してオンチップに配置することは、現在切実な要望となっている。
【００１０】
本発明は、このような事情に鑑みてなされたものであり、メモリ量を削減してオンチップに配置が可能なニューラルネットワーク回路装置、ニューラルネットワーク、ニューラルネットワーク処理方法およびニューラルネットワークの実行プログラムを提供することを課題とする。
【課題を解決するための手段】
【００１１】
前記した課題を解決するため、本発明に係るニューラルネットワーク回路装置は、入力層、１以上の中間層、および、出力層を少なくとも含むニューラルネットワーク回路装置であって、前記中間層の中で、畳み込みを行う入力値Ｘｉと、重みＷｉを受け取り、畳み込み演算を行う畳み込み演算回路と、畳み込み演算された各演算値とバイアスＷ０との総和を取る総和回路と、総和を取った信号Ｙを活性化関数ｆ(u)で変換する活性化関数回路２３と、を備え、前記畳み込み演算回路は、重みＷｉがゼロの重みをスキップし、非ゼロの重みと当該非ゼロの重みに対応する入力値Ｘｉをもとに畳み込み演算を行うことを特徴とする。
その他の手段については、発明を実施するための形態のなかで説明する。
【発明の効果】
【００１２】
本発明によれば、メモリ量を削減してオンチップに配置が可能なニューラルネットワーク回路装置、ニューラルネットワーク、ニューラルネットワーク処理方法およびニューラルネットワークの実行プログラムを提供することができる。
【図面の簡単な説明】
【００１３】
【図１】ディープニューラルネットワーク（ＤＮＮ）の構造の一例を説明する図である。
【図２】本発明の実施形態に係るディープニューラルネットワークの非ゼロ畳み込み演算回路２１を備えるニューラルネットワーク回路の構成を示す図であり、
【図３】本発明の実施形態に係るディープニューラルネットワークの非ゼロ畳み込み演算回路２１の畳み込み演算の概念を示す図である。
【図４】本発明の実施形態に係るディープニューラルネットワークの非ゼロ畳み込み演算回路２１の構成を示す図であり、（ａ）はその回路構成図、（ｂ）はその０スキップの一例を示す図である。
【図５】本発明の実施形態に係るディープニューラルネットワークの３状態ニューラルネットワーク回路の構成を示す図である。
【図６】本発明の実施形態に係るディープニューラルネットワークの３値化ニューラルネットワーク回路の構成を示す図である。
【図７】本発明の実施形態に係るディープニューラルネットワークの間接メモリアクセスを説明する図であり、（ａ）は重み／アドレスメモリに格納される非零重みと相対アドレスの一例を示す図、（ｂ）は“０”スキップする非零重みｗを示す図、（ｃ）は畳み込みを行う入力値Ｘの読み出しを示す図である。
【図８】本発明の実施形態に係るディープニューラルネットワークの間接アドレスの表現方法を説明する図であり、（ａ）は絶対アドレス指定方法を示す図、（ｂ）は相対アドレス指定方法を示す図である。
【図９】本発明の実施形態に係るディープニューラルネットワークの畳み込みニューラルネットワークへの適用を説明する図である。
【図１０】本発明の実施形態に係るディープニューラルネットワークの“０”スキップする演算の効果を説明する図である。
【図１１】本発明の実施形態に係るディープニューラルネットワークの間接メモリアクセスを説明する図である。
【図１２】本発明の実施形態に係るディープニューラルネットワークのビット精度を減らすことでメモリ量を削減する例を説明する図であり、（ａ）はニューラルネットワーク回路の構成図、（ｂ）はメモリ量を削減できる原理図である。
【図１３】本発明の実施形態に係るディープニューラルネットワークの０スキップ演算でメモリ量を削減する例を説明する図であり、（ａ）はニューラルネットワーク回路参照）の構成図、（ｂ）はメモリ量を削減できる原理図である。
【図１４】本発明の実施形態に係るディープニューラルネットワークの比較例のディープニューラルネットワークの学習方法を説明する図である。
【図１５】本発明の実施形態に係るディープニューラルネットワークの３状態ニューラルネットワークの学習方法を説明する図である。
【図１６】本発明の実施形態に係るディープニューラルネットワークの３状態ニューラルネットワークの学習方法を説明する図である。
【図１７】本発明の実施形態に係るディープニューラルネットワークの３状態ニューラルネットワークの認識精度向上を説明する図である。
【図１８】本発明の実施形態に係るディープニューラルネットワークの３状態ニューラルネットワーク回路と３値ニューラルネットワーク回路の組み合わせによる物体検出実証例を説明する図である。
【図１９】本発明の実施形態に係るディープニューラルネットワークの３状態ニューラルネットワーク回路と物体認識アルゴリズムYOLOv2との比較を説明する図である。
【図２０】本発明の実施形態に係るディープニューラルネットワークの３状態ニューラルネットワーク回路の実装例を説明する図である。
【発明を実施するための形態】
【００１４】
以下、図面を参照して本発明を実施するための形態（以下、「本実施形態」という）におけるディープニューラルネットワークについて説明する。
（背景説明）
図１は、ディープニューラルネットワーク（ＤＮＮ）の構造の一例を説明する図である。
図１に示すように、ディープニューラルネットワーク（ＤＮＮ）１は、入力層（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：再帰型ニューラルネットワーク）を構成することができる。
【００１７】
図１の太破線三角部に示すように、ディープニューラルネットワーク１は、多層のニューラルネットワークを実現する回路（以下、ニューラルネットワーク回路という）２から構成されている。
本技術は、ニューラルネットワーク回路２を対象とする。ニューラルネットワーク回路２の適用箇所および適用数は限定されない。例えば、隠れ層１２の層数ｎ：２０〜３０の場合、これらの層のどの位置に適用してもよく、またどのノードを入出力ノードとするものでもよい。さらに、ディープニューラルネットワーク１に限らず、どのようなニューラルネットワークでもよい。ただし、入力層１１または出力層１３のノード出力には、２値化出力ではなく多ビット出力が求められるので、ニューラルネットワーク回路２は、対象外である。ただし、出力層１３のノードを構成する回路に、乗算回路が残ったとしても面積的には問題にはならない。
なお、入力データに対し学習済のものを評価していくことを前提としている。したがって、学習結果として重みＷｉは既に得られている。
【００１８】
<非ゼロ畳み込み演算回路を備えるニューラルネットワーク回路>
図２は、本実施形態に係る非ゼロ畳み込み演算回路２１を備えるニューラルネットワーク回路２０の構成を示す図であり、人工ニューロンモデル（Artificial Neuron (AN) Model）に適用した例である。なお、ゼロは、０、零と表記することがある。
本実施形態のニューラルネットワーク回路２０は、図１のディープニューラルネットワーク１を構成するニューラルネットワーク回路２に適用できる。
【００１９】
ニューラルネットワーク回路２０は、畳み込みを行う入力値Ｘｉと、重みＷｉを受け取り、非ゼロ畳み込み演算を行う非ゼロ畳み込み演算回路２１（畳み込み演算回路）と、畳み込み演算された各演算値とバイアスＷ０との総和を取る総和回路２２と、総和を取った信号Ｙを活性化関数ｆ(u)で変換する活性化関数回路２３と、を備えて構成される。
【００２０】
ニューラルネットワーク回路２０は、基本演算が、入力値Ｘｉと重みＷｉの積和演算を行う人工ニューロン（AN）である。
ｘｉ：Input signal（入力値）
ｗ０：Bias（バイアス）
ｗｉ：Weight（重み）
ｕ：Internal state（中間値）
ｆ（ｕ）：Activation function（活性化関数、例えばSigmoid, ReLU, etc.）
ｙ：Output signal（出力値）
【００２１】
非ゼロ畳み込み演算回路２１は、重みＷｉがゼロの重みをスキップし、非ゼロの重みと当該非ゼロの重みに対応する入力値Ｘｉをもとに畳み込み演算を行う。
非ゼロ畳み込み演算回路２１は、３状態｛−多ビット，０，＋多ビット｝の重みＷｉがゼロの重みをスキップし、非ゼロの重みと当該非ゼロの重みに対応する入力値Ｘｉをもとに畳み込み演算を行う。
非ゼロ畳み込み演算回路２１は、３値化｛−１，０，＋１｝または２値化｛−１，＋１｝の重みＷｉがゼロの重みをスキップし、非ゼロの重みと当該非ゼロの重みに対応する入力値Ｘｉをもとに畳み込み演算を行う。
【００２２】
<閾値ρと関数ｈ（ｘ）の組み合わせによる状態表現>
本発明は、重みの閾値ρと活性化関数ｆ(u)の組み合わせで様々な状態のニューラルネットワークを表現することを特徴とする。ρが閾値、Ｗｉが重みである。重みＷｉが±１のとき、３値化ニューラルネットワーク、重みＷｉが±Ｗ（多ビット精度）のとき、３状態ニューラルネットワークである。
（１）ρ＝０，ｈ（ｘ）がsign(x)符号関数の場合、ニューラルネットワーク回路２０は、
２値ニューラルネットワーク回路を構成する。
【００２３】
【数１】
2019200553.tif 000003
【００２４】
（２）ρ≠０，ｈ（ｘ）がsign(x)符号関数の場合、ニューラルネットワーク回路２０は、
３値化ニューラルネットワーク回路を構成する。
【００２５】
【数２】
2019200553.tif 000004
【００２６】
（３）ρ≠０，ｈ（ｘ）がsign(x)符号関数の場合、ニューラルネットワーク回路２０は、
３状態ニューラルネットワーク回路を構成する。
【００２７】
【数３】
2019200553.tif 000005
ただし、
Ｗhid：多ビット重みＷｉ
ρ：閾値
【００２８】
特に、上記数式（３）の閾値ρと活性化関数ｆ(u)の組み合わせを用いることで、非ゼロ畳み込み演算回路２１を、３状態畳込み演算回路で構成する。これにより、ニューラルネットワーク回路２０は、３状態ニューラルネットワーク回路を構成する。
【００２９】
また、上記数式（２）の閾値ρと活性化関数ｆ(u)の組み合わせを用いることで、非ゼロ畳み込み演算回路２１を、３値化畳込み演算回路で構成する。これにより、ニューラルネットワーク回路２０は、３値化ニューラルネットワーク回路を構成する。
上記３状態ニューラルネットワーク回路と３値化ニューラルネットワーク回路は、いままでにない本発明のニューラルネットワークである。
【００３０】
<３状態ニューラルネットワーク回路と３値化ニューラルネットワーク回路の比較>
３値化ニューラルネットワーク回路は、２値化｛−１，＋１｝畳込み演算回路よりも省面積かつ高速である。
３値化ニューラルネットワーク回路は、重みＷｉが低ビット（−１，０，１）であるので、省面積かつ高速な回路である。ただし、３状態ニューラルネットワーク回路に比べて認識精度が低くなるため用途は限られる。
【００３１】
３状態ニューラルネットワーク回路は、重みＷｉが多ビット（例えば８〜１６ビットの±Ｗｉと“０”）であるので、認識精度は高く用途（応用範囲）も広い。３状態ニューラルネットワーク回路は、３値化ニューラルネットワーク回路よりも認識精度が高い。ただし、３値化ニューラルネットワーク回路に比べて面積（特にメモリ量）が増える。また、３値化ニューラルネットワーク回路よりも処理速度が遅い。
【００３２】
３状態ニューラルネットワーク回路と重み３値化ニューラルネットワーク回路の組み合わせ、または、３状態ニューラルネットワーク回路と重み２値化ニューラルネットワーク回路の組み合わせが可能である。
３値化ニューラルネットワーク回路は、３状態ニューラルネットワーク回路に比べて認識精度が低いので用途が狭いものの、３状態ニューラルネットワーク回路と併用することで高速化・面積削減が可能になる。３状態ニューラルネットワーク回路と３値化（または２値化）ニューラルネットワーク回路を組み合わせると、面積と認識精度のバランスが取れたＡＩ回路を実現可能である。
【００３３】
<非ゼロ畳み込み演算回路２１>
図３は、非ゼロ畳み込み演算回路２１の畳み込み演算の概念を示す図である。
非ゼロ畳み込み演算回路２１は、ＣＮＮにおいて３状態｛−Ｗ(多ビット)，０，＋Ｗ(多ビット｝または３値化｛−１，０，＋１｝畳み込み演算を行う。
図３に示すように、非ゼロ畳み込み演算回路２１を備えるニューラルネットワーク回路２０は、物体検出（Dilated Convolution）する際に、画像データと重み関数の畳み込み演算を行う。例えば、Input Feature Mapに画像（行列の各要素はそれぞれ画像の１ピクセルに対応）を入力する。この入力画像に対して、カーネル（kernel）（この例ではＫ＝３）の値と行列の値を要素毎に掛け合わせ、それらの値を合計する。この操作をカーネルをスライドさせながら各要素に対して行い全体の畳み込み演算を行う。
図３に示すように、非ゼロ畳み込み演算回路２１は、重み関数に、０が多い場合は、０をスキップする回路構成とする（後記）。
【００３４】
ディープラーニングは学習と推論の２つのフェーズがあり、通常は画像や音声のデータを使って学習を行い、重みを確定する。その後、推論用のデバイスに学習済みデータを変換（ここでは低ビット化と枝刈り（ゼロ化））する。したがって、非零の重みとその位置は学習後に判明することになる。学習後、推論のみの場合は、位置や値の更新は行われない。なお、再学習が必要な時は、位置や値の変更が行われてしまうことになる。
【００３５】
図４は、非ゼロ畳み込み演算回路２１の構成を示す図であり、図４（ａ）はその回路構成図、図４（ｂ）はその０スキップの一例を示す図である。
図４（ａ）に示すように、非ゼロ畳み込み演算回路２１は、非ゼロの重みと畳み込みを行う入力値Ｘｉの相対アドレスを格納する重み／アドレスメモリ２１３（第１記憶手段）と、加算器２１４と、入力値Ｘｉのアドレスを格納するアドレス／データメモリ２１５（第２記憶手段）と、積算回路２１６と、を備える。
非ゼロ畳み込み演算回路２１は、ゼロの重みをスキップする演算の際、重み／アドレスメモリ２１３から該当する非ゼロの重みとその相対アドレスを読み込み、読み込んだ相対アドレスと現在のアドレスからアドレス／データメモリ２１５を参照して次の畳み込みを行う入力値Ｘｉを読み出し、アドレス／データメモリ２１５から読み出した入力値Ｘｉと該当する非ゼロの重みをもとに畳み込み演算を行う（図８（ｂ）参照）。
【００３６】
具体的には、重み／アドレスメモリ２１３は、インデックスｉｄｘ毎に非零重みｗ１，…と相対アドレスａｄｒ１，…とを格納する。重み／アドレスメモリ２１３は、入力されたカウンタ値に従って、該当するインデックスｉｄｘの非零重みＷｉと相対アドレスａｄｒを読み出す。加算器２１４は、ベースアドレスＸｔｍｐに、相対アドレスａｄｒを加算してアドレスを作成し、アドレス／データメモリ２１５に出力する。図４（ｂ）の矢印に示すように、非ゼロ畳み込み演算回路２１は、ベースアドレスＸｔｍｐを基点とし、そこから相対アドレスａｄｒ１，ａｄｒ２先のアドレスを作成する。
【００３７】
アドレス／データメモリ２１５は、アドレスとそのアドレスに対応するデータＸ１，…を格納する。非ゼロ畳み込み演算回路２１は、アドレス／データメモリ２１５から、加算器２１４から出力されたアドレスに対応するデータ（入力値Ｘｉ）を読み出す。
積算回路２１６は、重み／アドレスメモリ２１３から読み出した非零重みＷｉとアドレス／データメモリ２１５から読み出した入力値Ｘｉとを乗算して出力値Ｙｉを出力する。
【００３８】
このように、非ゼロ畳み込み演算回路２１は、重みが０でない相対アドレスを指定することで、１つの演算が終わったら次の相対アドレスにジャンプして必要な個所だけを畳み込み演算する。すなわち、非ゼロ畳み込み演算回路２１は、重みが０でない相対アドレスによる演算スキップを行う。
前記図３に示すように、非ゼロ畳み込み演算回路２１は、０をスキップしながら、カーネルの値（畳み込みを行う入力値Ｘ）と行列の値（非零重みｗ）を要素毎に掛け合わせる。
畳み込み演算を行う重み関数が疎（ゼロが多い）である特徴を生かして、それを相対アドレス表示して重みが非ゼロの箇所のみを演算処理する回路構成にすることによって、計算時間の高速化、メモリ面積の削減が可能となる。
なお、本実施形態では、学習の最適化により、９０〜９５％のスキップが可能になっている。
【００３９】
非ゼロ畳み込み演算回路２１は、非ゼロの重みと畳み込みを行う入力値Ｘｉの絶対アドレスを格納するメモリ（第３記憶手段）（図示省略）を有する。そして、非ゼロ畳み込み演算回路２１は、ゼロの重みをスキップする演算の際、このメモリから絶対アドレスを指定して該当する非ゼロの重みと入力値Ｘｉを読み出し、読み出した入力値Ｘｉと該当する非ゼロの重みをもとに畳み込み演算を行うものであってもよい（図８（ａ）参照）。
【００４０】
［実施形態の構成］
<３状態ニューラルネットワーク回路２００>
図５は、本発明の実施形態に係るニューラルネットワークの３状態ニューラルネットワーク回路２００の構成を示す図である。図４と同一構成部分には、同一符号を付している。
本実施形態の３状態ニューラルネットワーク回路２００は、ディープニューラルネットワークへの実装技術を提供する。
３状態ニューラルネットワーク回路２００（ニューラルネットワーク回路装置）は、図１のニューラルネットワーク回路２に適用できる。
図５に示すように、３状態ニューラルネットワーク回路２００は、カウンタ値を出力するカウンタ２１１と、ベースアドレスを出力するレジスタ２１２と、重み／アドレスメモリ２１３と、加算器２１４と、アドレス／データメモリ２１５と、積算回路２１６と、レジスタ２１７と、加算器２１８と、バイアス値を出力するレジスタ２１９と、加算器２２０と、活性化関数回路２２１Ａと、を備える。
上記乗算器２１６、レジスタ２１７、加算器２１８、レジスタ２１９と、加算器２２０、および活性化関数回路２２１Ａは、Sequential MAC Unit２２２に搭載される。
上記カウンタ２１１、ベースアドレスを出力するレジスタ２１２、重み／アドレスメモリ２１３、加算器２１４、アドレス／データメモリ２１５、および積算回路２１６は、非ゼロ畳み込み演算回路２１を構成する。
【００４１】
３状態ニューラルネットワーク回路２００は、３状態（Tri-state）｛−ｗ，０，＋ｗ｝畳み込み演算回路（非ゼロ畳み込み演算回路２１）を備える。
活性化関数回路２２１は、Leaky ReLU符号関数を用いる。
上記重み／アドレスメモリ２１３の一部と加算器２１４には、間接メモリアクセス（図５破線囲み参照）を導入している（図１１で後述）。
【００４２】
３状態ニューラルネットワーク回路２００は、非ゼロ畳み込み演算回路２１を備えることで、計算時間の高速化、メモリ面積の削減が可能となったり。従来技術では、オンチップに配置することは、極めて困難であった。本実施形態によれば、非ゼロ畳み込み演算回路２１を備えることで、畳み込み演算部分の積和演算の絶対数を劇的に減らして、オンチップ配置を実現した。
【００４３】
<３値化ニューラルネットワーク回路２００Ａ>
図６は、本発明の実施形態に係るニューラルネットワークの３値化ニューラルネットワーク回路２００Ａの構成を示す図である。図４と同一構成部分には、同一符号を付している。
本実施形態の３値化ニューラルネットワーク回路２００Ａは、３状態ニューラルネットワーク回路２００と同様にディープニューラルネットワークへの実装技術を提供する。また、３値化ニューラルネットワーク回路２００Ａは、３状態ニューラルネットワーク回路２００と併用して好適である。
３状態ニューラルネットワーク回路２００（ニューラルネットワーク回路装置）は、図１のニューラルネットワーク回路２に適用できる。
【００４４】
図６に示すように、３値化ニューラルネットワーク回路２００Ａは、カウンタ値を出力するカウンタ２１１と、ベースアドレスを出力するレジスタ２１２と、重み／アドレスメモリ２１３と、加算器２１４と、アドレス／データメモリ２１５と、ＸＮＯＲ（Exclusive NOR：否定排他的論理和）論理を取る複数のＸＮＯＲゲート回路２１６Ａと、レジスタ２１７と、加算器２１８と、バイアス値を出力するレジスタ２１９と、加算器２２０と、活性化関数回路２２１Ａと、を備える。
上記ＸＮＯＲゲート回路２１６Ａ、レジスタ２１７、加算器２１８、レジスタ２１９と、加算器２２０、および活性化関数回路２２１Ａは、Sequential MAC Unit２２２Ａに搭載される。
上記カウンタ２１１、ベースアドレスを出力するレジスタ２１２、重み／アドレスメモリ２１３、加算器２１４、アドレス／データメモリ２１５、およびＸＮＯＲゲート回路２１６Ａは、非ゼロ畳み込み演算回路２１Ａを構成する。
【００４５】
３値化ニューラルネットワーク回路２００Ａは、３値｛−１，０，＋１｝畳み込み演算回路（非ゼロ畳み込み演算回路２１Ａ）を備える。
３値化ニューラルネットワーク回路２００Ａは、積算回路２１６（図５参照）がＸＮＯＲ論理を実現するＸＮＯＲゲート回路２１６Ａに置き換えられている。このため、積算回路２１６を構成する際に必要であった面積を削減することができる。また、重みＷｉは、３値｛−１，０，＋１｝であるため、多値である３状態と比較してメモリ量を大幅に削減でき、メモリ帯域を向上させることができる。
活性化関数回路２２１Ａは、Sign(x)符号関数を用いる。
上記重み／アドレスメモリ２１３の一部と加算器２１４には、間接メモリアクセス（図６破線囲み参照）を導入している（図１１で後述）。間接メモリアクセスの導入により“０”スキップを実現している。
【００４６】
<間接メモリアクセス>
間接メモリアクセスについて説明する。
図７は、間接メモリアクセスを説明する図であり、図７（ａ）は重み／アドレスメモリ２１３に格納される非零重みと相対アドレスの一例を示す図、図７（ｂ）は“０”スキップする非零重みｗを示す図、図７（ｃ）は畳み込みを行う入力値Ｘの読み出しを示す図である。
図７（ａ）に示すように、重み／アドレスメモリ２１３は、ＩＤ毎に非零重みＷ（ｗ１，…）と相対アドレスａｄｒ１，…を指定するインデックスＬを格納する。
インデックスＬは、（Input Feature Map(入力画像)，row(行)，column(列)）を指定する。
図７に示す間接メモリアクセスでは、下記１．２．を実行する。
１．該当する重みと相対アドレスを読み込む。
２．相対アドレスと現在のアドレスから畳み込みを行う入力値Ｘｉを読み出す。
【００４７】
<間接アドレスの表現>
間接アドレスの表現方法について説明する。
図８は、間接アドレスの表現方法を説明する図であり、図８（ａ）は絶対アドレス指定方法を示す図、図８（ｂ）は相対アドレス指定方法を示す図である。
図８（ａ）に示すように、絶対アドレス指定は、｛ページ，Ｙ，Ｘ｝を用いて絶対アドレスを指定する。この例では、図８（ａ）に示す元の絶対アドレス（０，０）を基点とし、そこから｛ページ，Ｙ，Ｘ｝で示されるアドレスを指定する。例えば、図８（ａ）の矢印に示すように、元の絶対アドレス（０，０）を基点に、｛＋０，＋２，＋０｝を指定して絶対アドレス（２，０）の値(図８（ａ）網掛け参照)を得る。以下同様に、図８（ａ）の矢印に示すように、元の絶対アドレス（０，０）を基点に、｛＋１，＋２，＋１｝を指定して、次のページの画像データの絶対アドレス（２，１）の値(図８（ａ）網掛け参照)を得る。
【００４８】
絶対アドレス指定方法は、途中でメモリの値が化けても正しく演算できる。ただし、絶対アドレスが長いので、相対アドレス方法と比較してメモリ量が増えてしまうことに留意する。
【００４９】
図８（ｂ）に示すように、相対アドレス指定方法は、次のアドレスを相対値で指定する。例えば、図８（ｂ）の矢印に示すように、元のアドレス（ベースアドレス）（０，０）を基点に、＋２を指定して、次のアドレス（１，３）の値(図８（ｂ）網掛け参照)を得る。そこから、＋５を指定して、次のアドレス（３，２）の値、さらに、＋５を指定して、次のページの画像のアドレス（２，１）の値を得る。
【００５０】
相対アドレス指定方法は、相対値を記憶しておけばよいので絶対アドレス方法と比較してメモリ量を減らすことができる。ただし、相対アドレス指定方法は、何らかの理由で、演算途中でメモリの値が化けた時（変化した時）に演算が誤ってしまうことになる。
【００５１】
本実施形態では、メモリ量を減らす観点から、０スキップ演算に相対アドレス指定方法を採用する。図４に示す非ゼロ畳み込み演算回路２１は、この相対アドレス指定方法を採用して、重み／アドレスメモリ２１３から相対アドレスａｄｒを読み出し、加算器２１４で、順次、Ｘｔｍｐを加算して先のアドレスを指定する。
【００５２】
<畳み込みニューラルネットワークへの適用>
畳み込みニューラルネットワークへの適用について説明する。
図９は、畳み込みニューラルネットワークへの適用を説明する図である。図１０は、“０”スキップする演算の効果を説明する図である。
図９に示すように、畳み込みニューラルネットワークは、Input feature mapと、Kernel(Sparse)と、Output feature mapと、を有する。
この畳み込みニューラルネットワークに、３状態ニューラルネットワーク回路２００（図５参照）を適用する。
３状態ニューラルネットワーク回路２００は、前記したように０スキップ演算を行う非ゼロ畳み込み演算回路２１を備える。
【００５３】
０スキップ演算を導入することにより、図１０の破線囲みに示す演算がスキップされる。これにより、畳み込み演算部分の積和演算の絶対数を劇的に減らすことができ、メモリ量削減、計算時間の高速化を図ることができる。
【００５４】
また、図９に示す畳み込みニューラルネットワークに、３値化ニューラルネットワーク回路２００Ａ（図６参照）を適用してもよい。この場合、３値化ニューラルネットワーク回路２００Ａは、３値｛−１，０，＋１｝を用いるため、多値である３状態ニューラルネットワーク回路２００と比較してメモリ量を大幅に削減できる。
【００５５】
<“０”をスキップする演算；間接メモリアクセス>
"０"をスキップする演算、すなわち間接メモリアクセスについて説明する。
図１１は、“０”をスキップする演算；間接メモリアクセスを説明する図である。図９に示す畳み込みニューラルネットワークに、図７および図８（ａ）の間接メモリアクセスを適用した場合を例に採る。
上述したように、"０"をスキップすることで、メモリ量削減と処理の高速化を図ることを目的とする。
本実施形態では、間接メモリアクセス（相対アドレスによる２回のメモリアクセス）を導入する。具体的には、下記の通りである。
図１１に示すように、
１．図１１の実線矢印に示すように、１回目のメモリアクセスで、相対値を読み込む。
２．ベースアドレスと相対値から重み“０”でない入力アドレスを計算する。
３．２回目のメモリアクセスで、計算したアドレスから入力値を読み込む。
４．図１１の破線矢印に示すように、積算（ニューラルネットワークの演算）を行う。
【００５６】
<メモリ量を削減できる原理>
メモリ量を削減できる原理について説明する。
図１２は、ビット精度を減らすことでメモリ量を削減する例を説明する図であり、図１２（ａ）はニューラルネットワーク回路２０（図２参照）の構成図、図１２（ｂ）はメモリ量を削減できる原理図である。
図１２（ａ）に示すニューラルネットワーク回路２０は、非ゼロ畳み込み演算回路２１において、例えば３２ビット精度から１ビット精度｛−１，＋１｝にビット数の削減を行う。
これにより、図１２（ｂ）に示すように、メモリ量の削減を図ることができる。
【００５７】
図１３は、０スキップ演算でメモリ量を削減する例を説明する図であり、図１３（ａ）はニューラルネットワーク回路２０（図２参照）の構成図、図１３（ｂ）はメモリ量を削減できる原理図である。
図１３（ａ）の×印に示すように、ニューラルネットワーク回路２０は、非ゼロ畳み込み演算回路２１において、“０”をスキップする（ここでは、重みｗ２の乗算をスキップ）。すなわち、０の乗算は、０になることが既知であるためスキップする。これにより、メモリ量削減と処理の高速化を図ることができる。
【００５８】
上記ニューラルネットワーク回路２０は、３状態（０、±多ビット）畳み込み演算を行う３状態ニューラルネットワーク回路２００（図５参照）である。３状態ニューラルネットワーク回路２００は、低ビット化（図１２のメモリ量削減）と０スキップ演算（図１３のメモリ量削減）を併せて実行するので、メモリ量をより一層削減することができる。
【００５９】
［実施形態のディープニューラルネットワークの学習方法］
ディープニューラルネットワークの学習方法について、比較例と本実施形態の３状態ニューラルネットワーク回路２００とを比較して説明する。
<比較例>
図１４は、比較例のディープニューラルネットワークの学習方法を説明する図である。
図１４の上段に示すように、比較例のディープニューラルネットワークでは、誤差逆伝搬法により、学習データ（主に画像）を、ニューラルネットワークにおいて順伝搬させる。ニューラルネットワークの出力として、cat88%、dog10%、car5%を得る。
【００６０】
図１４の下段に示すように、比較例のディープニューラルネットワークでは、教師データcat100%、dog0%、car0%を入力し、順伝搬の出力との誤差を計算する。そして、教師データとの誤差をディープニューラルネットワークの出力層のノードに入力し、ニューラルネットワークを逆伝搬させて重みＷｉを更新していく。
上記順伝搬と逆伝搬および重みＷｉ更新を何度も繰り返すことで、ディープニューラルネットワークの学習を行う。
学習終了後、丸め処理をしない状態で保っていた重みＷｉを０にして、重みが疎なニューラルネットワークを生成する。
【００６１】
<本実施形態>
図１５および図１６は、本実施形態の３状態ニューラルネットワークの学習方法を説明する図である。３状態ニューラルネットワークは、例えば図５に示す３状態ニューラルネットワーク回路２００を適用する。
３状態ニューラルネットワーク回路２００は、ニューラルネットワークを順伝搬して得られた出力と学習データとの誤差を計算し、当該ニューラルネットワークを逆伝搬させて重みＷｉを更新する、学習を繰り返す場合、学習が終了するまでは少なくとも中間層の中では、重みＷｉを丸め処理しない。
図１５の上段に示すように、学習データ（主に画像）を、３状態で順伝搬させる。３状態ニューラルネットワーク内部では、Ｗｉを保持しておく。３状態ニューラルネットワークの出力として、cat88%、dog10%、car5%を得る。
【００６２】
図１５の下段に示すように、３状態ニューラルネットワークでは、教師データcat100%、dog0%、car0%を入力し、順伝搬の出力との誤差を計算する。そして、教師データとの誤差を３状態ニューラルネットワークの出力層のノードに入力し、３状態ニューラルネットワークを逆伝搬させて重みｗを更新していく。Ｗｉは多ビット値のままである。
上記順伝搬と逆伝搬および重みｗ更新を何度も繰り返すことで、３状態ニューラルネットワークの学習を行う。
【００６３】
３状態ニューラルネットワーク回路２００は、ニューラルネットワークを順伝搬して得られた出力と学習データとの誤差を計算し、当該ニューラルネットワークを逆伝搬させて重みＷｉを更新する、学習を繰り返す場合、学習終了後、丸め処理をしない状態で保っていた重みＷｉを０にして、重みが疎なニューラルネットワークを生成する。
図１６の上段に示すように、学習が終わってから、閾値を用いて重みＷｉを０にする。
図１６の下段の矢印に示すように、重みが疎なディープニューラルネットワークが生成される。
【００６４】
［実施形態の認識精度］
本実施形態の３状態ニューラルネットワークの認識精度向上について説明する。
図１７は、３状態ニューラルネットワークの認識精度向上を説明する図である。
VGG11で評価した。画像はPascal VOC2007に準拠した。
ニューラルネットワークは、図１７の左欄の処理、すなわち、Integer Conv2D、Binary Conv2D 、 Max Pooling 、Binary Conv2D×３、Max Pooling 、Binary Conv2D×３、Average Pooling およびFully Connect を実行することとした。
【００６５】
Integer Conv2Dを除く、Binary Conv2D 、 Max Pooling 、Binary Conv2D×３、Max Pooling 、Binary Conv2D×３、Average Pooling およびFully Connectを全て２値化｛−１，＋１｝した場合、認識精度は、86.９%であった。
【００６６】
Binary Conv2D 、 Max Pooling 、Binary Conv2D×３、Max Pooling およびBinary Conv2D×３を２値化｛−１，＋１｝し、Average Pooling およびFully Connectを３状態｛−ｗ，０，＋ｗ｝した場合、認識精度は、93.47%であった。
【００６７】
Binary Conv2D 、 Max Pooling 、Binary Conv2D×３、Max Pooling およびBinary Conv2D×２を２値化｛−１，＋１｝し、Binary Conv2D、Average Pooling およびFully Connectを３状態｛−ｗ，０，＋ｗ｝した場合、認識精度は、97.29%であった。
【００６８】
［物体検出実証］
本実施形態の３状態ニューラルネットワーク回路と３値ニューラルネットワーク回路の組み合わせについて説明する。
図１８は、３状態ニューラルネットワーク回路と３値ニューラルネットワーク回路の組み合わせによる物体検出実証例を説明する図である。
物体検出ニューラルネットワークYOLOv2を３状態ニューラルネットワークで実現した実施例である。
図１８に示すように、前段は３値化ニューラルネットワーク回路２００Ａ、メモリを介して、後段は３状態ニューラルネットワーク回路２００とした。
前段の３値化ニューラルネットワーク回路２００Ａは、ニューラルネットワークとしてTernaryCNN(Feature extraction)を用いた。後段の３状態ニューラルネットワーク回路２００は、Half PrecisionCNN(Localization, classification)を用いた。３状態ニューラルネットワーク回路２００は、16bit半精度浮動小数点を利用した。
【００６９】
物体検出ニューラルネットワークYOLOv２を３状態ニューラルネットワークで実現した場合、下記を得た。
（１）３状態化しても認識精度は、ほぼ同一であることが判明した。
（２）重みＷｉを約92%スキップする（“０”にする）ことができた。
（３）・メモリ量を92%削減することができた。その結果、36.50FPS（Frames Per Second）の認識速度を達成できた。
【００７０】
［他のデバイスとの比較例］
本実施形態の３状態ニューラルネットワーク回路と物体認識アルゴリズムYOLOv2との比較について説明する。
図１９は、３状態ニューラルネットワーク回路と物体認識アルゴリズムYOLOv2との比較を説明する図である。
本発明の３状態ニューラルネットワーク回路と物体認識アルゴリズムYOLOv2とを比較した。
mCPU（ARM Cortex A57）, mGPU（NVidia Pascal GPU）: Jetson TX2ボードを使用し、FPGAはZynq Ultrascale+ MPSoC zcu102ボードを使用した。
本発明の３状態ニューラルネットワーク回路は、ARM Cortex-A57 と比較して、 158.7 倍速く、1.1 倍少ない電力消費であり、電力性能効率は182.80 倍優れていた。
また、本発明の３状態ニューラルネットワーク回路は、NVidia Pascall 組込みGPU と比較して、24.6 倍高速であり、消費電力は2.0 倍少なく、電力効率は49.38 倍向上した。
【００７１】
［実装例］
図２０は、本発明の実施形態に係る３状態ニューラルネットワーク回路の実装例を説明する図である。
<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>
検証後、基板２０５を完成させた。基板２０５には、２値化ニューラルネットワーク回路１００がハードウェア化されて実装されている。
【００７６】
以上説明したように、本実施形態に係る３状態ニューラルネットワーク回路２００（図５参照）は、中間層の中で、畳み込みを行う入力値Ｘｉと、重みＷｉを受け取り、畳み込み演算を行う非ゼロ畳み込み演算回路２１と、畳み込み演算された各演算値とバイアスＷ０との総和を取る総和回路２２（図２）と、総和を取った信号Ｙを活性化関数ｆ(u)で変換する活性化関数回路２３と、を備える。非ゼロ畳み込み演算回路２１は、重みＷｉがゼロの重みをスキップし、非ゼロの重みと当該非ゼロの重みに対応する入力値Ｘｉをもとに畳み込み演算を行う。
【００７７】
この構成により、畳み込み演算部分の積和演算の絶対数を劇的に減らすことができ、メモリ量削減、計算時間の高速化を図ることができる。実際の例で確認した結果、畳み込み演算部分の計算時間が９５％削減（１/２０）となった。
この計算時間の高速化、メモリ面積の削減の効果を活かして初めて、メモリ量を削減してオンチップに配置が可能なニューラルネットワークが実現できた。
３状態ニューラルネットワーク回路２００は、重みＷが多ビット（例えば８〜１６ビットの±ｗと“０”）であり、認識精度は高く用途（応用範囲）も広い利点を活かしつつ、メモリ量を劇的に減らして、オンチップ配置を実現した。オンチップ化（ニアメモリ）のメリットとして、広帯域（オフチップより約１００倍高速）および低消費電力（オフチップより約３３倍低い）の効果を奏する。
【００７８】
３状態ニューラルネットワーク回路２００は、ニューラルネットワークを順伝搬して得られた出力と学習データとの誤差を計算し、当該ニューラルネットワークを逆伝搬させて重みＷｉを更新する、学習を繰り返す場合、学習終了後、丸め処理をしない状態で保っていた重みＷｉを閾値を用いて０にして、重みが疎なニューラルネットワークを生成する。
【００７９】
ディープニューラルネットワークのCNNにおいて、畳み込み演算を行う重み関数が疎（ゼロが多い）である特徴を活かして、それを相対アドレス表示して重みが非ゼロの箇所のみを演算処理する回路構成にする。３状態（０、±多ビット）ニューラルネットワークの計算量を大幅に削減する。
本発明を適用することにより、多ビットのアナログ量を扱う一般物体認識、意味的領域分割、自己位置推定などをリアルタイムで実現することが可能となる。
【００８０】
また、３値化ニューラルネットワーク回路２００Ａ（図６参照）は、３値化により、２値化ニューラルネットワークと比較して約１〜２％認識精度を改善しつつ、約９５％削減（重みを０）にすることにより約３〜４倍の高速化を達成することが可能となる。
【００８１】
ちなみに、特許文献２の技術では、係数をゼロ除去するのみであり、非ゼロは多ビット（通常は３２ビット浮動小数点精度）になっている。これに対して、本発明は、図１２に示すように、係数をゼロにすることと低ビット化（１ビット）を同時に行うことで、メモリ量の大幅な削減を図ることができる。また、本発明のように、ニューラルネットワークを逆伝搬させて重みＷｉを更新する、学習を繰り返す場合、学習終了後、丸め処理をしない状態で保っていた重みＷｉを閾値を用いて０にして、重みが疎なニューラルネットワークを生成する技術的思想はない。
【００８２】
本発明は上記の実施形態例に限定されるものではなく、特許請求の範囲に記載した本発明の要旨を逸脱しない限りにおいて、他の変形例、応用例を含む。
【００８３】
また、上記した実施形態例は本発明をわかりやすく説明するために詳細に説明したものであり、必ずしも説明した全ての構成を備えるものに限定されるものではない。また、ある実施形態例の構成の一部を他の実施形態例の構成に置き換えることが可能であり、また、ある実施形態例の構成に他の実施形態例の構成を加えることも可能である。また、実施形態例は、その他の様々な形態で実施されることが可能であり、発明の要旨を逸脱しない範囲で、種々の省略、置き換え、変更を行うことができる。これら実施形態やその変形例は、発明の範囲や要旨に含まれるとともに、特許請求の範囲に記載された発明とその均等の範囲に含まれる。
【００８４】
また、上記実施形態において説明した各処理のうち、自動的に行われるものとして説明した処理の全部または一部を手動的に行うこともでき、あるいは、手動的に行われるものとして説明した処理の全部または一部を公知の方法で自動的に行うこともできる。この他、上述文書中や図面中に示した処理手順、制御手順、具体的名称、各種のデータやパラメータを含む情報については、特記する場合を除いて任意に変更することができる。
また、図示した各装置の各構成要素は機能概念的なものであり、必ずしも物理的に図示の如く構成されていることを要しない。すなわち、各装置の分散・統合の具体的形態は図示のものに限られず、その全部または一部を、各種の負荷や使用状況などに応じて、任意の単位で機能的または物理的に分散・統合して構成することができる。
【００８５】
また、上記の各構成、機能、処理部、処理手段等は、それらの一部または全部を、例えば集積回路で設計する等によりハードウェアで実現してもよい。また、上記の各構成、機能等は、プロセッサがそれぞれの機能を実現するプログラムを解釈し、実行するためのソフトウェアで実現してもよい。各機能を実現するプログラム、テーブル、ファイル等の情報は、メモリや、ハードディスク、ＳＳＤ（Solid State Drive）等の記録装置、または、ＩＣ（Integrated Circuit）カード、ＳＤ（Secure Digital）カード、光ディスク等の記録媒体に保持することができる。
また、上記実施の形態では、装置は、ニューラルネットワーク回路装置という名称を用いたが、これは説明の便宜上であり、名称はディープニューラルネットワーク回路、ニューラルネットワーク装置、パーセプトロン等であってもよい。また、方法およびプログラムは、ニューラルネットワーク処理方法という名称を用いたが、ニューラルネットワーク演算方法、ニューラルネットプログラム等であってもよい。
【符号の説明】
【００８６】
１  ディープニューラルネットワーク
２，２０  ニューラルネットワーク回路
１１  入力層
１２  隠れ層（中間層）
１３  出力層
２１，２１Ａ  非ゼロ畳み込み演算回路（畳み込み演算回路）
２２  総和回路
２３，２２１，２２１Ａ  活性化関数回路
２００  ３状態ニューラルネットワーク回路（ニューラルネットワーク回路装置）
２００Ａ  ３値化ニューラルネットワーク回路（ニューラルネットワーク回路装置）
２１１  カウンタ
２１２，２１７，２１９  レジスタ
２１３  重み／アドレスメモリ（第１記憶手段）
２１４，２２２  加算器
２１５  アドレス／データメモリ（第２記憶手段）
２１６  積算回路
２１６Ａ  ＸＮＯＲゲート回路
２２２，２２２Ａ  Sequential MAC Unit
Ｘｉ  入力値
Ｗｉ  重み
【図１】
2019200553.tif 000007
【図２】
2019200553.tif 000008
【図３】
2019200553.tif 000009
【図４】
2019200553.tif 000010
【図５】
2019200553.tif 000011
【図６】
2019200553.tif 000012
【図７】
2019200553.tif 000013
【図８】
2019200553.tif 000014
【図９】
2019200553.tif 000015
【図１０】
2019200553.tif 000016
【図１１】
2019200553.tif 000017
【図１２】
2019200553.tif 000018
【図１３】
2019200553.tif 000019
【図１４】
2019200553.tif 000020
【図１５】
2019200553.tif 000021
【図１６】
2019200553.tif 000022
【図１７】
2019200553.tif 000023
【図１８】
2019200553.tif 000024
【図１９】
2019200553.tif 000025
【図２０】
2019200553.tif 000026