(57)【要約】【課題】活性化処理後にネットワークの次元数を変化させるような演算処理を行なう構成であって、高速に演算可能にする。【解決手段】本実施形態の演算処理装置１は、畳み込みニューラルネットワークによる演算を実行するものであって、畳込み演算部３、プーリング処理部５及び活性化処理部６を有する演算ブロック２を複数備え、各演算ブロック２は、自身の演算ブロック２内の活性化処理部６が出力する活性化処理結果、または、並列に設けられた他の演算ブロック２内の活性化処理部６が出力する活性化処理結果のいずれか１つを選択する選択部１０と、前記選択部１０により選択された活性化処理結果を用いて１×１畳み込み演算を実施する乗算器１２とを備えるように構成されている。【選択図】図５
2018195060.tif 000002
【特許請求の範囲】
【請求項１】
畳み込みニューラルネットワークによる演算を実行する演算処理装置（１）であって、
畳込み演算部（３）、プーリング処理部（５）及び活性化処理部（６）を有する演算ブロック（２）を複数備え、
前記各演算ブロックは、自身の演算ブロック内の活性化処理部が出力する活性化処理結果、または、並列に設けられた他の演算ブロック内の活性化処理部が出力する活性化処理結果のいずれか１つを選択する選択部（１０）と、前記選択部により選択された活性化処理結果を用いて１×１畳み込み演算を実施する乗算器（１２）とを備えるように構成された演算処理装置。
【請求項２】
前記選択部は、他の演算ブロック内の活性化処理部が出力する活性化処理結果の代わりに、他の演算ブロック内の乗算器が出力する演算結果を入力して、前記演算結果を選択可能なように構成されている請求項１記載の演算処理装置。
【請求項３】
前記乗算器が出力する演算結果を記憶する記憶部（１５）と、
前記選択部が出力する活性化処理結果、または、前記記憶部に記憶された演算結果のいずれか１つを選択する第２選択部（１６）とを備え、
前記乗算器は、前記第２選択部により選択された前記記憶部に記憶された演算結果を用いて１×１畳み込み演算を実施することが可能なように構成されている請求項１または２記載の演算処理装置。
【発明の詳細な説明】
【技術分野】
【０００１】
本発明は、畳み込みニューラルネットワークによる演算を実行する演算処理装置に関する。
【背景技術】
【０００２】
複数の処理層が階層的に接続されたニューラルネットワークによる演算を実行する演算処理装置が考えられている。特に、画像認識を行う演算処理装置においては、いわゆる畳み込みニューラルネットワーク（ＣＮＮ：Convolutional Neural Network）が用いられている。このＣＮＮは、畳み込み層とプーリング層と呼ばれる２種類の層を交互に積み重ねた構造を持つ多層ニューラルネットワークのことであり、全結合層と呼ばれる層とを合わせてた構造を持つ。
【０００３】
近年は、画像認識性能を高くするために、大規模なニューラルネットワークが提案されている。大規模なネットワークによる演算を実行する演算処理装置としては、高速でネットワークに対して柔軟に処理できる回路が必要になる。
【０００４】
ＣＮＮの効率的な演算を行なう演算処理装置は、畳み込み演算器とプーリング演算器と活性化演算器とから構成された演算ブロックを複数並列に動作させることにより実現することができる。
【０００５】
例えばGoogLeNet等の巨大なネットワークでは、活性化（即ち、ＲｅＬＵ）演算後に、１×１畳み込み演算を部分的に挿入し、特徴マップの次元数を変化させることで特徴抽出をより多様に行なうことにより、高い認識率を達成している。しかし、上記構成のＣＮＮ演算モジュールにおいては、処理を分割する必要があるため、処理時間が長くなるという問題点があった。
【先行技術文献】
【特許文献】
【０００６】
【特許文献１】特開２０１５−２１０７０９号公報
【発明の概要】
【発明が解決しようとする課題】
【０００７】
本発明の目的は、活性化処理後にネットワークの次元数を変化させるような演算処理を行なう構成であって、高速に演算することができる演算処理装置を提供することにある。
【課題を解決するための手段】
【０００８】
請求項１の発明は、畳み込みニューラルネットワークによる演算を実行する演算処理装置１であって、畳込み演算部３、プーリング処理部５及び活性化処理部６を有する演算ブロック２を複数備え、前記各演算ブロック２は、自身の演算ブロック２内の活性化処理部６が出力する活性化処理結果、または、並列に設けられた他の演算ブロック２内の活性化処理部６が出力する活性化処理結果のいずれか１つを選択する選択部１０と、前記選択部１０により選択された活性化処理結果を用いて１×１畳み込み演算を実施する乗算器１２とを備えるように構成されている。
【図面の簡単な説明】
【０００９】
【図１】第１実施形態を示すもので、畳み込みニューラルネットワークの構成例を概念的に示す図
【図２】演算処理装置による演算処理の流れを視覚的に示す図
【図３】特徴量抽出処理に用いられる一般的な演算及び関数を示す図
【図４】演算処理装置の概略構成を示す図
【図５】演算ブロックの概略構成を示す図
【図６】第２実施形態を示す演算ブロックの概略構成を示す図
【図７】第３実施形態を示す演算ブロックの概略構成を示す図（その１）
【図８】演算ブロックの概略構成を示す図（その２）
【図９】制御のタイミングチャートを示す図
【発明を実施するための形態】
【００１０】
（第１実施形態）
以下、第１実施形態について、図１ないし図５を参照して説明する。図１には、詳しくは後述する演算処理装置１（図４参照）に適用されるニューラルネットワーク、この場合、畳み込みニューラルネットワークの構成を概念的に示している。即ち、畳み込みニューラルネットワークＮは、複数の特徴量抽出処理層Ｎ１、Ｎ２、Ｎ３が階層的に接続された構成であり、入力データである画像データＤ１から所定の形状やパターンを認識する画像認識技術に応用されるものである。
【００１１】
第１層目の特徴量抽出処理層Ｎ１では、演算処理装置１は、入力される画像データＤ１を例えばラスタスキャンにより所定サイズごとに走査する。そして、走査したデータに対して特徴量抽出処理を施すことにより特徴量を抽出する。なお、第１層目の特徴量抽出処理層Ｎ１では、例えば水平方向に延びる線状の特徴量や斜め方向に延びる線状の特徴量などといった比較的シンプルな単独の特徴量を抽出する。
【００１２】
第２層目の特徴量抽出処理層Ｎ２では、演算処理装置１は、前階層の特徴量抽出処理層Ｎ１から入力される入力データを例えばラスタスキャンにより所定サイズごとに走査する。そして、走査したデータに対して特徴量抽出処理を施すことにより特徴量を抽出する。なお、第２層目の特徴量抽出処理層Ｎ２では、第１層目の特徴量抽出処理層Ｎ１で抽出された複数の特徴量の空間的な位置関係などを考慮しながら統合させることで、より高次元の複合的な特徴量を抽出する。
【００１３】
第３層目の特徴量抽出処理層Ｎ３では、演算処理装置１は、前階層の特徴量抽出処理層Ｎ２から入力される入力データを例えばラスタスキャンにより所定サイズごとに走査する。そして、走査したデータに対して特徴量抽出処理を施すことにより特徴量を抽出する。尚、第３層目の特徴量抽出処理層Ｎ３では、第２層目の特徴量抽出処理層Ｎ２で抽出された複数の特徴量の空間的な位置関係などを考慮しながら統合させることで、より高次元の複合的な特徴量を抽出する。このように、複数の特徴量抽出処理層による特徴量の抽出処理を繰り返すことで、演算処理装置１は、画像データＤ１に含まれる検出対象物体の画像認識を行う。
【００１４】
また、図２には、演算処理装置１による演算処理の流れを視覚的に示している。即ち、演算処理装置１は、前階層の特徴量抽出処理層から入力される入力データＤｎを所定サイズ、この場合、図２にてハッチングで示す５×５画素ごとに走査する。そして、演算処理装置１は、走査したデータに対して、それぞれ畳み込み演算を行う。そして、演算処理装置１は、畳み込み演算後のデータＣｎに対して、所定サイズ、この場合、２×２画素ごとにプーリング処理を行う。そして、演算処理装置１は、プーリング処理後のデータＰｎを次の階層の特徴量抽出処理層に出力する。なお、後述する実施形態においては、演算処理装置１には、畳み込み演算処理を行いながらプーリング処理に相当する処理結果を得るための工夫が施されている。即ち、演算処理装置１は、畳み込み演算処理とプーリング処理とを明確に区別しない構成となっている。
【００１５】
図３には、畳み込み演算処理に用いられる畳み込み関数、活性化処理に用いられる関数、プーリング処理に用いられる関数の一般的な例を示している。即ち、畳み込み関数ｙｊは、直前の層の出力ｙｉに、学習により得られる重み係数ｗｉｊを乗算した値の和に所定のバイアス値Ｂｊを加算する関数となっている。また、活性化処理には、周知のロジスティックジグモイド関数やＲｅＬＵ関数（Rectified Linear Units）などが用いられる。また、プーリング処理には、入力されるデータの最大値を出力する周知の最大プーリング関数や、入力されるデータの平均値を出力する周知の平均プーリング関数などが用いられる。
【００１６】
また、図４に示すように、本実施形態の演算処理装置１は、演算ブロック（ＰＥ：Processing Element、演算モジュールとも称す）２を複数並列に接続して構成されている。演算ブロック２は、畳み込み演算回路３と、ＰＥ連結回路４と、プーリング処理回路５と、活性化処理回路６と、追加畳み込み演算回路７とを備えている。
【００１７】
畳み込み演算回路３は、例えば特許文献１に記載された畳み込み演算部を用いて構成することができ、図５に示すように、例えばシストリックアレイからなる２個の畳み込み演算器８、９を備えている。畳み込み演算回路３は、畳込み演算部としての機能を有する。畳み込み演算回路３は、１演算サイクルごとに、１回分のプーリング処理に必要な４つの畳み込み演算結果データのうち２つの畳み込み演算結果データを出力するように構成されている。尚、畳み込み演算回路３が１回の演算サイクルで出力する畳み込み演算結果データは、１回分のプーリング処理に必要な全ての畳み込み演算結果データ（画素）のうち垂直方向に並ぶ畳み込み演算結果データであっても良いし、垂直方向に並ぶ畳み込み演算結果データであっても良い。畳み込み演算回路３は、畳み込み演算結果をＰＥ連結回路４へ出力する。
【００１８】
ＰＥ連結回路４は、例えば通常の加算器で構成されており、畳み込み演算回路３からの畳み込み演算結果と、下位の演算ブロック２のＰＥ連結回路４から出力された畳み込み演算結果とを加算（即ち、３Ｄ畳み込み演算）する。そして、ＰＥ連結回路４は、加算した畳み込み演算結果をプーリング処理回路５へ出力する。
【００１９】
プーリング処理回路５は、例えば特許文献１に記載されたプーリング処理部を用いて構成することができる。プーリング処理回路５は、プーリング処理部として機能を有する。プーリング処理回路５は、ＰＥ連結回路４から畳み込み演算結果を入力して周知のプーリング演算を実行し、プーリング演算結果を活性化処理回路６に出力する。この場合、畳み込み演算回路３による２回の演算サイクルにより得られる４つの畳み込み演算結果データのうち最も値が大きいデータがプーリング演算結果として活性化処理回路６に出力される。即ち、活性化処理回路６による活性化処理の実行前に、２×２画素の最大プーリング処理に相当する処理結果が得られるようになっている。
【００２０】
活性化処理回路６は、例えば特許文献１に記載された畳み込み演算部を用いて構成することができる。活性化処理回路６は、活性化処理部としての機能を有する。活性化処理回路６は、プーリング処理回路５からプーリング演算結果を入力して周知の活性化処理を実行する。この場合、活性化処理回路６による活性化処理は、ロジスティックジグモイド関数またはＲｅＬＵ関数の何れの関数を採用しても良いし、その他の非線形関数を採用しても良い。活性化処理回路６は、活性化処理結果を追加畳み込み演算回路７に出力する。
【００２１】
追加畳み込み演算回路７は、活性化処理結果を入力して、１×１の畳み込み演算を実行するものであり、図５に示すように、第１のセレクタ１０と、第２のセレクタ１１と、乗算器１２とを備えている。尚、図５には、ｎ番目の演算ブロック２（例えばＰＥ（ｎ）と称す）を示し、残りの演算ブロック２は図示していない。また、演算ブロック２内に、ＰＥ連結回路４を図示することを省略した。
【００２２】
第１のセレクタ１０は、選択部としての機能を有する。第１のセレクタ１０の一方の入力端子１０ａは、活性化処理回路６の出力端子６ａに接続されており、活性化処理結果が入力される。第１のセレクタ１０の他方の入力端子１０ｂは、上位の演算ブロック２の第１のセレクタ１０の出力端子１０ｄに接続されており、上位の演算ブロック２からの活性化処理結果、p_data_o(n-1)（即ち、p_data_i(n)）が入力される。第１のセレクタ１０の制御端子１０ｃは、図示しないコントローラの第１制御端子に接続されており、コントローラから第１の選択制御信号select_pd(n)が入力される。第１のセレクタ１０の出力端子１０ｄは、乗算器１２の一方の入力端子１２ａに接続されており、第１のセレクタ１０を通過した活性化処理結果が乗算器１２に入力される。また、第１のセレクタ１０の出力端子１０ｄは、下位の演算ブロック２の第１のセレクタ１０の入力端子１０ｂに接続されており、第１のセレクタ１０を通過した活性化処理結果、p_data_o(n)（即ち、p_data_i(n+1)）が下位の演算ブロック２の第１のセレクタ１０に入力される。
【００２３】
第２のセレクタ１１の一方の入力端子１１ａは、コントローラの出力端子に接続されており、コントローラから１×１畳み込み演算の重みデータの信号w_data1_i(n)が入力される。第２のセレクタ１１の他方の入力端子１１ｂは、固定値「１」（即ち、１×１畳み込み演算無し）の端子に接続されている。第２のセレクタ１１の制御端子１１ｃは、コントローラの第２制御端子に接続されており、コントローラから第２の選択制御信号select_wd(n)が入力される。第２のセレクタ１１の出力端子１１ｄは、乗算器１２の他方の入力端子１２ｂに接続されており、１×１畳み込み演算を実行するときには、第２のセレクタ１１を通過した１×１畳み込み演算の重みデータw_data1_i(n)が乗算器１２に入力される。
【００２４】
乗算器１２は、第１のセレクタ１０の出力端子１０ｄからの活性化処理結果と、第２のセレクタ１１の出力端子１２ｄからの１×１畳み込み演算の重みデータとを入力し、１×１の畳込み演算を行う。尚、乗算器１２は、第２のセレクタ１１の出力端子１２ｄから固定値「１」を入力するときには、１×１畳み込み演算を実行しない。
【００２５】
この構成の場合、第１のセレクタ１０によれば、自身の演算ブロック２の活性化処理結果（即ち、プーリング結果）または隣接する１つ上位の演算ブロック２の活性化処理結果のいずれか一方を選択できる。即ち、自身の演算ブロック２の活性化処理回路６から有効な活性化処理結果が出力されない場合には、上位の演算ブロック２の活性化処理結果を、１×１畳み込み演算に使用することができる構成となっている。つまり、本実施形態を使用することで、演算ブロック２を連結することにより、１つの活性化処理結果に対して、１×１畳み込み演算を並列で複数回処理することが可能な構成となっている。
【００２６】
尚、１個の演算ブロック２内において、乗算器１２の個数を任意に増やすことができる構成であることから、１個の演算ブロック２の中においても、複数の１×１畳み込み演算を実行する演算処理が実行可能なように構成しても良い。
【００２７】
さて、乗算器１２へ入力する重みデータw_data1_i(n)は、第２のセレクタ１１を通しており、１×１畳み込み演算が不要なときには、重みデータとして固定値「１」を選択することにより、１×１畳み込み演算が不要な場合にも、本実施形態の演算ブロック２により演算処理することが可能である。
【００２８】
次に、ｎ番目の演算ブロック２（即ち、ＰＥ（ｎ））の演算動作の一例を説明する。この場合、（ｎ−１）番目の演算ブロック２（即ち、ＰＥ（ｎ−１））の活性化処理結果に対して、１×１畳み込み演算を１回、２マップ同時に生成する演算処理の動作を説明する。
【００２９】
（ｎ−１）番目の演算ブロック２（即ち、ＰＥ（ｎ−１））の活性化処理結果を、乗算器１２による１×１畳み込み演算の入力とするので、
コントローラから出力される第１の選択制御信号select_pd(n)を例えば「０」とすることにより、第１のセレクタ１０の一方の入力端子１０ａを「０」とし、他方の入力端子１０ｂを「１」とする、即ち、第１のセレクタ１０を（１‘ｂ０、１’ｂ１）に設定する。この場合、「１‘」は、「１ビット」を示し、「ｂ」は２進数を示す。尚、第１の選択制御信号select_pd(n)を例えば「１」とすると、第１のセレクタ１０の一方の入力端子１０ａが「１」となり、他方の入力端子１０ｂが「０」となる、即ち、第１のセレクタ１０が（１‘ｂ１、１’ｂ０）に設定される。この場合、ｎ番目の演算ブロック２（即ち、ＰＥ（ｎ））の活性化処理結果が、１×１畳み込み演算の入力となる。
【００３０】
また、乗算器１２による１×１畳み込み演算を実行するので、
コントローラから出力される第２の選択制御信号select_wd(n)を例えば「１」とすることにより、第２のセレクタ１１の一方の入力端子１１ａを「１」とし、他方の入力端子１１ｂを「０」とする、即ち、第２のセレクタ１１を（１‘ｂ１、１’ｂ０）に設定する。これにより、（ｎ−１）番目の演算ブロック２（即ち、ＰＥ（ｎ−１））の活性化処理結果に対して、１×１畳み込み演算を１回実行する動作が行われる。
【００３１】
尚、第２の選択制御信号select_wd(n)を例えば「０」とすると、第２のセレクタ１１の一方の入力端子１１ａが「０」となり、他方の入力端子１１ｂが「１」となる、即ち、第２のセレクタ１１が（１‘ｂ０、１’ｂ１）に設定される。この場合、乗算器１２へ固定値「１」が入力されることから、１×１畳み込み演算が実行されない。
【００３２】
このような構成の本実施形態においては、自身の演算ブロック２内の活性化処理回路６が出力する活性化処理結果、または、並列に設けられた他の演算ブロック２内の活性化処理回路６が出力する活性化処理結果のいずれか１つを選択する第１のセレクタ１０と、第１のセレクタ１０により選択された活性化処理結果を用いて１×１畳み込み演算を実施する乗算器１２とを備えるように構成した。この構成によれば、演算に使用していない下位の演算ブロック２を活用して並列処理することにより、１つの活性化処理結果に対して複数例えば２回の１×１畳み込み演算を並列に実行することができる。
【００３３】
（第２実施形態）
図６は、第２実施形態を示すものである。尚、第１実施形態と同一構成には、同一符号を付している。第２実施形態では、乗算器１２からの出力データ、即ち、１×１畳み込み演算後のデータを、下位の演算ブロック２の第１のセレクタ１０の他方の入力端子１０ｂへ入力させるように構成している。
【００３４】
具体的には、図６に示すように、１番目の演算ブロック２（即ち、ＰＥ（１））の追加畳み込み演算回路７の乗算器１２の出力端子１２ｃを、２番目の演算ブロック２（即ち、ＰＥ（２））の追加畳み込み演算回路７の第１のセレクタ１０の他方の入力端子１０ｂに接続している。以下、２番目以降の演算ブロック２の接続関係も同様な接続関係となるように構成されている。
【００３５】
尚、１番目の演算ブロック２（即ち、ＰＥ（１））においては、上位の演算ブロック２がないので、その活性化処理結果を選択することができないように、第１の選択制御信号select_pd(1)を例えば「１」に設定して、第１のセレクタ１０が（１‘ｂ１、１’ｂ０）となるように設定している。これにより、上位の演算ブロック２の活性化処理結果を選択禁止となるように構成している。また、上述した以外の第２実施形態の演算ブロック２の構成は、第１実施形態の演算ブロック２の構成と同じ構成となっている。
【００３６】
第２実施形態においては、１×１畳み込み演算後のデータを、下位の演算ブロック２の第１のセレクタ１０へ入力させることで、複数の乗算器１２を連結させる構成を実現することができる。これにより、１つの活性化処理結果（即ち、プーリング結果）に対して、１×１畳み込み演算を複数回処理することが可能な構成となっている。
【００３７】
ここで、１番目の演算ブロック２（即ち、ＰＥ（１））と２番目の演算ブロック２（即ち、ＰＥ（２））の演算動作の一例を説明する。この場合、１番目の演算ブロック２（即ち、ＰＥ（１））の活性化処理結果に対して、１×１畳込み演算を２回処理する動作（即ち、ＰＥ（１）の乗算器１２で１回目の１×１畳み込み演算、ＰＥ（２）の乗算器１２で２回目の１×１畳み込み演算を行う動作)について説明する。
【００３８】
まず、１番目の演算ブロック２（即ち、ＰＥ（１））において、自身の活性化処理回路６からの活性化処理結果を、乗算器１２による１×１畳み込み演算の入力とするので、
コントローラから出力される第１の選択制御信号select_pd(1)を「１」とすることにより、第１のセレクタ１０の一方の入力端子１０ａを「１」とし、他方の入力端子１０ｂを「０」とする、即ち、第１のセレクタ１０を（１‘ｂ１、１’ｂ０）に設定する。
【００３９】
また、乗算器１２による１×１畳み込み演算を実行するので、
コントローラから出力される第２の選択制御信号select_wd(1)を例えば「１」とすることにより、第２のセレクタ１１の一方の入力端子１１ａを「１」とし、他方の入力端子１１ｂを「０」とする、即ち、第２のセレクタ１１を（１‘ｂ１、１’ｂ０）に設定する。
【００４０】
次に、１番目の演算ブロック２（即ち、ＰＥ（１））の１×１畳み込み演算結果（即ち、１回目）を、２番目の演算ブロック２（即ち、ＰＥ（２））の入力とするので、
２番目の演算ブロック２（即ち、ＰＥ（２））において、コントローラから出力される第１の選択制御信号select_pd(2)を例えば「０」とすることにより、第１のセレクタ１０の一方の入力端子１０ａを「０」とし、他方の入力端子１０ｂを「１」とする、即ち、第１のセレクタ１０を（１‘ｂ０、１’ｂ１）に設定する。
【００４１】
また、２番目の演算ブロック２（即ち、ＰＥ（２））において、乗算器１２による１×１畳み込み演算を実行するので、
２番目の演算ブロック２（即ち、ＰＥ（２））において、コントローラから出力される第２の選択制御信号select_wd(2)を例えば「１」とすることにより、第２のセレクタ１１の一方の入力端子１１ａを「１」とし、他方の入力端子１１ｂを「０」とする、即ち、第２のセレクタ１１を（１‘ｂ１、１’ｂ０）に設定する。これにより、１番目の演算ブロック２（即ち、ＰＥ（１））の活性化処理結果に対して、１×１畳込み演算を２回処理する動作（即ち、ＰＥ（１）の乗算器１２で１回目の１×１畳み込み演算、及び、ＰＥ（２）の乗算器１２で２回目の１×１畳み込み演算を行う動作)が行われる。
【００４２】
上述した以外の第２実施形態の構成は、第１実施形態と同じ構成となっている。従って、第２実施形態においても、第１実施形態とほぼ同じ作用効果を得ることができる。特に、第２実施形態によれば、他の演算ブロック２と連結して、１×１畳み込み演算を繰り返し実行するように構成したので、演算ブロック２内の乗算器１２の個数以上の１×１畳み込み演算を処理可能なように構成することができる。
【００４３】
（第３実施形態）
図７ないし図９は、第３実施形態を示すものである。尚、第１実施形態または第２実施形態と同一構成には、同一符号を付している。第３実施形態では、１×１畳み込み演算結果のデータを一時的に退避させて記憶するための記憶部である一時退避用メモリ１５を設けた。この第３実施形態によれば、乗算器１２を１個備えた演算ブロック２において、２回の１×１畳み込み演算を実行することが可能になる。
【００４４】
具体的には、演算ブロック２内において、第１のセレクタ１０と乗算器１２との間に、第３のセレクタ１６を設けた。第３のセレクタ１６は、第２選択部としての機能を有する。第３のセレクタ１６の一方の入力端子１６ａは、第１のセレクタ１０の出力端子１０ｄに接続されており、第１のセレクタ１０を通過した活性化処理結果が入力される。第３のセレクタ１６の他方の入力端子１６ｂは、一時退避用メモリ１５の出力端子１５ｂに接続されており、一時退避用メモリ１５に一時的に記憶されている１×１畳み込み演算結果が入力される。第３のセレクタ１６の制御端子１６ｃは、図示しないコントローラの第３制御端子に接続されており、コントローラから第３の選択制御信号select_m(n)が入力される。第３のセレクタ１６の出力端子１６ｄは、乗算器１２の一方の入力端子１２ａに接続されており、第３のセレクタ１６を通過した活性化処理結果が乗算器１２に入力される。
【００４５】
乗算器１２の他方の入力端子１２ｂは、第２のセレクタ１１の出力端子１１ｄに接続されており、第２のセレクタ１１を通過した１×１畳み込み演算の重みデータw_data1_i(n)が乗算器１２に入力される。乗算器１２の出力端子１２ｃは、一時退避用メモリ１５の入力端子１５ａに接続されると共に、演算ブロック２の出力端子となっている。
【００４６】
乗算器１２は、第３のセレクタ１６の出力端子１６ｄからの活性化処理結果と、第２のセレクタ１１の出力端子１２ｄからの１×１畳み込み演算の重みデータとを入力し、１×１の畳込み演算を行う。乗算器１２の１回目の畳み込み演算結果は、一時退避用メモリ１５に一時記憶される（図７参照）。尚、一時退避用メモリ１５は、例えばＲＡＭやＥＥＰＲＯＭやフラッシュメモリ等で構成される。一時退避用メモリ１５に一時記憶された１×１畳み込み演算結果を使用した乗算器１２の２回目の畳み込み演算結果は、演算ブロック２の出力端子から出力される（図８参照）。
【００４７】
尚、第１のセレクタ１０の出力端子１０ｄは、下位の演算ブロック２の第１のセレクタ１０の入力端子１０ｂに接続されており、第１のセレクタ１０を通過した活性化処理結果が下位の演算ブロック２の第１のセレクタ１０に入力される。
【００４８】
また、制御回路１７の２つの出力端子１７ａ、１７ｂを、畳み込み演算器８、９の入力端子８ａ、９ａに接続している。制御コントローラ１７の制御入力端子１７ｃには、パイプラインのストール信号stall_i（ｎ）を入力させる。上述した以外の第３実施形態の演算ブロック２の構成は、第１実施形態の演算ブロック２の構成と同じ構成となっている。
【００４９】
ここで、ｎ番目の演算ブロック２（即ち、ＰＥ（ｎ））による２回の１×１畳み込み演算動作の一例について説明する。下位の演算ブロック２に有効な活性化処理結果が存在すると、前記した第２実施形態の演算処理を実行することができない。このため、第３実施形態では、１個の演算ブロック２において、内部で乗算器１２の個数（例えば１個）を超えた例えば２回の１×１畳み込み演算を行う。
【００５０】
まず、図７に示すように、１回目の１×１畳み込み演算を実行する。この場合、（ｎ−１）番目の演算ブロック２（即ち、ＰＥ（ｎ−１））の活性化処理結果を、乗算器１２による１×１畳み込み演算の入力とするので、
コントローラから出力される第１の選択制御信号select_pd(n)を例えば「０」とすることにより、第１のセレクタ１０の一方の入力端子１０ａを「０」とし、他方の入力端子１０ｂを「１」とする、即ち、第１のセレクタ１０を（１‘ｂ０、１’ｂ１）に設定する。更に、第３の選択制御信号select_m(n)を例えば「１」とすると、第３のセレクタ１６の一方の入力端子１６ａが「１」となり、他方の入力端子１６ｂが「０」となる、即ち、第３のセレクタ１６が（１‘ｂ１、１’ｂ０）に設定される。この場合、（ｎ−１）番目の演算ブロック２（即ち、ＰＥ（ｎ−１））の活性化処理結果が、１×１畳み込み演算の入力となる。
【００５１】
また、乗算器１２による１×１畳み込み演算を実行するので、
コントローラから出力される第２の選択制御信号select_wd(n)を例えば「１」とすることにより、第２のセレクタ１１の一方の入力端子１１ａを「１」とし、他方の入力端子１１ｂを「０」とする、即ち、第２のセレクタ１１を（１‘ｂ１、１’ｂ０）に設定する。これにより、（ｎ−１）番目の演算ブロック２（即ち、ＰＥ（ｎ−１））の活性化処理結果に対して、乗算器１２により１×１畳み込み演算を１回実行する動作が行われる。そして、乗算器１２から出力された１×１畳み込み演算結果は、一時退避用メモリ１５に一時記憶される。
【００５２】
次に、図８に示すように、２回目の１×１畳み込み演算を実行する。この場合、一時退避用メモリ１５に記憶された１×１畳み込み演算結果を、乗算器１２による１×１畳み込み演算の入力とするので、
コントローラから出力される第３の選択制御信号select_m(n)を例えば「０」とすると、第３のセレクタ１６の一方の入力端子１６ａが「０」となり、他方の入力端子１６ｂが「１」となる、即ち、第３のセレクタ１６が（１‘ｂ０、１’ｂ１）に設定される。この場合、一時退避用メモリ１５に記憶された１×１畳み込み演算結果が、１×１畳み込み演算の入力となる。
【００５３】
また、乗算器１２による１×１畳み込み演算を実行するので、
コントローラから出力される第２の選択制御信号select_wd(n)を例えば「１」とすることにより、第２のセレクタ１１の一方の入力端子１１ａを「１」とし、他方の入力端子１１ｂを「０」とする、即ち、第２のセレクタ１１を（１‘ｂ１、１’ｂ０）に設定する。これにより、一時退避用メモリ１５に記憶された１×１畳み込み演算結果に対して、乗算器１２により１×１畳み込み演算を１回実行する動作が行われる。そして、乗算器１２から出力された１×１畳み込み演算結果は、演算ブロック２の出力端子から出力される。
【００５４】
また、パイプラインをストールさせておくことにより、前段の演算ブロック２の活性化処理回路６から次の活性化処理結果が出力されてデータが衝突することを回避するように制御している。この制御のタイミングチャートの一例を、図９に示す。
【００５５】
図９において、idat0_iは、畳み込み演算器８への入力データを示し、idat1_iは、畳み込み演算器９への入力データを示す。stall0_i及びstall1_iは、idato_i及びidat1_iのストール信号を示す。一時退避用メモリ１５のデータで１×１畳み込み演算を繰り返している間は、ストール信号に従ってパイプラインを停止させている。ストールされたデータは、終段（即ち、最終番目）の演算ブロック２のセレクタで無効化される。
【００５６】
尚、上述した以外の第３実施形態の構成は、第１実施形態の構成と同じ構成となっている。従って、第３実施形態においても、第１実施形態とほぼ同じ作用効果を得ることができる。特に、第３実施形態によれば、一時退避用メモリ１５を使用することにより、１個の演算ブロック２において、１×１畳み込み演算を、１個の演算ブロック２が備える乗算器１２の個数より多い回数実行することができる。
【００５７】
また、上記各実施形態においては、畳み込み演算回路３が２個の畳み込み演算器８、９を備える構成としたが、これに限られるものではなく、１個の畳み込み演算器を備える畳み込み演算回路を用いるように構成しても良い。
【００５８】
本開示は、実施例に準拠して記述されたが、本開示は当該実施例や構造に限定されるものではないと理解される。本開示は、様々な変形例や均等範囲内の変形をも包含する。加えて、様々な組み合わせや形態、さらには、それらに一要素のみ、それ以上、あるいはそれ以下、を含む他の組み合わせや形態をも、本開示の範疇や思想範囲に入るものである。
【符号の説明】
【００５９】
図面中、１は演算処理装置、２は演算ブロック、３は畳み込み演算回路（畳込み演算部）、５はプーリング処理回路（プーリング処理部）、６は活性化処理回路（活性化処理部）、７は追加畳み込み演算回路、１０は第１のセレクタ（選択部）、１２は乗算器、１５は一時退避用メモリ（記憶部）、１６は第３のセレクタ（第２選択部）である。
【図１】
2018195060.tif 000003
【図２】
2018195060.tif 000004
【図３】
2018195060.tif 000005
【図４】
2018195060.tif 000006
【図５】
2018195060.tif 000007
【図６】
2018195060.tif 000008
【図７】
2018195060.tif 000009
【図８】
2018195060.tif 000010
【図９】
2018195060.tif 000011