(57)【特許請求の範囲】
【請求項１】
入力データと重みを用いた畳み込みニューラルネットワークにおける畳み込み演算の結果を対数量子化する、量子化部と、
前記対数量子化された演算結果を入力データとして用いて畳み込み演算を実行する、畳み込み演算部と、
１層目の入力データに含まれる一のチャネルの各要素について、要素値を２進数で表現した場合に、値が１の桁を前記値が１の桁の位置を示す値に変換し、値が０の桁を変換後のデータが真にゼロを示す値に変換してデータ列を生成し、前記データ列をなす各要素をサブチャネルの各要素に割り当てることで、前記１層目の入力データに含まれる一のチャネルを、前記１層目の入力データをなす要素のビット数と同数の前記サブチャネルに拡張し、前記畳み込み演算部が前記１層目の入力データと前記量子化部により対数量子化された入力データを同様に処理できるように、前記１層目の入力データを変換する、入力データ変換部と、
を備える、推論装置。
【請求項２】
前記入力データ変換部は、
変換前後の入力データが等価であることを担保しつつ、前記１層目の入力データを変換する、請求項１の推論装置。
【請求項３】
前記入力データ変換部は、
前記１層目の入力データに含まれる一のチャネルの各要素の位置に対応する、前記サブチャネルの要素の位置に前記データ列をなす各要素を割り当てる、請求項１の推論装置。
【請求項４】
前記入力データを記憶する、入力データ記憶部と、
前記入力データ記憶部にアクセスし、前記入力データを取得する入力データ取得部と、をさらに備え、
前記入力データ取得部は、
前記取得した入力データが１層目の畳み込み演算で使用される場合には、前記取得した入力データを前記入力データ変換部に供給し、
前記取得した入力データが２層目以降の畳み込み演算で使用される場合には、前記取得した入力データを前記畳み込み演算部に供給する、請求項１乃至３のいずれか一項に記載の推論装置。
【請求項５】
前記１層目の入力データに含まれる一のチャネルに対応する重みの数が、前記拡張されたサブチャネルの数と同数となるように前記１層目の入力データに含まれる一のチャネルに対応する重みを複製する、重み複製部をさらに備える、請求項１乃至３のいずれか一項に記載の推論装置。
【請求項６】
前記１層目の入力データに対応するバイアスを、前記１層目の入力データと前記１層目の入力データに対応する重みを用いて変換し、前記変換されたバイアスを前記１層目の畳み込み演算の結果に加算する、バイアス変更部をさらに備える、請求項１乃至５のいずれか一項に記載の推論装置。
【請求項７】
入力データと重みを用いた畳み込みニューラルネットワークにおける畳み込み演算の結果を対数量子化する、量子化部と、
前記対数量子化された演算結果を入力データとして用いて畳み込み演算を実行する、畳み込み演算部と、
を備える推論装置において、
前記入力データを取得するステップと、
前記取得した入力データが１層目の畳み込み演算で使用される場合には、前記１層目の入力データに含まれる一のチャネルの各要素について、要素値を２進数で表現した場合に、値が１の桁を前記値が１の桁の位置を示す値に変換し、値が０の桁を変換後のデータが真にゼロを示す値に変換してデータ列を生成し、前記データ列をなす各要素をサブチャネルの各要素に割り当てることで、前記１層目の入力データに含まれる一のチャネルを、前記１層目の入力データをなす要素のビット数と同数の前記サブチャネルに拡張し、前記畳み込み演算部が前記１層目の入力データと前記量子化部により対数量子化された入力データを同様に処理できるように、前記１層目の入力データを変換する、ステップと、
を含む、畳み込み演算実行方法。
【請求項８】
入力データと重みを用いた畳み込みニューラルネットワークにおける畳み込み演算の結果を対数量子化する、量子化部と、
前記対数量子化された演算結果を入力データとして用いて畳み込み演算を実行する、畳み込み演算部と、
を備える推論装置に搭載されたコンピュータに、
前記入力データを取得する処理と、
前記取得した入力データが１層目の畳み込み演算で使用される場合には、前記１層目の入力データに含まれる一のチャネルの各要素について、要素値を２進数で表現した場合に、値が１の桁を前記値が１の桁の位置を示す値に変換し、値が０の桁を変換後のデータが真にゼロを示す値に変換してデータ列を生成し、前記データ列をなす各要素をサブチャネルの各要素に割り当てることで、前記１層目の入力データに含まれる一のチャネルを、前記１層目の入力データをなす要素のビット数と同数の前記サブチャネルに拡張し、前記畳み込み演算部が前記１層目の入力データと前記量子化部により対数量子化された入力データを同様に処理できるように、前記１層目の入力データを変換する、処理と、
を実行させるプログラム。
【発明の詳細な説明】
【技術分野】
【０００１】
（関連出願についての記載）
本発明は、日本国特許出願：特願２０１８−０３８０２９号（２０１８年０３月０２日出願）の優先権主張に基づくものであり、同出願の全記載内容は引用をもって本書に組み込み記載されているものとする。
本発明は、推論装置、畳み込み演算実行方法及びプログラムに関する。
【背景技術】
【０００２】
特許文献１及び２に示されるように、多層ニューラルネットワークによる画像認識等に関する技術開発が活発に行われている。このような技術は、深層学習（ディープラーニング）とも称される。とりわけ、画像認識等の技術分野において、畳み込みニューラルネットワークが多く用いられる。畳み込みニューラルネットワークには、後述するように、畳み込み層、プーリング層、全結合層が含まれる。畳み込み層では、カーネルを画像全体に畳み込む処理が行われる。【０００３】
画像全体にカーネルを畳み込む処理（画像にフィルタを適用する処理）により、画像に畳み込まれた特徴の集合が得られる。当該特徴の集合は、特徴マップとも称される。特徴マップは、畳み込んだ値に活性化関数を適用することで得られる。例えば、画像認識の分野では、ＲｅＬＵ（Rectified Linear Unit）が活性化関数として用いられることが多い。【０００４】
上述のように、畳み込み層では、画像（入力画像）にカーネル（重み、フィルタ）を畳み込む処理が行われる。その際、画像の各画素と重みを乗算する処理が数多く行われる。【０００５】
非特許文献１は、ＢｉｎａｒｙＣＮＮ（Convolutional Neural Network）に適した入力画像の１ビット化手法を開示している。当該文献の技術は、ＣＮＮ推論に用いる画像データが１ビットで表現されることを前提とし、入力信号を取り扱う回路の信号線を分岐することで画像を１ビット化している。非特許文献１に開示された技術では、入力データの持つ意味が変化すると共にＣＮＮ推論に使用する重みの再学習が必要となる。【０００６】
非特許文献２乃至４は、ＣＮＮ推論における「量子化」に関する技術を開示している。非特許文献２は、畳み込み演算の結果を２値（Ｂｉｎａｒｙ）に変換する技術を開示している。非特許文献３は、畳み込み演算の結果を３値（Ｔｅｒｎａｒｙ）に変換する技術を開示している。非特許文献４は、畳み込み演算の結果を４ビットに変換する技術を開示している。【０００７】
非特許文献２及び３に開示された技術は、畳み込み演算の結果が取り得る範囲を制限し、再学習してパラメータを決定する。対して、非特許文献４に開示された技術は、畳み込み演算の結果（整数、浮動小数点等）を２の冪乗に丸め込む。本願開示において、非特許文献４に開示された畳み込み演算の結果を２の冪乗に丸め込む量子化を「対数量子化」と表記する。
【先行技術文献】
【特許文献】
【０００８】
【特許文献１】特開２０１７−２１１７３５号公報
【特許文献２】特許第６１８３９８０号公報
【非特許文献】
【０００９】
【非特許文献１】M. Shimoda, S. Sato, and H. Nakahara、“All Binarized Convolutional Neural Network and Its implementation on an FPGA”、The International Conference on Field-Programmable Technology (FPT 2017)、2017
【非特許文献２】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〉
【発明の概要】
【発明が解決しようとする課題】
【００１０】
なお、上記先行技術文献の各開示を、本書に引用をもって繰り込むものとする。以下の分析は、本発明者らによってなされたものである。【００１１】
上述のように、深層学習、とりわけ、畳み込み層の演算では膨大な数の乗算処理が必要となる。膨大な乗算処理は、大規模なハードウェアを要求したり、強力な演算処理能力を有するプロセッサを要求したりする。そのため、ハードウェアの規模を抑えつつ、或いは、演算処理能力が低いプロセッサを用いたとしても、畳み込み層の演算を現実的な時間内で終了させるために非特許文献１乃至４に開示されたような技術が必要となる。【００１２】
特に、特許文献４に開示された技術では、畳み込み演算における乗算対象である入力データを２の冪乗に丸め込み、当該丸め込まれた入力データと重みの乗算処理を１回のシフト演算として実行する。その結果、畳み込み演算に要する乗算の回数が減少し、畳み込み演算を実行するためのハードウェア規模の抑制が可能となる。【００１３】
このように、入力データを対数量子化し、２の冪乗に丸め込むことで乗算回数の削減等の利点が生じる。ここで、非特許文献４等に開示された技術に関し、発明者らが鋭意検討した結果、一度も畳み込み演算が適用されていない１層目の入力データを対数量子化してしまうと、認識精度が低下することが判明した。そのため、非特許文献４に開示されたような対数量子化は、２層目以降の入力データに適用することを前提とすると言える。【００１４】
換言すれば、初段（１層目）の入力データを対数量子化し、畳み込み演算を行うことはできない。つまり、１層目の畳み込み演算における乗算処理を１回のシフト演算で完了させることはできない。具体的には、１層目の畳み込み演算に限っては、被乗数に乗数の最下位の数を掛けて、次に、被乗数に乗数の次の桁を掛けた結果を、桁をずらして足し込む処理を繰り返し行う必要がある（通常の整数乗算が必要である）。即ち、２層目以降の入力データを対数量子化し畳み込み演算の乗算をシフト演算により簡略化したとしても、当該利益を享受できるのは２層目以降の畳み込み演算に限られ、１層目の畳み込み演算については２進数での筆算を繰り返す必要がある。【００１５】
上記事実は、２層目以降の畳み込み演算を実行する回路（シフト演算による乗算器）とは別に１層目の畳み込み演算を実行する回路（整数乗算器）が必要であることを意味する。しかし、畳み込み演算の処理内容（アルゴリズム）は層によって異なるものではなく、処理の異なる回路を複数用意することは、ＦＰＧＡ（Field Programmable Gate Array）等のリソースを有効利用できているとは言えない。あるいは、異なる回路を複数用意することは、規模の大きいＦＰＧＡ等が必要となり消費電力やコストに対する影響が大きい。【００１６】
本発明は、量子化された入力データを用いた畳み込み演算を実行する回路を各層にて共用することに寄与する、推論装置、畳み込み演算実行方法及びプログラムを提供することを主たる目的とする。
【課題を解決するための手段】
【００１７】
本発明乃至開示の第１の視点によれば、入力データと重みを用いた畳み込みニューラルネットワークにおける畳み込み演算の結果を量子化する、量子化部と、前記量子化された演算結果を入力データとして用いて畳み込み演算を実行する、畳み込み演算部と、前記畳み込み演算部が１層目の入力データと前記量子化部により量子化された入力データを同様に処理できるように、前記１層目の入力データを変換する、入力データ変換部と、を備える、推論装置が提供される。【００１８】
本発明乃至開示の第２の視点によれば、入力データと重みを用いた畳み込みニューラルネットワークにおける畳み込み演算の結果を量子化する、量子化部と、前記量子化された演算結果を入力データとして用いて畳み込み演算を実行する、畳み込み演算部と、を備える推論装置において、前記入力データを取得するステップと、前記取得した入力データが１層目の畳み込み演算で使用される場合には、前記畳み込み演算部が前記１層目の入力データと前記量子化部により量子化された入力データを同様に処理できるように、前記１層目の入力データを変換する、ステップと、を含む、畳み込み演算実行方法が提供される。【００１９】
本発明乃至開示の第３の視点によれば、入力データと重みを用いた畳み込みニューラルネットワークにおける畳み込み演算の結果を量子化する、量子化部と、前記量子化された演算結果を入力データとして用いて畳み込み演算を実行する、畳み込み演算部と、を備える推論装置に搭載されたコンピュータに、前記入力データを取得する処理と、前記取得した入力データが１層目の畳み込み演算で使用される場合には、前記畳み込み演算部が前記１層目の入力データと前記量子化部により量子化された入力データを同様に処理できるように、前記１層目の入力データを変換する、処理と、を実行させるプログラムが提供される。
なお、このプログラムは、コンピュータが読み取り可能な記憶媒体に記録することができる。記憶媒体は、半導体メモリ、ハードディスク、磁気記録媒体、光記録媒体等の非トランジェント（non-transient）なものとすることができる。本発明は、コンピュータプログラム製品として具現することも可能である。
【発明の効果】
【００２０】
本発明乃至開示の各視点によれば、量子化された入力データを用いた畳み込み演算を実行する回路を各層にて共用することに寄与する推論装置、畳み込み演算実行方法及びプログラムが提供される。
【図面の簡単な説明】
【００２１】
【図１】一実施形態の概要を説明するための図である。
【図２】画像認識における中間層（隠れ層）の構造を説明するための図である。
【図３】畳み込み層における演算を説明するための図である。
【図４】第１の実施形態に係る推論装置の内部構成の一例を示す図である。
【図５】第１の実施形態に係る推論装置に含まれる中間層実行部の内部構成の一例を示す図である。
【図６】第１の実施形態に係る畳み込み層実行部の内部構成の一例を示す図である。
【図７】第１の実施形態に係る畳み込み演算部の内部構成の一例を示す図である。
【図８】第１の実施形態に係る畳み込み演算部の動作の一例を示すフローチャートである。
【図９】第１の実施形態に係る乗加算部の内部構成の一例を示す図である。
【図１０】第１の実施形態に係るシフト演算＆加算器の内部構成の一例を示す図である。
【図１１】第１の実施形態に係る入力データ処理部の内部構成の一例を示す図である。
【図１２】入力データ変換部の動作を説明するための図である。
【図１３】第１の実施形態に係る入力データ変換部の動作を説明するためのフローチャートである。
【図１４】第１の実施形態に係る重み処理部の内部構成の一例を示す図である。
【図１５】第１の実施形態に係る推論装置のハードウェア構成の一例を示す図である。
【図１６】第２の実施形態に係る畳み込み層実行部の内部構成の一例を示す図である。
【発明を実施するための形態】
【００２２】
初めに、一実施形態の概要について説明する。なお、この概要に付記した図面参照符号は、理解を助けるための一例として各要素に便宜上付記したものであり、この概要の記載はなんらの限定を意図するものではない。また、各図におけるブロック間の接続線は、双方向及び単方向の双方を含む。一方向矢印については、主たる信号（データ）の流れを模式的に示すものであり、双方向性を排除するものではない。さらに、本願開示に示す回路図、ブロック図、内部構成図、接続図などにおいて、明示は省略するが、入力ポート及び出力ポートが各接続線の入力端及び出力端のそれぞれに存在する。入出力インターフェイスも同様である。
【００２３】
一実施形態に係る推論装置１００は、量子化部１０１と、畳み込み演算部１０２と、入力データ変換部１０３と、を備える（図１参照）。量子化部１０１は、入力データと重みを用いた畳み込みニューラルネットワークにおける畳み込み演算の結果を量子化する。畳み込み演算部１０２は、量子化された演算結果を入力データとして用いて畳み込み演算を実行する。入力データ変換部１０３は、畳み込み演算部１０２が１層目の入力データと量子化部１０１により量子化された入力データを同様に処理できるように、１層目の入力データを変換する。
【００２４】
上記推論装置１００は、畳み込み演算における乗算処理がシフト演算により実現できるように構成されている。より具体的には、畳み込み演算部１０２は、取得した重みを入力データに相当する数左シフトすれば畳み込み演算の乗算処理が完了するように構成されている。入力データ変換部１０３は、当該畳み込み演算部１０２を層によらず使用可能とするため、入力データを変換する。その結果、量子化された入力データを用いた畳み込み演算を実行する回路（畳み込み演算部１０２）を各層にて共用できる。
【００２５】
以下に具体的な実施の形態について、図面を参照してさらに詳しく説明する。なお、各実施形態において同一構成要素には同一の符号を付し、その説明を省略する。
【００２６】
［第１の実施形態］
第１の実施形態について、図面を用いてより詳細に説明する。
【００２７】
図２は、画像認識における中間層（隠れ層）の構造を説明するための図である。図２を参照すると、入力層と中間層が接続され、中間層と出力層が接続される。なお、第１の実施形態では、入力層に入力されるデータは画像データを想定している。但し、本願開示にて取り扱う入力データは画像データに限定されないことは勿論である。
【００２８】
入力層は、取得した入力データから中間層に出力するためのデータを作成する。例えば、画像データがＲＧＢ（Red Green Blue）の３チャネルから構成されている場合には、入力層は、各色の画像データを生成し、中間層に出力する。中間層は、畳み込みニューラルネットワーク（ＣＮＮ（Convolutional Neural Network））により入力データの特徴部分が抽出されたデータを１つのノードに結合し、特徴変数を出力する。出力層は、中間層から取得した特徴変数に基づき、入力データを分類する。
【００２９】
中間層には、複数の「層（レイヤ）」が含まれ、初段の層が入力層と接続され、最終段の層は全結合層と接続されている。
【００３０】
中間層をなす各層には、畳み込み層、活性化関数、プーリング層が含まれ得る。なお、図２に示す構成は例示であり、中間層の構成を限定する趣旨ではない。場合によっては、中間層に活性化関数、プーリング層が含まれていなくともよい。
【００３１】
畳み込み層は、取得した入力データから特徴量を抽出する。当該抽出された特徴量には活性化関数が適用され、当該活性化関数が適用された後の特徴量がプーリング層に入力される。プーリング層では、取得した特徴量を結合する。その際、プーリング層では、物体の位置が変動しても同一の物体と判断できるようにするための処理（不変性を得るための処理）が行われる。例えば、対象物の位置ずれを許容するための処理がプーリング層にて行われる。なお、図２では、「活性化関数」を適用するための層が、畳み込み層やプーリング層と独立した形で記載されているが、実際には、「活性化関数」が畳み込み層及びプーリング層のいずれかの層に含まれる構成であってもよい。
【００３２】
図２に示すように、中間層をなす各層は、縦続接続されており、前段の層の出力が後段の層の入力に相当する。
【００３３】
図３は、畳み込み層における演算を説明するための図である。図３を参照すると、畳み込み層は、入力データと重み（フィルタ）を乗算することで、特徴量を出力する。
【００３４】
なお、本願開示にて使用する各種パラメータは図３に図示するように定める。入力データにおける一の方向（図３では縦方向）のサイズを「Ｈ」と表記する。また、入力データにおける他の方向（図３では幅方向）のサイズを「Ｗ」と表記する。例えば、Ｈ＝２５、Ｗ＝２５であれば、Ｈ×Ｗ＝６２５個の画素が入力データのサイズとなる。さらに、層の入力チャネル数を「Ｃ」と表記する。
【００３５】
重みにおける一の方向（図３では縦方向）のサイズを「Ｒ」と表記する。また、重みにおける他の方向（図３では幅方向）のサイズを「Ｓ」と表記する。例えば、Ｒ＝３、Ｓ＝３とすれば、Ｒ×Ｓ＝９が重みのサイズである。
【００３６】
図３に示す「Ｋ」は層の出力チャネル数である。層の出力チャネル数Ｋと重みの種類数は一致する。例えば、図３に示す重みの種類数が「４」であれば、層の出力チャネル数Ｋも「４」となる。
【００３７】
１種類の重みには、入力チャネル数Ｃと同じ数の重みが含まれる。例えば、入力チャネル数Ｃが「３」であれば、１種類の重みには３つの重みが含まれる。１種類の重みに含まれるＣ個の重みは、Ｃ個の入力データそれぞれと対応付けられている。例えば、図３において、上段のＣ個の重みにおいて、一番手前の重みは一番手前の入力データと対応付けられている。
【００３８】
なお、本願開示において、入力チャネル数Ｃごとに区分された重みの集合を「重み群」と表記する。各重み群には、Ｃ個の重みが含まれる。また、重みの種類数は出力チャネル数Ｋに一致するので、畳み込み層における重みの数は、Ｋ×Ｃ個となる。さらに、本願開示において、一の入力データや一の重みを基準として他の入力データや重みに向かう方向を「チャネル方向」と表記する。同様に、一の重み群を基準として他の重み群に向かう方向を「カーネル方向」と表記する。例えば、図３に示す重み５０１から重み５０２に向かう方向がチャネル方向であり、重み群５１１から重み群５１２に向かう方向がカーネル方向である。
【００３９】
畳み込み層では、入力データから重みのサイズに相当するデータを抽出し、当該抽出した入力データに含まれる要素と重みの対応する要素を乗算し、且つ、乗算結果をチャネル方向に加算する処理が実行される。例えば、図３に示すように、重みのサイズが３×３＝９であれば、入力データから同じサイズのデータ（例えば、図３の一番手前に図示した入力データのうち四角の領域で囲まれた入力データ６０１）が抽出される。その後、抽出された入力データの各要素と対応する重みの各要素が乗算される。例えば、図３の例では、抽出された入力データ６０１における左上の要素値「１」と対応する重み５０１の左上の要素値「１」が乗算される。畳み込み層では、このような処理が繰り返される（上述の例では９回繰り返される）。その後、乗算結果は加算される。
【００４０】
抽出された入力データと重みの乗算は、対応する入力データと重みの間で実行される。例えば、図３において、一番手前に図示した入力データ６０１に対応する重みは一番手前に図示された重み５０１とする。同様に、中間に図示した入力データに対応する重みが中間に図示した重み、最奥に図示した入力データに対応する重みが最奥に図示した重み５０２である。この場合、対応する入力データと重みの間で上記乗加算処理が繰り返される。
【００４１】
さらに、上記乗加算処理の結果は、チャネル方向にて加算される。例えば、上述の例では、３チャネル（一番手前、中間、最奥）における乗加算結果が加算される。
【００４２】
上記乗加算処理及びその後の加算処理は、重み群ごとに行われる。図３の例では、上段に図示した重み群５１１と入力データを用いた演算が行われ、下段に図示した重み群５１２に関しても同様の処理（同じ入力データを用いた乗加算処理及びその後の加算処理）が実行される。
【００４３】
畳み込み層では、上記処理（乗加算処理及びチャネル方向への加算処理）を、抽出する入力データを変更しながら繰り返す。例えば、図３の一番手前の入力データに図示するように、抽出する領域をスライドさせながら入力データを切り出していく。当該切り出されたデータには、上記と同様の処理が適用される。
【００４４】
上述のような入力データの抽出と、当該抽出された入力データに重みを乗算し、チャネル方向に加算する処理を繰り返すことで畳み込み層の出力データが得られる。なお、上述のように、入力データと重みの乗加算処理は重み群ごとに実行されるため、得られる出力データの数と重みの種類（重み群の数）は一致する。例えば、１６個の重み群が用意されていれば、１６個の出力データが得られる（Ｋ＝１６）。
【００４５】
なお、各出力データのサイズ（縦方向のサイズ、幅方向のサイズ）は、入力データからデータを抽出する際の領域（ウィンドウ）をスライドする際の仕様により定まる。図３の例では、各出力データには、１２（４×３）個の要素が含まれるように、入力データからデータが抽出される。
【００４６】
第１の実施形態に係る推論装置１０は、図３を用いて説明した畳み込み演算を推論の過程にて実行する。具体的には、図４に示すように、推論装置１０は、その内部に、入力層を実現する入力層実行部１１、中間層を実現する中間層実行部１２、出力層を実現する出力層実行部１３と、を含む。さらに、中間層実行部１２には、畳み込み層を実現する畳み込み層実行部３１、活性化関数を実行する活性化関数実行部３２及びプーリング層を実現するプーリング層実行部３３が各層に含まれる（図５参照）。
【００４７】
本願開示においては、図４及び図５に示す各種実行部のうち、畳み込み層実行部３１について詳細に説明する。他の実行部に関しては、公知のアルゴリズム等により実現可能であるため、その説明を省略する。
【００４８】
畳み込み層実行部３１は、図３を用いて説明した畳み込み演算（乗加算処理）を実行する。
【００４９】
図６は、畳み込み層実行部３１の内部構成の一例を示す図である。図６を参照すると、畳み込み層実行部３１には、畳み込み層制御部４０と、重み処理部４１と、入力データ処理部４２と、畳み込み演算部４３と、量子化部４４と、各種記憶部と、が含まれている。各種記憶部には、重み記憶部５１と、入力データ記憶部５２と、演算結果記憶部５３と、が含まれる。
【００５０】
入力データ記憶部５２、重み記憶部５１には各層の畳み込み演算に必要なデータ（入力データ、重み）が格納されている。畳み込み層実行部３１では、重み及び入力データを用いた畳み込みニューラルネットワークにおける畳み込み演算が実行され、その結果が演算結果記憶部５３に格納される。演算結果記憶部５３に格納された畳み込み演算の結果は、活性化関数実行部３２に引き渡される。また、プーリング層実行部３３により処理された結果は、入力データ記憶部５２に格納され、畳み込み層実行部３１にて畳み込み演算が再び実行される。
【００５１】
畳み込み層制御部４０は、畳み込み層実行部３１の全体を制御する手段である。畳み込み層制御部４０は、畳み込み演算を各種モジュール（畳み込み演算部４３等）を制御することで実現する。
【００５２】
各層における畳み込み演算に利用する重みは、重み記憶部５１に格納されている。重み記憶部５１は、各層にて使用する複数の重み群を層ごとに区分して記憶する。重み記憶部５１に記憶される重みは、推論装置１０の動作前に予め設定されていてもよいし、上位装置（例えば、学習装置）から都度重みを受け取り、重み記憶部５１に格納してもよい。
【００５３】
入力データ記憶部５２は、畳み込み演算に使用する入力データを記憶する。より正確には、当初の入力データ記憶部５２には１層目の畳み込み演算に用いる入力データが格納される。１層目の層で実行する他の処理（活性化処理、プーリング処理）が終了すると、入力データ記憶部５２には、２層目の畳み込み演算に用いる入力データ（アクティベーション）が格納される。
【００５４】
重み処理部４１は、畳み込み層制御部４０からの指示に応じて、重み記憶部５１にアクセスし、各層の畳み込み演算に適した（各層の畳み込み演算に使用する）重み群を取得する。
【００５５】
入力データ処理部４２は、畳み込み層制御部４０からの指示に応じて、入力データ記憶部５２にアクセスし、各層の畳み込み演算に使用する入力データを取得する。
【００５６】
畳み込み演算部４３は、重み処理部４１及び入力データ処理部４２から提供される重み及びデータ（入力データ、アクティベーション）を用いて畳み込み演算を実行する。詳細は後述するが、畳み込み演算部４３は、量子化部４４により対数量子化された入力データ（アクティベーション）を用いて畳み込み演算を実行するように構成されている。さらに、畳み込み演算部４３は、量子化部４４により対数量子化されたデータだけでなく、１層目の入力データに関しても２層目以降の入力データ（対数量子化された入力データ）と同様に処理する。畳み込み演算部４３は、畳み込み演算の結果を量子化部４４に出力する。
【００５７】
量子化部４４は、非特許文献４に開示されたように、畳み込み演算部４３による畳み込み演算の結果を対数量子化する。より具体的には、量子化部４４は、取得したデータを２の冪乗に丸め込み、当該２の冪乗を冪指数（底を２とした場合の冪指数）で表現する。例えば、量子化部４４は、取得したデータが「８」であれば、当該値は２３と表現できるので、取得したデータ「８」を冪指数である「３」に変換する。また、量子化部４４は、対数量子化後のデータを４ビットで表現する。具体的には、対数量子化された４ビットのデータは、底（基数）を２とした場合の冪指数、又は、対数量子化されたデータ（対数量子化対象のデータ）が真にゼロであることを示す。
【００５８】
なお、本願開示においては、上記４ビットのうち、１ビットは対数量子化されたデータが真にゼロを意味するのか、冪指数を意味するのかを明示するための情報に割り当てられる。また、上記４ビットのうち、３ビットを使って冪指数を表現する。なお、以降の説明において、対数量子化により得られる値（４ビットのデータ）を「対数量子化値」と表記する。
【００５９】
量子化部４４は、例えば、底を「２」に設定して対数量子化の対象値の対数を計算し、小数点以下を切り捨てることで、取得したデータを対数量子化する。例えば、対数量子化対象の値が「４」であれば、値「４」は「２」に対数量子化される（Ｌｏｇ２８＝２）。また、対数量子化対象の値が「９」であれば、値「９」は「３」に対数量子化される（Ｌｏｇ２９＝３．１６９；小数点以下切り捨てにより「３」）。なお、上述したように、量子化部４４は、４ビットのうち３ビットを用いて冪指数を表現するので、その上限は「７（０１１１ｂ）」となる。換言すれば、１２８（２７）よりも大きな値は、量子化部４４による対数量子化処理により「１２８」に丸め込まれることになる。なお、本願開示において、２進数を表現する場合には数字の後にｂを付与する。
【００６０】
本願開示では、対数量子化値の４ビットのうち、最上位のビットは対数量子化値が真にゼロか否かを示すフラグとして用いる。具体的には、当該最上位ビットが「１」であれば、他のビットの値によらず対数量子化値は真にゼロを示すものとして扱われる。対して、最上位ビットが「０」であれば、残りの３ビットは冪指数を示す。例えば、対数量子化値「１０００ｂ」は真にゼロを示す。対数量子化値「００００ｂ」は冪指数が「０」を示す。対数量子化値「０１１１ｂ」は冪指数が「７」を示す。
【００６１】
このように、量子化部４４は、データを２の冪乗に丸め込み、対数量子化対象のデータを冪指数又は真にゼロであるかを示す値に変換する。なお、本願開示における対数量子化は、非特許文献４に開示された手法や上記内容に限定されない。例えば、対数量子化値は４ビット以上のデータであってもよい。また、対数量子化されたデータを示す際の４ビットの使い方も上記内容に限定されない。例えば、４ビットで表現できる値のうち「１１１１ｂ」をデータが真にゼロを示すものと扱い、残りの数字（００００ｂ〜１１１０ｂ）にて冪指数を表現してもよい。さらに、対数量子化対象のデータを２の冪乗に丸め込む際の計算方法も上記方法に限定されない。例えば、量子化部４４は、底を「２」に設定して対数量子化の対象値の対数を計算し、小数点以下を切り上げることで、取得したデータを対数量子化してもよい。
【００６２】
なお、非特許文献４に開示された対数量子化では、対数量子化の対象値が一定の値より小さい場合には特定の最小値に、一定の値より大きければ特定の最大値にそれぞれ変換している。さらに、当該対数量子化では、対象値が上記特定の最小値、最大値より規定される範囲内の場合にその対数を計算している。本願開示においても、同様の処理を行うものとする。
【００６３】
続いて、図６に示す畳み込み演算部４３、入力データ処理部４２、重み処理部４１の詳細な説明を行う。
【００６４】
［畳み込み演算部］
畳み込み演算部４３は、対数量子化された入力データと重みの畳み込み演算を実行する。なお、各層における活性化関数やプーリング処理が適用されたとしても、次段の層に入力される入力データは対数量子化された状態を維持する。例えば、活性化関数としてＲｅＬＵを用いれば、負の値は「０」に変換され、正の値（冪指数）はそのまま出力される。また、プーリング層による動作（プーリング前後）により変化するパラメータは入力データのサイズＷ、Ｈである。つまり、プーリング層による動作では、対数量子化された入力データの値それ自体が変化することはない。従って、活性化関数やプーリング処理が実行されても入力データの対数量子化は維持される。
【００６５】
図７は、畳み込み演算部４３の内部構成の一例を示す図である。図７を参照すると、畳み込み演算部４３は、畳み込み演算制御部２０１と、重み入出力部２０２と、入力データ入出力部２０３と、乗加算部２０４と、各種記憶部が含まれる。各種記憶部には、重み一次記憶部２１１と、入力データ一次記憶部２１２と、演算結果一次記憶部２１３と、が含まれる。
【００６６】
重み一次記憶部２１１、入力データ一次記憶部２１２のそれぞれは、重み処理部４１、入力データ処理部４２から提供されるデータを一時的に記憶する。また、演算結果一次記憶部２１３は、乗加算部２０４による演算結果（１回の畳み込み演算の結果）を記憶する。
【００６７】
畳み込み演算部４３は、入力データ一次記憶部２１２に格納されたデータと、重み一次記憶部２１１に格納された重みを用いて畳み込み演算を実行する。
【００６８】
畳み込み演算制御部２０１は、重み入出力部２０２、入力データ入出力部２０３、乗加算部２０４を制御して重みと入力データ（アクティベーション）を用いた畳み込み演算を実行する手段である。
【００６９】
重み入出力部２０２は、重みの入出力に関する処理を実行する。
【００７０】
入力データ入出力部２０３は、入力データの入出力に関する処理を実行する。
【００７１】
乗加算部２０４は、重み入出力部２０２及び入力データ入出力部２０３のそれぞれから供給されるデータの乗加算処理を実行し、畳み込み演算を行う。
【００７２】
次に、図８を参照しつつ、畳み込み演算部４３の動作概略を説明する。
【００７３】
畳み込み演算制御部２０１は、１回の畳み込み演算の実行に必要な重み群を指定し、当該重み群の読み出しを重み入出力部２０２に指示する（ステップＳ０１）。
【００７４】
次に、畳み込み演算制御部２０１は、上記重み群との間で畳み込み演算を実行する入力データの範囲を指定し、当該入力データの読み出しを入力データ入出力部２０３に指示する（ステップＳ０２）。
【００７５】
例えば、図３を参照すると、重み群５１１と対応する入力データ６１１の畳み込み演算（１回の畳み込み演算）の実行が指示される。当該畳み込み演算により、図３の一番手前の出力データをなす各要素のうち左上の「１」が得られる。この場合、畳み込み演算制御部２０１は、重み入出力部２０２に対して、重み群５１１の読み出しを指示する。同様に、畳み込み演算制御部２０１は、入力データ入出力部２０３に対して、対応する入力データ６１１の読み出しを指示する。
【００７６】
重み入出力部２０２、入力データ入出力部２０３におけるデータの取得が完了すると、畳み込み演算制御部２０１は、重み入出力部２０２、入力データ入出力部２０３及び乗加算部２０４に対して「畳み込み演算実行開始」に係る指示を行う（ステップＳ０３）。
【００７７】
当該指示を受信した重み入出力部２０２、入力データ入出力部２０３はそれぞれ、先に取得した重み群、入力データを乗加算部２０４に供給する。
【００７８】
乗加算部２０４は、重み入出力部２０２、入力データ入出力部２０３から供給されるデータを用いて畳み込み演算に係る乗加算処理を実行する（ステップＳ０４）。なお、乗加算部２０４の構成及びその動作の詳細は後述する。
【００７９】
乗加算部２０４は、畳み込み演算が終了するとその旨を畳み込み演算制御部２０１に通知する（ステップＳ０５）。また、乗加算部２０４は、畳み込み演算の結果（１回分の畳み込み演算の結果）を演算結果一次記憶部２１３に格納する。
【００８０】
上記通知を受けた畳み込み演算制御部２０１は、重み入出力部２０２にて読み出した重み群を用いた畳み込み演算が終了したか否かを判定する（ステップＳ０６）。例えば、上述の例では、重み群５１１が読み出されていれば、当該重み群５１１を用いた全ての畳み込み演算が終了しているか否かが判定される。
【００８１】
読み出された重み群を用いた全ての畳み込み演算が終了していなければ（重み群と畳み込み演算する入力データが残っていれば；ステップＳ０６、Ｎｏ分岐）、畳み込み演算制御部２０１は、ステップＳ０２に戻り処理を継続する。その際、畳み込み演算制御部２０１は、適切な範囲を指定しつつ入力データ入出力部２０３に入力データの読み出しを指示する（スライディングウィンドウを移動して入力データの読み出しを指示する）。
【００８２】
読み出された重み群を用いた全ての畳み込み演算が終了していれば（ステップＳ０６、Ｙｅｓ分岐）、畳み込み演算制御部２０１は、全ての重み群を用いた畳み込み演算が終了しているか否かを判定する（ステップＳ０７）。
【００８３】
畳み込み演算が必要な重み群が残っていれば（ステップＳ０７、Ｎｏ分岐）、畳み込み演算制御部２０１は、ステップＳ０１に戻り処理を継続する。その際、畳み込み演算制御部２０１は、次の重み群を指定し、当該重み群を用いた畳み込み演算を実行する。
【００８４】
畳み込み演算が必要な重み群が残っていなければ（ステップＳ０７、Ｙｅｓ分岐）、畳み込み演算制御部２０１は、処理を終了する。
【００８５】
畳み込み演算制御部２０１は、畳み込み演算が終了すると、その旨を畳み込み層制御部４０に通知する。当該通知を受信した畳み込み層制御部４０は、現在の層における畳み込み演算は終了したものと判断し、その旨を後段の層（活性化関数）に通知する。また、プーリング層実行部３３による処理が終了すると、畳み込み層制御部４０は、次の層の畳み込み演算を実行する。
【００８６】
次に、乗加算部２０４について説明する。図９は、乗加算部２０４の内部構成の一例を示す図である。図９を参照すると、乗加算部２０４は、複数のシフト演算＆加算器３０１−１〜３０１−Ｎ（Ｎは正の整数、以下同じ）と、加算器３０２と、を含んで構成される。なお、以降の説明において、シフト演算＆加算器３０１−１〜３０１−Ｎを区別する特段の理由がない場合には、単に「シフト演算＆加算器３０１」と表記する。他の構成についても同様に、ハイフンで区切られた前の数字にて当該構成を代表して表記する。
【００８７】
シフト演算＆加算器３０１は、入力データをなすチャネルごとに設けられる。より具体的には、シフト演算＆加算器３０１は、畳み込み層実行部３１にて取り扱うチャネル数と同じ数用意される。例えば、深層学習の画像応用において代表的なモデルであるＶＧＧ（Visual Geometry Group）１６においては最終的なチャネル数は「５１２」となる。この場合、５１２個のシフト演算＆加算器３０１が用意される（Ｎ＝５１２）。
【００８８】
シフト演算＆加算器３０１は、入力データをなすチャネルの各要素と対応する重みに関するシフト演算を実行し、シフト演算の結果を加算する。より具体的には、シフト演算＆加算器３０１のそれぞれは、重み入出力部２０２及び入力データ入出力部２０３から重みと対応する入力データを取得する。例えば、図３の例では、シフト演算＆加算器３０１−１には、重み５０１と対応する入力データ６０１が供給される。なお、図９における「Ｉ（Ｎ）」や「Ｗ（Ｎ）」の括弧内の数字は、シフト演算＆加算器３０１に供給される入力データと重みのチャネルを示している。
【００８９】
シフト演算＆加算器３０１のそれぞれは、供給された入力データと重みの対応する要素同士を乗算し、各乗算結果を加算する。その際、供給される入力データは、対数量子化されているので（入力データは底を２とした場合の冪指数であるので）、シフト演算＆加算器３０１は、通常の整数乗算処理ではなく、シフト演算により乗算処理を行う。つまり、対数量子化値は、冪指数又は対数量子化値が真にゼロを示す値であるので、シフト演算＆加算器３０１は、対数量子化値の数だけ重みを左シフトすれば、重みと入力データの乗算処理を実行したことになる。
【００９０】
図１０は、シフト演算＆加算器３０１の内部構成の一例を示す図である。図１０を参照すると、シフト演算＆加算器３０１は、シフト演算器３１１と、加算器３１２と、レジスタ３１３と、を含んで構成される。なお、図１０において、取得した重みや入力データを一時的に格納するレジスタや、シフト演算器３１１に投入する重みや入力データを制御するモジュール（コントローラ）の図示は省略している。
【００９１】
シフト演算器３１１は、取得した重みの要素値を入力データの要素値（対数量子化値；冪指数）に相当する数左シフトする。例えば、対数量子化値が「００１１ｂ」であれば取得した重みの要素値を３ビット左シフトして加算器３１２に出力する。加算器３１２は、レジスタ３１３に格納された値（初期値はゼロ）とシフト演算器３１１が出力する値を加算し、その結果をレジスタ３１３に格納する。なお、対数量子化値が「１０００ｂ」であれば、当該値は入力データは真にゼロであることを示すので、当該入力データと重みの乗算（シフト演算）は行わない。
【００９２】
シフト演算＆加算器３０１は、取得した重みの各要素を対応する入力データの要素値（即ち、対数量子化値）に相当する数の左シフトを計算し、加算器３１２及びレジスタ３１３を用いて乗算結果（左シフト演算の結果）を加算することを繰り返す。各シフト演算＆加算器３０１による加算結果（レジスタ３１３の最終的な保持値）は、加算器３０２に出力される。
【００９３】
加算器３０２は、各シフト演算＆加算器３０１から取得した加算結果を加算し、１回の畳み込み演算による演算結果とする。当該演算結果は、演算結果一次記憶部２１３に格納される。
【００９４】
このように、畳み込み演算部４３（乗加算部２０４）は、畳み込み演算にて実行する乗算処理を、取得した入力データをなす各要素の要素値に応じたシフト演算により実現する。
【００９５】
［入力データ処理部］
図６に説明を戻す。入力データ処理部４２は、入力データ記憶部５２から取得したデータが１層目で使用されるものである場合には、当該取得した入力データに所定の変換処理を施し、変換後の入力データを畳み込み演算部４３に供給する。一方、入力データ処理部４２は、入力データ記憶部５２から取得したデータ（アクティベーション）が２層目以降で使用されるものである場合には、特段の処理を行わず、取得したデータを畳み込み演算部４３に供給する。
【００９６】
上記機能を実現するため、入力データ処理部４２は、図１１に示すような構成を備える。図１１を参照すると、入力データ処理部４２は、入力データ取得部４０１と、入力データ変換部４０２と、を含んで構成される。
【００９７】
入力データ取得部４０１は、畳み込み層制御部４０からの指示に応じて、入力データ記憶部５２にアクセスし、各層の畳み込み演算に必要なデータ（入力データ、アクティベーション）を取得する。その際、入力データ取得部４０１は、データの取得を指示された層が１層目であれば、取得したデータを入力データ変換部４０２に供給する。入力データ取得部４０１は、データの取得を指示された層が２層目以降であれば、取得したデータをそのまま畳み込み演算部４３に供給する。
【００９８】
入力データ変換部４０２は、畳み込み演算部４３が、１層目の畳み込み演算に使用する入力データと量子化部４４により対数量子化された入力データを同様に処理できるように、当該１層目の入力データを変換する手段である。より具体的には、入力データ変換部４０２は、変換前後の入力データが等価であることを担保しつつ、１層目の入力データを変換する。
【００９９】
図１２を参照しつつ、入力データ変換部４０２による変換処理を具体的に説明する。図１２には、理解の容易のため、１チャネル分の入力データ（３×３のサイズ）を図示している。また、入力データの各要素値は８ビット（０〜２５５）により表現されるものとする。
【０１００】
初めに、入力データ変換部４０２は、１層目の入力データに含まれる一のチャネルを、１層目の入力データをなす要素のビット数と同数のサブチャネルに拡張する。例えば、図１２に示すように、入力データの要素値が８ビットで表現されている場合には、入力データ変換部４０２は、８個のサブチャネルＣＨ１-１〜ＣＨ１−８を生成する。
【０１０１】
次に、入力データ変換部４０２は、１層目の入力データに含まれる一のチャネルの各要素について、要素値を２進数で表現した場合に、値が「１」の桁を当該値が「１」の桁の位置（ビット位置）を示す値に変換する。また、入力データ変換部４０２は、値が０の桁を変換後のデータが真にゼロを示す値に変換する。このようにして、入力データ変換部４０２は、入力データの各要素から複数の要素を備えるデータ列を生成する。例えば、入力データの要素値が「１３」であれば、その２進数表記は「００００１１０１ｂ」となる。便宜上、真にゼロを示す値を「−１」とすれば、入力データ変換部４０２は、データ列｛−１、−１、−１、−１、３、２、−１、０｝を生成する。なお、上記入力データ変換部４０２の処理において、最下位ビットのビット位置を「０」とする。
【０１０２】
このように、入力データ変換部４０２は、上記処理により、「１」が設定された桁のビット位置又は真にゼロを示す値を要素とするデータ列を生成する。なお、当該データ列に含まれる２進数のビット位置は、乗加算部２０４にて底を２とした場合の冪指数として扱われる。つまり、乗加算部２０４は、量子化部４４が生成するデータ（対数量子化値）と入力データ変換部４０２が生成するデータ（変換値）を同等に扱うことができる。
【０１０３】
入力データ変換部４０２は、上記データ列をなす各要素（ビット位置、真にゼロを示す値）を先に生成したサブチャネルの各要素に割り当てる。その際、入力データ変換部４０２は、１層目の入力データに含まれる一のチャネルの各要素の位置に対応する、サブチャネルの要素の位置にデータ列をなす各要素を割り当てる。例えば、図１２において、変換前の入力データの右上に位置する要素（要素値が１３）から生成されたデータ列の各要素は、生成されたサブチャネルの右上に位置する要素に分散されて配置される。
【０１０４】
例えば、上述の入力データの要素値が「１３」である場合の例では、生成されたデータ列は、｛−１、−１、−１、−１、３、２、−１、０｝である。また、図１２の例では、チャネル１（ＣＨ１）のサブチャネルとして、ＣＨ１−１〜ＣＨ１−８が生成される。上記生成されたデータ列をなす要素を左から順にサブチャネルに割り当てると、サブチャネルＣＨ１−８の要素値は「−１」となる。上述のように、量子化部４４は４ビットで入力データを対数量子化し、真のゼロは「１０００ｂ」で表記するので、当該表記に合わせると、サブチャネルＣＨ１−８の要素値は「１０００ｂ」となる。サブチャネルＣＨ１−７〜ＣＨ−５の要素値も同様に「１０００ｂ」となる。そして、サブチャネルＣＨ１−４の要素値はデータ列の対応する要素値が「３」であるので、「００１１ｂ」となる。同様に、サブチャネルＣＨ１−３の要素値は「００１０ｂ」、サブチャネルＣＨ１−２の要素値は「１０００ｂ」、サブチャネルＣＨ１−１は「００００ｂ」となる。
【０１０５】
入力データ変換部４０２は、上記のようなデータ列を生成する処理を取得した入力データの全ての要素に適用して対応するデータ列を生成し、データ列の各要素をサブチャネルの各要素に割り当てる。また、入力データ変換部４０２は、上記サブチャネルを生成する処理、データ列を生成する処理、データ列の各要素をサブチャネルの各要素に割り当てる処理を取得した入力データの全てのチャネルに適用する。
【０１０６】
上記入力データ変換部４０２の動作を纏めると図１３に示すフローチャートのとおりとなる。
【０１０７】
初めに、入力データ変換部４０２は、入力データの各チャネルに関し、変換前の入力データをなす各要素値のビット数に応じた数のサブチャネルを生成する（ステップＳ１０１）。次に、入力データ変換部４０２は、入力データの各要素値を２進数表記し、各ビットの値（０、１）に応じて、ビット位置を示す数又は対数量子化後のデータが真にゼロを示す数を要素とするデータ列を生成する（ステップＳ１０２）。最後に、入力データ変換部４０２は、入力データの各要素とサブチャネルの各要素の位置を保持しつつ、生成したデータ列の各要素をサブチャネルの各要素に割り当てる（ステップＳ１０３）。
【０１０８】
入力データ変換部４０２は、上記のように生成したサブチャネルを対数量子化された入力データ（アクティベーション）として畳み込み演算部４３に供給する。例えば、入力データがＲＧＢの３チャネルから構成される画像データである場合には、１つのチャネルが８個のサブチャネルに拡張されるので、２４（３×８）個のチャネルが畳み込み演算部４３に供給される。
【０１０９】
サブチャネルの各要素は冪指数又は真にゼロを示すので、畳み込み演算部４３（より正確には乗加算部２０４）における畳み込み演算に必要な乗算は、シフト演算で実現できる。また、畳み込み演算では、チャネルと重みの対応する要素同士の乗算の後、乗算結果は加算されることになるので、変換前の入力データを用いた畳み込み演算と変換後の入力データを用いた畳み込み演算の結果は同一となる。
【０１１０】
例えば、変換前の入力データの要素値が「１３」であり、対応する重みの要素値が「２」の場合を考える。この場合、入力データと重みの乗算結果は「２６」である。要素値「１３」は、２３＋２２＋２０と表現できるので、重みの要素値「２」を３ビット左シフト、２ビット左シフト、シフト無しの加算が乗算結果となる。当該シフト演算と加算の結果は「２６」となる（１６＋８＋２＝２６）。
【０１１１】
続いて、データ変換前の入力データを用いた畳み込み演算とデータ変換後の入力データを用いた畳み込み演算の結果が等しくなることを数式により説明する。
【０１１２】
畳み込み演算の計算式は下記の式（１）のように表現できる。
［式１］
0006977864.tif 000002
【０１１３】
なお、式（１）において、ｗは重みの要素、ａは入力データ（アクティベーション）の要素を示す。ｎは層の順番を示し、サフィックスｉ、ｊは入力データ、重みの幅方向、高さ方向の位置を示す。ｘ、ｙは出力データの位置を示す。Ｃ、Ｓ、Ｒは上述のように、チャネル数、重みのサイズを示す。
【０１１４】
入力データ（アクティベーション）が対数量子化されている場合、入力データａはａ＝２ｌと表記できる（但し、ｌは冪指数であり、正の整数。以下同じ）。すると、式（１）から下記の式（２）、（３）が得られる。
［式２］
0006977864.tif 000003
［式３］
0006977864.tif 000004
【０１１５】
また、入力データ変換部４０２によるデータ変換の際、変換前の入力データの要素値が８ビット整数の場合には、入力データａは下記の式（４）のとおりとなる。
［式４］
0006977864.tif 000005
【０１１６】
なお、Ｌは入力データ変換部４０２により生成されるサブチャネルの数である。上述の例では、Ｌ＝８である。
【０１１７】
式（４）を用いると式（１）は、下記の式（５）〜（７）のとおり変形できる。
［式５］
0006977864.tif 000006
［式６］
0006977864.tif 000007
［式７］
0006977864.tif 000008
【０１１８】
式（７）において、入力データはＲＧＢの３チャネルとし、
0006977864.tif 000009
をチャネル数３×Ｌと捉えれば、式（７）と式（３）は同等となる。このように、入力データ変換部４０２による変換された入力データ（各要素が冪指数であるサブチャネル）を用いた畳み込み演算結果とデータ変換前の畳み込み演算の結果は同じとなる。
【０１１９】
なお、量子化部４４の対数量子化処理により得られる対数量子化値と入力データ変換部４０２の変換処理により得られる変換値の形式（フォーマット）は同じものであるが、上記２つのモジュールの処理は似て非なるものである。
【０１２０】
上述のように、量子化部４４の対数量子化処理は、対象となるデータを２の冪乗に丸め込み、当該丸め込んだデータを冪指数で表現するものである。従って、量子化部４４による対数量子化値から対数量子化前のデータを得ることは原則できない。即ち、量子化部４４による処理は不可逆な変換動作とも言える。
【０１２１】
対して、入力データ変換部４０２による変換処理は、対象となるデータを２の冪乗の和として表現し、これら２の冪乗を複数のサブチャネルに分配配置する処置である。その際、入力データ変換部４０２は、各サブチャネルに分配する２の冪乗を冪指数で表現する。従って、サブチャネルに分配された要素から２の冪乗を復元し、復元結果を加算することで、データ変換前の値を得ることができる。即ち、入力データ変換部４０２による処理は可逆な変換動作とも言える。
【０１２２】
［重み処理部］
図６に説明を戻す。重み処理部４１は、重み記憶部５１から取得した重み（重み群）が１層目で使用するものである場合には、当該取得した重みを所定の数複製し、畳み込み演算部４３に供給する。一方、重み処理部４１は、重み記憶部５１から取得した重みが２層目以降で使用されるものである場合には、特段の処理を行わず、取得した重みを畳み込み演算部４３に供給する。
【０１２３】
上記機能を実現するため、重み処理部４１は、図１４に示すような構成を備える。図１４を参照すると、重み処理部４１は、重み取得部４１１と、重み複製部４１２と、を含んで構成される。
【０１２４】
重み取得部４１１は、畳み込み層制御部４０からの指示に応じて、重み記憶部５１にアクセスし、各層の畳み込み演算に必要な重み群（複数の重み群）を取得する。その際、重み取得部４１１は、重みの取得を指示された層が１層目であれば、取得した重みを重み複製部４１２に供給する。重み取得部４１１は、重みの取得を指示された層が２層目以降であれば、取得した重みをそのまま畳み込み演算部４３に供給する。
【０１２５】
重み複製部４１２は、取得した１層目の重み（重み群）を所定の数複製する。具体的には、重み複製部４１２は、１層目の入力データに含まれる一のチャネルに対応する重みの数が、拡張されたサブチャネルの数と同数となるように１層目の入力データに含まれる一のチャネルに対応する重みを複製する。つまり、重み複製部４１２は、入力データ変換部４０２が生成するサブチャネルの数と同じ数となるように対応する重みを複製する。例えば、上述のように、入力データ変換部４０２が１つのチャネルから８個のサブチャネルを生成する場合には、重み複製部４１２は１層目の対応する重みを７回複製する。即ち、重み複製部４１２は、同じ重みを８個用意する。
【０１２６】
換言すれば、重み複製部４１２は、データ変換前の入力データと重みの関係と、データ変換後の入力データ（サブチャネル）と重みの関係と、が維持されるように１層目の重みの複製を行う。当該複製処理により、畳み込み演算部４３は、提供されたデータ（入力データ、重み）の層を意識すること無く、画一的に処理できる。
【０１２７】
続いて、第１の実施形態に係る推論装置１０のハードウェア構成について説明する。
【０１２８】
図１５は、推論装置１０のハードウェア構成の一例を示す図である。推論装置１０は、所謂、情報処理装置（コンピュータ）により構成可能であり、図１５に例示する構成を備える。例えば、推論装置１０は、内部バスにより相互に接続される、ＣＰＵ（Central Processing Unit）９１、メモリ９２、入出力インターフェイス９３及び通信手段であるＮＩＣ（Network Interface Card）９４等を備える。
【０１２９】
なお、図１５に示す構成は、推論装置１０のハードウェア構成を限定する趣旨ではない。推論装置１０は、図示しないハードウェアを含んでもよい。あるいは、推論装置１０に含まれるＣＰＵ等の数も図１５の例示に限定する趣旨ではなく、例えば、複数のＣＰＵが推論装置１０に含まれていてもよい。
【０１３０】
メモリ９２は、ＲＡＭ（Random Access Memory）、ＲＯＭ（Read Only Memory）、補助記憶装置（ハードディスク等）である。
【０１３１】
入出力インターフェイス９３は、図示しない表示装置や入力装置のインターフェイスとなる手段である。表示装置は、例えば、液晶ディスプレイ等である。入力装置は、例えば、キーボードやマウス等のユーザ操作を受け付ける装置である。
【０１３２】
推論装置１０の機能は、上述の処理モジュールにより実現される。当該処理モジュールは、例えば、メモリ９２に格納されたプログラムをＣＰＵ９１が実行することで実現される。あるいは、処理モジュールの一部（例えば、乗加算部２０４）は、ＦＰＧＡ（Field Programmable Gate Array）やＡＳＩＣ（Application Specific Integrated Circuit）等の特定用途に特化したハードウェアにより実現（ハードウェアに実装）されてもよい。また、上記プログラムは、ネットワークを介してダウンロードするか、あるいは、プログラムを記憶した記憶媒体を用いて、更新することができる。さらに、上記処理モジュールは、半導体チップにより実現されてもよい。即ち、上記処理モジュールが行う機能は、何らかのハードウェアにおいてソフトウェアが実行されることによって実現できればよい。
【０１３３】
以上のように、第１の実施形態に係る推論装置１０は、畳み込み演算部４３が取得したデータを層によらず画一的に処理できるように、１層目にて使用する入力データを変換する。第１の実施形態では、当該入力データの変換を変換前後で意味が変化しないようにしているため、変換後の入力データを用いた畳み込み演算の精度が劣化することはない。この点、非特許文献１に開示された技術では、意味が変化してしまうのと対照的である。また、非特許文献１に開示された技術では、重みの再学習が必要であったが、第１の実施形態に係る推論装置１０では、入力データの意味が変化しないのでそのような再学習は不要である。
【０１３４】
［第２の実施形態］
続いて、第２の実施形態について図面を参照して詳細に説明する。
【０１３５】
第１の実施形態では、入力データは正の整数であることを前提としている。しかし、ＣＮＮ学習、推論において１層目の入力データが負の値となることや実数（浮動小数点）となることがあり得る。第２の実施形態では、これら入力データが負の値や浮動小数点で表現される場合であっても、畳み込み演算回路を共用できることを説明する。
【０１３６】
特定のデータセットを用いたＣＮＮ学習、推論では、畳み込み演算の前処理として、事前算出されるデータセット全体の平均値を入力データから減算する処理が行われることがある。例えば、画像データセットにおいて、画像のＲＧＢ３チャネルそれぞれの平均値（Ｒのデータセット平均値、Ｇのデータセット平均値、Ｂのデータセットの平均値の３値）が事前に計算される。その後、画像データの画素値から当該３つの平均値を減算して得られる画像を、ＣＮＮ推論の入力とすることがある。
【０１３７】
上記内容を数式にて表現すると、以下の式（８）のとおりとなる。
【０１３８】
［式８］
0006977864.tif 000010
【０１３９】
式（８）において、a'x,y,cは平均値減算後の画素値を示し、ＣＮＮへの入力データとなる。ａx,y,cはＲＧＢの各チャネルｃにおける座標（ｘ、ｙ）の画素値を示す。ａｖｅcは各チャネルｃのデータセット平均値を示す。
【０１４０】
上記式（８）から明らかな通り、入力データに対して事前処理を施すとＣＮＮへの入力データ（入力画素値）は正の整数とは限らず、データセット平均値によっては負の値や浮動小数点（実数）となることがある。第１の実施形態にて説明した構成では、これら負の値や浮動小数点をそのまま扱うことができない。そこで、第２の実施形態では、上記事前減算に相当する処理を、１層目の畳み込み演算が終了した後に実行することで、畳み込み演算の回路を共用する場合を説明する。
【０１４１】
なお、第１の実施形態では、入力データに加算するバイアスに言及していない。入力データに加算するバイアスは、通常、固定値（例えば、「１」）でありバイアスが加算されても入力データ全体がシフトするだけであり、畳み込み演算の動作には影響しないためである。
【０１４２】
バイアスを考慮して式（１）を書き直すと、下記の式（９）が得られる。
［式９］
0006977864.tif 000011
【０１４３】
式（９）において、ｂｋがバイアスである。
【０１４４】
上記事前減算を考慮しつつ、ＣＮＮ１層目の演算を上述の式（９）を用いて表現すると下記の式（１０）が得られる。
【０１４５】
［式１０］
0006977864.tif 000012
【０１４６】
式（１０）において、ｂ１ｋは１層目のバイアスである。なお、１層目のバイアスｂ１ｋは、設計時に予め定まる固定値である。
【０１４７】
式（１０）に式（８）を代入し、展開すると下記の式（１１）が得られる。
【０１４８】
［式１１］
0006977864.tif 000013
【０１４９】
上記式（１１）は分配則により、下記の式（１２）に変形できる。
【０１５０】
［式１２］
0006977864.tif 000014
【０１５１】
ここで、
0006977864.tif 000015
と
0006977864.tif 000016
が、（ｘ、ｙ）座標によらない値であることを考慮すると、式（１２）は下記の式（１３）に書き換えることができる。
【０１５２】
［式１３］
0006977864.tif 000017
【０１５３】
式（１３）において、右辺の第２項
0006977864.tif 000018
はｋに依存する変数ｂ’１ｋと置き替えることができる。さらに、式（１３）において、第２項、第３項の−ｂ’１ｋ＋ｂ１ｋをｂnew１ｋと置き替えれば、置換後の式（１３）により示される畳み込み演算（事前減算を行う畳み込み演算）は、式（９）と同等と捉えることができる。
【０１５４】
当該事実は、事前減算に変えて、１層目における畳み込み演算結果に加算するバイアスを新たなバイアスｂnew１ｋ（＝−ｂ’１ｋ＋ｂ１ｋ）としておくことで、ＣＮＮ１層目の入力データを正の値にできることを意味する。つまり、式（１３）の右辺第１項は、特定のデータセット等にて行われる事前減算を行う前の入力データを用いた畳み込み演算に等しく、右辺の第２項と第３項は新たなバイアスと捉えることができる。このことは、１層目の入力データを第１の実施形態と同様に処理（入力データの変換、畳み込み演算の実行）し、その後、新たなバイアスを加算すれば、上記事前減算が行われた入力データを用いた畳み込み演算と同じ処理結果が得られることを意味する。換言すれば、第２の実施形態では、事前に行われる減算処理に相当する処理を１層目の畳み込み演算が終了した後に実行することで、入力データ変換部４０２がデータ変換の対象とする入力データは正の整数となることを担保する。
【０１５５】
図１６は、第２の実施形態に係る畳み込み層実行部３１ａの内部構成の一例を示す図である。図６と図１６を比較すると、畳み込み演算部４３と量子化部４４の間にバイアス変更部４５が追加されている点が相違する。
【０１５６】
バイアス変更部４５は、重み記憶部５１に格納された重みと、入力データ記憶部５２に格納された入力データと、を取得可能に構成されている。バイアス変更部４５は、１層目の畳み込み演算の結果を畳み込み演算部４３から取得した場合には、量子化部４４に供給するデータのバイアスを変更する。対して、バイアス変更部４５は、２層目以降の畳み込み演算の結果を取得した場合には、当初のバイアスを変更せず畳み込み演算の結果を量子化部４４に供給する。
【０１５７】
具体的には、バイアス変更部４５は、１層目の畳み込み演算結果を取得した場合には、上記ｂnew１ｋを計算し、畳み込み演算の結果に加算する。より詳細には、バイアス変更部４５は、１層目の入力データから各チャネルの平均値ａｖｅｃを計算する。その後、バイアス変更部４５は、計算した平均値ａｖｅｃと各チャネルに対応する重み群の全要素を乗算し、乗算結果を加算することで上記ｂ’１ｋを計算する。バイアス変更部４５は、−ｂ’１ｋ＋ｂ１ｋ（当初のバイアス；予め定められた固定値）を計算し、当該計算した値を新たなバイアスとして１層目の畳み込み演算結果に加算し、その結果を量子化部４４に供給する。なお、バイアス変更部４５の動作は、層出力値の平均を「０」に、分散を「１」に変換するような正規化処理と捉えることもできる。
【０１５８】
以上のように、第２の実施形態では、１層目の入力データに対応するバイアスを、１層目の入力データと１層目の入力データに対応する重みを用いて変換し、当該変換されたバイアスを１層目の畳み込み演算の結果に加算する。その結果、データセット平均値を入力データから減算することにより入力データが負の値や浮動小数点（実数）となることが回避できる。つまり、第２の実施形態では、入力データの事前減算処理を実行する前に、１層目の畳み込み演算を実行し、その後、各チャネルの平均値を事前減算に関する値をバイアスと共に加算（減算）する。当該加算処理により、畳み込み演算結果が浮動小数点（実数）となることがあり得るが、当該実数値は量子化部４４による対数量子化処理により丸め込まれ、整数に変換される。その結果、２層目以降の入力データも整数となり、畳み込み演算回路を共用することができる。
【０１５９】
［変形例］
第１の実施形態にて説明した推論装置１０は例示であって、その構成及び動作を限定する趣旨ではない。以下、各種変形例について説明する。
【０１６０】
上記実施形態では、畳み込み層実行部３１にて対数量子化処理を実行する場合について説明したが、プーリング層等において対数量子化処理を実行しても良い。あるいは、図６に示す重み処理部４１、入力データ処理部４２が１つのモジュールにより実現されていても良い。
【０１６１】
上記実施形態では、重み複製部４１２が１層目の重みを複製することを説明したが、畳み込み演算部４３が、畳み込み演算を実行する「層」を区別することで、当該複製処理を不実施とすることもできる。具体的には、図７において、重み入出力部２０２は１層目の同じ重みを必要な数だけ連続して乗加算部２０４に供給すればよい。上述の例では、重み入出力部２０２は、同じ重みを８回連続して乗加算部２０４に供給すればよい。
【０１６２】
上記実施形態では、入力データの値によらず、入力データ一次記憶部２１２に格納された入力データと重み一次記憶部２１１に格納された重みを全て乗加算部２０４に供給することを説明した。しかし、対数量子化された入力データの値が真に「０」であれば、その乗算結果は重みの値によらずゼロになるので、当該入力データ「０」と対応する重みの値を乗加算部２０４に供給する必要がない。そこで、例えば、入力データ入出力部２０３が入力データの値が「０」であることを検知し、当該事実を重み入出力部２０２に伝え、値が「０」である入力データと対応する重み値の供給を省略してもよい。つまり、入力データの要素値が真にゼロを示すものである場合には、入力データ入出力部２０３と重み入出力部２０２が連携し、当該データ及び対応する重みを乗加算部２０４に供給することを停止してもよい。その結果、乗加算部２０４における処理が低減され、畳み込み演算の高速化が期待できる。
【０１６３】
上記実施形態では、量子化部４４による対数量子化値が取り得る範囲と入力データ変換部４０２による変換値が取り得る範囲が同じ場合を説明した。具体的には、量子化部４４による対数量子化値及び入力データ変換部４０２による変換値は、真にゼロを示す値か、０〜７の冪指数である。しかし、対数量子化値と変換値の取り得る範囲は異なるものであっても良い。例えば、対数量子化値に含まれる冪指数は０〜１４であり、変換値に含まれる冪指数は０〜７であってもよい。このような場合であっても、畳み込み演算部４３は、量子化部４４により対数量子化されたデータと入力データ変換部４０２から供給されるデータを画一的に扱うことができる。つまり、畳み込み演算部４３が、２つのデータを同様の処理できるものであれば、対数量子化値と変換値に含まれる冪指数が取り得る範囲は異なっていても良い。
【０１６４】
上記実施形態では、１つの畳み込み演算部４３が１回の畳み込み演算を順番に実行していく構成を説明したが、複数の畳み込み演算部４３を設け畳み込み演算を並列に実行してもよい。例えば、それぞれが同一の構成を有する複数の畳み込み演算部４３を用意し、各畳み込み演算部４３にて独立に畳み込み演算を実行してもよい。例えば、図３を参照すると、ある畳み込み演算部４３が重み群５１１に関する畳み込み演算を実行し、他の畳み込み演算部４３が重み群５１２に関する畳み込み演算を同時に（並列に）実行してもよい。
【０１６５】
上記実施形態では、主に対数量子化された入力データの要素値は正の値の場合について説明したが、対数量子化された入力データの要素値は負の値であってもよい。つまり、重みを左シフト（対数量子化された入力データの要素値は正の値）する場合だけでなく、重みを右シフト（対数量子化された入力データの要素値は負の値）してもよい。例えば、対数量子化された入力データの要素値が「−２」であれば、当該値は重みとの乗算において重みの値を２ビット右にシフトすることを意味する。
【０１６６】
上記実施形態では、入力データは整数であることを前提としているが、入力データに対して事前処理、畳み込み演算に対する事後処理により入力データが浮動小数点で記載されていても対応できる。例えば、浮動小数点を固定小数点に変換し、擬似的に整数として扱うことで入力データが浮動小数点で表現されていても、畳み込み演算の回路を共用することができる。
【０１６７】
第２の実施形態では、バイアス変更部４５が、１層目の入力データから各チャネルの平均値ａｖｅｃを計算している。しかし、各チャネルの平均値ａｖｅｃは入力データが定まれば事前計算できる値であるので、当該平均値を事前計算しておきバイアス変更部４５のレジスタ等に予め登録しておいてもよい。この場合、バイアス変更部４５は、予め計算された平均値ａｖｅｃと各チャネルに対応する重み群の全要素を乗算し、乗算結果を加算することで上記ｂ’１ｋを計算する。
【０１６８】
第２の実施形態では、畳み込み層実行部３１ａの内部にバイアス変更部４５を設ける例を説明したが、他の箇所にバイアス変更部４５を設けても良いことは勿論である。例えば、図７に示す畳み込み演算部４３にバイアス変更部４５を設けてもよい。
【０１６９】
なお、第２の実施形態では、
0006977864.tif 000019
が（ｘ、ｙ）座標によらない値であることを前提としている。しかし、厳密に言えば、画像端の位置における畳み込み演算では画面外画素を補填（パディング）する処理が行われ、上記前提が成立しないことがある。しかし、換言すれば、上記前提が成り立たないのは画像端という特殊な状況だけであり、畳み込み演算には大きな影響を与えるものではない。
【０１７０】
本願開示では、入力データから結果を推論（判定）する推論装置を例にとり畳み込み演算に使用する回路の共用化手法を説明した。しかし、畳み込みニューラルネットワークの活用（中間層の動作）の観点からは、推論装置と重みを生成する学習装置では相違する点はない。つまり、推論装置への入力データは推論対象となるデータであり、学習装置の推論部への入力データは教師データであるが、「推論」の観点からは両者に違いはない。即ち、上記説明した推論装置１０に、誤差逆伝搬を行う誤差逆伝搬部、重みアップデートを行う重みアップデート部等を付加することで学習装置を構成することができる。なお、誤差逆伝搬部及び重みアップデート部に関しては、公知のアルゴリズム等により実現可能でありその説明を省略する。
【０１７１】
また、上述の説明で用いた複数のフローチャートでは、複数の工程（処理）が順番に記載されているが、各実施形態で実行される工程の実行順序は、その記載の順番に制限されない。各実施形態では、例えば各処理を並行して実行する等、図示される工程の順番を内容的に支障のない範囲で変更することができる。
【０１７２】
上記の実施形態の一部又は全部は、以下のようにも記載され得るが、以下には限られない。
［形態１］
上述の第１の視点に係る推論装置のとおりである。
［形態２］
前記入力データ変換部は、
変換前後の入力データが等価であることを担保しつつ、前記１層目の入力データを変換する、好ましくは形態１の推論装置。
［形態３］
前記入力データ変換部は、
前記１層目の入力データに含まれる一のチャネルを、前記１層目の入力データをなす要素のビット数と同数のサブチャネルに拡張する、好ましくは形態２の推論装置。
［形態４］
前記入力データ変換部は、
前記１層目の入力データに含まれる一のチャネルの各要素について、要素値を２進数で表現した場合に、値が１の桁を前記値が１の桁の位置を示す値に変換し、値が０の桁を変換後のデータが真にゼロを示す値に変換してデータ列を生成し、
前記データ列をなす各要素を前記サブチャネルの各要素に割り当てる、好ましくは形態３の推論装置。
［形態５］
前記入力データ変換部は、
前記１層目の入力データに含まれる一のチャネルの各要素の位置に対応する、前記サブチャネルの要素の位置に前記データ列をなす各要素を割り当てる、好ましくは形態４の推論装置。
［形態６］
前記入力データを記憶する、入力データ記憶部と、
前記入力データ記憶部にアクセスし、前記入力データを取得する入力データ取得部と、をさらに備え、
前記入力データ取得部は、
前記取得した入力データが１層目の畳み込み演算で使用される場合には、前記取得した入力データを前記入力データ変換部に供給し、
前記取得した入力データが２層目以降の畳み込み演算で使用される場合には、前記取得した入力データを前記畳み込み演算部に供給する、好ましくは形態１乃至５のいずれか一に記載の推論装置。
［形態７］
前記１層目の入力データに含まれる一のチャネルに対応する重みの数が、前記拡張されたサブチャネルの数と同数となるように前記１層目の入力データに含まれる一のチャネルに対応する重みを複製する、重み複製部をさらに備える、好ましくは形態３乃至５のいずれか一に記載の推論装置。
［形態８］
前記重みを記憶する、重み記憶部と、
前記重み記憶部にアクセスし、前記重みを取得する重み取得部と、をさらに備え、
前記重み取得部は、
前記取得した重みが１層目の畳み込み演算で使用される場合には、前記取得した重みを前記重み複製部に供給し、
前記取得した重みが２層目以降の畳み込み演算で使用される場合には、前記取得した重みを前記畳み込み演算部に供給する、好ましくは形態７の推論装置。
［形態９］
前記畳み込み演算部は、
畳み込み演算にて実行する乗算処理を、取得した入力データをなす各要素の要素値に応じたシフト演算により実現する、好ましくは形態１乃至８のいずれか一に記載の推論装置。
［形態１０］
前記畳み込み演算部は、
前記入力データをなすチャネルごとに設けられ、前記チャネルの各要素と前記チャネルの各要素に対応する重みに関する前記シフト演算を実行し、前記シフト演算の結果を加算する、複数のシフト演算＆加算器と、
前記複数のシフト演算＆加算器の演算結果を加算する、加算器と、
を含んで構成される、好ましくは形態９の推論装置。
［形態１１］
前記量子化部は、畳み込み演算の結果を２の冪乗に丸め込み、量子化対象のデータを、底を２とした場合の冪指数又は量子化後のデータが真にゼロであるかを示す値に変換する、好ましくは形態１乃至１０のいずれか一に記載の推論装置。
［形態１２］
前記１層目の入力データに対応するバイアスを、前記１層目の入力データと前記１層目の入力データに対応する重みを用いて変換し、前記変換されたバイアスを前記１層目の畳み込み演算の結果に加算する、バイアス変更部をさらに備える、好ましくは形態１乃至１１のいずれか一に記載の推論装置。
［形態１３］
上述の第２の視点に係る畳み込み演算実行方法のとおりである。
［形態１４］
上述の第３の視点に係るプログラムのとおりである。
なお、形態１３及び形態１４は、形態１と同様に、形態２〜１２のように展開することが可能である。
【０１７３】
なお、引用した上記の特許文献等の各開示は、本書に引用をもって繰り込むものとする。本発明の全開示（請求の範囲を含む）の枠内において、さらにその基本的技術思想に基づいて、実施形態ないし実施例の変更・調整が可能である。また、本発明の全開示の枠内において種々の開示要素（各請求項の各要素、各実施形態ないし実施例の各要素、各図面の各要素等を含む）の多様な組み合わせ、ないし、選択（少なくとも一部の非選択を含む）が可能である。すなわち、本発明は、請求の範囲を含む全開示、技術的思想にしたがって当業者であればなし得るであろう各種変形、修正を含むことは勿論である。特に、本書に記載した数値範囲については、当該範囲内に含まれる任意の数値ないし小範囲が、別段の記載のない場合でも具体的に記載されているものと解釈されるべきである。
【符号の説明】
【０１７４】
１０、１００  推論装置
１１  入力層実行部
１２  中間層実行部
１３  出力層実行部
３１、３１ａ  畳み込み層実行部
３２  活性化関数実行部
３３  プーリング層実行部
４０  畳み込み層制御部
４１  重み処理部
４２  入力データ処理部
４３、１０２  畳み込み演算部
４４、１０１  量子化部
４５  バイアス変更部
５１  重み記憶部
５２  入力データ記憶部
５３  演算結果記憶部
９１  ＣＰＵ（Central Processing Unit）
９２  メモリ
９３  入出力インターフェイス
９４  ＮＩＣ（Network Interface Card）
１０３、４０２  入力データ変換部
２０１  畳み込み演算制御部
２０２  重み入出力部
２０３  入力データ入出力部
２０４  乗加算部
２１１  重み一次記憶部
２１２  入力データ一次記憶部
２１３  演算結果一次記憶部
３０１、３０１−１〜３０１−Ｎ  シフト演算＆加算器
３０２、３１２  加算器
３１１  シフト演算器
３１３  レジスタ
４０１  入力データ取得部
４１１  重み取得部
４１２  重み複製部
５０１、５０２  重み
５１１、５１２  重み群
６０１、６１１  入力データ
【図１】
0006977864.tif 000020
【図２】
0006977864.tif 000021
【図３】
0006977864.tif 000022
【図４】
0006977864.tif 000023
【図５】
0006977864.tif 000024
【図６】
0006977864.tif 000025
【図７】
0006977864.tif 000026
【図８】
0006977864.tif 000027
【図９】
0006977864.tif 000028
【図１０】
0006977864.tif 000029
【図１１】
0006977864.tif 000030
【図１２】
0006977864.tif 000031
【図１３】
0006977864.tif 000032
【図１４】
0006977864.tif 000033
【図１５】
0006977864.tif 000034
【図１６】
0006977864.tif 000035