(57)【要約】  少ない乗算回数により畳み込み演算を実行する推論装置を提供する。推論装置は、重みを記憶する重み記憶部と、入力データを記憶する入力データ記憶部と、重み及び入力データを用いて畳み込みニューラルネットワークにおける畳み込み演算を実行するＰＥ（Processing Element）と、を備える。ＰＥは、入力データの要素が取り得る値ごとに、入力データの要素と乗算される重みの要素を累積加算する。ＰＥは、入力データの要素が取り得る値それぞれと、入力データの要素が取り得る値に対応する重みの累積加算値それぞれと、を乗算する。ＰＥは、当該乗算により得られる複数の乗算結果を加算する。
2019168088.tif 000002
【特許請求の範囲】
【請求項１】
重みを記憶する重み記憶部と、
入力データを記憶する入力データ記憶部と、
前記重み及び入力データを用いて畳み込みニューラルネットワークにおける畳み込み演算を実行するＰＥ（Processing Element）と、
を備え、
前記ＰＥは、
前記入力データの要素が取り得る値ごとに、前記入力データの要素と乗算される重みの要素を累積加算し、
前記入力データの要素が取り得る値それぞれと、前記入力データの要素が取り得る値に対応する重みの累積加算値それぞれと、を乗算し、
前記乗算により得られる複数の乗算結果を加算する、
推論装置。
【請求項２】
前記ＰＥは、
前記入力データの要素と前記重みの要素を入力するセレクタと、
それぞれが、前記入力データの要素が取り得る値ごとの重みの累積加算を計算し、記憶する複数の累算器と、
を備え、
前記セレクタは、前記入力データの要素値に応じて、前記複数の累算器のうち前記入力した重みの要素の出力先となる累算器を決定する、
請求項１の推論装置。
【請求項３】
前記ＰＥは、
前記複数の累算器それぞれに対応する、複数の乗算器を備え、
前記複数の乗算器には、前記重みの累積加算値と乗算する値が割り当てられている、請求項２の推論装置。
【請求項４】
前記ＰＥは、
前記複数の乗算器による乗算結果を入力し、加算する加算器を備える、請求項３の推論装置。
【請求項５】
前記入力データ記憶部は、量子化された入力データを記憶し、
前記ＰＥは、
前記入力データの要素を因数分解し、事前決定された第１因子群と第２因子群に分離する、分離部と、
前記重みの要素値を前記第２因子群の値に相当するビット数シフトする、シフト部と、
を備え、
前記セレクタは、前記第１因子群の値に応じて前記重みの要素の出力先を決定する、請求項４の推論装置。
【請求項６】
前記複数の累算器は、前記第１因子群が取り得る値ごとに用意され、
前記複数の乗算器のそれぞれには、前記第１因子群と第２因子群に分離される入力データにおいて前記第２因子群をゼロに固定し、前記第１因子群を可変して得られる値が前記重みの累積加算値と乗算する値として割り当てられる、請求項５の推論装置。
【請求項７】
前記重み記憶部にアクセスし、前記重みを前記セレクタに供給する重み処理部と、
前記入力データ記憶部にアクセスし、前記入力データを前記セレクタに供給する入力データ処理部と、
を備え、
前記重み処理部及び前記入力データ処理部は、前記入力データの要素値がゼロである入力データの要素及び対応する重みの要素を前記セレクタに供給しない、請求項２乃至６のいずれか一項に記載の推論装置。  
【請求項８】
前記複数の累算器のそれぞれは、加算器とレジスタを含んで構成される、請求項２乃至７のいずれか一項に記載の推論装置。
【請求項９】
前記複数の累算器のそれぞれは、レジスタを含み、
前記ＰＥは、
前記入力データの要素が取り得る値に応じて、前記複数の累算器のうちいずれか一つの累算器の出力を選択する、累積加算値セレクタと、
前記累積加算値セレクタが出力する値と前記重みの要素値を加算し、加算結果を前記セレクタに出力する、共有加算器と、
をさらに備える、請求項２乃至７のいずれか一項に記載の推論装置。
【請求項１０】
前記ＰＥは、
前記入力データ記憶部から取得した入力データの取り得る値を制限する、入力データ制限部をさらに備える、請求項１乃至９のいずれか一項に記載の推論装置。
【請求項１１】
前記ＰＥを複数備え、
前記複数のＰＥは、前記畳み込みニューラルネットワークにおける畳み込み演算を並列に実行する、請求項１乃至１０のいずれか一項に記載の推論装置。
【請求項１２】
重みを記憶する重み記憶部と、
入力データを記憶する入力データ記憶部と、
を備え、前記重み及び入力データを用いて畳み込みニューラルネットワークにおける畳み込み演算を実行する推論装置において、
前記入力データの要素が取り得る値ごとに、前記入力データの要素と乗算される重みの要素を累積加算するステップと、
前記入力データの要素が取り得る値それぞれと、前記入力データの要素が取り得る値に対応する重みの累積加算値それぞれと、を乗算するステップと、
前記乗算により得られる複数の乗算結果を加算するステップと、
を含む、畳み込み演算実行方法。
【請求項１３】
重みを記憶する重み記憶部と、
入力データを記憶する入力データ記憶部と、
を備え、前記重み及び入力データを用いて畳み込みニューラルネットワークにおける畳み込み演算を実行する推論装置に搭載されたコンピュータに、
前記入力データの要素が取り得る値ごとに、前記入力データの要素と乗算される重みの要素を累積加算する処理と、
前記入力データの要素が取り得る値それぞれと、前記入力データの要素が取り得る値に対応する重みの累積加算値それぞれと、を乗算する処理と、
前記乗算により得られる複数の乗算結果を加算する処理と、
を実行させるプログラム。
【発明の詳細な説明】
【技術分野】
【０００１】
［関連出願についての記載］
本発明は、日本国特許出願：特願２０１８−０３８０２８号（２０１８年  ３月  ２日出願）の優先権主張に基づくものであり、同出願の全記載内容は引用をもって本書に組み込み記載されているものとする。
本発明は、推論装置、畳み込み演算実行方法及びプログラムに関する。
【背景技術】
【０００２】
近年、多層ニューラルネットワークによる画像認識等に関する技術開発が活発に行われている。このような技術は、深層学習（ディープラーニング）とも称される。とりわけ、画像認識等の技術分野において、畳み込みニューラルネットワークが多く用いられる。畳み込みニューラルネットワークには、後述するように、畳み込み層、プーリング層、全結合層が含まれる。畳み込み層では、カーネルを画像全体に畳み込む処理が行われる。【０００３】
画像全体にカーネルを畳み込む処理（画像にフィルタを適用する処理）により、画像に畳み込まれた特徴の集合が得られる。当該特徴の集合は、特徴マップとも称される。特徴マップは、畳み込んだ値に活性化関数を適用することで得られる。例えば、画像認識の分野では、ＲｅＬＵ（Rectified Linear Unit）が活性化関数として用いられることが多い。【０００４】
上述のように、畳み込み層では、画像（入力画像）にカーネル（重み、フィルタ）を畳み込む処理が行われる。その際、画像の各画素と重みを乗算する処理が数多く行われる。【０００５】
非特許文献１は、畳み込み演算の前に入力データを２の冪乗に分解し、当該分解された入力データを畳み込み演算に利用する技術を開示している。非特許文献１では、重みの要素が取り得る値ごとに２の冪乗に分解された入力データの要素値の総和を計算し、重みごとに当該入力データの要素値と重みの要素値の乗算処理を行い、乗算結果を加算することで畳み込み演算を実行している。【０００６】
非特許文献２乃至４は、ＣＮＮ（Convolutional Neural Network）推論における「量子化」に関する技術を開示している。非特許文献２は、畳み込み演算の結果を２値（Ｂｉｎａｒｙ）に変換する技術を開示している。非特許文献３は、畳み込み演算の結果を３値（Ｔｅｒｎａｒｙ）に変換する技術を開示している。非特許文献４は、畳み込み演算の結果を４ビットに変換する技術を開示している。【０００７】
非特許文献２及び３に開示された技術は、畳み込み演算の結果が取り得る範囲を制限し、再学習してパラメータを決定する。対して、非特許文献４に開示された技術は、畳み込み演算の結果（整数、浮動小数点等）を２の冪乗に丸め込む。本願開示において、非特許文献４に開示された畳み込み演算の結果を２の冪乗に丸め込む量子化を「対数量子化」と表記する。
【先行技術文献】
【非特許文献】
【０００８】
【非特許文献１】Denis A. Gudovskiy, Luca Rigazio、“ShiftCNN: Generalized Low-Precision Architecture for Inference of Convolutional Neural Networks”、２０１８年１月２４日、［online］、［平成３０年１月２４日検索］、インターネット〈URL：https://arxiv.org/pdf/1706.02393〉
【非特許文献２】Matthieu Courbariaux, etc、“Binarized Neural Networks: Training Neural Networks with Weights and Activations Constrained to +1 or -1”、２０１８年１月２４日、［online］、［平成３０年１月２４日検索］、インターネット〈URL：https://arxiv.org/pdf/1602.02830〉
【非特許文献３】Fengfu Li and Bo Zhang, etc、“Ternary weight networks”、２０１８年１月２４日、［online］、［平成３０年１月２４日検索］、インターネット〈URL：https://arxiv.org/pdf/1605.04711〉
【非特許文献４】Daisuke Miyashita, etc、“Convolutional Neural Networks using Logarithmic Data Representation”、２０１８年１月２４日、［online］、［平成３０年１月２４日検索］、インターネット〈URL：https://arxiv.org/pdf/1603.01025〉
【発明の概要】
【発明が解決しようとする課題】
【０００９】
なお、上記先行技術文献の各開示を、本書に引用をもって繰り込むものとする。以下の分析は、本発明者らによってなされたものである。【００１０】
上述のように、深層学習、とりわけ、畳み込み層の演算では膨大な数の乗算処理が必要となる。膨大な乗算処理は、大規模なハードウェアを要求したり、強力な演算処理能力を有するプロセッサを要求したりする。そのため、ハードウェアの規模を抑えつつ、或いは、演算処理能力が低いプロセッサを用いたとしても、畳み込み層の演算を現実的な時間内で終了させるために非特許文献１乃至４に開示されたような技術が必要となる。【００１１】
ここで、非特許文献１に開示された技術では、重みの要素が取り得る値ごとに２の冪乗に分解された入力データの総和を計算している。非特許文献１では、当該分解された入力データの総和と重みの要素が取り得る値を乗算することで、畳み込み演算に必要な乗算回数を削減している。例えば、重みの要素が２ビットで表現できる場合には、重みの要素値が取り得る値は、０、１、２、３となる。非特許文献１では、この取り得る値ごとに２の冪乗に分解された入力データの総和を計算し、当該総和と重みの要素値の乗算が行われている。【００１２】
発明者らが鋭意検討した結果、非特許文献１に開示された技術を実現するためには、重みの要素値は低ビットであることが前提であることが判明した。即ち、非特許文献１では、重みの要素が取り得る値ごとに入力データの総和を計算するため、重みの要素が取り得る値が増えると（重みを構成する各要素の値が高ビットとなると）、２の冪乗に分解された入力データの総和を保持するレジスタが膨大となる。【００１３】
以上のことから、非特許文献１に開示された技術では重みの要素値は低ビットであることを前提していると言える。しかし、深層学習のアプリケーションによっては、重みの要素値が低ビットであるとは限らず、そのような場合であっても、畳み込み演算の乗算回数が削減されることが望まれる。【００１４】
本発明は、少ない乗算回数により畳み込み演算を実行することに寄与する推論装置、畳み込み演算実行方法及びプログラムを提供することを主たる目的とする。
【課題を解決するための手段】
【００１５】
本発明乃至開示の第１の視点によれば、重みを記憶する重み記憶部と、入力データを記憶する入力データ記憶部と、前記重み及び入力データを用いて畳み込みニューラルネットワークにおける畳み込み演算を実行するＰＥ（Processing Element）と、を備え、前記ＰＥは、前記入力データの要素が取り得る値ごとに、前記入力データの要素と乗算される重みの要素を累積加算し、前記入力データの要素が取り得る値それぞれと、前記入力データの要素が取り得る値に対応する重みの累積加算値それぞれと、を乗算し、前記乗算により得られる複数の乗算結果を加算する、推論装置が提供される。【００１６】
本発明乃至開示の第２の視点によれば、重みを記憶する重み記憶部と、入力データを記憶する入力データ記憶部と、を備え、前記重み及び入力データを用いて畳み込みニューラルネットワークにおける畳み込み演算を実行する推論装置において、前記入力データの要素が取り得る値ごとに、前記入力データの要素と乗算される重みの要素を累積加算するステップと、前記入力データの要素が取り得る値それぞれと、前記入力データの要素が取り得る値に対応する重みの累積加算値それぞれと、を乗算するステップと、前記乗算により得られる複数の乗算結果を加算するステップと、を含む、畳み込み演算実行方法が提供される。【００１７】
本発明乃至開示の第３の視点によれば、重みを記憶する重み記憶部と、入力データを記憶する入力データ記憶部と、を備え、前記重み及び入力データを用いて畳み込みニューラルネットワークにおける畳み込み演算を実行する推論装置に搭載されたコンピュータに、前記入力データの要素が取り得る値ごとに、前記入力データの要素と乗算される重みの要素を累積加算する処理と、前記入力データの要素が取り得る値それぞれと、前記入力データの要素が取り得る値に対応する重みの累積加算値それぞれと、を乗算する処理と、前記乗算により得られる複数の乗算結果を加算する処理と、を実行させるプログラムが提供される。
なお、このプログラムは、コンピュータが読み取り可能な記憶媒体に記録することができる。記憶媒体は、半導体メモリ、ハードディスク、磁気記録媒体、光記録媒体等の非トランジェント（non-transient）なものとすることができる。本発明は、コンピュータプログラム製品として具現することも可能である。
【発明の効果】
【００１８】
本発明乃至開示の各視点によれば、少ない乗算回数により畳み込み演算を実行することに寄与する推論装置、畳み込み演算実行方法及びプログラムを提供が、提供される。
【図面の簡単な説明】
【００１９】
【図１】一実施形態の概要を説明するための図である。
【図２】画像認識における中間層（隠れ層）の構造を説明するための図である。
【図３】畳み込み層における演算を説明するための図である。
【図４】第１の実施形態に係る推論装置の内部構成の一例を示す図である。
【図５】第１の実施形態に係る推論装置に含まれる中間層実行部の内部構成の一例を示す図である。
【図６】第１の実施形態に係る畳み込み層実行部の内部構成の一例を示す図である。
【図７】第１の実施形態に係るＰＥ（Processing Element）の動作の一例を示すフローチャートである。
【図８】第１の実施形態に係る乗加算部の内部構成の一例を示す図である。
【図９】第１の実施形態に係る乗加算部の動作の一例を示すフローチャートである。
【図１０】第２の実施形態に係る乗加算部の内部構成の一例を示す図である。
【図１１】第３の実施形態に係る乗加算部の内部構成の一例を示す図である。
【図１２】推論装置のハードウェア構成の一例を示す図である。
【図１３】畳み込み層実行部の別の内部構成の一例を示す図である。
【図１４】畳み込み層実行部の別の内部構成の一例を示す図である。
【発明を実施するための形態】
【００２０】
初めに、一実施形態の概要について説明する。なお、この概要に付記した図面参照符号は、理解を助けるための一例として各要素に便宜上付記したものであり、この概要の記載はなんらの限定を意図するものではない。また、各図におけるブロック間の接続線は、双方向及び単方向の双方を含む。一方向矢印については、主たる信号（データ）の流れを模式的に示すものであり、双方向性を排除するものではない。さらに、本願開示に示す回路図、ブロック図、内部構成図、接続図などにおいて、明示は省略するが、入力ポート及び出力ポートが各接続線の入力端及び出力端のそれぞれに存在する。入出力インターフェイスも同様である。
【００２１】
一実施形態に係る推論装置１００は、重みを記憶する重み記憶部１０１と、入力データを記憶する入力データ記憶部１０２と、重み及び入力データを用いて畳み込みニューラルネットワークにおける畳み込み演算を実行するＰＥ（Processing Element）１０３と、を備える（図１参照）。ＰＥ１０３は、入力データの要素が取り得る値ごとに、入力データの要素と乗算される重みの要素を累積加算する。ＰＥ１０３は、入力データの要素が取り得る値それぞれと、入力データの要素が取り得る値に対応する重みの累積加算値それぞれと、を乗算する。ＰＥ１０３は、当該乗算により得られる複数の乗算結果を加算する。
【００２２】
詳細については後述するが、畳み込み演算は、入力データの要素が取り得る値ごとに重みの要素に関する総和（累積加算値）の計算と、当該重みの要素の総和と入力データの各要素が取り得る値の乗算と、当該乗算結果の加算と、に分解することができる。ＰＥ１０３は、当該事実を利用し、重みの要素に関する総和を畳み込み演算の前に計算し、１回の畳み込み演算に必要な重みの総和が得られた後に当該総和と入力データの取り得る値を乗算する。その結果、重みと入力データを都度乗算し、加算する畳み込み演算の方法と比較し、乗算回数を削減することができる。
【００２３】
以下に具体的な実施の形態について、図面を参照してさらに詳しく説明する。なお、各実施形態において同一構成要素には同一の符号を付し、その説明を省略する。
【００２４】
［第１の実施形態］
第１の実施形態について、図面を用いてより詳細に説明する。
【００２５】
図２は、画像認識における中間層（隠れ層）の構造を説明するための図である。図２を参照すると、入力層と中間層が接続され、中間層と出力層が接続される。なお、第１の実施形態では、入力層に入力されるデータは画像データを想定している。但し、本願開示にて取り扱う入力データは画像データに限定されないことは勿論である。
【００２６】
入力層は、取得した入力データから中間層に出力するためのデータを作成する。例えば、画像データがＲＧＢ（Red Green Blue）の３チャネルから構成されている場合には、入力層は、各色の画像データを生成し、中間層に出力する。中間層は、畳み込みニューラルネットワーク（ＣＮＮ（Convolutional Neural Network））により入力データの特徴部分が抽出されたデータを１つのノードに結合し、特徴変数を出力する。出力層は、中間層から取得した特徴変数に基づき、入力データを分類する。
【００２７】
中間層には、複数の「層（レイヤ）」が含まれ、初段の層が入力層と接続され、最終段の層は全結合層と接続されている。
【００２８】
中間層をなす各層には、畳み込み層、活性化関数、プーリング層が含まれ得る。なお、図２に示す構成は例示であり、中間層の構成を限定する趣旨ではない。場合によっては、中間層に活性化関数、プーリング層が含まれていなくともよい。
【００２９】
畳み込み層は、取得した入力データから特徴量を抽出する。当該抽出された特徴量には活性化関数が適用され、当該活性化関数が適用された後の特徴量がプーリング層に入力される。プーリング層では、取得した特徴量を結合する。その際、プーリング層では、物体の位置が変動しても同一の物体と判断できるようにするための処理（不変性を得るための処理）が行われる。例えば、対象物の位置ずれを許容するための処理がプーリング層にて行われる。なお、図２では、「活性化関数」を適用するための層が、畳み込み層やプーリング層と独立した形で記載されているが、実際には、「活性化関数」が畳み込み層及びプーリング層のいずれかの層に含まれる構成であってもよい。
【００３０】
図２に示すように、中間層をなす各層は、縦続接続されており、前段の層の出力が後段の層の入力に相当する。
【００３１】
図３は、畳み込み層における演算を説明するための図である。図３を参照すると、畳み込み層は、入力データと重み（フィルタ）を乗算することで、特徴量を出力する。
【００３２】
なお、本願開示にて使用する各種パラメータは図３に図示するように定める。入力データにおける一の方向（図３では縦方向）のサイズを「Ｈ」と表記する。また、入力データにおける他の方向（図３では幅方向）のサイズを「Ｗ」と表記する。例えば、Ｈ＝２５、Ｗ＝２５であれば、Ｈ×Ｗ＝６２５個の画素が入力データのサイズとなる。さらに、層の入力チャネル数を「Ｃ」と表記する。
【００３３】
重みにおける一の方向（図３では縦方向）のサイズを「Ｒ」と表記する。また、重みにおける他の方向（図３では幅方向）のサイズを「Ｓ」と表記する。例えば、Ｒ＝３、Ｓ＝３とすれば、Ｒ×Ｓ＝９が重みのサイズである。
【００３４】
図３に示す「Ｋ」は層の出力チャネル数である。層の出力チャネル数Ｋと重みの種類数は一致する。例えば、図３に示す重みの種類数が「４」であれば、層の出力チャネル数Ｋも「４」となる。
【００３５】
１種類の重みには、入力チャネル数Ｃと同じ数の重みが含まれる。例えば、入力チャネル数Ｃが「３」であれば、１種類の重みには３つの重みが含まれる。１種類の重みに含まれるＣ個の重みは、Ｃ個の入力データそれぞれと対応付けられている。例えば、図３において、上段のＣ個の重みにおいて、一番手前の重みは一番手前の入力データと対応付けられている。
【００３６】
なお、本願開示において、入力チャネル数Ｃごとに区分された重みの集合を「重み群」と表記する。各重み群には、Ｃ個の重みが含まれる。また、重みの種類数は出力チャネル数Ｋに一致するので、畳み込み層における重みの数は、Ｋ×Ｃ個となる。さらに、本願開示において、一の入力データや一の重みを基準として他の入力データや重みに向かう方向を「チャネル方向」と表記する。同様に、一の重み群を基準として他の重み群に向かう方向を「カーネル方向」と表記する。例えば、図３に示す重み５０１から重み５０２に向かう方向がチャネル方向であり、重み群５１１から重み群５１２に向かう方向がカーネル方向である。
【００３７】
畳み込み層では、入力データから重みのサイズに相当するデータを抽出し、当該抽出した入力データに含まれる要素と重みの対応する要素を乗算し、且つ、乗算結果をチャネル方向に加算する処理が実行される。例えば、図３に示すように、重みのサイズが３×３＝９であれば、入力データから同じサイズのデータ（例えば、図３の一番手前に図示した入力データのうち四角の領域で囲まれた入力データ６０１）が抽出される。その後、抽出された入力データの各要素と対応する重みの各要素が乗算される。例えば、図３の例では、抽出された入力データ６０１における左上の要素値「１」と対応する重み５０１の左上の要素値「１」が乗算される。畳み込み層では、このような処理が繰り返される（上述の例では９回繰り返される）。その後、乗算結果は加算される。
【００３８】
抽出された入力データと重みの乗算は、対応する入力データと重みの間で実行される。例えば、図３において、一番手前に図示した入力データ６０１に対応する重みは一番手前に図示された重み５０１とする。同様に、中間に図示した入力データに対応する重みが中間に図示した重み、最奥に図示した入力データに対応する重みが最奥に図示した重み５０２である。この場合、対応する入力データと重みの間で上記乗加算処理が繰り返される。
【００３９】
さらに、上記乗加算処理の結果は、チャネル方向にて加算される。例えば、上述の例では、３チャネル（一番手前、中間、最奥）における乗加算結果が加算される。
【００４０】
上記乗加算処理及びその後の加算処理は、重み群ごとに行われる。図３の例では、上段に図示した重み群５１１と入力データを用いた演算が行われ、下段に図示した重み群５１２に関しても同様の処理（同じ入力データを用いた乗加算処理及びその後の加算処理）が実行される。
【００４１】
畳み込み層では、上記処理（乗加算処理及びチャネル方向への加算処理）を、抽出する入力データを変更しながら繰り返す。例えば、図３の一番手前の入力データに図示するように、抽出する領域をスライドさせながら入力データを切り出していく。当該切り出されたデータには、上記と同様の処理が適用される。
【００４２】
上述のような入力データの抽出と、当該抽出された入力データに重みを乗算し、チャネル方向に加算する処理を繰り返すことで畳み込み層の出力データが得られる。なお、上述のように、入力データと重みの乗加算処理は重み群ごとに実行されるため、得られる出力データの数と重みの種類（重み群の数）は一致する。例えば、１６個の重み群が用意されていれば、１６個の出力データが得られる（Ｋ＝１６）。
【００４３】
なお、各出力データのサイズ（縦方向のサイズ、幅方向のサイズ）は、入力データからデータを抽出する際の領域（ウィンドウ）をスライドする際の仕様により定まる。図３の例では、各出力データには、１２（４×３）個の要素が含まれるように、入力データからデータが抽出される。
【００４４】
第１の実施形態に係る推論装置１０は、図３を用いて説明した畳み込み演算を推論の過程にて実行する。具体的には、図４に示すように、推論装置１０は、その内部に、入力層を実現する入力層実行部１１、中間層を実現する中間層実行部１２、出力層を実現する出力層実行部１３と、を含む。さらに、中間層実行部１２には、畳み込み層を実現する畳み込み層実行部３１、活性化関数を実行する活性化関数実行部３２及びプーリング層を実現するプーリング層実行部３３が各層に含まれる（図５参照）。
【００４５】
本願開示においては、図４及び図５に示す各種実行部のうち、畳み込み層実行部３１について詳細に説明する。他の実行部に関しては、公知のアルゴリズム等により実現可能であるため、その説明を省略する。
【００４６】
各層の畳み込み層実行部３１は、プロセッシングエレメント（ＰＥ；Processing Element）を用いて図３を用いて説明した畳み込み演算（乗加算処理）を実行する。
【００４７】
図６は、畳み込み層実行部３１の内部構成の一例を示す図である。図６を参照すると、畳み込み層実行部３１には、畳み込み層制御部４０と、ＰＥ４１と、各種記憶部と、が含まれている。各種記憶部には、重み記憶部５１と、入力データ記憶部５２と、演算結果記憶部５３と、が含まれる。
【００４８】
ＰＥ４１は、上述の畳み込み演算を実行する。具体的には、ＰＥ４１は、入力データと対応する重みの乗算処理を含む演算を実行する。その際、ＰＥ４１は、入力データ記憶部５２、重み記憶部５１にそれぞれアクセスし、必要なデータ（入力データ、重み）を取得する。ＰＥ４１は、重み及び入力データを用いた畳み込みニューラルネットワークにおける畳み込み演算の結果を演算結果記憶部５３に格納する。
【００４９】
畳み込み層制御部４０は、畳み込み層全体を制御する手段である。畳み込み層制御部４０は、畳み込みニューラルネットワークにおける畳み込み演算をＰＥ４１を制御することで実現する。また、畳み込み層制御部４０は、他層の制御モジュールと制御情報の交換を行い、推論装置１０全体としての機能を実現する。より具体的には、畳み込み層制御部４０は、前段の層から畳み込み演算終了の通知を受信すると、自身が管理するＰＥ４１を制御して畳み込み演算を実行する（ＰＥ４１を制御して畳み込み演算を実行させる）。さらに、畳み込み層制御部４０は、後段の層に対して自層における畳み込み演算の終了を通知する。
【００５０】
各層における畳み込み演算に利用する重みは、重み記憶部５１に格納されている。重み記憶部５１に格納する重みは、推論装置１０の動作前に予め設定されていてもよいし、上位装置（例えば、学習装置）から都度重みを受け取り、重み記憶部５１に格納してもよい。
【００５１】
入力データ記憶部５２は、入力データ（前段の層の出力データ；アクティベーション）を記憶する。
【００５２】
ＰＥ４１には、ＰＥ制御部６０と、重み処理部６１と、入力データ処理部６２と、乗加算部６３と、が含まれる。ＰＥ４１は、入力データ記憶部５２に格納された入力データと、重み記憶部５１に格納された重みを用いて畳み込み演算を実行する。
【００５３】
ＰＥ制御部６０は、重み処理部６１、入力データ処理部６２、乗加算部６３を制御して重みと入力データを用いた畳み込み演算を実行する手段である。
【００５４】
重み処理部６１は、重みの入出力に関する処理を実行する。
【００５５】
入力データ処理部６２は、入力データの入出力に関する処理を実行する。
【００５６】
乗加算部６３は、重み処理部６１及び入力データ処理部６２のそれぞれから供給されるデータの乗加算処理を実行し、畳み込み演算を行うモジュールである。
【００５７】
初めに、図７を参照しつつ、ＰＥ４１の動作概略を説明する。
【００５８】
ＰＥ制御部６０は、１回の畳み込み演算の実行に必要な重み群を指定し、当該重み群の読み出しを重み処理部６１に指示する（ステップＳ０１）。
【００５９】
次に、ＰＥ制御部６０は、上記重み群との間で畳み込み演算を実行する入力データの範囲を指定し、当該入力データの読み出しを入力データ処理部６２に指示する（ステップＳ０２）。
【００６０】
例えば、図３を参照すると、重み群５１１と対応する入力データ６１１の畳み込み演算（１回の畳み込み演算）の実行が指示される。当該畳み込み演算により、図３の一番手前の出力データをなす各要素のうち左上の「１」が得られる。この場合、ＰＥ制御部６０は、重み処理部６１に対して、重み群５１１の読み出しを指示する。同様に、ＰＥ制御部６０は、入力データ処理部６２に対して、対応する入力データ６１１の読み出しを指示する。
【００６１】
重み処理部６１、入力データ処理部６２におけるデータの取得が完了すると、ＰＥ制御部６０は、重み処理部６１、入力データ処理部６２及び乗加算部６３に対して「畳み込み演算実行開始」に係る指示を行う（ステップＳ０３）。
【００６２】
当該指示を受信した重み処理部６１、入力データ処理部６２はそれぞれ畳み込み演算に必要なデータ（重みの要素、入力データの要素）を乗加算部６３に出力する。
【００６３】
乗加算部６３は、重み処理部６１、入力データ処理部６２から供給されるデータを用いて畳み込み演算に係る累積加算処理を実行する（ステップＳ０４）。なお、本ステップにおける乗加算部６３の動作の詳細は後述する。
【００６４】
重み処理部６１、入力データ処理部６２は、読み出したデータを順次乗加算部６３に供給することを繰り返す。また、乗加算部６３は、供給されたデータを用いた累積加算処理を繰り返す。重み処理部６１、入力データ処理部６２は、読み出したデータの全てを乗加算部６３に供給すると、その旨をＰＥ制御部６０に通知する。
【００６５】
当該通知を受けたＰＥ制御部６０は、乗加算部６３に対して、畳み込み演算の結果を演算結果記憶部５３に出力するように指示する（畳み込み演算結果出力指示；ステップＳ０５）。
【００６６】
当該指示に応じて、乗加算部６３は、畳み込み演算結果を出力するための処理を実行する（ステップＳ０６）。なお、本ステップにおける乗加算部６３の動作の詳細は後述する。
【００６７】
その後、乗加算部６３は、畳み込み演算の結果（１回分の畳み込み演算の結果）を演算結果記憶部５３に格納する。また、乗加算部６３は、畳み込み演算の結果を演算結果記憶部５３に格納した旨をＰＥ制御部６０に通知する。
【００６８】
当該通知を受けたＰＥ制御部６０は、重み処理部６１にて読み出した重み群を用いた畳み込み演算が終了したか否かを判定する（ステップＳ０７）。例えば、上述の例では、重み群５１１が読み出されていれば、当該重み群５１１を用いた全ての畳み込み演算が終了しているか否かが判定される。
【００６９】
読み出された重み群を用いた全ての畳み込み演算が終了していなければ（重み群と畳み込み演算する入力データが残っていれば；ステップＳ０７、Ｎｏ分岐）、ＰＥ制御部６０は、ステップＳ０２に戻り処理を継続する。その際、ＰＥ制御部６０は、適切な範囲を指定しつつ入力データ処理部６２に入力データの読み出しを指示する（スライディングウィンドウを移動して入力データの読み出しを指示する）。
【００７０】
読み出された重み群を用いた全ての畳み込み演算が終了していれば（ステップＳ０７、Ｙｅｓ分岐）、ＰＥ制御部６０は、全ての重み群を用いた畳み込み演算が終了しているか否かを判定する（ステップＳ０８）。
【００７１】
畳み込み演算が必要な重み群が残っていれば（ステップＳ０８、Ｎｏ分岐）、ＰＥ制御部６０は、ステップＳ０１に戻り処理を継続する。その際、ＰＥ制御部６０は、次の重み群を指定し、当該重み群を用いた畳み込み演算を実行する。
【００７２】
畳み込み演算が必要な重み群が残っていなければ（ステップＳ０８、Ｙｅｓ分岐）、ＰＥ制御部６０は、処理を終了する。
【００７３】
ＰＥ制御部６０は、畳み込み演算が終了すると、その旨を畳み込み層制御部４０に通知する。当該通知を受信した畳み込み層制御部４０は、自層での演算は終了したものと判断し、その旨を後段の層（活性化関数）に通知する。
【００７４】
続いて、乗加算部６３の詳細について説明する。
【００７５】
上述のように、乗加算部６３は畳み込み演算を実行する処理モジュールである。ここで、畳み込み演算の計算式は下記の式（１）のように表現できる。
［式１］
2019168088.tif 000003
【００７６】
なお、式（１）において、ｗは重みの要素、ａは入力データ（アクティベーション）の要素を示す。ｎは層の順番を示し、サフィックスｉ、ｊは入力データ、重みの幅方向、高さ方向の位置を示す。ｘ、ｙは出力データの位置を示す。Ｃ、Ｓ、Ｒは上述のように、チャネル数、重みのサイズを示す。
【００７７】
上記式（１）は、入力データ（アクティベーション）の要素が取り得る値と当該取り得る値に対応する重みの要素の総和を用いて、下記の式（２）に変形できる。
［式２］
2019168088.tif 000004
【００７８】
なお、式（２）において、重みの要素ｗの右肩は対応する入力データの要素値を示す。例えば、ｗa==0は、入力データの要素値が「０」に対応する重みの要素ｗを示す。
【００７９】
式（２）を参照すると、畳み込み演算は、入力データの要素が取り得る値ごとに重みの要素に関する総和（累積加算値）を計算し、当該重みの要素の総和と入力データの各要素が取り得る値の乗算を実行し、その後加算すれば良いことを示している。
【００８０】
なお、以降の説明において、入力データを構成する要素の値を「入力データの値」、重みを構成する要素の値を「重みの値」と表記する。また、入力データの要素値（入力データを構成する要素の値）が取り得る値を「入力データの取り得る値」、重みの要素に関する総和を「重みの総和」とそれぞれ表記する。
【００８１】
第１の実施形態に係る乗加算部６３は、上記式（２）で表せる計算により畳み込み演算を実行する。即ち、乗加算部６３は、１回の畳み込み演算において、入力データの要素が取り得る値ごとに、入力データの要素に乗算される重みの要素を累積加算する。その後、乗加算部６３は、入力データの要素が取り得る値それぞれと、入力データの要素が取り得る値に対応する重みの累積加算値それぞれと、を乗算する。最後に、乗加算部６３は、当該乗算により得られる複数の乗算結果を加算することで、畳み込み演算結果を得る。
【００８２】
第１の実施形態では、入力データをなす各要素は４ビットで表現されるものとする。例えば、０から１５までの値が入力データの取り得る値となる。なお、入力データの要素が４ビットで表現できれば、入力データの取り得る値は正の値に限らず、負の値が用いられても良い。例えば、入力データの取り得る値が−７から７までの整数であってもよい。あるいは、入力データの要素値は整数ではなく、浮動小数点で表現される値であってもよい。なお、入力データの要素は４ビットに限定されないのは勿論である。入力データの要素値は４ビットよりも小さい値でも良いし、４ビットよりも大きい値でもよい。
【００８３】
図８は、乗加算部６３の内部構成の一例を示す図である。図８を参照すると、乗加算部６３は、乗加算制御部７０と、セレクタ７１と、複数の累算器（アキュムレータ）７２−０〜７２−１５と、複数の乗算器７３−０〜７３−１５と、加算器７４と、を含んで構成される。
【００８４】
なお、以降の説明において、累算器７２−０〜７２−１５を区別する特段の理由がない場合には、単に「累算器７２」と表記する。他の構成ついても同様に、ハイフンで区切られた前の数字にて当該構成を代表して表記する。
【００８５】
セレクタ７１は、入力データの要素と重みの要素を入力する。また、セレクタ７１は、取得した入力データの要素値に応じて、複数の累算器７２のうち入力した重みの要素の出力先となる累算器７２を決定する。
【００８６】
複数の累算器７２のそれぞれは、入力データの要素が取り得る値ごとの重みの累積加算（重みの総和）を計算し、記憶する。
【００８７】
複数の乗算器７３のそれぞれは、複数の累算器７２それぞれに対応して設けられる。
【００８８】
累算器７２及び乗算器７３は、入力データ（アクティベーション）の取り得る値ごとに用意される。上述のように、入力データの各要素が４ビットで表現される場合には、例えば、入力データの取り得る値は０〜１５である。そのため、各データに対応する１６個の累算器７２と乗算器７３が乗加算部６３に構成される。
【００８９】
図８において、累算器７２や乗算器７３の近辺に付した記号＃付きの数字は、入力データの取り得る値を示す。例えば、累算器７２−１は、入力データの値が「１」である場合の対応する重みの総和を格納することを示す。また、乗算器７３−１は、累算器７２−１の保持する値と対応する入力データの値「１」の乗算を実行することを示す。このように、複数の乗算器７３には、重みの累積加算値と乗算する値が予め割り当てられている。
【００９０】
各累算器７２には、加算器７５とレジスタ７６が含まれる。
【００９１】
加算器７４は、複数の乗算器７３による乗算結果を入力し、これらの乗算結果を加算する。
【００９２】
乗加算制御部７０は、ＰＥ制御部６０からの指示に応じて、乗加算部６３内の各モジュールを制御する。より具体的には、乗加算制御部７０は、ＰＥ制御部６０から「畳み込み演算開始」に係る指示を取得すると、累算器７２を初期化（レジスタ７６に０を設定）する。
【００９３】
また、乗加算制御部７０は、ＰＥ制御部６０から「畳み込み演算結果出力」に係る指示を取得すると、乗算器７３を用いて累算器７２が保持する値と入力データの取り得る値（予め定められた値）の乗算を計算する。その後、乗加算制御部７０は、各乗算器７３の演算結果を加算器７４を用いて加算し、畳み込み演算の結果とする。加算器７４による演算結果は、演算結果記憶部５３に格納される。
【００９４】
続いて、図９を参照しつつ、乗加算部６３の動作を説明する。
【００９５】
乗加算制御部７０は、ＰＥ制御部６０から「畳み込み演算開始」に係る指示を取得する（ステップＳ１０１）。
【００９６】
当該指示を受信すると、乗加算制御部７０は、累算器７２を初期化する（ステップＳ１０２）。
【００９７】
セレクタ７１は、重み処理部６１、入力データ処理部６２から重みの要素、入力データの要素を取得する（データの取得；ステップＳ１０３）。
【００９８】
セレクタ７１は、取得した入力データの値に応じて、取得した重みの要素の出力先となる累算器７２を選択し、当該重みの要素を出力する（ステップＳ１０４）。例えば、取得した入力データの値が「１」であれば、セレクタ７１は、取得した重みの要素を累算器７２−１に向けて出力する。
【００９９】
累算器７２は、セレクタ７１から重みの要素を取得すると、当該重みの要素値とレジスタ７６に格納された値を加算する（重みの累積加算；ステップＳ１０５）。
【０１００】
乗加算制御部７０は、ＰＥ制御部６０から「畳み込み演算結果出力」に係る指示を取得したか否かを確認する（ステップＳ１０６）。
【０１０１】
当該指示を取得していなければ（ステップＳ１０６、Ｎｏ分岐）、乗加算制御部７０は、ステップＳ１０３に戻り重みの累積加算に係る処理を繰り返す。つまり、乗加算部６３は、ＰＥ制御部６０から「畳み込み演算結果出力」に係る指示を取得するまでの間、入力データの取り得る値ごとの重みの総和を計算する。
【０１０２】
「畳み込み演算結果出力」に係る指示を取得していれば（ステップＳ１０６、Ｙｅｓ分岐）、乗加算制御部７０は、ステップＳ１０７以降の処理を実行する。
【０１０３】
「畳み込み演算結果出力」に係る指示を取得すると、乗加算制御部７０は、乗算器７３に、各累算器７２が保持する値と対応する乗算器７３に割り当てられた値（入力データの取り得る値）の乗算処理を実行させる（重みの総和を用いた乗算；ステップＳ１０７）。例えば、乗算器７３−１は、累算器７２−１が保持する値と乗算器７３−１に割り当てられた値「１」の乗算を計算する。
【０１０４】
その後、乗加算制御部７０は、加算器７４に、各乗算器７３による乗算結果の加算を計算させる（ステップＳ１０８）。当該加算器７４による加算結果が、１回の畳み込み演算の結果となる。
【０１０５】
加算器７４は、加算結果を演算結果記憶部５３に格納する（ステップＳ１０９）。
【０１０６】
続いて、図３に示す重み群５１１と対応する入力データ６１１の畳み込み演算を例にとり、上記乗加算部６３の動作をより具体的に説明する。
【０１０７】
初めに、乗加算部６３は、入力データ６０１の左上の要素値「１」と対応する重みの値「１」を取得する。この場合、入力データの値が「１」であるので、セレクタ７１は、累算器７２−１を選択し、重みの値「１」を出力する。累算器７２−１は、重みの値「１」とレジスタ７６−１が保持する値（初期化直後なので０）を加算し、レジスタ７６−１に格納する。
【０１０８】
次に、乗加算部６３は、入力データ６０１の上段真ん中の要素値「２」と対応する重みの値「１」を取得する。この場合、入力データの値が「２」であるので、セレクタ７１は、累算器７２−２を選択し、重みの値「１」を出力する。累算器７２−２は、重みの値「１」とレジスタ７６−２が保持する値（初期化直後なので０）を加算し、レジスタ７６−２に格納する。
【０１０９】
次に、乗加算部６３は、入力データ６０１の上段右端の要素値「１」と対応する重みの値「２」を取得する。この場合、入力データが「１」であるので、セレクタ７１は、累算器７２−１を選択し、重みの値「２」を出力する。累算器７２−１は、重みの値「２」とレジスタ７６−１が保持する値「１」を加算し、レジスタ７６−１に格納する。
【０１１０】
乗加算部６３は、このような入力データの取り得る値ごとに重みに関する加算処理を繰り返す。当該加算処理により、各累算器７２には、各入力データの取り得る値に対応する重みの値の総和が格納される。その後、乗加算部６３は、各累算器７２が保持する値と対応する値（入力データの取り得る値）を乗算し、乗算結果を加算することで、畳み込み演算の結果とする。
【０１１１】
以上のように、第１の実施形態に係る乗加算部６３では、入力データの取り得る値ごとに重みの値に関する総和を計算する。その後、乗加算部６３では、入力データの取り得る値と対応する重みの値の総和を乗算し、各乗算結果を加算して１回の畳み込み演算の結果とする。このように構成することで、畳み込み演算に必要な乗算回数を削減できる。
【０１１２】
例えば、図３に示す重み群５１１と入力データ６１１の畳み込み演算を考える。初めに、入力データの要素と対応する重みの要素を乗算し、その後、乗算結果を加算する計算方法による乗算回数を考える。この場合、重み群５１１に含まれる各重みのサイズは９（３×３）であるので、入力データ６０１と重み５０１の畳み込み演算に必要な乗算回数は９となる。また、入力データと重みの乗算はチャネルごとに行われるので、チャネル数Ｃが「３」であれば、９×３＝２７回の乗算が必要となる。
【０１１３】
対して、第１の実施形態に係る乗加算部６３は、最初に重みの総和が計算され、当該総和と入力データの取り得る値の乗算を計算するので、入力データの各要素値が４ビットで表現される場合には、１６回の乗算を実行すれば良いことになる。さらに、この乗算回数は、当該乗加算部６３が計算対象とするチャネル数Ｃに依らず１６回となる。
【０１１４】
このように、第１の実施形態に係る乗加算部６３は、少ない乗算回数で畳み込み演算を実行することができる。
【０１１５】
また、入力データの取り得る値が制限されていれば（入力データの各要素が低ビットであれば）、上記乗算回数の削減効果はより顕著となる。例えば、入力データの各要素が２ビットで表現される場合には、重みの値の総和と入力データの取り得る値（例えば、０、１、２、３）を乗算すれば良いので、４回の乗算処理により畳み込み演算を実行できる。
【０１１６】
さらに、非特許文献１に開示された技術では、重みの各要素値が低ビットであることが必要であったが、第１の実施形態に係る乗加算部６３による処理にはそのような制限は存在しない。
【０１１７】
さらにまた、非特許文献１に開示された技術では、重みと入力データ（２の冪乗に分解された入力データ）の乗算結果を逐次加算していく加算器のビット幅が肥大化するという問題がある。例えば、重みの各要素が４ビット、入力データの各要素が８ビットであり、これらのデータを５１２（２９）回乗算する場合を考える。この場合、４＋８＋９＝２１ビット幅の加算器が必要となる。
【０１１８】
対して、第１の実施形態では、入力データの取り得る値ごとにレジスタ７６が用意されるため、累算器７２に含まれる加算器７５のビット幅は、８＋９＝１７ビットとなる。このように、第１の実施形態に係る乗加算部６３は、少ないビット幅の加算器を用いて畳み込み演算を実行することができる。
【０１１９】
［第２の実施形態］
続いて、第２の実施形態について図面を参照して詳細に説明する。
【０１２０】
第１の実施形態では、入力データの取り得る値ごとに重みの値の総和を計算している。そのため、入力データの取り得る値ごとに累算器７２や乗算器７３を用意する必要がある。例えば、入力データの要素値が４ビットであれば、１６個の累算器や乗算器が必要となる。
【０１２１】
第２の実施形態では、入力データが対数量子化されていることを前提とする。つまり、入力データ記憶部５２は、対数量子化された入力データを記憶する。第２の実施形態では、上記前提の下、累算器や乗算器の数が少ない乗加算部を説明する。
【０１２２】
第２の実施形態では、非特許文献４に開示されたように、入力データ（アクティベーション）の各要素が４ビットに対数量子化されている場合を想定する。より具体的には、入力データの値は２の冪乗に丸め込まれ、対数量子化された入力データの各要素には、当該２の冪乗の冪指数が格納される。例えば、対数量子化対象のデータ値が「８」であれば、当該データ値は２３で表現できるので、対数量子化後のデータは「３」となる。このような対数量子化処理により、対数量子化された入力データの要素値は、重みのシフト量を示すことになる。
【０１２３】
なお、非特許文献４に開示された対数量子化では、対数量子化の対象値が一定の値より小さい場合には特定の最小値に、一定の値より大きければ特定の最大値にそれぞれ変換している。さらに、当該対数量子化では、対象値が上記特定の最小値、最大値より規定される範囲内の場合にその対数を計算している。本願開示においても、同様の処理を行うものとする。
【０１２４】
乗加算部６３ａは、対数量子化された入力データの要素を上位ビットと下位ビットに分離し、分離された下位ビットの値に応じて重みの値をシフトし、分離された上位ビットの値に応じてシフト演算された重みの値の出力先を選択する構成を有する。
【０１２５】
図１０は、第２の実施形態に係る乗加算部６３ａの内部構成の一例を示す図である。図１０を参照すると、乗加算部６３ａは、分離部７７と、シフト部７８と、をさらに備える。
【０１２６】
分離部７７は、入力データの要素を因数分解し、事前決定された第１因子群と第２因子群に分離する手段である。より具体的には、分離部７７は、対数量子化された入力データの要素を第１因子群と第２因子群に分離する。第１因子群とは、入力データのビット位置のうち、予め定められたビット位置よりも上位に位置するビット値を要素（因子）とする値である。第２因子群とは、入力データのビット位置のうち、上記予め定められたビット位置よりも下位に位置するビット値を要素（因子）とする値である。なお、以降の説明において、第１因子群を「上位ビット」、第２因子群を「下位ビット」と表記する。
【０１２７】
分離部７７は、分離された上位ビットをセレクタ７１に供給する。分離部７７は、分離された下位ビットをシフト部７８に供給する。
【０１２８】
例えば、分離部７７は、４ビットで表現された対数量子化された入力データの値を上位２ビット、下位２ビットに分離する。例えば、入力データが「３」であれば、上位ビットは「００ｂ」となり、下位ビットは「１１ｂ」となる。同様に、入力データが「１５」であれば、上位ビットは「１１ｂ」となり、下位ビットは「１１ｂ」となる。なお、本願開示において、数字を２進数で表現する場合には、数字の後に「ｂ」を付して表記する。
【０１２９】
乗加算部６３ａが必要とする累算器７２や乗算器７３の数は、「２」を底（基数）とし分離された上位ビット数を冪指数とする数により示される個数となる。例えば、上述のように、入力データの値が上位２ビット、下位２ビットに分離される場合には、４（＝２２）個の累算器７２、乗算器７３が必要となる。
【０１３０】
累算器７２は、上位ビットの値が取り得る値ごとに用意され、上位ビットの値に応じた重みの値（後述するシフトされた重みの値）の累積加算値を保持する。例えば、累算器７２−０は、上位ビットの値が「００ｂ」の場合の重みの値の総和を保持する。
【０１３１】
各乗算器７３は、予め定められたシフト量だけ対応する累算器７２が保持する値を左シフトするように構成されている。例えば、乗算器７３−０はシフトせず（左シフトが０）、乗算器７３−１は４ビットシフト、乗算器７３−２は８ビットシフト、乗算器７３−３は１２ビットシフトするように構成されている。
【０１３２】
乗算器７３によるシフト量は、上位ビットと下位ビットに分離される入力データにおいて下位ビットをゼロに固定し、上位ビットを可変して得られる値となる。具体的には、「００００ｂ＝０」、「０１００ｂ＝４」、「１０００ｂ＝８」、「１１００ｂ＝１２」のシフト量が各乗算器７３に割り当てられる。
【０１３３】
なお、図１０において、累算器７２の近辺に示す「ＨＢ（Ｈｉｇｈ  Ｂｉｔ）」は対応する上位ビットの値を示し、乗算器７３の近辺に示す「ＳＦ」はシフト量を示す。
【０１３４】
シフト部７８は、取得した重みの要素値を下位ビットの値に相当するビット数シフトする。より具体的には、シフト部７８は、分離部７７から供給される分離された下位ビットの値に応じたシフト演算を取得した重みの値に施し、その結果をセレクタ７１に出力する。例えば、取得した下位ビットの値が「１１ｂ」であれば、シフト部７８は、取得した重みの値を３ビット左シフトした結果をセレクタ７１に出力する。
【０１３５】
セレクタ７１は、上述のように、上位ビットの値に応じて重みの要素（シフト演算された重みの要素）の出力先を決定する。より具体的には、例えば、取得した上位ビットの値が「１１ｂ」であれば、セレクタ７１は、累算器７２−３に取得した重みの値を出力する。
【０１３６】
乗加算制御部７０、累算器７２、乗算器７３及び加算器７４の動作は第１の実施形態にて説明した動作と同一とすることができるので更なる説明を省略する。
【０１３７】
次に、乗加算部６３ａの動作を具体的に説明する。
【０１３８】
例えば、入力データの値が「３」の場合、上位ビットの値は「００ｂ」、下位ビットの値は「１１ｂ」となる。従って、シフト部７８には「１１ｂ」が供給され、シフト部７８は取得した重みの値を３ビット左シフトする。また、セレクタ７１には上位ビット「００ｂ」が供給されるので、セレクタ７１は、シフト部７８から供給される重みの値（３ビット左シフトされた重みの値）を累算器７２−０に出力する。累算器７２−０は、３ビット左シフトされた重みの値とレジスタ７６−０が保持する値を加算し、レジスタ７６−０に格納する。
【０１３９】
全ての重みの値の総和が計算されると、累算器７２−０が保持する値は乗算器７３−０によりシフト演算される。この場合、乗算器７３−０はシフト演算しないので、累算器７２−０が保持する値がそのまま加算器７４に出力される。このことから分かるように、入力データの値が「３」の場合は、対応する重みの値が３ビット左シフトされ、加算器７４に出力される。
【０１４０】
次に、入力データの値が「１５」の場合を考える。この場合、上位ビットの値は「１１ｂ」、下位ビットの値は「１１ｂ」となる。従って、シフト部７８には「１１ｂ」が供給されるので、シフト部７８は取得した重みの値を３ビット左シフトする。また、セレクタ７１には上位ビット「１１ｂ」が供給されるので、セレクタ７１は、シフト部７８から供給される重みの値（３ビット左シフトされた重みの値）を累算器７２−３に出力する。累算器７２−３は、３ビット左シフトされた重みの値とレジスタ７６−３が保持する値を加算し、レジスタ７６−３に格納する。
【０１４１】
全ての重みの値の総和が計算されると、累算器７２−３が保持する値は乗算器７３−３によりシフト演算される。この場合、乗算器７３−３は１２ビットの左シフト演算を実行するように構成されているので、累算器７２−３が保持する値は１２ビット左シフトされて加算器７４に出力される。このことから分かるように、入力データの値が「１５」の場合は、対応する重みの値がシフト部７８により３ビット左シフトされ、その後、乗算器７３−３により１２ビット左シフトされて加算器７４に出力される。
【０１４２】
なお、対数量子化された入力データにおいて、シフト量が「０」である場合と要素値が真に「０」である場合を区別する必要がある。従って、上記４ビットに加え、少なくとも１ビットが必要となる。このように、入力データを４ビットに対数量子化するには、４ビット（シフト量）＋１ビット（真に０か否か）が必要となるが、上記説明では、理解の容易のため真の「０」を示す１ビットを考慮していない。当該１ビットを考慮する場合には、乗加算部６３ａは、入力データの値が真の「０」を示す場合には、対応する重みの値を破棄する等の処理を行えばよい。入力データの値が真に「０」であれば、重みの値に影響されず、乗算結果は「０」となるためである。
【０１４３】
以上のように、第２の実施形態では、入力データが対数量子化されている場合に、当該対数量子化された入力データの値を上位ビット、下位ビットに分離し、下位ビットの値に相当するシフト演算をシフト部７８にて事前に実行する。さらに、セレクタ７１は、上位ビットの値に応じて、シフト演算された重みの値の出力先を決定し、各累算器７２に接続された乗算器７３にて上位ビットの値に相当するシフト演算が実行される。その結果、第２の実施形態では、乗加算部６３ａに必要となる累算器７２や乗算器７３の数を削減できる。
【０１４４】
例えば、上述のように、４ビットに対数量子化された入力データを上位２ビット、下位２ビットに分離すれば、必要な累算器７２等の数は「４」となる。また、４ビットに対数量子化された入力データを上位３ビット、下位１ビットに分離すれば、必要な累算器７２等の数は「８」となる。さらに、４ビットに対数量子化された入力データを上位１ビット、下位３ビットに分離すれば、必要な累算器７２等の数は「２」となる。即ち、４ビットに対数量子化された入力データを上位Ｂ１ビット、下位Ｂ２ビットに分離すると、必要な累算器７２等の数は、１／２Ｂ２に削減される。必要な累算器７２等の数が削減されれば、乗加算部６３ａの実装回路の面積や複雑度を低減することができる。
【０１４５】
［第３の実施形態］
続いて、第３の実施形態について図面を参照して詳細に説明する。
【０１４６】
第１及び第２の実施形態では、累算器７２のそれぞれに加算器７５を設けている。第３の実施形態では、当該加算器を共用する場合について説明する。
【０１４７】
図１１は、第３の実施形態に係る乗加算部６３ｂの内部構成の一例を示す図である。図１１を参照すると、乗加算部６３ｂは、セレクタ７１ａ、加算器７９をさらに備える。また、第１及の実施形態にて説明した各累算器７２から加算器７５は削減され、累算器７２はレジスタ７６に置き替えられている。なお、図１１において、乗加算制御部７０、乗算器７３及び加算器７４は図示を省略している。
【０１４８】
セレクタ７１ａは、入力データの要素が取り得る値に応じて、複数の累算器（レジスタ７６）のうちいずれか一つの累算器の出力を選択する、累積加算値セレクタである。つまり、セレクタ７１ａは、入力データの値に応じて、各レジスタ７６が保持する値のいずれかを選択し、出力する。例えば、入力データの値が「０」であれば、セレクタ７１ａは、レジスタ７６−０を選択して、その保持値を加算器７９に出力する。
【０１４９】
加算器７９は、セレクタ７１ａが出力する値と重みの要素値を加算し、加算結果をセレクタ７１に出力する、共有加算器である。
【０１５０】
セレクタ７１は、入力データの値に応じて取得した値（加算器７９による加算結果）の出力先を切り替える。
【０１５１】
このように、第３の実施形態では、入力データの値に応じてレジスタ７６から読み出す値を選択し、当該読み出されたレジスタ７６の保持値と重みの値を加算する。また、本実施形態では、入力データの値に応じてセレクタ７１の出力先となるレジスタ７６を選択することで、入力データの取り得る値ごとの重みの値の総和（重みの累積加算値）を計算する。即ち、第１、第２の実施形態にて累算器７２ごとに設けられていた加算器７５は削減できる。その結果、乗加算部６３ｂの実装回路の面積を削減することができる。
【０１５２】
続いて、第１乃至第３の実施形態に係る推論装置１０のハードウェア構成について説明する。
【０１５３】
図１２は、推論装置１０のハードウェア構成の一例を示す図である。推論装置１０は、所謂、情報処理装置（コンピュータ）により構成可能であり、図１２に例示する構成を備える。例えば、推論装置１０は、内部バスにより相互に接続される、ＣＰＵ（Central Processing Unit）９１、メモリ９２、入出力インターフェイス９３及び通信手段であるＮＩＣ（Network Interface Card）９４等を備える。
【０１５４】
なお、図１２に示す構成は、推論装置１０のハードウェア構成を限定する趣旨ではない。推論装置１０は、図示しないハードウェアを含んでもよい。あるいは、推論装置１０に含まれるＣＰＵ等の数も図１２の例示に限定する趣旨ではなく、例えば、複数のＣＰＵが推論装置１０に含まれていてもよい。
【０１５５】
メモリ９２は、ＲＡＭ（Random Access Memory）、ＲＯＭ（Read Only Memory）、補助記憶装置（ハードディスク等）である。
【０１５６】
入出力インターフェイス９３は、図示しない表示装置や入力装置のインターフェイスとなる手段である。表示装置は、例えば、液晶ディスプレイ等である。入力装置は、例えば、キーボードやマウス等のユーザ操作を受け付ける装置である。
【０１５７】
推論装置１０の機能は、上述の処理モジュールにより実現される。当該処理モジュールは、例えば、メモリ９２に格納されたプログラムをＣＰＵ９１が実行することで実現される。あるいは、処理モジュールの一部（例えば、ＰＥ４１やその内部に構成される乗加算部６３）は、ＦＰＧＡ（Field Programmable Gate Array）やＡＳＩＣ（Application Specific Integrated Circuit）等の特定用途に特化したハードウェアにより実現（ハードウェアに実装）されてもよい。また、上記プログラムは、ネットワークを介してダウンロードするか、あるいは、プログラムを記憶した記憶媒体を用いて、更新することができる。さらに、上記処理モジュールは、半導体チップにより実現されてもよい。即ち、上記処理モジュールが行う機能は、何らかのハードウェアにおいてソフトウェアが実行されることによって実現できればよい。
【０１５８】
［変形例］
第１乃至第３の実施形態にて説明した推論装置１０は例示であって、その構成及び動作を限定する趣旨ではない。以下、各種変形例について説明する。
【０１５９】
例えば、図１３に示すように、ＰＥ４１に入力データ制限部６４を設けてもよい。上述のように、本願開示の乗加算部６３は、入力データの取り得る値が少ない方が乗算処理の削減効果が高い。そこで、入力データ制限部６４により、入力データの取り得る値を制限（低ビット化）する。例えば、入力データ制限部６４は、入力データの値が４ビット以上の場合には、当該入力データの値を４ビットの値に丸め込むような処理を行う。より具体的には、入力データ制限部６４は、取得したデータと出力するデータを対応付けたルックアップテーブル（ＬＵＴ；Look Up Table）を用いて、入力データの値を低ビット化できる。あるいは、入力データ制限部６４は、所定の関数を用いて、入力データの値を低ビット化してもよい。
【０１６０】
上記実施形態では、乗加算部６３による演算結果をそのまま演算結果記憶部５３に格納する場合について説明した。しかし、畳み込み演算に用いる入力データや重みによっては、畳み込み演算の結果が大きくなりすぎることもある。具体的には、上記実施形態では、入力データの値は４ビットにて表現できることを前提とした乗加算部６３について説明したが、畳み込み演算の結果が４ビットを超える（畳み込み演算がオーバーフローする）ことがあり得る。畳み込み演算がオーバーフローした場合、乗加算部６３は、演算結果を「０」とするのではなく、取り得る値の最大値（例えば、１５）に演算結果を設定することで、その後の処理を継続させることができる。
【０１６１】
上記実施形態では、１つのＰＥ４１が１回の畳み込み演算を順番に実行していく構成を説明したが、複数のＰＥ４１を設け畳み込み演算を並列に実行してもよい。例えば、図１４に示すように、それぞれが同一の構成を有する複数のＰＥ４１を用意し、各ＰＥ４１にて独立に畳み込み演算を実行してもよい。例えば、図３を参照すると、ＰＥ４１−１が重み群５１１に関する畳み込み演算を実行し、他のＰＥ４１が重み群５１２に関する畳み込み演算を同時に（並列に）実行してもよい。あるいは、１つの重み群における畳み込み演算を並列に実行してもよい。例えば、図３における重み５０１を用いた畳み込み演算をＰＥ４１−１が実行し、真ん中の重みを用いた畳み込み演算をＰＥ４１−２が実行し、重み５０２を用いた畳み込み演算をＰＥ４１−３が実行（並列に実行）するような構成でもよい。この場合、３つのＰＥ４１の演算結果を加算することで最終的な畳み込み演算の結果が得られる。なお、図１４において、各種記憶部の図示を省略している。
【０１６２】
複数のＰＥ４１を用いた畳み込み演算の並列実行を考慮すると、本願開示における乗加算部６３の加算器７５のビット幅は小さいことの効果がより顕著となる。つまり、非特許文献１に開示された技術でも複数のＰＥを用いた畳み込み演算の並列実行は可能と考えられるが、複数のＰＥを用意するとその分ビット幅の大きい加算器を用意する必要がある。対して、本願開示の乗加算部６３は、非特許文献１に開示された加算器よりもビット幅の少ない加算器を含む複数のＰＥを用意すれば良いので、畳み込み演算を並列化するときの回路規模拡大が抑制される。
【０１６３】
上記実施形態では、入力データの値が「０」に対応する重みの値を累積加算する累算器７２を備える構成を説明したが、当該累算器はなくともよい。具体的には、図８における累算器７２−０や乗算器７３−０はなくともよい。入力データの値が「０」であれば、その乗算結果は「０」になるためである。あるいは、重み処理部６１や入力データ処理部６２は、入力データの値が「０」であれば、当該入力データの値と対応する重みの値を乗加算部６３に供給する必要がないとも言える。例えば、入力データ処理部６２が入力データの値が「０」であることを検知し、当該事実を重み処理部６１に伝え、値が「０」である入力データと対応する重み値の供給を省略してもよい。このように、重み処理部６１及び入力データ処理部６２は、入力データの要素値がゼロである入力データの要素及び対応する重みの要素をセレクタ７１に供給しなくともよい。つまり、入力データの要素値が「０」である場合には、入力データ処理部６２と重み処理部６１が連携し、当該データ及び対応する重みをセレクタ７１に供給することを停止してもよい。その結果、乗加算部６３における処理が低減され、畳み込み演算の高速化が期待できる。
【０１６４】
上記実施形態では、重み処理部６１や入力データ処理部６２が１回分の畳み込み演算に使用するデータ（重み群、対応する入力データ）を読み出す場合を例に取り説明した。しかし、重み処理部６１や入力データ処理部６２は、畳み込み演算に必要なデータを逐次読み出し、乗加算部６３に供給する構成であっても良い。
【０１６５】
第２の実施形態では、対数量子化された入力データの要素値は正の値の場合について説明したが、対数量子化された入力データの要素値は負の値であってもよい。つまり、重みを左シフト（対数量子化された入力データの要素値は正の値）する場合だけでなく、重みを右シフト（対数量子化された入力データの要素値は負の値）してもよい。例えば、対数量子化された入力データの要素値が「−２」であれば、当該値は重みとの乗算において重みの値を２ビット右にシフトすることを意味する。また、第２の実施形態では、入力データを上位ビットと下位ビットに分離するが、入力データの要素値が負の値（右シフト）であっても、図１０に示す乗加算部６３ａは、当該負の値に対応できる。例えば、シフト量が２の補数表現による負の値の場合を考える。例えば、「−５」を４ビット（２の補数表現）で表記すると「１０１１ｂ」である。当該値のシフト量は、上位２ビットにゼロを付加したシフト量（「１０００ｂ」＝−８）と下位２ビットのシフト量（「１１ｂ」＝３）に分離できるので、−８＋３＝−５となる。このように、対数量子化された入力データの要素値が負の値であっても、第２の実施形態に係る乗加算部６３ａは意図されたとおりの右シフトを実現できる。
【０１６６】
本願開示では、入力データから結果を推論（判定）する推論装置を例にとり畳み込み演算に要する乗算回数を削減する手法を説明した。しかし、畳み込みニューラルネットワークの活用（中間層の動作）の観点からは、推論装置と重みを生成する学習装置では相違する点はない。つまり、推論装置への入力データは推論対象となるデータであり、学習装置の推論部への入力データは教師データであるが、「推論」の観点からは両者に違いはない。即ち、上記説明した推論装置１０に、誤差逆伝搬を行う誤差逆伝搬部、重みアップデートを行う重みアップデート部等を付加することで学習装置を構成することができる。なお、誤差逆伝搬部及び重みアップデート部に関しては、公知のアルゴリズム等により実現可能でありその説明を省略する。
【０１６７】
また、上述の説明で用いた複数のフローチャートでは、複数の工程（処理）が順番に記載されているが、各実施形態で実行される工程の実行順序は、その記載の順番に制限されない。各実施形態では、例えば各処理を並行して実行する等、図示される工程の順番を内容的に支障のない範囲で変更することができる。また、上述の各実施形態は、内容が相反しない範囲で組み合わせることができる。
【０１６８】
上記の実施形態の一部又は全部は、以下のようにも記載され得るが、以下には限られない。
［形態１］
上述の第１の視点に係る推論装置のとおりである。
［形態２］
前記ＰＥは、
前記入力データの要素と前記重みの要素を入力するセレクタと、
それぞれが、前記入力データの要素が取り得る値ごとの重みの累積加算を計算し、記憶する複数の累算器と、
を備え、
前記セレクタは、前記入力データの要素値に応じて、前記複数の累算器のうち前記入力した重みの要素の出力先となる累算器を決定する、
好ましくは形態１の推論装置。
［形態３］
前記ＰＥは、
前記複数の累算器それぞれに対応する、複数の乗算器を備え、
前記複数の乗算器には、前記重みの累積加算値と乗算する値が割り当てられている、好ましくは形態２の推論装置。
［形態４］
前記ＰＥは、
前記複数の乗算器による乗算結果を入力し、加算する加算器を備える、好ましくは形態３の推論装置。
［形態５］
前記入力データ記憶部は、量子化された入力データを記憶し、
前記ＰＥは、
前記入力データの要素を因数分解し、事前決定された第１因子群と第２因子群に分離する、分離部と、
前記重みの要素値を前記第２因子群の値に相当するビット数シフトする、シフト部と、
を備え、
前記セレクタは、前記第１因子群の値に応じて前記重みの要素の出力先を決定する、形態４の推論装置。
［形態６］
前記複数の累算器は、前記第１因子群が取り得る値ごとに用意され、
前記複数の乗算器のそれぞれには、前記第１因子群と第２因子群に分離される入力データにおいて前記第２因子群をゼロに固定し、前記第１因子群を可変して得られる値が前記重みの累積加算値と乗算する値として割り当てられる、好ましくは形態５の推論装置。
［形態７］
前記重み記憶部にアクセスし、前記重みを前記セレクタに供給する重み処理部と、
前記入力データ記憶部にアクセスし、前記入力データを前記セレクタに供給する入力データ処理部と、
を備え、
前記重み処理部及び前記入力データ処理部は、前記入力データの要素値がゼロである入力データの要素及び対応する重みの要素を前記セレクタに供給しない、好ましくは形態２乃至６のいずれか一に記載の推論装置。  
［形態８］
前記複数の累算器のそれぞれは、加算器とレジスタを含んで構成される、好ましくは形態２乃至７のいずれか一に記載の推論装置。
［形態９］
前記複数の累算器のそれぞれは、レジスタを含み、
前記ＰＥは、
前記入力データの要素が取り得る値に応じて、前記複数の累算器のうちいずれか一つの累算器の出力を選択する、累積加算値セレクタと、
前記累積加算値セレクタが出力する値と前記重みの要素値を加算し、加算結果を前記セレクタに出力する、共有加算器と、
をさらに備える、好ましくは形態２乃至７のいずれか一に記載の推論装置。
［形態１０］
前記ＰＥは、
前記入力データ記憶部から取得した入力データの取り得る値を制限する、入力データ制限部をさらに備える、好ましくは形態１乃至９のいずれか一に記載の推論装置。
［形態１１］
前記ＰＥを複数備え、
前記複数のＰＥは、前記畳み込みニューラルネットワークにおける畳み込み演算を並列に実行する、好ましくは形態１乃至１０のいずれか一に記載の推論装置。
［形態１２］
上述の第２の視点に係る畳み込み演算実行方法のとおりである。
［形態１３］
上述の第３の視点に係るプログラムのとおりである。
なお、形態１２及び１３は、形態１と同様に、形態２〜１１のように展開することが可能である。
【０１６９】
なお、引用した上記の非特許文献等の各開示は、本書に引用をもって繰り込むものとする。本発明の全開示（請求の範囲を含む）の枠内において、さらにその基本的技術思想に基づいて、実施形態ないし実施例の変更・調整が可能である。また、本発明の全開示の枠内において種々の開示要素（各請求項の各要素、各実施形態ないし実施例の各要素、各図面の各要素等を含む）の多様な組み合わせ、ないし、選択（少なくとも一部の非選択を含む）が可能である。すなわち、本発明は、請求の範囲を含む全開示、技術的思想にしたがって当業者であればなし得るであろう各種変形、修正を含むことは勿論である。特に、本書に記載した数値範囲については、当該範囲内に含まれる任意の数値ないし小範囲が、別段の記載のない場合でも具体的に記載されているものと解釈されるべきである。
【符号の説明】
【０１７０】
１０、１００  推論装置
１１  入力層実行部
１２  中間層実行部
１３  出力層実行部
３１  畳み込み層実行部
３２  活性化関数実行部
３３  プーリング層実行部
４０  畳み込み層制御部
４１、４１−１〜４１−４、１０３  ＰＥ（Processing Element）
５１、１０１  重み記憶部
５２、１０２  入力データ記憶部
５３  演算結果記憶部
６０  ＰＥ制御部
６１  重み処理部
６２  入力データ処理部
６３、６３ａ、６３ｂ  乗加算部
６４  入力データ制限部
７０  乗加算制御部
７１、７１ａ  セレクタ
７２、７２−０〜７２−１５  累算器
７３、７３−０〜７３−１５  乗算器
７４、７５、７５−０〜７５−１５、７９  加算器
７６、７６−０〜７６−１５  レジスタ
７７  分離部
７８  シフト部
９１  ＣＰＵ（Central Processing Unit）
９２  メモリ
９３  入出力インターフェイス
９４  ＮＩＣ（Network Interface Card）
５０１、５０２  重み
５１１、５１２  重み群
６０１、６１１  入力データ
【図１】
2019168088.tif 000005
【図２】
2019168088.tif 000006
【図３】
2019168088.tif 000007
【図４】
2019168088.tif 000008
【図５】
2019168088.tif 000009
【図６】
2019168088.tif 000010
【図７】
2019168088.tif 000011
【図８】
2019168088.tif 000012
【図９】
2019168088.tif 000013
【図１０】
2019168088.tif 000014
【図１１】
2019168088.tif 000015
【図１２】
2019168088.tif 000016
【図１３】
2019168088.tif 000017
【図１４】
2019168088.tif 000018
【手続補正書】
【提出日】令和2年9月1日(2020.9.1)
【手続補正１】
【補正対象書類名】特許請求の範囲
【補正対象項目名】全文
【補正方法】変更
【補正の内容】
【特許請求の範囲】
【請求項１】
重みを記憶する重み記憶部と、
入力データを記憶する入力データ記憶部と、
前記重み及び入力データを用いて畳み込みニューラルネットワークにおける畳み込み演算を実行するＰＥ（Processing Element）と、
を備え、
前記ＰＥは、
前記入力データの要素が取り得る値ごとに、前記入力データの要素と乗算される重みの要素を累積加算し、
前記入力データの要素が取り得る値それぞれと、前記入力データの要素が取り得る値に対応する重みの累積加算値それぞれと、を乗算し、
前記乗算により得られる複数の乗算結果を加算する、
推論装置。
【請求項２】
前記ＰＥは、
前記入力データの要素と前記重みの要素を入力するセレクタと、
それぞれが、前記入力データの要素が取り得る値ごとの重みの累積加算を計算し、記憶する複数の累算器と、
を備え、
前記セレクタは、前記入力データの要素値に応じて、前記複数の累算器のうち前記入力した重みの要素の出力先となる累算器を決定する、
請求項１の推論装置。
【請求項３】
前記ＰＥは、
前記複数の累算器それぞれに対応する、複数の乗算器を備え、
前記複数の乗算器には、前記重みの累積加算値と乗算する値が割り当てられている、請求項２の推論装置。
【請求項４】
前記ＰＥは、
前記複数の乗算器による乗算結果を入力し、加算する加算器を備える、請求項３の推論装置。
【請求項５】
前記入力データ記憶部は、量子化された入力データを記憶し、
前記ＰＥは、
前記入力データの要素を因数分解し、事前決定された第１因子群と第２因子群に分離する、分離部と、
前記重みの要素値を前記第２因子群の値に相当するビット数シフトする、シフト部と、
を備え、
前記セレクタは、前記第１因子群の値に応じて前記重みの要素の出力先を決定する、請求項４の推論装置。
【請求項６】
前記複数の累算器は、前記第１因子群が取り得る値ごとに用意され、
前記複数の乗算器のそれぞれには、前記第１因子群と第２因子群に分離される入力データにおいて前記第２因子群をゼロに固定し、前記第１因子群を可変して得られる値が前記重みの累積加算値と乗算する値として割り当てられる、請求項５の推論装置。
【請求項７】
前記重み記憶部にアクセスし、前記重みを前記セレクタに供給する重み処理部と、
前記入力データ記憶部にアクセスし、前記入力データを前記セレクタに供給する入力データ処理部と、
を備え、
前記重み処理部及び前記入力データ処理部は、前記入力データの要素値がゼロである入力データの要素及び対応する重みの要素を前記セレクタに供給しない、請求項２乃至６のいずれか一項に記載の推論装置。
【請求項８】
前記複数の累算器のそれぞれは、加算器とレジスタを含んで構成される、請求項２乃至７のいずれか一項に記載の推論装置。
【請求項９】
重みを記憶する重み記憶部と、
入力データを記憶する入力データ記憶部と、
を備え、前記重み及び入力データを用いて畳み込みニューラルネットワークにおける畳み込み演算を実行する推論装置において、
前記入力データの要素が取り得る値ごとに、前記入力データの要素と乗算される重みの要素を累積加算するステップと、
前記入力データの要素が取り得る値それぞれと、前記入力データの要素が取り得る値に対応する重みの累積加算値それぞれと、を乗算するステップと、
前記乗算により得られる複数の乗算結果を加算するステップと、
を含む、畳み込み演算実行方法。
【請求項１０】
重みを記憶する重み記憶部と、
入力データを記憶する入力データ記憶部と、
を備え、前記重み及び入力データを用いて畳み込みニューラルネットワークにおける畳み込み演算を実行する推論装置に搭載されたコンピュータに、
前記入力データの要素が取り得る値ごとに、前記入力データの要素と乗算される重みの要素を累積加算する処理と、
前記入力データの要素が取り得る値それぞれと、前記入力データの要素が取り得る値に対応する重みの累積加算値それぞれと、を乗算する処理と、
前記乗算により得られる複数の乗算結果を加算する処理と、
を実行させるプログラム。
【国際調査報告】
2019168088.tif 000019
2019168088.tif 000020