(57)【要約】  本発明は、畳み込み層における乗算回数を低減する推論装置を提供する。推論装置は、複数のＰＥ（Processing Element）と、制御部と、を備える。制御部は、複数の入力データのそれぞれと、複数の入力データのそれぞれに対応する複数の重みを含む重み群と、を用いた畳み込みニューラルネットワークにおける畳み込み演算を複数のＰＥを制御することで実現する。さらに、複数のＰＥのそれぞれは、１つの入力データと１つの重みの乗算処理を含む演算を実行すると共に、複数の入力データそれぞれに含まれる値がゼロではない要素を用いて畳み込み演算に含まれる乗算処理を実行する。
2019082859.tif 000002
【特許請求の範囲】
【請求項１】
複数のＰＥ（Processing Element）と、
複数の入力データのそれぞれと、前記複数の入力データのそれぞれに対応する複数の重みを含む重み群と、を用いた畳み込みニューラルネットワークにおける畳み込み演算を前記複数のＰＥを制御することで実現する、制御部と、
を備え、
前記複数のＰＥのそれぞれは、１つの入力データと１つの重みの乗算処理を含む演算を実行すると共に、前記複数の入力データそれぞれに含まれる値がゼロではない要素を用いて前記畳み込み演算に含まれる乗算処理を実行する、推論装置。
【請求項２】
前記制御部は、
前記複数の入力データのそれぞれと、前記複数の入力データそれぞれに対応する重みそれぞれとの乗算処理のうち、一部の乗算処理が並列に処理されるように前記複数のＰＥを制御する、請求項１の推論装置。
【請求項３】
前記制御部は、
前記複数の入力データのそれぞれと、複数の前記重み群に含まれる複数の重みのそれぞれとの乗算処理のうち、異なる前記重み群の重みであって同一の入力データに対応する重みを用いた乗算処理の一部が並列に実行されるように前記複数のＰＥを制御する、請求項２の推論装置。
【請求項４】
前記複数の入力データを分割し、前記分割された入力データを前記一部の乗算処理を並列に処理するＰＥに供給する、入力データ分割部をさらに備える、請求項３の推論装置。
【請求項５】
前記一部の乗算処理を並列に処理する複数のＰＥそれぞれの演算が終了するまで待機する、待機部をさらに備える、請求項３又は４の推論装置。
【請求項６】
前記複数の入力データのそれぞれと１つの重み群に含まれる複数の重みとの乗算結果を加算する結果加算部をさらに備える請求項３乃至５のいずれか一項に記載の推論装置。
【請求項７】
前記複数のＰＥのそれぞれは、
入力した入力データから値がゼロ以外であるノンゼロ要素と前記ノンゼロ要素の位置を特定する入力データ処理部と、
前記入力した入力データと乗算される重みの要素のうち、前記ノンゼロ要素の位置に相当する位置の値を、前記重み群を記憶する記憶媒体から読み出す重み読み出し部と、
前記ノンゼロ要素と前記重み読み出し部により読み出された値を乗算する、乗加算部と、
を備え、
前記乗加算部は、前記入力した入力データに含まれるノンゼロ要素に関する乗算が終了すると、乗算結果を加算する、請求項１乃至６のいずれか一項に記載の推論装置。
【請求項８】
前記複数のＰＥのそれぞれは、
前記乗加算部により算出された加算結果を記憶する、演算結果記憶部をさらに備える、請求項７の推論装置。
【請求項９】
前記制御部は、
１つの入力データと、異なる重み群に含まれる重みと、を乗算する複数の処理を時分割で前記複数のＰＥのそれぞれに実行させる、請求項３乃至８のいずれか一項に記載の推論装置。
【請求項１０】
前記制御部は、
前記重み群を評価するための評価指標を計算する、評価指標計算部と、
前記評価指標に基づき、入力データに対して乗算する前記重み群の順序を並び替える重み群並び替え部と、
を備える、請求項１乃至９のいずれか一項に記載の推論装置。
【請求項１１】
前記制御部は、
前記重み群の並び替えに関する順序情報を、他層に通知する、順序情報通知部をさらに備える、請求項１０の推論装置。
【請求項１２】
前記制御部は、
前記通知された順序情報を取得する、順序情報取得部と、
前記順序情報に基づき、入力データと前記重み群に含まれる重みの対応関係を変更する、重み並び替え部と、
をさらに備える、請求項１１の推論装置。
【請求項１３】
それぞれが、１つの入力データと１つの重みの乗算処理を含む演算を実行する、複数のＰＥ（Processing Element）を含み、
複数の入力データのそれぞれと、前記複数の入力データのそれぞれに対応する複数の重みを含む重み群と、を用いた畳み込みニューラルネットワークにおける畳み込み演算を実現する、推論装置において、
前記複数のＰＥのそれぞれが、
前記複数の入力データそれぞれに含まれる値がゼロではない要素を特定するステップと、
前記特定された要素を用いて前記畳み込み演算に含まれる乗算処理を実行するステップと、
を含む、畳み込み演算実行方法。
【請求項１４】
それぞれが、１つの入力データと１つの重みの乗算処理を含む演算を実行する、複数のＰＥ（Processing Element）を含み、
複数の入力データのそれぞれと、前記複数の入力データのそれぞれに対応する複数の重みを含む重み群と、を用いた畳み込みニューラルネットワークにおける畳み込み演算を実現する、推論装置に搭載されたコンピュータに、
前記複数の入力データそれぞれに含まれる値がゼロではない要素を特定する処理と、
前記特定された要素を用いて前記畳み込み演算に含まれる乗算処理を実行する処理と、
を実行させる、プログラム。
【発明の詳細な説明】
【技術分野】
【０００１】
（関連出願についての記載）
本発明は、日本国特許出願：特願２０１７−２０４６１０号（２０１７年１０月２３日出願）の優先権主張に基づくものであり、同出願の全記載内容は引用をもって本書に組み込み記載されているものとする。
本発明は、推論装置、畳み込み演算実行方法及びプログラムに関する。
【背景技術】
【０００２】
近年、多層ニューラルネットワークによる画像認識等に関する技術開発が活発に行われている。このような技術は、深層学習（ディープラーニング）とも称される。とりわけ、画像認識等の技術分野において、畳み込みニューラルネットワークが多く用いられる。畳み込みニューラルネットワークには、後述するように、畳み込み層、プーリング層、全結合層が含まれる。畳み込み層では、カーネルを画像全体に畳み込む処理が行われる。【０００３】
画像全体にカーネルを畳み込む処理（画像にフィルタを適用する処理）により、画像に畳み込まれた特徴の集合が得られる。当該特徴の集合は、特徴マップとも称される。特徴マップは、畳み込んだ値に活性化関数を適用することで得られる。例えば、画像認識の分野では、ＲｅＬＵ（Rectified Linear Unit）が活性化関数として用いられることが多い。【０００４】
上述のように、畳み込み層では、画像（入力画像）にカーネル（重み、フィルタ）を畳み込む処理が行われる。その際、画像の各画素と重みを乗算する処理が数多く行われる。非特許文献１及び２は、当該乗算処理に関する負荷を低減する技術を開示する。具体的には、非特許文献１及び２には、「０」に任意の値を乗算してもその結果は「０」となることを利用した乗算処理の回数低減に関する技術が開示されている。
【先行技術文献】
【非特許文献】
【０００５】
【非特許文献１】Song Han, et. al., “EIE: Efficient Inference Engine on Compressed Deep Neural Network”, International Symposium on Computer Architecture (ISCA) 2016.
【非特許文献２】Angshuman Parashar, et. al., “SCNN: An Accelerator for Compressed-sparse Convolutional Neural Networks”, ISCA '17 Proceedings of the 44th Annual International Symposium on Computer Architecture, 2017
【発明の概要】
【発明が解決しようとする課題】
【０００６】
なお、上記先行技術文献の各開示を、本書に引用をもって繰り込むものとする。以下の分析は、本発明者らによってなされたものである。【０００７】
上述のように、深層学習、とりわけ、畳み込み層の演算では膨大な数の乗算処理が必要となる。膨大な乗算処理は、大規模なハードウェアを要求したり、強力な演算処理能力を有するプロセッサを要求したりする。このような要求に答えるため、非特許文献１や２に開示された技術が必要となる。【０００８】
ここで、非特許文献１に開示された技術は、全結合層（ＦＣ layer；Fully Connected layer）における乗算回数の低減を目的としたものである。全結合層における乗算回数の低減も要望されるが、全結合層における乗算回数と畳み込み層における乗算回数を比較すれば、畳み込み層における乗算回数の方が圧倒的に多い。非特許文献１に開示された技術は、全結合層を対象とした乗算処理の低減を目的としており、畳み込み層の乗算処理を低減することはできない。【０００９】
本発明は、畳み込み層における乗算回数を低減することに寄与する、推論装置、畳み込み演算実行方法及びプログラムを提供することを主たる目的とする。
【課題を解決するための手段】
【００１０】
本発明乃至開示の第１の視点によれば、複数のＰＥ（Processing Element）と、複数の入力データのそれぞれと、前記複数の入力データのそれぞれに対応する複数の重みを含む重み群と、を用いた畳み込みニューラルネットワークにおける畳み込み演算を前記複数のＰＥを制御することで実現する、制御部と、を備え、前記複数のＰＥのそれぞれは、１つの入力データと１つの重みの乗算処理を含む演算を実行すると共に、前記複数の入力データそれぞれに含まれる値がゼロではない要素を用いて前記畳み込み演算に含まれる乗算処理を実行する、推論装置が提供される。【００１１】
本発明乃至開示の第２の視点によれば、それぞれが、１つの入力データと１つの重みの乗算処理を含む演算を実行する、複数のＰＥ（Processing Element）を含み、複数の入力データのそれぞれと、前記複数の入力データのそれぞれに対応する複数の重みを含む重み群と、を用いた畳み込みニューラルネットワークにおける畳み込み演算を実現する、推論装置において、前記複数のＰＥのそれぞれが、前記複数の入力データそれぞれに含まれる値がゼロではない要素を特定するステップと、前記特定された要素を用いて前記畳み込み演算に含まれる乗算処理を実行するステップと、を含む、畳み込み演算実行方法が提供される。【００１２】
本発明乃至開示の第３の視点によれば、それぞれが、１つの入力データと１つの重みの乗算処理を含む演算を実行する、複数のＰＥ（Processing Element）を含み、複数の入力データのそれぞれと、前記複数の入力データのそれぞれに対応する複数の重みを含む重み群と、を用いた畳み込みニューラルネットワークにおける畳み込み演算を実現する、推論装置に搭載されたコンピュータに、前記複数の入力データそれぞれに含まれる値がゼロではない要素を特定する処理と、前記特定された要素を用いて前記畳み込み演算に含まれる乗算処理を実行する処理と、を実行させる、プログラムが提供される。
なお、このプログラムは、コンピュータが読み取り可能な記憶媒体に記録することができる。記憶媒体は、半導体メモリ、ハードディスク、磁気記録媒体、光記録媒体等の非トランジェント（non-transient）なものとすることができる。本発明は、コンピュータプログラム製品として具現することも可能である。
【発明の効果】
【００１３】
本発明乃至開示の各視点によれば、畳み込み層における乗算回数を低減することに寄与する、推論装置、畳み込み演算実行方法及びプログラムが、提供される。
【図面の簡単な説明】
【００１４】
【図１】一実施形態の概要を説明するための図である。
【図２】画像認識における中間層（隠れ層）の構造を説明するための図である。
【図３】畳み込み層における演算を説明するための図である。
【図４】第１の実施形態に係る推論装置の内部構成の一例を示す図である。
【図５】第１の実施形態に係る推論装置に含まれる中間層実行部の内部構成の一例を示す図である。
【図６】第１の実施形態に係る畳み込み層実行部に含まれるＰＥの動作を説明するための図である。
【図７】各ＰＥにて実行される演算について説明するための図である。
【図８】第１の実施形態に係る畳み込み層実行部の内部構成の一例を示す図である。
【図９】第２の実施形態に係る畳み込み層実行部の内部構成の一例を示す図である。
【図１０】異なる２つの入力データの一例を示す図である。
【図１１】第３の実施形態による問題解決を説明するための図である。
【図１２】第３の実施形態に係る畳み込み層制御部の内部構成の一例を示す図である。
【図１３】第３の実施形態に係る畳み込み層制御部の動作を説明するための図である。
【図１４】第３の実施形態に係る畳み込み層制御部の動作を説明するためのフローチャートである。
【図１５】推論装置のハードウェア構成の一例を示す図である。
【図１６】重み設定装置と推論装置を含むシステム構成の一例を示す図である。
【図１７】学習装置と推論装置を含むシステム構成の一例を示す図である。
【図１８】図１７に示す学習装置の内部構成の一例を示す図である。
【発明を実施するための形態】
【００１５】
初めに、一実施形態の概要について説明する。なお、この概要に付記した図面参照符号は、理解を助けるための一例として各要素に便宜上付記したものであり、この概要の記載はなんらの限定を意図するものではない。また、各図におけるブロック間の接続線は、双方向及び単方向の双方を含む。一方向矢印については、主たる信号（データ）の流れを模式的に示すものであり、双方向性を排除するものではない。さらに、本願開示に示す回路図、ブロック図、内部構成図、接続図などにおいて、明示は省略するが、入力ポート及び出力ポートが各接続線の入力端及び出力端のそれぞれに存在する。入出力インターフェイスも同様である。
【００１６】
一実施形態に係る推論装置１００は、複数のＰＥ（Processing Element）１０１と、制御部１０２と、を備える（図１参照）。制御部１０２は、複数の入力データのそれぞれと、複数の入力データのそれぞれに対応する複数の重みを含む重み群と、を用いた畳み込みニューラルネットワークにおける畳み込み演算を複数のＰＥ１０１を制御することで実現する。さらに、複数のＰＥ１０１のそれぞれは、１つの入力データと１つの重みの乗算処理を含む演算を実行すると共に、複数の入力データそれぞれに含まれる値がゼロではない要素を用いて畳み込み演算に含まれる乗算処理を実行する。
【００１７】
上述のように、畳み込み層の実現には非常に多くの乗算処理が必要となるが、推論装置１００に含まれる各ＰＥ１０１は、乗算処理を実行する際に、ゼロである入力データと重みの乗算処理を実行しない。その結果、畳み込み層における乗算回数は減少する。
【００１８】
以下に具体的な実施の形態について、図面を参照してさらに詳しく説明する。なお、各実施形態において同一構成要素には同一の符号を付し、その説明を省略する。
【００１９】
［第１の実施形態］
第１の実施形態について、図面を用いてより詳細に説明する。
【００２０】
図２は、画像認識における中間層（隠れ層）の構造を説明するための図である。図２を参照すると、入力層と中間層が接続され、中間層と出力層が接続される。なお、第１の実施形態では、入力層に入力されるデータとして画像データを想定している。入力層は、取得した入力データから中間層に出力するためのデータを作成する。例えば、画像データがＲＧＢ（Red Green Blue）の３チャネルから構成されている場合には、入力層は、各色の画像データを生成し、中間層に出力する。中間層は、畳み込みニューラルネットワーク（ＣＮＮ（Convolutional Neural Network））により入力データの特徴部分が抽出されたデータを１つのノードに結合し、特徴変数を出力する。出力層は、中間層から取得した特徴変数に基づき、入力データを分類する。
【００２１】
中間層には、複数の「層（レイヤ）」が含まれ、初段の層が入力層と接続され、最終段の層は全結合層と接続されている。
【００２２】
中間層をなす各層には、畳み込み層、活性化関数、プーリング層が含まれ得る。なお、図２に示す構成は例示であり、中間層の構成を限定する趣旨ではない。場合によっては、中間層に活性化関数、プーリング層が含まれていなくともよい。
【００２３】
畳み込み層は、取得した入力データから特徴量を抽出する。当該抽出された特徴量には活性化関数が適用され、当該活性化関数が適用された後の特徴量がプーリング層に入力される。プーリング層では、取得した特徴量を結合する。その際、プーリング層では、物体の位置が変動しても同一の物体と判断できるようにするための処理（不変性を得るための処理）が行われる。例えば、対象物の位置ずれを許容するための処理がプーリング層にて行われる。なお、図２では、「活性化関数」を適用するための層が、畳み込み層やプーリング層と独立した形で記載されているが、実際には、「活性化関数」が畳み込み層及びプーリング層のいずれかの層に含まれる構成であってもよい。
【００２４】
図２に示すように、中間層をなす各層は、縦続接続されており、前段の層の出力が後段の層の入力に相当する。
【００２５】
図３は、畳み込み層における演算を説明するための図である。図３を参照すると、畳み込み層は、入力データと重み（フィルタ）を乗算することで、特徴量を出力する。
【００２６】
なお、本願開示にて使用する各種パラメータは図３に図示するように定める。入力データにおける一の方向（図３では縦方向）のサイズを「Ｈ」と表記する。また、入力データにおける他の方向（図３では幅方向）のサイズを「Ｗ」と表記する。例えば、Ｈ＝２５、Ｗ＝２５であれば、Ｈ×Ｗ＝６２５個の画素が１つの入力データのサイズとなる。さらに、層の入力チャネル数を「Ｃ」と表記する。
【００２７】
重みにおける一の方向（図３では縦方向）のサイズを「Ｒ」と表記する。また、重みにおける他の方向（図３では幅方向）のサイズを「Ｓ」と表記する。例えば、Ｒ＝３、Ｓ＝３とすれば、Ｒ×Ｓ＝９が１つの重みのサイズである。
【００２８】
図３に示す「Ｋ」は層の出力チャネル数である。層の出力チャネル数Ｋと重みの種類数は一致する。例えば、図３に示す重みの種類数が「４」であれば、層の出力チャネル数Ｋも「４」となる。
【００２９】
１種類の重みには、入力チャネル数Ｃと同じ数の重みが含まれる。例えば、入力チャネル数Ｃが「３」であれば、１種類の重みには３つの重みが含まれる。１種類の重みに含まれるＣ個の重みは、Ｃ個の入力データそれぞれと対応付けられている。例えば、図３において、上段のＣ個の重みにおいて、一番手前の重みは一番手前の入力データと対応付けられている。
【００３０】
なお、本願開示において、入力チャネル数Ｃごとに区分された重みの集合を「重み群」と表記する。各重み群には、Ｃ個の重みが含まれる。また、重みの種類数は出力チャネル数Ｋに一致するので、畳み込み層における重みの数は、Ｋ×Ｃ個となる。さらに、本願開示において、一の入力データや一の重みを基準として他の入力データや重みに向かう方向を「チャネル方向」と表記する。同様に、一の重み群を基準として他の重み群に向かう方向を「カーネル方向」と表記する。例えば、図３に示す重み５０１から重み５０２に向かう方向がチャネル方向であり、重み群５１１から重み群５１２に向かう方向がカーネル方向である。
【００３１】
畳み込み層では、入力データから重みのサイズに相当するデータを抽出し、当該抽出したデータに含まれる要素と重みの対応する要素を乗算し、且つ、乗算結果をチャネル方向に加算する処理が実行される。例えば、図３に示すように、重みのサイズが３×３＝９であれば、入力データから同じサイズのデータ（例えば、図３の一番手前に図示した入力データのうち四角の領域で囲まれたデータ；３×３＝９のデータ）が抽出される。その後、抽出された入力データの各要素と対応する重みの各要素が乗算される。例えば、図３の例では、抽出された入力データにおける左上の要素「１」と対応する重み５０１の左上の要素「−１」が乗算される。畳み込み層では、このような処理が繰り返される（上述の例では９回繰り返される）。その後、乗算結果が加算される。上述の例では、（−１）＋（−１）＋１＋０＋０＋０＋（−１）＋４＋０＝２となる。
【００３２】
抽出されたデータと重みの乗算は、対応する入力データと重みの間で実行される。例えば、図３において、一番手前に図示した入力データに対応する重みは一番手前に図示された重み５０１とする。同様に、中間に図示した入力データに対応する重みが中間に図示した重み、最奥に図示した入力データに対応する重みが最奥に図示した重み５０２である。この場合、対応する入力データと重みの間で上記乗加算処理が繰り返される。
【００３３】
さらに、上記乗加算処理の結果は、チャネル方向にて加算される。例えば、上述の例では、３チャネル（一番手前、中間、最奥）における乗加算結果が加算される。
【００３４】
上記乗加算処理及びその後の加算処理は、重み群ごとに行われる。図３の例では、上段に図示した重み群５１１と入力データを用いた演算が行われ、下段に図示した重み群５１２に関しても同様の処理（同じ入力データを用いた乗加算処理及びその後の加算処理）が実行される。
【００３５】
畳み込み層では、上記処理（乗加算処理及びチャネル方向への加算処理）を、抽出する入力データを変更しながら繰り返す。例えば、図３の一番手前の入力データに図示するように、抽出する領域をスライドさせながら入力データを切り出していく。当該切り出されたデータには、上記と同様の処理が適用される。
【００３６】
上述のような入力データの抽出と、当該抽出された入力データに重みを乗算し、チャネル方向に加算する処理を繰り返すことで畳み込み層の出力データが得られる。なお、上述のように、入力データと重みの乗加算処理は重み群ごとに実行されるため、得られる出力データの数と重みの種類（重み群の数）は一致する。例えば、１６個の重み群が用意されていれば、１６個の出力データが得られる（Ｋ＝１６）。なお、各出力データのサイズ（縦方向のサイズ、幅方向のサイズ）は、入力データからデータを抽出する際の領域（ウィンドウ）をスライドする際の仕様により定まる。図３の例では、各出力データには、１２（４×３）個の要素が含まれるように、入力データからデータが抽出される。
【００３７】
第１の実施形態に係る推論装置１０は、図３を用いて説明した畳み込み演算を推論の過程にて実行する。具体的には、図４に示すように、推論装置１０は、その内部に、入力層を実現する入力層実行部１１、中間層を実現する中間層実行部１２、出力層を実現する出力層実行部１３と、を含む。さらに、中間層実行部１２には、畳み込み層を実現する畳み込み層実行部３１、活性化関数を実行する活性化関数実行部３２及びプーリング層を実現するプーリング層実行部３３が各層に含まれる（図５参照）。なお、本願開示においては、図４及び図５に示す各種実行部のうち、畳み込み層実行部３１について詳細に説明する。他の実行部に関しては、公知のアルゴリズム等により実現可能であるため、その説明を省略する。
【００３８】
各層の畳み込み層実行部３１は、複数のプロセッシングエレメント（ＰＥ；Processing Element）を用いて図３を用いて説明した畳み込み演算（乗加算処理）を実行する。
【００３９】
図６は、畳み込み層実行部３１に含まれるＰＥの動作を説明するための図である。図６には、入力チャネル数Ｃが「８」であり、出力チャネル数Ｋが「１６」である場合の例を図示している。また、重みのサイズは８（例えば、Ｓ＝２、Ｒ＝４）である。なお、図６において、入力データ及び重みは１次元の配列（ベクトル）に展開して図示している。そのため、図６において、重みの各行は、異なる重み群（図３の例では、上段、下段の関係）を示す。なお、図６において、入力データ及び重みに付した色の濃淡は２つのデータの対応関係を示す。例えば、最も色の濃い最奥の入力データ及び重みは対応関係にある。上述のように、対応関係にある入力データと重みの間で乗算処理及び加算処理が行われる。より具体的には、チャネル方向の入力データと対応する重み群の乗算処理及びチャネル方向での加算処理が複数のＰＥを用いて実行される。
【００４０】
図６に示す例では、入力チャネル数Ｃが「８」であり、重み群の数（出力チャネル数Ｋ）が「１６」であるから、１２８（８×１６）回の入力データと重みの乗算処理が実行される。その後、チャネル方向での加算処理が実行される。畳み込み層実行部３１は、当該乗算処理（上記例では１２８回）を含む畳み込み演算を複数のＰＥを用いて実行する。ここでは、図６に示すように、畳み込み層実行部３１は、１６個のＰＥを用いて畳み込み演算を実行するものとして以下の説明を行う。但し、ＰＥの個数を１６に限定する趣旨ではないことは勿論である。
【００４１】
畳み込み層実行部３１は、複数のＰＥを用いて複数の重み群及び各重み群に含まれる複数の重みに関する畳み込み演算（乗加算）を並列に処理する。例えば、図６の例では、畳み込み層実行部３１は、各重み群に含まれる８チャネル分の重みのうち４チャネル分の重みを並列に処理する。また、畳み込み層実行部３１は、１６個の重み群のうち４個の重み群を並列に処理する。
【００４２】
チャネル方向の並列処理に関し、例えば、ＰＥ（０、０）〜ＰＥ（３、０）は図６の１行目に含まれる最奥から４番目までの重みを並列に処理する（並列処理を開始する）。また、各ＰＥは、並列数（上記の例では４）に相当する数だけスキップした位置にある入力データ及び重みを用いた畳み込み演算を逐次的に実行する。例えば、図６に示す例では、ＰＥ（０、０）は、１行目（最上段）の重み群に含まれる重みのうち、最奥の重みに関する演算が終了すると、奥から５番目の重みに関する畳み込み演算を実行する。
【００４３】
カーネル方向の分割に関し、例えば、ＰＥ（０、０）〜ＰＥ（０、３）は、図６に示す最奥の重みのうち１行目から４行目までの重みを並列に処理する（並列処理を開始する）。また、各ＰＥは、並列数（上記例では４）に相当する数だけスキップした位置にある重み群に含まれ、対応するチャネルの重みを用いた畳み込み演算を逐次的に実行する。例えば、図６に示す例では、ＰＥ（０、０）は、最奥の重みの上から１行目、５行目、９行目、１３行目の重みを用いた畳み込み演算を実行する。あるいは、ＰＥ（０、１）は、最奥の重みの上から２行目、６行目、１０行目、１４行目の重みを用いた畳み込み演算を実行する。
【００４４】
図７は、各ＰＥにて実行される演算について説明するための図である。各ＰＥでは、初めに入力データから要素の値が「０」以外の要素（以下、ノンゼロ要素と表記する）とそのインデックスを特定する。例えば、図７の例では、ノンゼロ要素として「１」及びそのインデックスとして「１」が特定される。
【００４５】
続いて、各ＰＥでは、ノンゼロ要素のインデックスに対応する重みの要素と入力データのノンゼロ要素の乗算処理が行われる。当該乗算処理は、カーネル方向に順次行われる（逐次的に処理される）。図７の例では、入力データの「１」と重みの２列目の要素（２、１、３、０）が順次乗算され一次記憶領域に格納される。
【００４６】
最初のノンゼロ要素に関する乗算処理が終了すると、入力データにおける次のノンゼロ要素とそのインデックスが特定される。図７の例では、ノンゼロ要素として「２」及びそのインデックスとして「７」が特定される。次に、上記と同様に、ノンゼロ要素である「２」と重みの８列目の要素（１、０、２、１）が順次乗算され一次記憶領域に格納される。ノンゼロ要素と重みの乗算結果は、重み群ごとに加算され、各ＰＥの出力データとなる。図７の例では、１行目の重み群に関する結果として「４」が、２行目の重み群に関する結果として「１」がそれぞれ出力される。
【００４７】
このように、各ＰＥでは、畳み込み演算における入力データと重みの乗算処理と、重み群ごとの加算処理とが実行される。なお、各ＰＥにおける演算結果（重み群ごとの加算結果）は、チャネル方向に加算されて最終的な畳み込み演算が終了することになる。つまり、畳み込み層における畳み込み演算では、入力データと重みの乗算処理が行われ、その後、重み群ごと（重み方向；即ち、Ｓ、Ｒの方向。図６の例では重みの行方向）の加算処理が行われる。その後、重み群ごとの加算結果は、チャネル方向にて加算される。
【００４８】
図８は、畳み込み層実行部３１の内部構成の一例を示す図である。図８を参照すると、畳み込み層実行部３１には、畳み込み層制御部４０と、入力データ分割部４１と、複数のＰＥ４２−１〜４２−８と、待機部４３と、結果加算部４４と、各種記憶部と、が含まれている。各種記憶部には、入力データ記憶部５１と、重み記憶部５２と、結果記憶部５３と、が含まれる。なお、以降の説明において、ＰＥ４２−１〜４２−８を区別する特段の理由が無い場合には、単に「ＰＥ４２」と表記する。
【００４９】
上述のように、畳み込み層実行部３１には複数のＰＥ４２が含まれる。当該複数のＰＥ４２は、チャネル方向に並列に畳み込み演算を行う単位で管理されている。図８の例では、ＰＥ４２−１〜４２−４を一組とするＰＥ４２の集合がチャネル方向の畳み込み演算を並列に実行する。同様に、ＰＥ４２−５〜４２−８を一組とするＰＥ４２の集合がチャネル方向の畳み込み演算を並列に実行する。各ＰＥ４２は、１つの入力データと１つの重みの乗算処理を含む演算を実行する。また、各ＰＥ４２は、複数の入力データそれぞれに含まれる値がゼロである要素を除外して畳み込み演算に含まれる乗算処理を実行する。
【００５０】
入力データ分割部４１は、複数のＰＥ４２それぞれと接続されている。同様に、畳み込み層制御部４０は、複数のＰＥ４２それぞれと接続されている。待機部４３は、チャネル方向を並列に畳み込み演算をするＰＥ４２の集合ごとに設けられる。図８の例では、ＰＥ４２−１〜４２−４のそれぞれと待機部４３が接続されている。待機部４３は、結果加算部４４と接続されている。なお、図８において、ＰＥ４２−５〜４２−８に対応する待機部及び当該待機部に接続される結果加算部の図示を省略している。
【００５１】
畳み込み層制御部４０は、畳み込み層全体を制御する手段である。畳み込み層制御部４０は、複数の入力データのそれぞれと、複数の入力データのそれぞれに対応する複数の重みを含む重み群と、を用いた畳み込みニューラルネットワークにおける畳み込み演算を複数のＰＥ４２を制御することで実現する。
【００５２】
より具体的には、畳み込み層制御部４０は、複数の入力データのそれぞれ（複数チャネルの各入力データ）と、複数の入力データそれぞれに対応する重みそれぞれとの乗算処理のうち、一部の乗算処理が並列に処理されるように複数のＰＥ４２を制御する。例えば、図６において、畳み込み層制御部４０は、４チャネル分の入力データと対応する重みの畳み込み演算（乗算処理を含む演算）が並列に実行されるように、各ＰＥ４２を制御する。
【００５３】
また、畳み込み層制御部４０は、複数の入力データのそれぞれ（複数チャネルの各入力データ）と、複数の重み群に含まれる複数の重みのそれぞれとの乗算処理のうち、異なる重み群の重みであって同一の入力データに対応する重みを用いた乗算処理の一部が並列に実行されるように複数のＰＥ４２を制御する。例えば、図６において、畳み込み層制御部４０は、最奥の重みの１行目と対応する最奥の入力データの畳み込み演算（乗算処理を含む演算）と、最奥の重みの２行目と対応する最奥の入力データの畳み込み演算が並列して実行されるように、各ＰＥ４２を制御する。
【００５４】
また、畳み込み層制御部４０は、他層の制御モジュールと制御情報の交換を行い、推論装置１０全体としての機能を実現する。より具体的には、畳み込み層制御部４０は、前段の層から畳み込み演算終了の通知を受信すると、自身が管理するＰＥ４２を制御して畳み込み演算を実行する（ＰＥ４２を制御して畳み込み演算を実行させる）。さらに、畳み込み層制御部４０は、後段の層に対して自層における畳み込み演算の終了を通知する。
【００５５】
各層における畳み込み演算に利用する重みは、重み記憶部５２に格納される。重み記憶部５２に格納する重みは、推論装置１０の動作前に予め設定されていてもよいし、上位装置（例えば、学習装置）から都度重みを受け取り、重み記憶部５２に格納してもよい。重み記憶部５２には、例えば、図６に示すような重みに関するデータが格納される。
【００５６】
畳み込み層制御部４０は、重み記憶部５２から重みを読み出し、各ＰＥ４２に必要な重み（データ）を配布する。例えば、図８に示すＰＥ４２−４が図６に示すＰＥ（０、０）に該当する場合には、畳み込み層制御部４０は、図６に示す最奥の重みのうち１行目、５行目、９行目、１３行目の重みと、最奥から５番目の重みのうち１行目、５行目、９行目、１３行目の重みをＰＥ４２−４に配布する。
【００５７】
入力データ記憶部５１は、入力データ（前段の層の出力データ）を記憶する。
【００５８】
入力データ分割部４１は、畳み込み層制御部４０からの指示に従い入力データを入力データ記憶部５１から読み出す。具体的には、畳み込み層制御部４０は、入力データ全体から抽出する入力データのサイズ及び位置を指定し、当該指定したデータを読み出すように入力データ分割部４１に指示する。
【００５９】
入力データ分割部４１は、指示に従って読み出したデータを各ＰＥ４２に供給する。より具体的には、入力データ分割部４１は、複数の入力データ（複数のチャネルを含む入力データ）を分割し、当該分割された入力データを乗算処理を並列に処理するＰＥ４２に供給する。即ち、入力データ分割部４１は、読み出したデータをＰＥ４２ごとに分割して供給する。例えば、図６に示すように、チャネル方向並列数（チャネル方向で重みを並列に処理するＰＥ４２の数）が「４」であれば、入力データ分割部４１は入力データを４分割し、分割された入力データを各ＰＥ４２に供給する。図６に示す例では、８個の入力データが４分割され（図６の入力データに付した色の濃淡のように分割され）、４分割された各入力データは、各ＰＥ４２に供給される。例えば、図６に示すＰＥ（０、０）には、最奥の入力データと奥から５番目の入力データ（共に最も色の濃い入力データ）の２つが供給される。なお、対応するチャネルが同じであるＰＥ４２に関しては同じ入力データが供給される。例えば、図８では、ＰＥ４２−１とＰＥ４２−５には同じ入力データが供給される。同様に、ＰＥ４２−２とＰＥ４２−６には同じ入力データが供給される。
【００６０】
各ＰＥ４２には、ＰＥ制御部６０と、入力データ処理部６１と、重み読み出し部６２と、乗加算部６３と、重み一次記憶部６４と、演算結果記憶部６５と、が含まれる。
【００６１】
入力データ分割部４１が出力する入力データは、入力データ処理部６１が取得する。畳み込み層制御部４０が配布する重みは、ＰＥ制御部６０が取得し、重み一次記憶部６４に格納する。
【００６２】
ＰＥ４２は、重み一次記憶部６４に格納された重み（配布された重み）と入力データ分割部４１から取得した入力データを用いて畳み込み演算を実行する。より具体的には、図７を用いて説明した処理、即ち、入力データと対応する重み間の乗算処理及び重み群ごとの加算処理を実行する。
【００６３】
入力データ処理部６１は、入力した入力データから値がゼロ以外であるノンゼロ要素と当該ノンゼロ要素の位置を特定する。より具体的には、入力データ処理部６１は、入力データからノンゼロ要素と対応するインデックスを抽出する。入力データ処理部６１は、抽出したインデックスを重み読み出し部６２に引き渡す。また、入力データ処理部６１は、ノンゼロ要素を乗加算部６３に引き渡す。
【００６４】
重み読み出し部６２は、入力データと乗算される重みの要素のうち、上記ノンゼロ要素の位置（インデックス）に相当する位置の値を、重み群を記憶する記憶媒体から読み出す。より具体的には、重み読み出し部６２は、取得したインデックスに相当する重みの要素を重み一次記憶部６４から逐次読み出す。重み読み出し部６２は、読み出した値を乗加算部６３に引き渡す。
【００６５】
乗加算部６３は、ノンゼロ要素と重み読み出し部６２により読み出された値を乗算する。より具体的には、乗加算部６３は、入力データ処理部６１から取得したノンゼロ要素と重み読み出し部６２から取得した重みの要素を乗算する。乗加算部６３は、乗算結果をレジスタ等の一次記憶領域に保存する。
【００６６】
入力データ処理部６１、重み読み出し部６２及び乗加算部６３は、上記処理を繰り返す。入力データ処理部６１は、入力データに関して全てのノンゼロ要素を処理した場合には、その旨を乗加算部６３に通知する。当該通知を取得すると、乗加算部６３は、重み群ごとに乗算結果を加算し、加算結果を演算結果記憶部６５に格納する。つまり、入力データに含まれるノンゼロ要素に関する乗算が終了すると、乗加算部６３は、乗算結果を加算する。
【００６７】
ＰＥ制御部６０は、演算結果が演算結果記憶部６５に格納されると、入力データ分割部４１から供給された入力データのうち処理をしていない入力データが存在するか否かを判断する。処理されていない入力データが存在する場合には、ＰＥ制御部６０は、入力データ処理部６１等を制御し、処理されていない入力データに関して上記説明した乗加算処理を実行する。例えば、図６に示すＰＥ（０、０）に対し、最奥と奥から５番目の入力データが供給されている場合を考える。この場合、ＰＥ制御部６０は、最初の入力データ（例えば、最奥の入力データ）に関する乗加算処理が終了すると、次の入力データ（例えば、奥から５番目の入力データ）に関する乗加算処理を実行するように入力データ処理部６１等を制御する。即ち、各ＰＥ４２は、一の入力データに関する畳み込み演算が終了すると、他の入力データに関する畳み込み演算を逐次的に実行する。
【００６８】
ＰＥ制御部６０は、他の入力データ（次の入力データ）に関する畳み込み演算が終了すると、当該他の入力データによる演算結果と先の入力データによる演算結果をチャネル方向に加算し、その結果を演算結果記憶部６５に格納する。
【００６９】
ＰＥ制御部６０は、全ての入力データに関する畳み込み演算が終了し、その結果を演算結果記憶部６５に格納すると、その旨を待機部４３に通知する。
【００７０】
待機部４３は、重みをチャネル方向に並列処理する複数のＰＥ４２それぞれの演算が終了するまで待機する手段である。待機部４３は、接続された全てのＰＥ４２から上記通知（演算結果を格納した旨の通知）を取得すると、待機を解除し、各ＰＥ４２の演算結果記憶部６５から演算結果を読み出し、当該データを結果加算部４４に引き渡す。
【００７１】
結果加算部４４は、入力データのそれぞれと１つの重み群に含まれる複数の重みとの乗算結果を加算する手段である。当該加算処理は、チャネル方向における演算結果の加算に相当する。
【００７２】
結果加算部４４は、加算結果を結果記憶部５３に格納すると、その旨を畳み込み層制御部４０に通知する。
【００７３】
畳み込み層制御部４０は、全ての結果加算部４４から上記通知（結果記憶部５３に加算結果を格納した旨の通知）を取得すると、自層での演算は終了したものと判断し、その旨を後段の層（活性化関数）に通知する。
【００７４】
以上のように、第１の実施形態に係る推論装置１０では、畳み込み層の計算をする際に、入力データのノンゼロ要素に限り重みの各要素と乗算している。その結果、畳み込み層にて実行する乗算回数が減少する。例えば、図７の例では、本来、４×８＝３２回の乗算が必要であったものが、２（ノンゼロ要素の数）×４＝８回の乗算に減少する。
【００７５】
［第２の実施形態］
第２の実施形態について、図面を用いてより詳細に説明する。
【００７６】
第１の実施形態に係る推論装置１０は、畳み込み層にて実行する乗算回数の減少を実現する。しかしながら、当該乗算回数の減少を実現するためにはハードウェアの規模が大きくなるという問題が生じる。具体的には、演算結果記憶部６５のサイズが大きくなるという問題がある。
【００７７】
例えば、出力チャネル数（重み群の数）Ｋが「１６」であり、カーネル方向に並列処理するＰＥの数（カーネル方向並列数；Ｎ）を「４」とすると、各ＰＥ４２では、４種類（Ｋ／Ｎ＝１６／４＝４）の重み群に関する加算結果を一時的に保持する必要がある。例えば、図７を参照すると、各行それぞれの重み群に関する４つの加算結果を一時的に保持する必要がある。各ＰＥ４２は、少なくとも上記サイズ（容量）の演算結果記憶部６５を備えなければならない。
【００７８】
ここで、１つの畳み込み層に含まれるＰＥ４２の数は、チャネル方向に並列処理するＰＥ４２の数（チャネル方向の並列数；Ｍ）とカーネル方向に並列処理するＰＥ４２の数（Ｎ）の乗算結果（Ｍ×Ｎ）となる。その結果、全ＰＥ４２の数（Ｍ×Ｎ）×各ＰＥ４２の演算結果記憶部６５のサイズ（Ｋ／Ｎ）＝Ｍ×Ｋのサイズを有する記憶媒体（メモリ）が必要となる。第２の実施形態では、当該Ｍ×Ｋのサイズよりも小さいサイズの演算結果記憶部６５を備える推論装置１０について説明する。
【００７９】
図９は、第２の実施形態に係る畳み込み層実行部３１の内部構成の一例を示す図である。図８及び図９を参照すると、畳み込み層制御部４０の内部に繰り返し制御部６６を備える点が第１及び第２の実施形態で相違する。
【００８０】
第２の実施形態に係る畳み込み層制御部４０は、各ＰＥ４２における乗算処理をカーネル方向に時分割して実行するように、各ＰＥ４２を制御する。例えば、図７に示すように、１つのＰＥ４２にて４つの重み群の乗算処理を実行する場合を考える。この場合、畳み込み層制御部４０のサブモジュールである繰り返し制御部６６は、図７に示す上から２行目までの乗算処理とその後の加算処理を実行するように各ＰＥ４２を制御する。
【００８１】
各ＰＥ４２は、２行目までの処理が終了すると、その演算結果を演算結果記憶部６５に格納する。演算結果が格納されると、各ＰＥ４２のＰＥ制御部６０は、その旨を待機部４３に通知する。待機部４３は、当該通知を受信すると各ＰＥ４２の演算結果記憶部６５から演算結果を読み出し、当該演算結果を結果加算部４４に引き渡す。結果加算部４４は、待機部４３から演算結果を取得すると、取得した演算結果を一時的に結果記憶部５３に格納する。その際、結果加算部４４は、既に結果記憶部５３に格納されている結果が存在すれば、当該既に格納されている結果と取得した演算結果を加算する。結果加算部４４は、演算結果を結果記憶部５３に格納すると当該事実を繰り返し制御部６６に通知する。
【００８２】
繰り返し制御部６６は、時分割された残りの処理（例えば、図７に示す上から３行目、４行目の重み群に関する処理）を各ＰＥ４２が実行するように、各ＰＥ４２を制御する。より具体的には、繰り返し制御部６６は、各ＰＥ４２のＰＥ制御部６０に対して、時分割された残りの処理を実行するように指示する。各ＰＥ４２は、時分割された残りの処理を実行する。各ＰＥ４２、待機部４３、結果加算部４４及び繰り返し制御部６６は、時分割された残りの処理がなくなるまで上記動作を繰り返す。このようにして各ＰＥ４２による演算結果は、結果記憶部５３に格納される。結果加算部４４は、各ＰＥ４２から演算結果を受け取るたびに、結果記憶部５３に格納された対応する演算結果（他のＰＥ４２による結果）を読み出す。その後、結果加算部４４は、当該読み出した演算結果に取得した演算結果を加算することで、チャネル方向における演算結果の加算を実現する。
【００８３】
カーネル方向に時分割された畳み込み演算処理が終了した後は、畳み込み層制御部４０は、第１の実施形態と同様に動作する。
【００８４】
このように、第２の実施形態に係る推論装置１０は、１つの入力データと、異なる重み群に含まれる重みと、を乗算する複数の処理を時分割で複数のＰＥ４２のそれぞれに実行させる。即ち、第２の実施形態に係る推論装置１０は、各ＰＥ４２における畳み込み演算処理において、カーネル方向に時分割する。その結果、各ＰＥ４２に必要となる演算結果記憶部６５のサイズを小さくすることができる。具体的には、図７の例において、第１の実施形態では、４つの演算結果を保持できる容量の演算結果記憶部６５が必要である。しかし、第２の実施形態では、時分割された１回の処理が終了するたびに、演算結果は結果記憶部５３に格納（退避）されるので、２つの演算結果を保持できる容量の演算結果記憶部６５を用意すればよいことになる。
【００８５】
上記効果をより一般化すると、以下のようになる。各ＰＥ４２にてＫ／Ｎ個の重みを処理する必要がある状況において、時分割された１つの処理にてＴ（＜Ｋ／Ｎ）個の重みを処理する場合を考える。この場合、第１の実施形態では、各ＰＥ４２における演算結果記憶部６５のサイズ（容量）がＫ／Ｎであったものが、第２の実施形態では、Ｔとなる。また、１つの畳み込み層全体として必要となる演算結果記憶部６５のサイズは、第１の実施形態では、Ｋ×Ｍであったものが、第２の実施形態では、Ｔ×Ｍ×Ｎとなる。上述のように、Ｔは、Ｋ／Ｎよりも小さいので、Ｔ×Ｎ×Ｍ＜Ｋ×Ｍの関係が成り立つ。
【００８６】
例えば、Ｃ＝５１２、Ｋ＝５１２、Ｎ＝６４、Ｍ＝６４、Ｔ＝４とすれば、第１の実施形態（時分割処理なし）では、５１２×６４＝３２７６８個の演算結果を保持できる記憶媒体（メモリ）が必要となる。対して、第２の実施形態（時分割あり）では、４×６４×６４＝１６３８４個の演算結果を保持できる記憶媒体が必要となる。
【００８７】
［第３の実施形態］
第３の実施形態について、図面を用いてより詳細に説明する。
【００８８】
第１及び第２の実施形態では、複数のＰＥ４２を用いてチャネル方向及びカーネル方向の重みを並列に処理している。その際、各ＰＥ４２では、入力データに含まれるノンゼロ要素と重みの乗算処理が行われる。その後、並列に演算している他のＰＥ４２の処理が終了するとチャネル方向での加算処理が行われる。このように、入力データに含まれるノンゼロ要素と重みの乗算処理が行われるので、各ＰＥ４２に入力する入力データのノンゼロ要素の数にばらつきが存在すると、各ＰＥ４２にて演算処理が終了するタイミングがばらつく。即ち、各ＰＥ４２に入力される入力データに含まれるノンゼロ要素の数に偏りが存在すると、ＰＥ４２間での実行時間に偏りが生じる。ＰＥ４２間での実行時間に偏りが生じると、実行時間が最も遅いＰＥ４２の処理終了を待つ必要があるため、畳み込み層の演算処理がＰＥ４２の最悪実行時間に律速される（実行時間が遅いＰＥ４２がボトルネックとなる）。なお、入力データ（即ち、前層の出力データ）に存在するノンゼロ要素は、アクティベーションスパーシティ（Activation Sparsity）とも称される。つまり、アクティベーションスパーシティに偏りが存在すると、ＰＥ４２における実行時間の偏りが生じることになる。
【００８９】
第３の実施形態では、上記ボトルネックを極力解消するような推論装置１０を説明する。
【００９０】
初めに、図１０を参照しつつ、各ＰＥ４２に入力するデータが異なると、その演算に要する時間が異なることを説明する。図１０は、ＰＥ４２に入力する異なる２つの入力データを示す図である。
【００９１】
図１０（ａ）では、ノンゼロ要素が２個であるので、比較的早く処理結果が得られるのに対し、図１０（ｂ）ではノンゼロ要素が７個であるので、処理結果を得るまでに時間がかかる。例えば、図１０に示す２つの入力データそれぞれを異なるＰＥ４２に入力し、並列処理する場合を考える。この場合、図１０（ｂ）の入力データを処理するＰＥ４２の演算が終了するまでの間、図１０（ａ）の入力データを処理するＰＥ４２は待機中となる。つまり、図１０（ｂ）に示す入力データを処理するＰＥ４２は、畳み込み演算のボトルネックとなる。また、図１０（ｂ）に示す入力データを処理するＰＥの演算処理が終了するまでの間、他のＰＥ４２は待機中となるため、リソースの有効活用が行えない。
【００９２】
上記不都合（処理の遅いＰＥ４２がボトルネック、リソースの効率的な利用が阻害）を解消するため、第３の実施形態では、カーネル方向に重み群を並び替える。以下、カーネル方向にて重み群を並び替えることで上記不都合が解消されることを説明する。なお、本願開示において、重み群を並び替えるとは、入力データに対して乗算処理をする重み群の利用順序（計算順序）を変更することを示す。例えば、図３において、重み群５１１、重み群５１２の順で入力データとの乗算処理が行われているものを、重み群５１２、重み群５１１の順で入力データとの乗算処理を行うことが「カーネル方向での重み群の並び替え」に相当する。さらに、重み群の計算順序の変更を実現するために重み群が格納されているメモリ内の配置を変更することも「カーネル方向での重み群の並び替え」に相当する。つまり、メモリにアクセスして重み群を読み出すプロセッサ（畳み込み制御部）の動作を変更して重み群の並び替えを実現してもよいし、当該プロセッサの動作を変更せずメモリ内の配置を変更することで重み群の並び替えを実現してもよい。
【００９３】
図１１は、第３の実施形態による問題解決を説明するための図である。なお、プーリング層による動作（プーリング前後）により変化するパラメータは入力データのサイズＷ、Ｈである。換言するならば、重みに関係するパラメータである、重みのサイズＲ、Ｓや入力チャネル数Ｃ、出力チャネル数Ｋに関してはプーリング前後で変化しない。つまり、図１１の例では、２層目の重みのサイズＲ、Ｓや入力チャネル数Ｃ２、出力チャネル数Ｋ２はプーリングの前後で変化しない。なお、上述のように、プーリング処理により入力データのサイズＷ、Ｈは変化し、図１１においても当該変化を図示している。従って、図１１は、プーリング層の適用を暗黙的に仮定している。
【００９４】
上述したように、上記不都合が生じる原因は、アクティベーションスパーシティの偏り（ばらつき）である。図１１の例では、２層目の入力となるデータ４０１とデータ４０２におけるアクティベーションスパーシティが大きく異なると、当該データ４０１及び４０２を使用した２層目の畳み込み演算の処理時間に大きな差が出ることがある。
【００９５】
図１１に示すように、２層目の入力データは、その前段の層（１層目）の出力データである。従って、１層目の出力データにおけるアクティベーションスパーシティの偏りが、２層目の演算処理（実行時間）に影響を与える。
【００９６】
ここで、各層からの出力データは、活性化関数（例えば、ＲｅＬＵ関数）が適用されたものである。ＲｅＬＵ関数は、負の値を「０」に置換し、正の値はそのまま出力する関数である。そのため、活性化関数に入力するデータに負の値が多ければ、後段の層に入力するデータには「０」が多い傾向となる。逆に、活性化関数に入力するデータに正の値が多ければ、後段の層に入力するデータには「０」が少ない傾向となる。なお、上記活性化関数の特徴から、各層への入力データには負の値は含まれない。
【００９７】
活性化関数に入力するデータが正の値となるか負の値となるかは、畳み込み演算により定まる。畳み込み演算は、入力データと重みの双方から影響を受けるので、重みの各要素に負の値が多ければ、演算結果は負の値となる可能性が高くなる。即ち、重みに負の値が多く含まれていれば、活性化関数が適用された後の層の出力には「０」が多く含まれ、重みに正の値が多く含まれていれば、活性化関数が適用された後の層の出力にはノンゼロ要素が多く含まれる傾向となる。
【００９８】
上述のように、アクティベーションスパーシティの偏りが大きいと畳み込み演算の処理時間にも偏りが大きくなる。そこで、第３の実施形態では、２層目の入力、即ち、１層目の出力におけるアクティベーションスパーシティの偏りを抑制するために、１層目の重み群を並べ替える。具体的には、１層目の出力データにおいて、隣接するデータ間ではアクティベーションスパーシティのばらつきが極力発生しないように１層目の重み群を並べ替える。即ち、重み群の計算順序をカーネル方向にて入れ替える。
【００９９】
例えば、カーネル方向に並ぶ各重み群に含まれる負の数の総数を評価基準として算出し、当該評価基準が降順又は昇順となるように重みを並べ替える。但し、前段の層（１層目）で重み群を並べ替えると、１層目の出力データの順序が入れ替わる。例えば、図１１において、重み群５２１に対応する出力データはデータ４０１、重み群５２２に対応する出力データはデータ４０２とする。ここで、重み群５２１と重み群５２２の順序を入れ替えると、１層目の出力データは、データ４０２とデータ４０１の順番となる。各層の重み群に含まれる重み（チャネル方向の重み）は、入力データのチャネルと対応付けて用意されるので、前段の出力データの順番が変わると、後段の層における入力データの対応関係が変わることになる。そこで、順番が変わった入力データに適合するように、自層における重み群に含まれる重みのチャネル方向の順番を変更する（入力データとの対応付けを変更する）必要がある。
【０１００】
図１２は、第３の実施形態に係る畳み込み層制御部４０の内部構成の一例を示す図である。図１２を参照すると、畳み込み層制御部４０は、重み取得部３１１と、評価指標計算部３１２と、重み群並び替え部３１３と、順序情報通知部３１４と、順序情報取得部３１５と、重み並び替え部３１６と、を含んで構成される。
【０１０１】
重み取得部３１１は、重み記憶部５２から重みを読み出す手段である。読み出された重みは、評価指標計算部３１２に引き渡される。
【０１０２】
評価指標計算部３１２は、重み群を評価するための評価指標を計算する手段である。当該評価指標は、重み群の並び替えに使用される。図１３は、第３の実施形態に係る畳み込み層制御部４０の動作を説明するための図である。図１３には、８個の重み群ＷＧ０〜ＷＧ７を図示している。また、各重み群には、４チャネル分の重みが含まれる。各チャネルに対応する重みのサイズは、２×２＝４である。図１３では、各チャネルに対応する重みをＷＣ０〜ＷＣ３として図示している。つまり、図１３に示す各行がカーネル方向の重み群を示し、重み群のそれぞれは、チャネル方向に４つの重みを有する。
【０１０３】
図１３（ａ）は、評価指標計算部３１２が取得した直後の重みを示している。評価指標計算部３１２は、各重み群における負の数の総数を計算する。例えば、図１３（ａ）では、重み群ＷＧ０における負の数の総数は「５」であり、重み群ＷＧ１における負の数の総数は「４」と計算される。
【０１０４】
重み群並び替え部３１３は、計算された評価指標に基づき入力データに対して乗算する重み群をカーネル方向に並べ替える手段である。例えば、重み群並び替え部３１３は、評価指標が降順となるように重み群を並び替える。図１３（ｂ）は、図１３（ａ）に示す重み（重み群）を、評価指標が降順となるように並び替えた結果を示す。
【０１０５】
重み群並び替え部３１３による重み群の並び替えが終了すると、畳み込み層制御部４０は、第１及び第２の実施形態の畳み込み層制御部４０と同様に動作する。より具体的には、畳み込み層制御部４０は、重みを各ＰＥ４２に設定し、各ＰＥ４２による畳み込み演算が終了すると、その旨を後段の畳み込み層制御部４０に通知する。
【０１０６】
順序情報通知部３１４は、重み群並び替え部３１３による重み群並び替えに関する順序情報を他層に通知する手段である。より具体的には、順序情報通知部３１４は、順序情報を後段の畳み込み層制御部４０に通知する。図１３の例では、順序情報通知部３１４は、ＷＧ２、ＷＧ３、ＷＧ０、ＷＧ１、ＷＧ７、ＷＧ４、ＷＧ６、ＷＧ５という重み群の並び順を後段の畳み込み層制御部４０に通知する。
【０１０７】
順序情報取得部３１５は、前段の畳み込み層制御部４０からの重み群の並び替えに関する順序情報を取得する手段である。
【０１０８】
重み並び替え部３１６は、取得した順序情報に基づき、入力データと重み群に含まれる重みの対応関係を変更する手段である。より具体的には、重み並び替え部３１６は、前段の畳み込み層制御部４０から取得した順序情報に基づき、自層の重み群に含まれる重みをチャネル方向に並び替える。図１３の例では、ＷＧ２、ＷＧ３、ＷＧ０、ＷＧ１、ＷＧ７、ＷＧ４、ＷＧ６、ＷＧ５の順に各重み群に含まれる重みをチャネル方向に並び替える。重み並び替え部３１６は、重み記憶部５２から重みを読み出し、各重み群に含まれる重みを上記順序情報に従ってチャネル方向に並び替え、並び替え後の重みを重み記憶部５２に再び格納する。このように、重み並び替え部３１６は、前段の層にて重み群を並べ替えたことにより入力データが変更することに対応し、各重み群に含まれる重みと入力データの対応付けを変更する。重み並び替え部３１６による重みの並び替えが終了すると、畳み込み層制御部４０は、第１及び第２の実施形態の畳み込み層制御部４０と同様に動作する。
【０１０９】
図１４は、第３の実施形態に係る畳み込み層制御部４０の動作を説明するためのフローチャートである。図１４を参照しつつ、第３の実施形態に係る畳み込み層制御部４０の動作を概説する。
【０１１０】
図１４（ａ）は、カーネル方向に重み群を並び替える場合の畳み込み層制御部４０の動作を示すフローチャートである。
【０１１１】
初めに、畳み込み層制御部４０は、重み記憶部５２から重みを取得する（ステップＳ１０１）。その後、畳み込み層制御部４０は、評価指標を計算する（ステップＳ１０２）。その後、畳み込み層制御部４０は、計算された評価指標に基づき重み群をカーネル方向に並び替える（ステップＳ１０３）。その後、畳み込み層制御部４０は、並び替え後の重み群の順序に関する順序情報を後段の畳み込み層制御部４０に通知する。
【０１１２】
図１４（ｂ）は、チャネル方向に重みを並び替える場合の畳み込み層制御部４０の動作を示すフローチャートである。
【０１１３】
初めに、畳み込み層制御部４０は、前段の畳み込み層制御部４０から順序情報を取得する（ステップＳ２０１）。その後、畳み込み層制御部４０は、取得した順序情報に基づき、各重み群に含まれる重みをチャネル方向に並び替える（ステップＳ２０２）。
【０１１４】
以上のように、第３の実施形態では、アクティベーションスパーシティの偏りを抑制するように、カーネル方向にて重み群の並び替えを行う。当該並び替えは、出力データに含まれる「０」の数が、隣接するデータ間で極力揃うように行われる。例えば、図１３（ｂ）に示すように、各重み群の負の総数が降順となるように並び替えると、並び替え後の重み群の隣接するもの同士は、負の数が類似しているため、畳み込み演算の処理結果における「０」の数も似たものとなる可能性が高い。畳み込み演算の処理結果は、後段の層における入力データに相当するので、上記並び替えにより、後段の層におけるアクティベーションスパーシティの偏りが抑制される。当該事実は、後段の層にて並列に処理するＰＥ４２へのアクティベーションスパーシティの偏りが抑制されることを意味し、並列処理するＰＥ４２間での実行時間が大きく異なることを抑制できる。その結果、処理の遅いＰＥ４２がボトルネックとなることやリソースの効率的な利用が阻害されるといった問題点が解消され得る。
【０１１５】
続いて、第１乃至第３の実施形態に係る推論装置１０のハードウェア構成について説明する。
【０１１６】
図１５は、推論装置１０のハードウェア構成の一例を示す図である。推論装置１０は、所謂、情報処理装置（コンピュータ）により構成可能であり、図１５に例示する構成を備える。例えば、推論装置１０は、内部バスにより相互に接続される、ＣＰＵ（Central Processing Unit）７１、メモリ７２、入出力インターフェイス７３及び通信手段であるＮＩＣ（Network Interface Card）７４等を備える。
【０１１７】
なお、図１５に示す構成は、推論装置１０のハードウェア構成を限定する趣旨ではない。推論装置１０は、図示しないハードウェアを含んでもよい。あるいは、推論装置１０に含まれるＣＰＵ等の数も図１５の例示に限定する趣旨ではなく、例えば、複数のＣＰＵが推論装置１０に含まれていてもよい。
【０１１８】
メモリ７２は、ＲＡＭ（Random Access Memory）、ＲＯＭ（Read Only Memory）、補助記憶装置（ハードディスク等）である。
【０１１９】
入出力インターフェイス７３は、図示しない表示装置や入力装置のインターフェイスとなる手段である。表示装置は、例えば、液晶ディスプレイ等である。入力装置は、例えば、キーボードやマウス等のユーザ操作を受け付ける装置である。
【０１２０】
推論装置１０の機能は、上述の処理モジュールにより実現される。当該処理モジュールは、例えば、メモリ７２に格納されたプログラムをＣＰＵ７１が実行することで実現される。また、そのプログラムは、ネットワークを介してダウンロードするか、あるいは、プログラムを記憶した記憶媒体を用いて、更新することができる。さらに、上記処理モジュールは、半導体チップにより実現されてもよい。即ち、上記処理モジュールが行う機能は、何らかのハードウェアにおいてソフトウェアが実行されることによって実現できればよい。
【０１２１】
［変形例］
第１乃至第３の実施形態にて説明した推論装置１０は例示であって、その構成及び動作を限定する趣旨ではない。以下、各種変形例について説明する。
【０１２２】
上記実施形態では、重みをチャネル方向に分割して畳み込み演算を実行する場合を主に説明したが、チャネル方向の分割は行われて無くともよい。例えば、図６では、４つのＰＥがチャネル方向の重みを並列に処理する場合を図示しているが、８つのＰＥがチャネル方向の重みを全て並列に処理してもよい。
【０１２３】
上記実施形態では、各ＰＥ４２は、それぞれに割り当てられた複数の重み群、複数の重みを逐次的に処理しているが、当該逐次的処理は行われなくともよい。例えば、図６において、上記実施形態では、ＰＥ（０、０）が１行目の重み群に含まれる最奥の重みを処理し、その後、奥から５番目の重みを処理している。しかし、４つのＰＥ（０、０）〜ＰＥ（３、０）を一組とし、これらのＰＥにて１行目の重み群に含まれる最奥から４番目までの重みを並列に処理してもよい。その後、上記４つのＰＥ（０、０）〜ＰＥ（３、０）は、１行目の重み群に含まれる奥から５番目〜８番目（最も手前）の重みを並列処理してもよい。
【０１２４】
上記実施形態では、重み読み出し部６２は、読み出した重みの要素が「０」であったとしても、当該「０」を乗加算部６３に通知している。しかし、重み読み出し部６２は、読み出した重みの値が「０」であれば、その旨を乗加算部６３に通知する対応であってもよい。この場合、乗加算部６３は、読み出された値が「０」である旨の通知を受けた場合は、入力データとの乗算処理を不実施とすることができる（乗算処理をスキップできる）。
【０１２５】
上記実施形態では、各ＰＥ４２に入力データ処理部６１が含まれる構成を説明したが、入力データ処理部６１に相当するモジュールを、カーネル方向のＰＥ４２にて共通に設けてもよい。上記説明したように、同じチャネルの入力データを処理するＰＥ４２には同じ入力データが入力されるので、入力データ処理部６１によるノンゼロ要素検出に関する動作は同じとなる。従って、共通に設けられた入力データ処理部６１からノンゼロ要素及びそのインデックスを各ＰＥ４２に通知（ブロードキャスト）してもよい。
【０１２６】
あるいは、各ＰＥ４２に含まれる入力データ処理部６１は、結果記憶部５３の後段に配置されていてもよい。上記説明したように、前段の層の出力データは後段の層の入力データとなるので、後段の層にて入力データからノンゼロ要素及びそのインデックス検出処理が不要となるように、前段の層にて当該処理を予め実施してもよい。
【０１２７】
上記実施形態では、各ＰＥ４２に重み一次記憶部６４が含まれる構成を説明したが、各ＰＥ４２は、重み記憶部５２から必要な重みを直接読み出してもよい。例えば、畳み込み層制御部４０が、各ＰＥ４２に対し、必要な重みのアドレス情報を通知してもよい。各ＰＥ４２の重み読み出し部６２は、当該アドレス情報に従って必要な重みを読み出してもよい。
【０１２８】
上記実施形態では、待機部４３と結果加算部４４は異なるモジュールとして説明したが、一方のモジュールの機能が他方のモジュールにより実現されていてもよい。即ち、待機部４３及び結果加算部４４が統合されていてもよい。
【０１２９】
第３の実施形態では、評価指標が降順となるように重み群を並び替えることを説明したが、評価指標が昇順となるように並び替えても良いことは勿論である。評価指標が降順となるように、重み群を並び替えると最初に「０」が多い入力データが後段の層にて並列処理されることになる。一方、評価指標が昇順となるように、重み群を並び替えると最初にノンゼロ要素が多い入力データが後段の層にて並列処理されることになる。
【０１３０】
第３の実施形態として、重み群を評価する指標として、各重み群に含まれる負の数の総数を計算しているが、他の値を評価指標として計算してもよい。例えば、各重み群における要素の総和を評価指標として計算してもよい。例えば、図１３（ａ）の例では、重み群ＷＧ０の評価指標として、各要素の総和として「−４」が計算される（−１＋０＋０−１＋０＋１＋０−１＋０＋１＋１−３＋０＋１＋０−２＝−４）。
【０１３１】
第３の実施形態では、推論装置１０が入力データを推論する過程にて重み群を並び替えているが、推論装置１０に重み群を設定する前段階にて上記並び替えを実行してもよい。具体的には、図１６に示すように、推論装置１０に対して外部から学習済み重みを設定する重み設定装置８０において重み群の並び替えを行ってもよい。あるいは、他者から得た学習済み重みを用いて推論装置１０を動作させる場合に、事前に並び替えを実行してもよい。
【０１３２】
さらにまた、図１７に示すように、推論装置１０に重みを提供する学習装置９０にて、重み群の並び替えを行っても良い。即ち、学習装置９０では、教師データを用いた「推論」、「推定誤差フィードバック（誤差逆伝搬）」、「重みアップデート」を繰り返す学習処理が行われる。当該一連の学習処理を「推論」、「推定誤差フィードバック」、「重みアップデート」、「重み（重み群）並び替え」としてもよい。学習装置９０における推論部がアクティベーションスパーシティを活用する場合には、上記のように学習時のフローを変更することで、第３の実施形態にて説明した効果を学習装置９０が享受できる。なお、畳み込みニューラルネットワークの活用（中間層の動作）の観点からは、推論装置１０と学習装置９０では相違する点はない。推論装置１０への入力データは推論対象となるデータであり、学習装置９０の推論部への入力データは教師データであるが、「推論」の観点からは両者に違いはない。即ち、上記説明した推論装置１０に、誤差逆伝搬を行う誤差逆伝搬部９１、重みアップデートを行う重みアップデート部９２と、重み（重み群）の並び替えを行う並び替え部９３と、を付加することで学習装置９０を構成することができる（図１８参照）。なお、誤差逆伝搬部９１及び重みアップデート部９２に関しては、公知のアルゴリズム等により実現可能である。また、並び替え部９３に関しては、第３の実施形態にて説明した評価指標計算部３１２、重み群並び替え部３１３、重み並び替え部３１６等の機能により実現できる。
【０１３３】
上記の実施形態の一部又は全部は、以下のようにも記載され得るが、以下には限られない。
［形態１］
上述の第１の視点に係る推論装置のとおりである。
［形態２］
前記制御部は、
前記複数の入力データのそれぞれと、前記複数の入力データそれぞれに対応する重みそれぞれとの乗算処理のうち、一部の乗算処理が並列に処理されるように前記複数のＰＥを制御する、好ましくは形態１の推論装置。
［形態３］
前記制御部は、
前記複数の入力データのそれぞれと、複数の前記重み群に含まれる複数の重みのそれぞれとの乗算処理のうち、異なる前記重み群の重みであって同一の入力データに対応する重みを用いた乗算処理の一部が並列に実行されるように前記複数のＰＥを制御する、好ましくは形態２の推論装置。
［形態４］
前記複数の入力データを分割し、前記分割された入力データを前記一部の乗算処理を並列に処理するＰＥに供給する、入力データ分割部をさらに備える、好ましくは形態３の推論装置。
［形態５］
前記一部の乗算処理を並列に処理する複数のＰＥそれぞれの演算が終了するまで待機する、待機部をさらに備える、好ましくは形態３又は４の推論装置。
［形態６］
前記複数の入力データのそれぞれと１つの重み群に含まれる複数の重みとの乗算結果を加算する結果加算部をさらに備える好ましくは形態３乃至５のいずれか一に記載の推論装置。
［形態７］
前記複数のＰＥのそれぞれは、
入力した入力データから値がゼロ以外であるノンゼロ要素と前記ノンゼロ要素の位置を特定する入力データ処理部と、
前記入力した入力データと乗算される重みの要素のうち、前記ノンゼロ要素の位置に相当する位置の値を、前記重み群を記憶する記憶媒体から読み出す重み読み出し部と、
前記ノンゼロ要素と前記重み読み出し部により読み出された値を乗算する、乗加算部と、
を備え、
前記乗加算部は、前記入力した入力データに含まれるノンゼロ要素に関する乗算が終了すると、乗算結果を加算する、好ましくは形態１乃至６のいずれか一に記載の推論装置。
［形態８］
前記複数のＰＥのそれぞれは、
前記乗加算部により算出された加算結果を記憶する、演算結果記憶部をさらに備える、好ましくは形態７の推論装置。
［形態９］
前記制御部は、
１つの入力データと、異なる重み群に含まれる重みと、を乗算する複数の処理を時分割で前記複数のＰＥのそれぞれに実行させる、好ましくは形態３乃至８のいずれか一に記載の推論装置。
［形態１０］
前記制御部は、
前記重み群を評価するための評価指標を計算する、評価指標計算部と、
前記評価指標に基づき、入力データに対して乗算する前記重み群の順序を並び替える重み群並び替え部と、
を備える、好ましくは形態１乃至９のいずれか一に記載の推論装置。
［形態１１］
前記制御部は、
前記重み群の並び替えに関する順序情報を、他層に通知する、順序情報通知部をさらに備える、好ましくは形態１０の推論装置。
［形態１２］
前記制御部は、
前記通知された順序情報を取得する、順序情報取得部と、
前記順序情報に基づき、入力データと前記重み群に含まれる重みの対応関係を変更する、重み並び替え部と、
をさらに備える、好ましくは形態１１の推論装置。
［形態１３］
上述の第２の視点に係る畳み込み演算実行方法のとおりである。
［形態１４］
上述の第３の視点に係るプログラムのとおりである。
［形態１５］
教師データを用いた重みの推論、重みの推定誤差のフィードバック、重みのアップデート、及び重みの並び替えを行う学習装置であって、
前記重みの並び替えは、
重みを評価するための評価指標に基づき行われる、学習装置。
なお、形態１３及び形態１４は、形態１と同様に、形態２〜形態１２のように展開することが可能である。
【０１３４】
なお、引用した上記の特許文献等の各開示は、本書に引用をもって繰り込むものとする。本発明の全開示（請求の範囲を含む）の枠内において、さらにその基本的技術思想に基づいて、実施形態ないし実施例の変更・調整が可能である。また、本発明の全開示の枠内において種々の開示要素（各請求項の各要素、各実施形態ないし実施例の各要素、各図面の各要素等を含む）の多様な組み合わせ、ないし、選択が可能である。すなわち、本発明は、請求の範囲を含む全開示、技術的思想にしたがって当業者であればなし得るであろう各種変形、修正を含むことは勿論である。特に、本書に記載した数値範囲については、当該範囲内に含まれる任意の数値ないし小範囲が、別段の記載のない場合でも具体的に記載されているものと解釈されるべきである。
【符号の説明】
【０１３５】
１０、１００  推論装置
１１  入力層実行部
１２  中間層実行部
１３  出力層実行部
３１  畳み込み層実行部
３２  活性化関数実行部
３３  プーリング層実行部
４０  畳み込み層制御部
４１  入力データ分割部
４２、４２−１〜４２−８、１０１  ＰＥ（Processing Element）
４３  待機部
４４  結果加算部
５１  入力データ記憶部
５２  重み記憶部
５３  結果記憶部
６０  ＰＥ制御部
６１  入力データ処理部
６２  重み読み出し部
６３  乗加算部
６４  重み一次記憶部
６５  演算結果記憶部
６６  繰り返し制御部
７１  ＣＰＵ（Central Processing Unit）
７２  メモリ
７３  入出力インターフェイス
７４  ＮＩＣ（Network Interface Card）
８０  重み設定装置
９０  学習装置
９１  誤差逆伝搬部
９２  重みアップデート部
９３  並び替え部
１０２  制御部
３１１  重み取得部
３１２  評価指標計算部
３１３  重み群並び替え部
３１４  順序情報通知部
３１５  順序情報取得部
３１６  重み並び替え部
４０１、４０２  データ
５０１、５０２  重み
５１１、５１２、５２１、５２２  重み群
【図１】
2019082859.tif 000003
【図２】
2019082859.tif 000004
【図３】
2019082859.tif 000005
【図４】
2019082859.tif 000006
【図５】
2019082859.tif 000007
【図６】
2019082859.tif 000008
【図７】
2019082859.tif 000009
【図８】
2019082859.tif 000010
【図９】
2019082859.tif 000011
【図１０】
2019082859.tif 000012
【図１１】
2019082859.tif 000013
【図１２】
2019082859.tif 000014
【図１３】
2019082859.tif 000015
【図１４】
2019082859.tif 000016
【図１５】
2019082859.tif 000017
【図１６】
2019082859.tif 000018
【図１７】
2019082859.tif 000019
【図１８】
2019082859.tif 000020
【手続補正書】
【提出日】令和2年4月21日(2020.4.21)
【手続補正１】
【補正対象書類名】特許請求の範囲
【補正対象項目名】全文
【補正方法】変更
【補正の内容】
【特許請求の範囲】
【請求項１】
複数のＰＥ（Processing Element）と、
複数の入力データのそれぞれと、前記複数の入力データのそれぞれに対応する複数の重みを含む重み群と、を用いた畳み込みニューラルネットワークにおける畳み込み演算を前記複数のＰＥを制御することで実現する、制御部と、
を備え、
前記複数のＰＥのそれぞれは、１つの入力データと１つの重みの乗算処理を含む演算を実行すると共に、前記複数の入力データそれぞれに含まれる値がゼロではない要素を用いて前記畳み込み演算に含まれる乗算処理を実行する、推論装置。
【請求項２】
前記制御部は、
前記複数の入力データのそれぞれと、前記複数の入力データそれぞれに対応する重みそれぞれとの乗算処理のうち、一部の乗算処理が並列に処理されるように前記複数のＰＥを制御する、請求項１の推論装置。
【請求項３】
前記制御部は、
前記複数の入力データのそれぞれと、複数の前記重み群に含まれる複数の重みのそれぞれとの乗算処理のうち、異なる前記重み群の重みであって同一の入力データに対応する重みを用いた乗算処理の一部が並列に実行されるように前記複数のＰＥを制御する、請求項２の推論装置。
【請求項４】
前記複数の入力データを分割し、前記分割された入力データを前記一部の乗算処理を並列に処理するＰＥに供給する、入力データ分割部をさらに備える、請求項３の推論装置。
【請求項５】
前記複数の入力データのそれぞれと１つの重み群に含まれる複数の重みとの乗算結果を加算する結果加算部をさらに備える請求項３又は４に記載の推論装置。
【請求項６】
前記複数のＰＥのそれぞれは、
入力した入力データから値がゼロ以外であるノンゼロ要素と前記ノンゼロ要素の位置を特定する入力データ処理部と、
前記入力した入力データと乗算される重みの要素のうち、前記ノンゼロ要素の位置に相当する位置の値を、前記重み群を記憶する記憶媒体から読み出す重み読み出し部と、
前記ノンゼロ要素と前記重み読み出し部により読み出された値を乗算する、乗加算部と、
を備え、
前記乗加算部は、前記入力した入力データに含まれるノンゼロ要素に関する乗算が終了すると、乗算結果を加算する、請求項１乃至５のいずれか一項に記載の推論装置。
【請求項７】
前記制御部は、
１つの入力データと、異なる重み群に含まれる重みと、を乗算する複数の処理を時分割で前記複数のＰＥのそれぞれに実行させる、請求項３乃至６のいずれか一項に記載の推論装置。
【請求項８】
前記制御部は、
前記重み群を評価するための評価指標を計算する、評価指標計算部と、
前記評価指標に基づき、入力データに対して乗算する前記重み群の順序を並び替える重み群並び替え部と、
を備える、請求項１乃至７のいずれか一項に記載の推論装置。
【請求項９】
それぞれが、１つの入力データと１つの重みの乗算処理を含む演算を実行する、複数のＰＥ（Processing Element）を含み、
複数の入力データのそれぞれと、前記複数の入力データのそれぞれに対応する複数の重みを含む重み群と、を用いた畳み込みニューラルネットワークにおける畳み込み演算を実現する、推論装置において、
前記複数のＰＥのそれぞれが、
前記複数の入力データそれぞれに含まれる値がゼロではない要素を特定するステップと、
前記特定された要素を用いて前記畳み込み演算に含まれる乗算処理を実行するステップと、
を含む、畳み込み演算実行方法。
【請求項１０】
それぞれが、１つの入力データと１つの重みの乗算処理を含む演算を実行する、複数のＰＥ（Processing Element）を含み、
複数の入力データのそれぞれと、前記複数の入力データのそれぞれに対応する複数の重みを含む重み群と、を用いた畳み込みニューラルネットワークにおける畳み込み演算を実現する、推論装置に搭載されたコンピュータに、
前記複数の入力データそれぞれに含まれる値がゼロではない要素を特定する処理と、
前記特定された要素を用いて前記畳み込み演算に含まれる乗算処理を実行する処理と、
を実行させる、プログラム。
【国際調査報告】
2019082859.tif 000021
2019082859.tif 000022
2019082859.tif 000023
2019082859.tif 000024