(57)【要約】【課題】  複数種類の演算を行うことができ、かつ、メモリの読込み及び書込みの回数を抑え、電力消費を抑えることができる演算装置を提供する。【解決手段】  実施形態の演算装置３は、演算指示部１１と、演算部２１と、バッファ４１と、格納領域指示部３１とを有する。演算指示部１１は、第１演算又は第２演算のいずれか一方の演算種類の演算指示を行う。演算部２１は、演算指示に応じ、演算を行い、中間演算結果を出力する。バッファ４１は、中間演算結果Ｉｃを格納する。格納領域指示部３１は、演算種類に応じ、中間演算結果Ｉｃを格納するバッファ内の領域Ｂの指示を行う。【選択図】図１
2019061641.tif 000002
【特許請求の範囲】
【請求項１】
第１演算又は第２演算のいずれか一方の演算種類の演算指示を行う演算指示部と、
前記演算指示に応じ、演算を行い、中間演算結果を出力する演算部と、
前記中間演算結果を格納するバッファと、
前記演算種類に応じ、前記中間演算結果を格納する前記バッファ内の領域の指示を行う格納領域指示部と、
を有する演算装置。
【請求項２】
前記演算指示部は、前記第１演算又は前記第２演算のいずれか一方の演算種類に応じた重み量と特徴量をメモリから読み込み、読み込まれた前記重み量と前記特徴量を前記演算部に出力することによって前記演算指示を行う、請求項１に記載の演算装置。
【請求項３】
前記第１演算は、畳み込み演算であり、
前記第２演算は、全結合演算である、
請求項２に記載の演算装置。
【請求項４】
前記演算指示部は、前記畳み込み演算において、前記重み量に対応した特徴マップＸの対応領域の前記特徴量をメモリから読み込む、請求項３に記載の演算装置。
【請求項５】
前記演算指示部は、重み量圧縮部及び特徴量圧縮部を有し、
前記重み量圧縮部は、前記重み量に含まれる０値を削除することによって前記重み量を圧縮し、圧縮位置の情報である圧縮位置情報を出力し、
前記特徴量圧縮部は、前記圧縮位置情報に応じて前記特徴量に含まれる値を削除することによって前記特徴量を圧縮する、
請求項２に記載の演算装置。
【請求項６】
前記重み量は、重み行列である、請求項２に記載の演算装置。
【発明の詳細な説明】
【技術分野】
【０００１】
本発明の実施形態は、演算装置に関する。
【背景技術】
【０００２】
従来、ニューラルネットワークによって画像又は音声等の情報から、認識、識別処理等を実現する技術がある。例えば、畳み込みニューラルネットワーク技術では、畳み込み層及び全結合層等の層を連続させることによってニューラルネットワークが構成され、各層において、畳み込み演算及び全結合演算等の所定の演算を行うことによって、認識、識別処理等が実現される。
【０００３】
ニューラルネットワークにおける演算では、畳み込み演算、全結合演算等の演算の過程において、中間演算結果のメモリへの一時退避等が生じ、メモリの読込み、書込み回数が多くなることがある。また、入力特徴マップ及び重み量を複数回繰り返し読むことによってメモリの読込み回数が、多くなることがある。このようなメモリの読込み及び書込みの回数の増加により、電力消費が、増大することがある。
【先行技術文献】
【特許文献】
【０００４】
【特許文献１】特許第４９４７９８３号明細書
【発明の概要】
【発明が解決しようとする課題】
【０００５】
実施形態では、複数種類の演算を行うことができ、かつ、メモリの読込み及び書込みの回数を抑え、電力消費を抑えることができる演算装置の提供を目的とする。
【課題を解決するための手段】
【０００６】
実施形態の演算装置は、演算指示部と、演算部と、バッファと、格納領域指示部とを有する。前記演算指示部は、第１演算又は第２演算のいずれか一方の演算種類の演算指示を行う。前記演算部は、前記演算指示に応じ、演算を行い、中間演算結果を出力する。前記バッファは、前記中間演算結果を格納する。前記格納領域指示部は、前記演算種類に応じ、前記中間演算結果を格納する前記バッファ内の領域の指示を行う。
【図面の簡単な説明】
【０００７】
【図１】第１の実施形態に係わる、演算システムの構成の一例を示すブロック図である。
【図２】第１の実施形態に係わる、演算システムの演算順序の一例を説明するための表である。
【図３】第１の実施形態に係わる、演算システムの畳み込み演算の一例を説明するための図である。
【図４】第１の実施形態に係わる、演算システムの畳み込み演算の一例を説明するための図である。
【図５】第１の実施形態に係わる、演算システムの畳み込み演算の一例を説明するための図である。
【図６】第１の実施形態に係わる、演算システムの畳み込み演算の一例を説明するための図である。
【図７】第１の実施形態に係わる、演算システムの畳み込み演算の一例を説明するための図である。
【図８】第１の実施形態に係わる、演算システムの畳み込み演算の一例を説明するための図である。
【図９】第１の実施形態に係わる、演算システムの畳み込み演算の一例を説明するためのフローチャートである。
【図１０】第１の実施形態に係わる、演算システムの全結合演算の一例を説明するための図である。
【図１１】第１の実施形態に係わる、演算システムの全結合演算の一例を説明するための図である。
【図１２】第１の実施形態に係わる、演算システムの全結合演算の一例を説明するためのフローチャートである。
【図１３】第２の実施形態に係わる、演算システムの全結合演算の一例を説明するためのフローチャートである。
【図１４】第３の実施形態に係わる、演算システムの構成の一例を示すブロック図である。
【図１５】第３の実施形態に係わる、演算システムの演算順序の一例を説明するための表である。
【図１６】第３の実施形態に係わる、演算システムの畳み込み演算の一例を説明するための図である。
【図１７】第３の実施形態に係わる、演算システムの畳み込み演算の一例を説明するための図である。
【図１８】第３の実施形態に係わる、演算システムの畳み込み演算の一例を説明するための図である。
【図１９】第３の実施形態に係わる、演算システムの畳み込み演算の一例を説明するためのフローチャートである。
【図２０】第３の実施形態に係わる、演算システムの全結合演算の一例を説明するための図である。
【図２１】第３の実施形態に係わる、演算システムの全結合演算の一例を説明するためのフローチャートである。
【図２２】第３の実施形態に係わる、演算システムの全結合演算の一例を説明するための図である。
【発明を実施するための形態】
【０００８】
（第１の実施形態）
（構成）
以下、図面を参照して実施形態を説明する。
【０００９】
図１は、第１の実施形態に係わる、演算システム１の構成を示すブロック図である。実施形態及び変形例の説明では、特徴マップＸは特徴マップ又は特徴量の全部又は一部を示し、重み量Ｗは重み量の全部又は一部を示し、演算素子Ｍは演算素子の全部又は一部を示し、領域Ｂは領域の全部又は一部を示し、演算結果Ｙは、演算結果の全部又は一部を示す。
【００１０】
演算システム１は、メモリ２と演算装置３を有する。演算装置３は、メモリ２と接続され、メモリ２から各種情報を読み込み、演算を行う。
【００１１】
メモリ２は、ネットワーク構成情報Ｓ、重み量Ｗ及び特徴マップＸが記憶され、例えば、ＳＲＡＭによって構成される。ネットワーク構成情報Ｓ、重み量Ｗ及び特徴マップＸは、例えば畳み込みニューラルネットワーク技術を用いた機械学習によって予め作成される。
【００１２】
ネットワーク構成情報Ｓは、演算装置３が行う処理のネットワーク構成の情報である。ネットワーク構成情報Ｓは、演算の順番と、演算種類と、重み量Ｗの識別情報（以下、重み量識別情報）とを有する。
【００１３】
演算装置３は、メモリ２から読み込まれたネットワーク構成情報Ｓに基づいて、第１演算及び第２演算を行う。例えば、第１演算は畳み込み演算Ｃｖであり、第２演算は全結合演算Ｆｃである。演算装置３は、演算指示部１１と、演算部２１と、格納領域指示部３１と、バッファ４１と、制御部５１とを有する。制御部５１は、演算装置３内の各部と接続され、各種の動作を制御可能である。
【００１４】
図２は、第１の実施形態に係わる、演算システム１の演算順序の一例を説明するための表である。図２の例では、２回の畳み込み演算Ｃｖと、１回の全結合演算Ｆｃが行われるように構成されている。（順番１と順番２は同じネットワーク層、且つ同じ特徴マップ演算を指す）順番１では、演算装置３は、予め設定された特徴マップＸと、重み量Ｗ１、Ｗ２、Ｗ３、Ｗ４とをメモリ２から読み込み、畳み込み演算Ｃｖを行い、演算結果Ｙをメモリ２に書き込む。続いて、順番２では、順番１の演算結果Ｙをメモリ２から読み込み、メモリ２から読み込んだ重み量Ｗ５、Ｗ６と、畳み込み演算Ｃｖを行う。続いて、順番３（別のネットワーク層）では、順番２においてメモリ２に書き込まれた演算結果Ｙを特徴マップＸとしてメモリ２から読み込み、重み量Ｗ７、Ｗ８、Ｗ９もメモリ２から読み込み、全結合演算Ｆｃを行い、最終出力である演算結果Ｙをメモリ２に書き込む。
【００１５】
演算指示部１１は、重み量出力部１２及び特徴量出力部１３を有する。演算指示部１１は、ネットワーク構成情報Ｓに応じ、メモリ２から重み量Ｗと特徴マップＸを読み込み、演算部２１に重み量Ｗと特徴マップＸを出力する。より具体的には、演算指示部１１は、制御部５１から入力された演算種類及び重み量識別情報に応じ、重み量Ｗと特徴マップＸをメモリ２から読み込み、読み込まれた重み量Ｗと特徴マップＸを演算部２１に出力することによって、第１演算または第２演算いずれかの演算指示を行う。
【００１６】
重み量出力部１２は、重み量Ｗをメモリ２から読み込み、演算素子Ｍに出力する。
【００１７】
特徴量出力部１３は、特徴マップＸをメモリ２から読み込み、演算素子Ｍに出力する。
【００１８】
また、演算指示部１１は、出力先の演算素子Ｍの情報である出力先の情報を制御部５１に出力する。なお、演算指示部１１は、制御部５１を介さずに出力先の情報を格納領域指示部３１に出力するようにしてもよい。
【００１９】
すなわち、演算指示部１１は、第１演算又は第２演算のいずれか一方の演算種類の演算指示を演算部２１に行う。より具体的には、演算指示部１１は、第１演算及び第２演算の演算順序を示すネットワーク構成情報Ｓに応じ、第１演算又は第２演算のいずれか一方の演算種類に応じた重み量Ｗと特徴量Ｘをメモリ２から読み込み、読み込まれた重み量Ｗと特徴量Ｘを演算部２１に出力することによって演算指示を行う。
【００２０】
演算部２１は、演算指示に応じて、入力された重み量Ｗと特徴マップＸに対し演算を行い、中間演算結果Ｉｃをバッファ４１に出力する。演算部２１は、積和演算をする複数の演算素子Ｍを有する。
【００２１】
すなわち、演算部２１は、演算指示に応じ、演算を行い、中間演算結果Ｉｃをバッファ４１に出力する。
【００２２】
演算素子Ｍの各々は、入力された重み量Ｗの各々と特徴マップＸの各々を積算し、積算結果を合算し、中間演算結果Ｉｃを算出する。
【００２３】
格納領域指示部３１は、入力された演算種類及び出力先の情報に基づいて、中間演算結果Ｉｃを格納する領域Ｂを決定し、バッファ４１に領域Ｂを指示する。
【００２４】
すなわち、格納領域指示部３１は、演算種類に応じ、中間演算結果Ｉｃを格納するバッファ４１内の格納する領域Ｂの指示を行う。
【００２５】
バッファ４１は、中間演算結果Ｉｃを格納する領域Ｂを有する。バッファ４１は、格納領域指示部３１の指示の下、領域Ｂに格納された値に、中間演算結果Ｉｃの値を加算し、加算結果を再度、指定された領域Ｂに格納する。バッファ４１は、所定の演算が終了すると、格納領域指示部３１により指定された領域Ｂに格納された値を、演算結果Ｙとしてメモリ２に出力する。
【００２６】
制御部５１は、ネットワーク構成情報Ｓをメモリ２から読み込む。制御部５１は、ネットワーク構成情報Ｓに基づいて、演算指示部１１に演算種類と重み量識別情報を出力する。また、格納領域指示部３１に演算種類と、演算指示部１１から入力された出力先の情報とを出力する。
【００２７】
（畳み込み演算Ｃｖ）
図３〜図７を用い、演算システム１の畳み込み演算Ｃｖについて説明をする。図３〜図６は、第１の実施形態に係わる、演算システム１の畳み込み演算Ｃｖの一例を説明するための説明図である。
【００２８】
図３に示すように、畳み込み演算Ｃｖでは、ｍチャネルの特徴マップＸ１〜Ｘｍと、ｎセットの重み量Ｗ１〜Ｗｎとが演算部２１に入力される。１セットの重み量Ｗは、図４に示すように、ｘｙ座標で規定される２次元配列によって構成される。また、特徴マップＸは、図３に示すように、ｘｙｚ座標で規定される３次元配列によって構成される。特徴マップＸでは、ｚ方向がチャネル数を示す。
【００２９】
畳み込み演算Ｃｖでは、演算結果Ｙのセット数は、重み量Ｗのセット数に応じて決定される。また、領域Ｂの数は、１チャネル分の特徴マップＸの対応領域Ｃに応じて設定される。
【００３０】
畳み込み演算Ｃｖでは、重み量Ｗと、重み量Ｗに対応した対応領域Ｃの特徴マップＸとに基づいて、積和演算を行う。例えば、数式（１）には、重み量Ｗ１（図４）と、重み量Ｗ１に対応した対応領域Ｃの特徴マップＸ１（図５のハッチングされた領域）との積和演算が示される。積和演算によって算出された中間演算結果Ｉｃは、領域Ｂ１に格納される。行列Ｗ１は、重み量Ｗ１の行列であり、行列Ｘ１ａは、重み量Ｗ１に対応する対応領域Ｃの特徴マップＸである。ｗ１１〜ｗ３３は、重み量Ｗ１に含まれる値であり、ｘ１１〜ｘ５５は、特徴マップＸ１に含まれる値である。左辺の括弧内は、中間演算結果Ｉｃが格納される領域Ｂを示す。
Ic(B1)=w11×x11+w12×x12+・・・+w33×x33
=行列W1[w11,w12,・・・,w33]・行列X1a[x11,x12,・・・,x33]  ・・・（１）
続いて、対応領域Ｃをｘ方向に１つスライドし（図６のハッチングされた領域）、数式（２）に示すように、領域Ｂ２に格納される中間演算結果Ｉｃが算出される。
Ic(B2)=w11×x12+w12×x13+・・・w33×x34
=行列W1[w11,w12,・・・,w33]・行列X1a[x12,x13,・・・,x34]  ・・・（２）
すなわち、特徴マップＸ１内をｘｙ方向に走査して対応領域Ｃを読み込み、演算素子Ｍ１〜Ｍ９による重み量Ｗ１との演算を行い、領域Ｂ１〜Ｂ９に中間演算結果Ｉｃが格納される。特徴マップＸ１の演算が終了すると、特徴マップＸ２内をｘｙ方向に走査して対応領域Ｃを読み込み、重み量Ｗ１と演算を行う。同様に、特徴マップＸ３〜Ｘｍについても、重み量Ｗ１との演算を行い、中間演算結果Ｉｃは、領域Ｂ１〜Ｂ９に累積加算される。図７の例に示すように、演算結果Ｙ１は、重み量Ｗ１を用いた演算によって生成される。また、図８の例に示すように、演算結果Ｙｎは、重み量Ｗｎを用いた演算によって生成される。
【００３１】
なお、図５及び図６の例では、特徴マップＸ上のｘｙ方向の各々のスライド数は１であるが、スライド数は２以上であっても構わない。他の実施形態及び変形例においても同様である。
【００３２】
図７は、第１の実施形態に係わる、演算システム１の畳み込み演算Ｃｖの演算の一例を説明するためのフローチャートである。制御部５１は、畳み込み演算Ｃｖを開始するための制御信号を出力する（Ｓ１）。制御部５１は、メモリ２から読み込まれたネットワーク構成情報Ｓに基づいて、畳み込み演算Ｃｖを示す演算種類の情報と、重み量識別情報を演算指示部１１に出力する。
【００３３】
演算指示部１１は、メモリ２から重み量Ｗを読み込む（Ｔ１１）。図２の例では、重み量Ｗ１〜Ｗ４が読み込まれる。演算指示部１１は、メモリ２から特徴マップＸを読み込む（Ｔ１２）。
【００３４】
演算指示部１１は、出力先の演算素子Ｍを決定する（Ｔ１３）。具体的には、演算指示部１１は、重み量Ｗと特徴マップＸの出力先の演算素子Ｍを決定する。例えば、図５の例では、重み量ｗ１１〜ｗ３３と、特徴量ｘ１１〜ｘ３３の出力先として、演算素子Ｍ１が決定される。また、図６の例では、重み量ｗ１１〜ｗ３３と、特徴量ｘ１２〜ｘ３４の出力先として、演算素子Ｍ２が決定される。出力先の情報は、制御部５１を介して格納領域指示部３１に出力される（図９の破線）。
【００３５】
演算指示部１１は、重み量Ｗ及び特徴マップＸを出力する（Ｔ１４）。
【００３６】
演算指示部１１は、全チャネルの特徴マップＸの出力が終了しているか否かを判定する（Ｔ１５）。全チャネルの特徴マップＸの出力が終了していないとき（Ｔ１５−ＮＯ）、Ｔ１２に戻る。Ｔ１２〜Ｔ１５の処理を繰り返すことにより、特徴量出力部１３は、チャネル毎に分割してメモリ２から特徴マップＸを読み込む。例えば、繰り返しの１回目では、特徴マップＸ１の読み込みを行う。繰り返しのｍ回目では、特徴マップＸｍの読み込みを行う。
【００３７】
一方、全チャネルの特徴マップＸの出力が終了しているとき（Ｔ１５−ＹＥＳ）、演算指示部１１は、制御部５１を介してバッファ４１に、中間演算結果Ｉｃをメモリ２に出力するための制御信号を出力し、Ｔ１６に進む。
【００３８】
演算指示部１１は、全セットの重み量Ｗの出力が終了しているか否かを判定する（Ｔ１６）。全セットの重み量Ｗの出力が終了していないとき（Ｔ１６−ＮＯ）、Ｔ１１に戻る。一方、全セットの重み量Ｗの出力が終了しているとき（Ｔ１６−ＹＥＳ）、演算指示部１１は、制御部５１を介してバッファ４１に、全セットの重み量Ｗの出力が終了していることを示す制御信号を出力し、処理を終了する。
【００３９】
すなわち、演算指示部１１は、畳み込み演算Ｃｖにおいて、重み量Ｗに対応した特徴マップＸの対応領域Ｃの特徴量ｘをメモリ２から読み込む。より具体的には、演算指示部１１は、特徴マップＸ内をｘｙ方向に走査して特徴マップＸの読込みを行った後、ｚ方向にスライドし、次のｘｙ方向の走査を行う。
【００４０】
演算部２１では、演算素子Ｍによって、入力された重み量Ｗ及び特徴マップＸの積和演算を行い、中間演算結果Ｉｃをバッファ４１に出力する（Ｕ１１）。
【００４１】
格納領域指示部３１は、演算指示部１１から入力された出力先の情報に基づいて、中間演算結果Ｉｃを格納する領域Ｂを決定する（Ｖ１１）。すなわち、畳み込み演算Ｃｖでは、対応領域Ｃに応じ（ブロックごとに演算された結果）、中間演算結果Ｉｃの領域Ｂを決定する。バッファ４１は、決定された領域Ｂに、中間演算結果Ｉｃを加算して格納する（Ｖ１２）。
【００４２】
バッファ４１は、Ｔ１５において演算指示部１１から入力された制御信号に基づいて、中間演算結果Ｉｃをメモリ２に出力するか否かを判定する（Ｖ１３）。Ｖ１３−ＮＯのとき、Ｖ１１に戻る。一方、Ｖ１３−ＹＥＳのとき、バッファ４１は、中間演算結果Ｉｃをメモリ２に出力する（Ｖ１４）。メモリ２に出力した後、領域Ｂはクリアされる。すなわち、バッファ４１は、畳み込み演算Ｃｖにおいて、１セットの重み量Ｗに基づいた演算が終了すると、中間演算結果Ｉｃをメモリ２に出力する。
【００４３】
バッファ４１は、Ｔ１６において演算指示部１１から入力された制御信号に基づいて、全セットの重み量Ｗの出力が終了しているか否かを判定する（Ｖ１５）。バッファ４１は、全セットの重み量Ｗの出力が終了していないとき（Ｖ１５−ＮＯ）、Ｖ１１に戻る。一方、全セットの重み量Ｗの出力が終了しているとき（Ｖ１５−ＹＥＳ）、処理は終了する。
【００４４】
（全結合演算Ｆｃ）
演算システム１の全結合演算Ｆｃについて説明をする。図１０及び図１１は、第１の実施形態に係わる、演算システム１の全結合演算Ｆｃの一例を説明するための説明図である。
【００４５】
図１０に示すように、全結合演算Ｆｃでは、ｎチャネルの特徴マップｘ１〜ｘｎと、ｎセットの重み量Ｗ１〜Ｗｎとが用いられる。演算部２１は、演算素子Ｍ１〜Ｍｎによって演算を行い、中間演算結果Ｉｃをバッファ４１に出力する。バッファ４１は、中間演算結果Ｉｃを領域Ｂ１〜Ｂｎに格納する。
【００４６】
全結合演算Ｆｃでは、特徴マップＸのチャネル数、重み量Ｗのセット数、演算素子Ｍ及び領域Ｂの数は、同じである。全結合演算Ｆｃでは、領域Ｂ１〜Ｂｎに格納された中間演算結果Ｉｃを合計し、演算結果Ｙがメモリ２に出力される。
【００４７】
続いて、演算システム１の全結合演算Ｆｃの流れを説明する。
【００４８】
図１２は、第１の実施形態に係わる、演算システム１の全結合演算Ｆｃの一例を説明するためのフローチャートである。
【００４９】
制御部５１は、全結合演算Ｆｃを開始するための制御信号を出力する（Ｓ２）。制御部５１は、メモリ２から読み込まれたネットワーク構成情報Ｓに基づいて、全結合演算Ｆｃを示す演算種類の情報と、重み量識別情報を演算指示部１１に出力する。
【００５０】
演算指示部１１は、メモリ２から重み量Ｗを読み込む（Ｔ２１）。図２の順番３の例では、重み量出力部１２によって重み量Ｗ７〜Ｗ９がメモリ２から読み込まれる。例えば、重み量Ｗ７には重み量ｗ７１〜ｗ７ｎ、重み量Ｗ８には重み量ｗ８１〜ｗ８ｎ、重み量Ｗ９には重み量ｗ９１〜ｗ９ｎが含まれる。
【００５１】
演算指示部１１は、メモリ２から特徴マップＸを１チャネル分読み込む（Ｔ２２）。特徴マップＸには、特徴量ｘが含まれる。
【００５２】
演算指示部１１は、出力先の演算素子Ｍを決定する（Ｔ２３）。図１１に示すように、全結合演算Ｆｃでは、例えば、特徴量ｘ１を重み量ｗ１１〜ｗ１ｎの各々と積算し、中間演算結果Ｉｃを領域Ｂ１〜Ｂｎに格納する。次に、特徴量ｘ２を重み量ｗ２１〜ｗ２ｎの各々と積算し、中間演算結果Ｉｃを領域Ｂ１〜Ｂｎに加算する。この処理を特徴量ｘ１〜ｘｍまで繰り返し、領域Ｂ１〜Ｂｎを合計し、演算結果Ｙをメモリ２に出力する。
【００５３】
したがって、例えば、繰り返しの１回目では、演算指示部１１は、特徴量ｘ１と重み量ｗ７１の出力先を演算素子Ｍ１に決定し、特徴量ｘ１と重み量ｗ７２の出力先を演算素子Ｍ２に決定し、特徴量ｘ１と重み量ｗ７ｎの出力先を演算素子Ｍｎに決定する。繰り返しの２回目では、演算指示部１１は、特徴量ｘ２と重み量ｗ８１の出力先を演算素子Ｍ１に決定し、特徴量ｘ２と重み量ｗ８２の出力先を演算素子Ｍ２に決定し、特徴量ｘ２と重み量ｗ８ｎの出力先を演算素子Ｍｎに決定する。繰り返しの３回目では、演算指示部１１は、特徴量ｘ３と重み量ｗ９１の出力先を演算素子Ｍ１に決定し、特徴量ｘ３と重み量ｗ９２の出力先を演算素子Ｍ２に決定し、特徴量ｘ３と重み量ｗ９ｎの出力先を演算素子Ｍｎに決定する。出力先の情報は、制御部５１を介して格納領域指示部３１にも出力される。
【００５４】
演算指示部１１は、重み量Ｗと１チャネル分の特徴マップＸとを出力する（Ｔ２４）。
【００５５】
演算指示部１１は、全チャネルの特徴マップＸの出力が終了しているか否かを判定する（Ｔ２５）。全チャネルの特徴マップＸの出力が終了していないとき、処理はＴ２２に戻る。一方、全チャネルの特徴マップＸの出力が終了しているとき、制御部５１を介してバッファ４１に、中間演算結果Ｉｃをメモリ２に出力するための制御信号を出力し、処理は終了する。
【００５６】
Ｕ２１、Ｖ２１〜Ｖ２３の処理は、Ｕ１１、Ｖ１１〜Ｖ１３の処理と同じであるため、説明を省略する。
【００５７】
バッファ４１は、中間演算結果Ｉｃを合算してメモリ２に出力する（Ｖ２４）。すなわち、バッファ４１は、全結合演算Ｆｃにおいて、全チャネルの特徴マップＸ及び全セットの重み量Ｗに基づいた演算が終了すると、中間演算結果Ｉｃをメモリ２に出力する。
【００５８】
これにより、演算装置３では、演算種類に応じて演算部２１に対する重み量Ｗと特徴マップＸの出力を変え、演算部２１によって畳み込み演算Ｃｖ及び全結合演算Ｆｃの両方を行うことができる。また、演算装置３では、中間演算結果Ｉｃをバッファ４１に加算して格納する。したがって、演算装置３は、バッファ４１の領域Ｂを小さくすることができ、かつバッファ４１からメモリ２に出力する回数も抑えることができる。
【００５９】
第１の実施形態によれば、演算装置３は、複数種類の演算を行うことができ、かつ、メモリ２の読込み及び書込みの回数を抑え、電力消費を抑えることができる。
【００６０】
（第１の実施形態の変形例）
第１の実施形態では、演算装置３は、メモリ２から読み込まれた重み量Ｗ及び特徴マップＸの全てについて演算を行うが、重み量Ｗに０値が含まれるときに０値の演算を省略してもよい。本変形例の説明では、他の実施形態又は変形例と同じ構成については、説明を省略する。
【００６１】
図１３は、第２の実施形態に係わる、演算システム１の全結合演算Ｆｃの一例を説明するためのフローチャートである。本変形例では、演算装置３は、重み量圧縮部１２ａ及び特徴量圧縮部１３ａを有する（図１の２点鎖線）。
【００６２】
重み量圧縮部１２ａは、メモリ２から読み込まれた重み量Ｗに０値が含まれるとき、０値を削除し、重み量Ｗを圧縮し、重み量出力部１２に圧縮した重み量Ｗを出力する。また、重み量圧縮部１２ａは、重み量Ｗの圧縮位置情報を特徴量圧縮部１３ａに出力する。
【００６３】
特徴量圧縮部１３ａは、入力された圧縮位置情報に基づいて、重み量Ｗの圧縮位置にある特徴量ｘを削除して特徴量ｘを圧縮した特徴マップＸを特徴量出力部１３に出力する（Ｔ２２ａ）。
【００６４】
演算指示部１１は、圧縮位置情報及び出力先の演算素子Ｍに応じて出力先の情報を生成し、制御部５１を介して格納領域指示部３１に出力する。すなわち、重み量圧縮部１２ａは、重み量Ｗに含まれる０値を削除することによって重み量Ｗを圧縮し、圧縮位置情報を出力する。また、特徴量圧縮部１３ａは、圧縮位置情報に応じて特徴マップＸに含まれる値を削除することによって特徴マップＸを圧縮する。これにより、演算装置３では、演算量を抑えることができる。
【００６５】
（第２の実施形態）
第１の実施形態及び変形例では、演算指示部１１は、畳み込み演算Ｃｖにおいて、特徴マップＸ内におけるｘｙ方向の走査を行った後、ｚ方向にスライドし、次のｘｙ方向の走査を行うように構成されるが、ｚ方向に走査を行った後、ｘ方向又はｙ方向のいずれか一方向にスライドし、次のｚ方向の走査を行うように構成しても構わない。本実施形態の説明では、他の実施形態又は変形例と同じ構成については、説明を省略する。
【００６６】
例えば、演算装置３は、ｚ方向の走査により、順次、中間演算結果Ｉｃを領域Ｂ１に加算して格納し、ｚ方向の走査を行った後、中間演算結果Ｉｃを領域Ｂ１からメモリ２に出力し、領域Ｂ１をクリアする。続いて、ｘ方向にスライドし、次のｚ方向の走査により、順次、中間演算結果Ｉｃを領域Ｂ１に加算して格納する。これにより、演算装置３では、領域Ｂをより小さくすることができる。
【００６７】
（第２の実施形態の変形例）
第１、第２の実施形態及び第１の実施形態の変形例では、演算種類は、畳み込み演算Ｃｖ及び全結合演算Ｆｃによって構成されるが、走査方向の異なる演算によって構成されても構わない。本変形例の説明では、他の実施形態又は変形例と同じ構成については、説明を省略する。
【００６８】
例えば、第１演算がｘｙ方向に走査を行った後、ｚ方向にスライドし、次のｘｙ方向の走査をして特徴マップＸを読み込むことによって行われる畳み込み演算Ｃｖであり、第２演算がｚ方向に走査を行った後、ｘ方向又はｙ方向にスライドし、次のｚ方向を走査して特徴マップＸを読み込むことによって行われる畳み込み演算Ｃｖであっても構わない。
【００６９】
第１演算では、ｘｙ方向に走査を行うことにより、例えば、図５及び図６において重複した領域ｘ１２、ｘ１３、ｘ２２、ｘ２３、ｘ３２、ｘ３３のように、重複して複数回読み込む領域を１回だけ読み込むように構成してもよい。再利用して複数の演算に使用することにより、読込み量を抑えることができる。一方、第２演算では、ｚ方向に走査を行うことにより、領域Ｂの使用量を抑えることができる。
【００７０】
これにより、演算装置３は、特徴マップＸに応じ、メモリ２の読込み量を抑えるときには第１演算を行い、領域Ｂの使用量を抑えるときには第２演算を行うことができる。
【００７１】
（第３の実施形態）
続いて、第３の実施形態について、説明をする。本実施形態の説明では、他の実施形態又は変形例と同じ構成については、説明を省略する。
【００７２】
図１４は、第３の実施形態に係わる、演算システム１の構成の一例を示すブロック図である。
【００７３】
図１４に示すように、メモリ２には、ネットワーク構成情報Ｓ、重み行列Ｗ及び特徴マップＸが記憶される。ネットワーク構成情報Ｓは、重み行列Ｗの識別情報である重み行列識別情報を有する。重み行列Ｗは、重み行列の全部又は一部を示す。
【００７４】
図１５は、第３の実施形態に係わる、演算システム１の演算順序の一例を説明するための表である。
【００７５】
図１５に示すように、順番１では、演算装置３は、予め設定された特徴マップＸと、重み行列識別情報に応じた重み行列Ｗ１ｘ、Ｗ２ｘ、Ｗ３ｘ、Ｗ４ｘとをメモリ２から読み込み、畳み込み演算Ｃｖを行い、演算結果Ｙをメモリ２に書き込む。続いて、順番２では、順番１の演算結果Ｙをメモリ２から読み込み、メモリ２から読み込んだ重み行列Ｗ５ｘ、Ｗ６ｘと、畳み込み演算Ｃｖを行う。続いて、順番３では、順番２においてメモリ２に書き込まれた演算結果Ｙを特徴マップＸとしてメモリ２から読み込み、重み行列Ｗ７ｘ、Ｗ８ｘ、Ｗ９ｘもメモリ２から読み込み、全結合演算Ｆｃを行い、最終出力である演算結果Ｙをメモリ２に書き込む。
【００７６】
演算指示部１１は、制御部５１から入力された演算種類及び重み量識別情報に応じ、重み行列Ｗと特徴マップＸをメモリ２から読み込み、読み込まれた重み行列Ｗと特徴マップＸを演算部２１に出力することによって、第１演算または第２演算いずれかの演算指示を行う。
【００７７】
演算部２１は、演算指示に応じて、入力された重み行列Ｗと特徴マップＸに対し、演算素子Ｍによって演算を行い、中間演算結果Ｉｃをバッファ４１に出力する。
【００７８】
格納領域指示部３１は、入力された演算種類及び出力先の情報に基づいて、中間演算結果Ｉｃを格納する領域Ｂを決定し、バッファ４１に領域Ｂを指示する。
【００７９】
バッファ４１は、格納領域指示部３１の指示の下、領域Ｂに格納された値に、中間演算結果Ｉｃの値を加算し、加算結果を再度、指定された領域Ｂに格納する。バッファ４１は、所定の演算が終了すると、格納領域指示部３１により指定された領域Ｂに格納された値を、演算結果Ｙとしてメモリ２に出力する。
【００８０】
制御部５１は、メモリ２から読み込んだネットワーク構成情報Ｓに基づいて、演算指示部１１に演算種類と重み行列識別情報を出力する。また、格納領域指示部３１に、演算種類と、演算指示部１１から入力された出力先の情報とを出力する。
【００８１】
なお、実施形態では、演算装置３の電力消費を抑えることができるように、バッファ４１は、メモリ２よりもアクセス時の電力消費量が小さくなるように構成される。例えば、メモリ２がオフチップのＤＲＡＭによって構成されるとき、バッファ４１は、オンチップのＳＲＡＭ又はレジスタのいずれかによって構成される。また、メモリ２がオンチップのＤＲＡＭによって構成されるとき、バッファ４１はオンチップのＳＲＡＭ又はレジスタのいずれかによって構成される。また、メモリ２がオンチップのＳＲＡＭによって構成されるとき、バッファ４１は、レジスタによって構成される。
【００８２】
（畳み込み演算Ｃｖ）
図１６〜図１８は、第３の実施形態に係わる、演算システム１の畳み込み演算Ｃｖの一例を説明するための説明図である。
【００８３】
図１６に示すように、畳み込み演算Ｃｖでは、特徴マップＸと重み行列Ｗが、演算部２１に入力される。
【００８４】
畳み込み演算Ｃｖの特徴マップＸは、３次元のｘｙｚ座標によって規定され、ｚ方向がチャネル数ｍを示し、ｙ方向が行数ｈを示し、ｘ方向が列数ｗを示す。
【００８５】
畳み込み演算Ｃｖの重み行列Ｗは、４次元のｘｙｚｕ座標によって規定され、ｕ方向がセット数ｎを示し、ｚ方向がチャネル数ｍを示し、ｙ方向が行数ｈを示し、ｘ方向が列数ｗを示す。重み行列Ｗのチャネル数ｍは、特徴マップＸのチャネル数ｍと同じである。重み行列Ｗの行数ｈ及び列数ｗは、特徴マップＸの行数ｈ及び列数ｗと同じでなくてもよい。
【００８６】
畳み込み演算Ｃｖの中間演算結果Ｉｃは、４次元のｘｙｚｕ座標によって規定され、ｕ方向がセット数ｎを示し、ｚ方向がチャネル数ｍを示し、ｙ方向が行数ｈを示し、ｘ方向が列数ｗを示す。
【００８７】
畳み込み演算Ｃｖの演算結果Ｙは、３次元のｘｙｕ座標によって規定され、ｕ方向がチャネル数ｎを示し、ｙ方向が行数ｈを示し、ｘ方向が列数ｗを示す。演算結果Ｙのチャネル数ｎは、重み行列Ｗのセット数ｎと同じである。行数ｈ及び列数ｗのサイズは、重み行列Ｗのスライド数と、特徴マップＸの行数ｈ及び列数ｗに応じて決定される。
【００８８】
実施形態及び変形例の説明では、特徴マップＸ（ｚ，ｙ，ｘ）、重み行列Ｗ（ｕ，ｚ，ｙ，ｘ）、中間演算結果Ｉｃ（ｕ，ｚ，ｙ，ｘ）、及び、演算結果Ｙ（ｕ，ｙ，ｘ）は、括弧内に示された座標によって各軸方向の要素を示す。例えば、特徴マップＸ（１，２，３）であれば、特徴マップＸの第１チャネル（ｚ＝１）、第２行（ｙ＝２）、第３列（ｘ＝３）をの要素を示す。
【００８９】
領域Ｂの数は、特徴マップＸのチャネル内に設けられる対応領域Ｃの数に応じて決定される。
【００９０】
演算部２１は、特徴マップＸにおけるチャネル（ｚ座標）に応じた２次元行列（ｙ，ｘ座標）と、重み行列Ｗにおけるセット（ｕ座標）及びチャネル（ｚ座標）に応じた２次元行列（ｙ，ｘ座標）とに基づいて畳み込み演算Ｃｖを行い、中間演算結果Ｉｃ（ｕ，ｚ，ｙ，ｘ）を算出する。続いて、演算部２１は、中間演算結果Ｉｃ（ｕ，ｚ，ｙ，ｘ）の要素和をｚ方向に取り、演算結果Ｙ（ｕ，ｙ，ｘ）を算出する。
【００９１】
数式（３）の例では、第１セット且つ第１チャネルにおける３行３列の重み行列Ｗ（１，１，１〜３，１〜３）と、第１チャネルの特徴マップＸ（１，１〜３，１〜３）との畳み込み演算Ｃｖが行われ、第１セット、第１チャネル、第１行、第１列の中間演算結果Ｉｃ（１，１，１，１）が算出される。図１７に示すように、算出された中間演算結果Ｉｃ（１，１，１，１）は、領域Ｂ１に格納される。
Ic(1,1,1,1)=W(1,1,1,1)×X(1,1,1)+W(1,1,1,2)×X(1,1,2)+W(1,1,1,3)×X(1,1,3)+W(1,1,2,1)×X(1,2,1)+・・・+W(1,1,3,3)×X(1,3,3)  ・・・（３）
数式（４）は、特徴マップＸの対応領域Ｃをｘ方向に１つスライドさせた例を示す。数式（４）の例では、重み行列Ｗ（１，１，１〜３，１〜３）と特徴マップＸ（１，２〜４，２〜４）の畳み込み演算Ｃｖが行われ、第１セット、第１チャネル、第１行、及び、第２列の中間演算結果Ｉｃ（１，１，１，２）が算出される。算出された中間演算結果Ｉｃ（１，１，１，２）は、領域Ｂ２に格納される。
Ic(1,1,1,2)=W(1,1,1,1)×X(1,1,2)+W(1,1,1,2)×X(1,1,3)+W(1,1,1,3)×X(1,1,4)
+W(1,1,2,1)×X(1,2,2)+・・・+W(1,1,3,3)×X(1,3,4)  ・・・（４）
図１７に示すように、演算部２１は、特徴マップＸ内をｘｙ方向に走査し、中間演算結果Ｉｃ（ｕ＝１，ｚ＝１，ｙ＝１〜ｈ，ｘ＝１〜ｗ）を算出し、ｘｙ座標に応じた領域Ｂ１〜Ｂｋのいずれかに中間演算結果Ｉｃを格納する。
【００９２】
続いて、演算部２１は、特徴マップＸ内をｚ方向にスライドした後、ｘｙ方向に走査し、中間演算結果Ｉｃ（１，２，１〜ｈ，１〜ｗ）を算出し、ｘｙ座標に応じた領域Ｂ１〜Ｂｋのいずれかに中間演算結果Ｉｃを累積加算して格納する。
【００９３】
チャネル数ｍの特徴マップＸの中間演算結果Ｉｃを領域Ｂ１〜Ｂｋに累積加算することによって中間演算結果Ｉｃのｚ方向の要素和が算出され、次の数式（５）〜（７）の例に示すように、１チャネル分の演算結果Ｙ（ｕ＝１，ｙ＝１〜ｈ，ｘ＝１〜ｗ）が算出される。
Y(1,1,1)={Ic(1,1,1,1)+Ic(1,2,1,1)+・・・+(1,m,1,1)}  ・・・（５）
Y(1,1,2)={Ic(1,1,1,2)+Ic(1,2,1,2)+・・・+(1,m,1,2)}  ・・・（６）
Y(1,h,w)={Ic(1,1,h,w)+Ic(1,2,h,w)+・・・+(1,m,h,w)}  ・・・（７）
図１７の例では、領域Ｂ１に演算結果Ｙ（１，１，１）が生成され、領域Ｂ２に演算結果Ｙ（１，１，２）が生成され、領域Ｂｋに演算結果Ｙ（１，ｈ，ｗ）が生成される。
【００９４】
１チャネル分の演算結果Ｙ（１，１〜ｈ，１〜ｗ）を算出した後、第２セットの重み行列Ｗ（２，１〜ｍ，１〜ｈ，１〜ｗ）と特徴マップＸ（１〜ｍ，１〜ｈ，１〜ｗ）に基づいて、演算を行い、演算結果Ｙ（２，１〜ｈ，１〜ｗ）を算出する。
【００９５】
重み行列Ｗをｕ方向にセット１〜ｎまでスライドさせ、図１８に示すように、第ｎチャネルの演算結果Ｙ（ｎ，１〜ｈ，１〜ｗ）が算出されるまで演算を繰り返すと、演算結果Ｙ（１〜ｎ，１〜ｈ，１〜ｗ）が算出される。
【００９６】
図１９は、第３の実施形態に係わる、演算システム１の畳み込み演算Ｃｖの演算の一例を説明するためのフローチャートである。
【００９７】
制御部５１は、畳み込み演算Ｃｖを開始するための制御信号を出力する（Ｓ３）。制御部５１は、メモリ２から読み込まれたネットワーク構成情報Ｓに基づいて、畳み込み演算Ｃｖを示す演算種類の情報と、重み行列識別情報を演算指示部１１に出力する。
【００９８】
演算指示部１１は、メモリ２から重み行列Ｗを１セット読み込む（Ｔ３１）。
【００９９】
演算指示部１１は、メモリ２から特徴マップＸを１チャネル読み込む（Ｔ３２）。
【０１００】
演算指示部１１は、演算素子Ｍの各々の出力データを決定する（Ｔ３３）。具体的には、演算指示部１１は、演算において使用する重み行列Ｗ（ｕ，ｚ，１〜ｈ，１〜ｗ）と、現在のスライド位置から重み行列Ｗの２次元行列と同じサイズのマップを特徴マップＸから抽出し、演算素子Ｍの出力データに決定する。例えば、演算指示部１１は、重み行列Ｗ（１，１，１〜３，１〜３）と特徴マップＸ（１，１〜３，１〜３）を演算素子Ｍ１の出力データに決定する。また、演算指示部１１は、ｘ方向へ例えば１つスライドした、重み行列Ｗ（１，１，１〜３，１〜３）と特徴マップＸ（１，２〜４，２〜４）を演算素子Ｍ２の出力データに決定する。出力データの出力先の情報は、制御部５１を介して格納領域指示部３１に出力される。
【０１０１】
演算指示部１１は、演算素子Ｍの各々に出力データを出力する（Ｔ３４）。
【０１０２】
演算指示部１１は、特徴マップＸの全チャネルの出力が終了しているか否かを判定する（Ｔ３５）。特徴マップＸの全チャネルの出力が終了していないとき（Ｔ３５−ＮＯ）、Ｔ３２に戻り、特徴マップＸの処理対象のチャネルをｚ方向へ１進める。Ｔ３２〜Ｔ３５の処理を繰り返すことにより、特徴量出力部１３は、チャネル毎にメモリ２から特徴マップＸを読み込む。例えば、繰り返しの１回目では、特徴マップＸ（１，１〜ｈ，１〜ｗ）の読み込みを行う。繰り返しのｍ回目では、特徴マップＸ（ｍ，１〜ｈ，１〜ｗ）の読み込みを行う。一方、特徴マップＸの全チャネルの出力が終了しているとき（Ｔ３５−ＹＥＳ）、演算指示部１１は、制御部５１を介し、中間演算結果Ｉｃをメモリ２に出力するための制御信号をバッファ４１に出力し、Ｔ３６に進む。
【０１０３】
演算指示部１１は、重み行列Ｗの全セットの出力が終了しているか否かを判定する（Ｔ３６）。重み行列Ｗの全セットの出力が終了していないとき（Ｔ３６−ＮＯ）、Ｔ３１に戻り、重み行列Ｗの処理対象のセットをｕ方向にスライドさせる。一方、重み行列Ｗの全セットの出力が終了しているとき（Ｔ３６−ＹＥＳ）、演算指示部１１は、制御部５１を介してバッファ４１に、重み行列Ｗの全セットの出力を終了していることを示す制御信号を出力し、処理を終了する。
【０１０４】
すなわち、演算指示部１１は、畳み込み演算Ｃｖにおいて、処理中のセット及びチャネルに応じた重み行列Ｗ（ｕ，ｚ，１〜ｈ，１〜ｗ）と、処理中のスライド位置に対応する特徴マップＸの対応領域Ｃをメモリ２から読み込む。より具体的には、演算指示部１１は、特徴マップＸ内をｘｙ方向に走査して特徴マップＸの読込みを行った後、ｚ方向にスライドさせて次の特徴マップＸのｘｙ方向の走査を行う。そして、演算指示部１１は、ｚ方向のスライドが完了した後、重み量Ｗをｕ方向にスライドさせて次の特徴マップＸのｘｙ方向の走査を行う。
【０１０５】
演算部２１では、演算素子Ｍによって、入力された重み行列Ｗ及び特徴マップＸの積和演算を行い、中間演算結果Ｉｃをバッファ４１に出力する（Ｕ３１）。
【０１０６】
格納領域指示部３１は、演算指示部１１から入力された出力データの出力先の情報に基づいて、中間演算結果Ｉｃを格納する領域Ｂを決定する（Ｖ３１）。すなわち、畳み込み演算Ｃｖでは、対応領域Ｃに応じ（ブロックごとに演算された結果）、中間演算結果Ｉｃの領域Ｂを決定する。
【０１０７】
バッファ４１は、決定された領域Ｂに、中間演算結果Ｉｃを加算して格納する（Ｖ３２）。
【０１０８】
バッファ４１は、Ｔ３５において演算指示部１１から入力された制御信号に基づいて、中間演算結果Ｉｃをメモリ２に出力するか否かを判定する（Ｖ３３）。Ｖ３３−ＮＯのとき、Ｖ３１に戻る。一方、Ｖ３３−ＹＥＳのとき、処理はＶ３４に進む。
【０１０９】
バッファ４１は、中間演算結果Ｉｃをメモリ２に出力する（Ｖ３４）。メモリ２に出力した後、領域Ｂはクリアされる。すなわち、バッファ４１は、畳み込み演算Ｃｖにおいて、ｚ方向の処理が完了すると、中間演算結果Ｉｃに基づく領域Ｂに格納された演算結果Ｙの処理チャネルのデータをメモリ２に出力する。
【０１１０】
バッファ４１は、Ｔ３６において演算指示部１１から入力された制御信号に基づいて、重み行列Ｗの全セットの出力が終了しているか否かを判定する（Ｖ３５）。バッファ４１は、重み行列Ｗの全セットの出力が終了していないとき（Ｖ３５−ＮＯ）、Ｖ３１に戻る。一方、重み行列Ｗの全セットの出力が終了しているとき（Ｖ３５−ＹＥＳ）、処理は終了する。
【０１１１】
（全結合演算Ｆｃ）
演算システム１の全結合演算Ｆｃについて説明をする。図２０及び図２１は、第３の実施形態に係わる、演算システム１の全結合演算Ｆｃの一例を説明するための説明図である。
【０１１２】
全結合演算Ｆｃでは、チャネル数Ｎの１次元データである特徴マップＸと、行数Ｎ、列数Ｍの２次元データである重み行列Ｗとを使用する。全結合演算Ｆｃでは、特徴マップＸのチャネル数Ｎは、重み行列Ｗの行数Ｎと同じである。
【０１１３】
全結合演算Ｆｃでは、次の数式（８）によって表せる演算結果Ｙ（１）〜Ｙ（Ｍ）が出力される。なお、全結合演算Ｆｃでは、演算結果Ｙ（１）〜Ｙ（Ｍ）の合計値が、演算結果Ｙとして出力されても構わない。
【数式１】
【０１１４】
2019061641.tif 000003
【０１１５】
図２０に示すように、全結合演算Ｆｃでは、Ｎチャネルの特徴マップＸ（１）〜Ｘ（Ｎ）と、行数Ｎ、列数Ｍによって構成された重み行列Ｗ（１〜Ｎ，１〜Ｍ）とが用いられる。演算部２１は、演算素子Ｍ１〜Ｍｋによって演算を行い、中間演算結果Ｉｃをバッファ４１に出力する。バッファ４１は、中間演算結果Ｉｃを領域Ｂ１〜Ｂｋに格納する。
【０１１６】
続いて、演算システム１の全結合演算Ｆｃの流れを説明する。
【０１１７】
図２１は、第３の実施形態に係わる、演算システム１の全結合演算Ｆｃの一例を説明するためのフローチャートである。図２１は、第３の実施形態に係わる、演算システム１の全結合演算Ｆｃの一例を説明するための図である。
【０１１８】
制御部５１は、全結合演算Ｆｃを開始するための制御信号を出力する（Ｓ４）。制御部５１は、メモリ２から読み込まれたネットワーク構成情報Ｓに基づいて、全結合演算Ｆｃを示す演算種類の情報と、重み行列識別情報を演算指示部１１に出力する。
【０１１９】
演算指示部１１は、メモリ２から特徴マップＸを読み込む（Ｔ４１）。演算指示部１１は、現在のチャネルカウンタｎに応じ、メモリ２からチャネルカウンタｎに応じた特徴マップＸ（ｎ）の値を読み込む。チャネルカウンタｎは、Ｔ４１からＴ４６のループによってカウントされる。
【０１２０】
演算指示部１１は、メモリ２から重み行列Ｗを読み込む（Ｔ４２）。演算指示部１１は、メモリ２から重み行列Ｗの現在のセットカウンタｍに応じ、重み行列Ｗ（Ｎ，ｍ）〜Ｗ（Ｎ，ｍ＋所定の演算素子数）を読み込む。所定の演算素子数は、予め設定される全結合演算Ｆｃに使用される演算素子Ｍの数である。セットカウンタｍは、Ｔ４２からＴ４５のループによってカウントされる。
【０１２１】
演算指示部１１は、演算素子Ｍの出力の格納先を決定する（Ｔ４３）。図２２に示すように、全結合演算Ｆｃでは、チャネルカウンタｎ（ｎ＝１〜Ｎ）に応じ、重み行列Ｗ（ｎ，ｍ＋所定の演算素子数）の各々と特徴マップＸ（ｎ）を乗算し、中間演算結果Ｉｃ（ｎ，ｍ＋所定の演算素子数）の各々をバッファ４１の領域Ｂ１〜Ｂｋに累積加算する。中間演算結果Ｉｃ（ｎ，ｍ＋所定の演算素子数）を格納する領域Ｂ１〜Ｂｋの各々は、重み行列Ｗの列数１〜Ｍの各々に応じて決定される。
【０１２２】
演算指示部１１は、特徴マップＸ（ｎ）と重み行列Ｗ（ｎ，ｍ＋所定の演算素子数）を演算素子Ｍの各々に出力する（Ｔ４４）。
【０１２３】
演算指示部１１は、重み行列Ｗ内の処理対象の要素セットの出力が終了しているか否かを判定する（Ｔ４５）。セットカウンタｍが、列数Ｍ以上であるとき、演算指示部１１は、処理対象の要素セットである重み行列Ｗ（ｎ，１〜Ｍ）の出力が終了したと判定する。重み行列Ｗ（ｎ，１〜Ｍ）の出力が終了していないとき、セットカウンタｍに所定の演算素子数を加算し、処理はＴ４２に戻る。一方、処理対象の重み行列Ｗ（ｎ，１〜Ｍ）の出力が終了しているとき、処理はＴ４６に進む。
【０１２４】
特徴マップＸの全チャネルの出力が終了しているか否かを判定する（Ｔ４６）。演算指示部１１はチャネルカウンタｎが行数Ｎ以上であるとき、特徴マップＸの全チャネルの出力が終了していると判定する。特徴マップＸの全チャネルの出力が終了していないとき、チャネルカウンタｎを１インクリメントし、処理はＴ４１に戻る。特徴マップＸの全チャネルの出力が終了しているとき、演算指示部１１は、制御部５１を介し、中間演算結果Ｉｃをメモリ２に出力するための制御信号をバッファ４１に出力し、処理は終了する。
【０１２５】
Ｕ４１、Ｖ４１〜Ｖ４３の処理は、Ｕ３１、Ｖ３１〜Ｖ３３の処理と同じであるため、説明を省略する。
【０１２６】
バッファ４１は、中間演算結果Ｉｃを合算してメモリ２に出力する（Ｖ４４）。すなわち、バッファ４１は、全結合演算Ｆｃにおいて、特徴マップＸの全チャネルに基づいた演算が終了すると、中間演算結果Ｉｃをメモリ２に出力する。
【０１２７】
演算装置３では、演算種類に応じ、演算指示部１１における重み行列Ｗと特徴マップＸの読み込み方法と、バッファ４１における演算結果Ｙを格納する領域Ｂの各々を変更する。例えば、畳み込み演算Ｃｖでは、特徴マップＸのｘｙ座標に応じ、領域Ｂ１〜Ｂｋの各々が決定される。また、全結合演算Ｆｃでは、重み行列Ｗの列数１〜Ｍに応じ、領域Ｂ１〜Ｂｋの各々が決定される。
【０１２８】
より具体的には、畳み込み演算Ｃｖでは、演算指示部１１は、重み行列Ｗと、特徴マップＸ内における重み行列Ｗに対応付けられた対応領域Ｃとを演算部２１に出力し、特徴マップＸ内における対応領域Ｃのｘｙ座標に応じて中間演算結果Ｉｃを格納するバッファ４１内の領域Ｂを決定し、領域Ｂを格納領域指示部３１に指示する。
【０１２９】
また、全結合演算Ｆｃでは、演算指示部１１は、特徴マップＸと、重み行列Ｗ内における特徴マップＸに対応付けられた要素セットとを演算部２１に出力し、重み行列Ｗ内における要素セットに応じて中間演算結果Ｉｃを格納するバッファ４１内の領域Ｂを決定し、領域Ｂを格納領域指示部３１に指示する。
【０１３０】
これにより、畳み込み演算Ｃｖ及び全結合演算Ｆｃの両演算において、中間演算結果Ｉｃをメモリ２に書き込むことなく演算可能である。また、両演算の各々に専用のバッファ４１を設けた場合よりも少ないバッファ４１量によって両演算を実行可能である。
【０１３１】
第３の実施形態によれば、演算装置３では、複数種類の演算が同一のバッファ４１で実現され、かつ、メモリ２への中間演算結果Ｉｃの退避がなく、読込み及び書込みの回数が抑えられ、電力消費が抑えられる。
【０１３２】
（第３の実施形態の変形例）
第３の実施形態では、演算装置３は、メモリ２から読み込まれた重み行列Ｗ及び特徴マップＸの全てについて演算を行うが、重み行列Ｗに０値が含まれるときに０値の演算を省略してもよい。本変形例の説明では、実施形態と同じ構成については、説明を省略する。
【０１３３】
本変形例では、演算装置３は、重み行列圧縮部１２ａ及び特徴量圧縮部１３ａを有する（図１４の２点鎖線）。
【０１３４】
重み行列圧縮部１２ａは、メモリ２から読み込まれた重み行列Ｗに０値が含まれるとき、０値を削除し、重み行列Ｗを圧縮し、重み行列出力部１２に圧縮した重み行列Ｗを出力する。また、重み行列圧縮部１２ａは、重み行列Ｗの圧縮位置情報を特徴量圧縮部１３ａに出力する。
【０１３５】
特徴量圧縮部１３ａは、入力された圧縮位置情報に基づいて、重み行列Ｗの圧縮位置にある要素を削除して圧縮した特徴マップＸを特徴量出力部１３に出力する。
【０１３６】
演算指示部１１は、圧縮位置情報及び出力先の演算素子Ｍに応じて出力先の情報を算出し、制御部５１を介して格納領域指示部３１に出力する。すなわち、重み行列圧縮部１２ａは、重み行列Ｗに含まれる０値を削除することによって重み行列Ｗを圧縮し、圧縮位置情報を出力する。また、特徴量圧縮部１３ａは、圧縮位置情報に応じて特徴マップＸに含まれる値を削除することによって特徴マップＸを圧縮する。これにより、演算装置３では、演算量を抑えることができる。
【０１３７】
（第４の実施形態）
実施形態及び変形例では、演算指示部１１は、畳み込み演算Ｃｖにおいて、特徴マップＸ内におけるｘｙ方向の走査を行った後、ｚ方向にスライドし、次のｘｙ方向の走査を行うように構成されるが、ｚ方向に走査を行った後、ｘ方向又はｙ方向のいずれか一方向にスライドし、次のｚ方向の走査を行うように構成しても構わない。本実施形態の説明では、他の実施形態又は変形例と同じ構成については、説明を省略する。
【０１３８】
例えば、演算装置３は、ｚ方向の走査により、順次、中間演算結果Ｉｃをバッファ４１に加算して格納し、ｚ方向の走査を行った後、中間演算結果Ｉｃをバッファ４１からメモリ２に出力する。続いて、ｘ方向にスライドし、次のｚ方向の走査により、順次、中間演算結果Ｉｃをバッファ４１に加算して格納する。このときのバッファ４１の中間演算結果Ｉｃの格納先は、演算素子Ｍ毎に予め設定される。これにより、演算装置３では、ｘｙ座標分の領域Ｂをバッファ４１上に設けなくても、ｚ座標分の領域Ｂによって演算可能であり、より少ないバッファ４１量によって演算可能である。
【０１３９】
（第４の実施形態の変形例）
実施形態及び変形例では、演算種類は、畳み込み演算Ｃｖ及び全結合演算Ｆｃによって構成されるが、走査方向の異なる演算によって構成されても構わない。本変形例の説明では、他の実施形態又は変形例と同じ構成については、説明を省略する。
【０１４０】
例えば、第１の畳み込み演算Ｃｖでは、ｘｙ方向に走査を行った後、ｚ方向にスライドし、次のｘｙ方向の走査をして特徴マップＸを読み込むことによって行われる畳み込み演算Ｃｖであり、また、第２の畳み込み演算Ｃｖでは、ｚ方向に走査を行った後、ｘ方向又はｙ方向にスライドし、次のｚ方向を走査して特徴マップＸを読み込むことによって行われる畳み込み演算Ｃｖであっても構わない。
【０１４１】
なお、第１演算では、ｘｙ方向に走査を行うことにより、例えば、特徴マップＸ（１，１，２〜５）等、ｘ方向にスライドするとき、ｘ方向に連続する要素を１回だけ読み込むように構成し、スライド毎に繰り返してメモリ２から読み込むことなく、特徴マップＸの再利用によって読込み量を抑えることができる。一方、第２演算では、ｚ方向に走査を行うことにより、バッファ４１における使用する領域Ｂを抑えることができる。
【０１４２】
これにより、演算装置３は、特徴マップＸに応じ、メモリ２の読込み量を抑えるときにはｘｙｚの走査方向の順序で走査し、バッファ４１における使用する領域Ｂを抑えるときにはｚｘｙの走査方向の順序で走査を行うことができる。
【０１４３】
なお、実施形態の変形例では、制御部５１が、ネットワーク構成情報Ｓに基づいて、演算指示部１１に演算種類を出力するが、メモリ２から読み込まれた特徴マップＸを検出し、走査方向の順序を行うか判定し、演算指示部１１に演算種類を出力するように構成しても構わない。
【０１４４】
本発明の実施形態を説明したが、これらの実施形態は、例として示したものであり、本発明の範囲を限定することは意図していない。これら新規の実施形態は、その他の様々な形態で実施されることが可能であり、発明の要旨を逸脱しない範囲で、種々の省略、置き換え、変更を行うことができる。これら実施形態やその変形は、発明の範囲や要旨に含まれるとともに、特許請求の範囲に記載された発明とその均等の範囲に含まれる。
【符号の説明】
【０１４５】
１  演算システム、２  メモリ、３  演算装置、１１  演算指示部、１２  重み量出力部、１３  特徴量出力部、２１  演算部、１２ａ  重み量圧縮部、１３ａ  特徴量圧縮部、３１  格納領域指示部、４１  バッファ、５１  制御部、Ｂ  領域、Ｃ  対応領域、Ｃｖ  畳み込み演算、Ｆｃ  全結合演算、Ｉｃ  中間演算結果、Ｍ  演算素子、Ｓ  ネットワーク構成情報、Ｗ  重み量、Ｘ  特徴マップ、Ｙ  演算結果
【図１】
2019061641.tif 000004
【図２】
2019061641.tif 000005
【図３】
2019061641.tif 000006
【図４】
2019061641.tif 000007
【図５】
2019061641.tif 000008
【図６】
2019061641.tif 000009
【図７】
2019061641.tif 000010
【図８】
2019061641.tif 000011
【図９】
2019061641.tif 000012
【図１０】
2019061641.tif 000013
【図１１】
2019061641.tif 000014
【図１２】
2019061641.tif 000015
【図１３】
2019061641.tif 000016
【図１４】
2019061641.tif 000017
【図１５】
2019061641.tif 000018
【図１６】
2019061641.tif 000019
【図１７】
2019061641.tif 000020
【図１８】
2019061641.tif 000021
【図１９】
2019061641.tif 000022
【図２０】
2019061641.tif 000023
【図２１】
2019061641.tif 000024
【図２２】
2019061641.tif 000025