(57)【要約】 【課題】  データ処理の効率化を図る。【解決手段】  実施形態の畳み込みニューラルネットワークの層において畳み込み演算処理を行なう情報処理装置であって、入力、前記入力に対する重み、及び前記重みのフィルタ毎に決定されたビット幅に関する情報を記憶するメモリ２０１と、前記メモリに記憶された入力、前記入力に対する重み、及び前記重みのフィルタ毎に決定されたビット幅に関する情報に基づいて、積和演算処理を実行する積和演算回路２０２ａとを具備する。【選択図】図１
2020013455.tif 000002
【特許請求の範囲】
【請求項１】
畳み込みニューラルネットワークの層において畳み込み演算処理を行なう情報処理装置であって、
入力、前記入力に対する重み、及び前記重みのフィルタ毎に決定されたビット幅に関する情報を記憶するメモリと、
前記メモリに記憶された入力、前記入力に対する重み、及び前記重みのフィルタ毎に決定されたビット幅に関する情報に基づいて、積和演算処理を実行する積和演算回路と、を具備する、
情報処理装置。
【請求項２】
前記重みのフィルタ毎に決定されたビット幅を、前記フィルタの重みの値の最大値と最小値とに基づいてフィルタ毎に決定するビット幅算出回路をさらに具備する、請求項１記載の情報処理装置。
【請求項３】
畳み込みニューラルネットワークの層において畳み込み演算処理を行なう情報処理装置であって、
入力、前記入力に対する複数の重み、及び前記複数の重みそれぞれに対してフィルタ毎に決定された複数のビット幅に関する情報を記憶するメモリと、
前記メモリに記憶された前記入力、前記入力に対する複数のフィルタの重み、及び前記複数のフィルタの重みそれぞれに対してフィルタ毎に決定された複数のビット幅に関する情報に基づいて、前記複数のフィルタ毎に、積和演算処理を実行する積和演算回路と、を具備する、
情報処理装置。
【請求項４】
前記メモリは、さらに、前記ビット幅の補正値に関する情報を記憶し、
前記メモリに記憶された入力及び前記補正値に関する情報に基づいて、前記重みのフィルタ毎に算出された前記積和演算処理の補正項を出力する補正項算出回路と、
前記積和演算回路による積和演算処理結果と、補正項算出回路により出力された補正項とを加算して出力する加算回路と
をさらに具備する、
請求項１記載の情報処理装置。
【請求項５】
前記メモリは、さらに、前記ビット幅の補正値に関する情報を記憶し、
前記メモリに記憶される前の前記入力に対する重みから、前記メモリに記憶される前記重み、前記重みのビット幅及び前記補正値に関する情報を求めるビット幅補正回路をさらに具備する、請求項１記載の情報処理装置。
【請求項６】
前記メモリは、前記複数のビット幅に対する複数の補正値に関する情報を記憶し、
前記メモリに記憶された入力及び前記複数のフィルタの前記補正値に関する情報に基づいて、前記積和演算処理の補正項を出力する補正項算出回路と、
前記積和演算回路による積和演算処理結果と、補正項算出回路により出力された補正項とを加算して出力する加算回路と
をさらに具備し、
前記複数のフィルタの重みのビット幅及び前記補正値は、前記重みのフィルタ毎に決定される、
請求項３記載の情報処理装置。
【請求項７】
前記積和演算回路は論理演算回路である、請求項１乃至６いずれか１項に記載の情報処理装置。
【請求項８】
前記積和演算回路はプロセッサである、請求項１乃至６いずれか１項に記載の情報処理装置。
【発明の詳細な説明】
【技術分野】
【０００１】
本発明の実施形態は、畳み込みニューラルネットワークの層において畳み込み演算処理を行なう情報処理装置に関する。
【背景技術】
【０００２】
画像認識等で用いられる畳み込みニューラルネットワーク（Ｃｏｎｖｏｌｕｔｉｏｎａｌ  Ｎｅｕｒａｌ  Ｎｅｔｗｏｒｋ、以降「ＣＮＮ」と表記する）の層においては、畳み込み演算処理が行なわれる。
【０００３】
このようなＣＮＮの層における畳み込み処理は、非常に計算量が多いため、計算の負荷を減らして効率を改善することを狙い、処理毎にそれぞれ異なるビット精度を用いることがある。
【０００４】
また、ＣＮＮは複数の層を含むが、例えば画像認識で必要な認識精度を得るために必要となるビット精度は、層によって異なることが知られている。
【先行技術文献】
【非特許文献】
【０００５】
【非特許文献１】Ｊ．  Ｌｅｅ，  Ｃ．  Ｋｉｍ，  Ｓ．  Ｋａｎｇ，  Ｄ．  Ｓｈｉｎ，  Ｓ．  Ｋｉｍ，  Ｈ．  Ｊ．  Ｙｏｏ，  ”ＵＮＰＵ：  Ａ  ５０．６ＴＯＰＳ／Ｗ  ｕｎｉｆｉｅｄ  ｄｅｅｐ  ｎｅｕｒａｌ  ｎｅｔｗｏｒｋ  ａｃｃｅｌｅｒａｔｏｒ  ｗｉｔｈ  １ｂ−ｔｏ−１６ｂ  ｆｕｌｌｙ−ｖａｒｉａｂｌｅ  ｗｅｉｇｈｔ  ｂｉｔ−ｐｒｅｃｉｓｉｏｎ，”  ２０１８  ＩＥＥＥ  Ｉｎｔｅｒｎａｔｉｏｎａｌ  Ｓｏｌｉｄ  −Ｓｔａｔｅ  Ｃｉｒｃｕｉｔｓ  Ｃｏｎｆｅｒｅｎｃｅ  −  （ＩＳＳＣＣ），  Ｆｅｂ．  ２０１８．
【発明の概要】
【発明が解決しようとする課題】
【０００６】
ＣＮＮにおけるデータ処理の効率化を図る。
【課題を解決するための手段】
【０００７】
実施形態によれば、畳み込みニューラルネットワークの層において畳み込み演算処理を行なう情報処理装置であって、入力、前記入力に対する重み、及び前記重みのフィルタ毎に決定されたビット幅に関する情報を記憶するメモリと、前記メモリに記憶された入力、前記入力に対する重み、及び前記重みのフィルタ毎に決定されたビット幅に関する情報に基づいて、積和演算処理を実行する積和演算回路と、を具備する、情報処理装置である。
【図面の簡単な説明】
【０００８】
【図１】第１実施形態に係る情報処理装置を示す図である。
【図２】ビット幅Ｂｗｍの計算を行なう処理の例を説明するためのブロック図である。
【図３】重みｗｍ，ｎ，ｋｙ，ｋｘのうち重みｗｎ，ｋｙ，ｋｘの例を示す図である。
【図４】第２実施形態に係る情報処理装置を示す図である。
【図５】第３実施形態に係る情報処理装置を示す図である。
【図６】重みｗ’、ビット幅Ｂｗｍ、及び補正値ｂｗ’ｍの計算を行なう処理の例を説明するためのブロック図である。
【図７】第４実施形態に係る情報処理装置を示す図である。
【図８】第５実施形態に係る情報処理装置を示す図である。
【図９】第１の例の積和演算回路を示す図である。
【図１０Ａ】入力データＷ、Ｘの各値をどのように演算器アレイに入力するかを示す図である。
【図１０Ｂ】入力データＷ、Ｘの各値をどのように演算器アレイに入力するかを示す他の図である。
【図１１】ＬＵＴの構成を示す図である。
【図１２】第２の例の積和演算回路に対する後処理演算を説明するためのフローチャートである。
【図１３】ＣＮＮの層において行なわれる畳み込み処理の入力ｘの三次元構造を説明するための図である。
【図１４】重みｗの４次元の構造を説明するための図である。
【図１５】積和演算を説明するための図である。
【発明を実施するための形態】
【０００９】
以下、実施の形態について、図面を参照して説明する。
０  ＣＮＮの概要
ＣＮＮは複数層で構成されるが、それぞれの層の中心的な処理は以下の（１）式で表わされる。
【００１０】
【数１】
2020013455.tif 000003
【００１１】
ここで、ｙｍ，ｒ，ｃは出力、ｘｎ，ｒ，ｃは入力、ｗｍ，ｎ，ｋｙ，ｋｘは重みと呼ばれる。重みの各値は学習によって予め決定されるため、画像認識等の処理を実行する際には、既知の固定値である。一方、入力ｘｎ，ｒ，ｃや出力ｙｍ，ｒ，ｃは、画像認識であれば入力の画像が変わるとそれに応じて変化する。
【００１２】
入力ｘは、高さＲ、幅Ｃ、チャネルＮの３次元の構造をとり、図１３に示すようなＮ×Ｒ×Ｃの直方体で表現できる。チャネルＮというのは、例えば画像で言えばＲＧＢの各色に対応する。重みｗは、Ｍ個のフィルタｍを含む。重みｗは、高さＫｙ、幅Ｋｘ、入力チャネルＮ、出力チャネル（あるいはフィルタｍ）Ｍの４次元の構造をとる。重みｗの高さＫｙ、幅Ｋｘ、入力チャネルＮの３次元については入力ｘの構造と対応しており、入力ｘと同様に直方体で表現できる。ただし、一般にＫｙはＲより小さな値、ＫｘはＣより小さな値である。これにもう一つのフィルタｍの次元が加わるため、図で表現すると図１４のようにＭ個のＮ×Ｋｙ×Ｋｘの直方体で表現できる。
【００１３】
入力ｘの直方体から、重みｗのフィルタｍ１つ分と同じ大きさの領域を切り出し、その領域内で、それぞれの値を乗算した結果を全て足しあわせるという、積和演算を行ったものが出力ｙの１つの値となる（図１５参照）。入力ｘを切り出す場所と、重みｗのうちどのフィルタｍを用いるかの組み合わせで、Ｒ×Ｃ×Ｍ個の値が計算できるため、出力ｙは入力ｘと同様、３次元の直方体の構造となる。
【００１４】
以上の処理を行う場合、出力ｙ、入力ｘ、重みｗには例えば単精度浮動小数等の全て同じ型、すなわち同じビット精度を用いることが一般的である。
１  第１実施形態
本実施形態は、上述の説明の通り、ＣＮＮの処理では、積和演算がフィルタｍごとに行われることに着目したものである。
【００１５】
簡単のため、重みｗを整数で表現する場合で説明する。例えば、ある層の重みｗに含まれるＭ×Ｎ×Ｋｙ×Ｋｘ個の値中の最大値が１００、最小値が−１００であったとする。この場合、最大値と最小値を表現するために、重みｗのビット精度として、−１２８から＋１２７まで表現することが可能な８ビットを用いることが一般的である。
【００１６】
第１実施形態では、重みｗのビット幅をフィルタｍの重みｗの値ごとに決める。重みｗにはＭ個のフィルタｍが含まれる。そのうちの何番目かのフィルタｍの重みの値の最大値は１００、何番目かのフィルタｍの重みの値の最小値は−１００である。しかし、例えば０番目のフィルタｍに注目すると、フィルタｍの重みの値の最大値が５０、最小値が−１０であったとする。この場合、この０番目のフィルタｍに関しては、−６４から＋６３まで表現できる７ビットで十分であり、８ビットは必要がない。同様に、フィルタｍごとにフィルタｍの重みの値の最大値と最小値を評価し、必要最小限のビット幅を用いることで、全体の計算量や、重みの保存に必要なメモリ容量を削減することができる。
【００１７】
また、上述の通り、積和演算はフィルタｍごとに行われるため、ある一つの出力ｙを算出するためのＮ×Ｋｙ×Ｋｘ個の積和演算は、フィルタｍごとに全て同じビット幅を用いることができるため効率的に処理をすることが可能である。
【００１８】
図１は、第１実施形態に係る情報処理装置５０１ａを示す図である。
【００１９】
図１に示すように、第１実施形態の情報処理装置５０１ａは、メモリ２０１に重みｗｍ，ｎ，ｋｙ，ｋｘ、重みｗｍ，ｎ，ｋｙ，ｋｘのビット幅Ｂｗｍ、及び入力ｘｎ，ｋｙ，ｋｘに関する情報が格納される。重みｗのビット幅Ｂｗｍはフィルタｍ毎に決定される。
【００２０】
これら、メモリ２０１に記憶された重みｗｍ，ｎ，ｋｙ，ｋｘ、重みｗｍ，ｎ，ｋｙ，ｋｘのビット幅Ｂｗｍ、及び入力ｘｎ，ｋｙ，ｋｘに関する情報は、積和演算部２０２ａに入力される。なお、これら重みｗｍ，ｎ，ｋｙ，ｋｘ、重みｗｍ，ｎ，ｋｙ，ｋｘのビット幅Ｂｗｍ及び入力ｘｎ，ｋｙ，ｋｘに関する情報は、メモリ２０１に記憶されずに、直接、積和演算部２０２ａに入力されても良い。
【００２１】
積和演算部２０２ａは、メモリ２０１に記憶された重みｗｍ，ｎ，ｋｙ，ｋｘ、重みｗｍ，ｎ，ｋｙ，ｋｘのビット幅Ｂｗｍ、及び入力ｘｎ，ｋｙ，ｋｘに関する情報に基づいて、積和演算処理を行なう。
積和演算部２０２ａは、ビット幅Ｂｗｍの情報に応じてそれに適した積和演算処理を行なう。積和演算部２０２ａによる積和演算処理は、プロセッサによるソフトウェア処理であっても、積和論理演算回路によるハードウェア処理であっても良い。積和演算回路は、例えば、論理演算回路である。
積和演算部２０２ａからの出力は、（１）式で示されるようにｙｍ，ｒ，ｃで表わされる。
【００２２】
重みｗｍ，ｎ，ｋｙ，ｋｘ及び重みｗｍ，ｎ，ｋｙ，ｋｘのフィルタｍ毎のビット幅Ｂｗｍについては、学習により算出された値でありメモリ２０１に記憶されている。
【００２３】
また、ビット幅Ｂｗｍは、ビット幅算出部２５１（プロセッサ）により計算により求めても良い。図２。に示すように、フィルタｍ毎のビット幅Ｂｗｍは、重みｗｍ，ｎ，ｋｙ，ｋｘからフィルタｍ毎に計算され、計算されたビット幅Ｂｗｍがメモリ２０１に入力される。
【００２４】
フィルタｍ毎のビット幅Ｂｗｍの算出方法については以下の通りである。
【００２５】
重みｗｍ，ｎ，ｋｙ，ｋｘのうちｗｎ，ｋｙ，ｋｘ分の重みの例を図３に示す。図１４に示すように、このようなまとまりがＭ個で重みｗｍ，ｎ，ｋｙ，ｋｘとなる。重みｗｎ，ｋｙ，ｋｘは、様々な値を持ち、図３の例では最大値は２０、最小値は−１０である。
【００２６】
重みｗｍ，ｎ，ｋｙ，ｋｘのビット幅Ｂｗｍは、プロセッサ（図示せず）により計算され、重みｗｍ，ｎ，ｋｙ，ｋｘの値の最大値（絶対値の最大値）を２進数で表現したときのビット幅に１ビットを加えた数になる。０中心に対して、プラスマイナスの片側の最大値を出して反対側も表現する必要があるため、１ビット加える。
【００２７】
図３の例では、
【数２】
2020013455.tif 000004
そのため、必要なビット幅Ｂｗｍは６ビットとなる。
【００２８】
積和演算部２０２ａとしては、例えば、後述する図９に示すような、多ビットのデータが入力される構造の積和演算回路を利用することが可能である。図９は、入力ｘｎ，ｋｙ，ｋｘ及び重みｗｍ，ｎ，ｋｙ，ｋｘのビット幅Ｂｗｍが３ビットの場合を示している。ここで、入力ｘｎ，ｋｙ，ｋｘ及び重みｗｍ，ｎ，ｋｙ，ｋｘのｋｙ，ｋｘは、時刻ｔで示されている。また、図９は、フィルタｍ＝０の入力ｘｔ，０，及び重みｗ０，ｔが示されている。
２  第２実施形態
図４は、第２実施形態に係る情報処理装置５０１ｂを示す図である。第２実施形態の情報処理装置５０１ｂは、複数のフィルタｍに対して同時に並列実行が可能な積和演算部２０２ｂを使用するものである。
図４に示すように、第２実施形態では、メモリ２０１にＬ個のフィルタｍの重みｗｍ０〜ｗｍＬ−１、重みｗｍ０〜ｗｍＬ−１のビット幅Ｂｗｍ０〜ＢｗｍＬ−１及び入力ｘｎ，ｋｙ，ｋｘに関する情報が格納される。
【００２９】
第２実施形態では、Ｌ個のフィルタｍの重みｗｍ０〜ｗｍＬ−１のビット幅Ｂｗｍ０〜ＢｗｍＬ−１はフィルタｍごとに異なる。Ｌ個のフィルタｍの重みｗｍ０〜ｗｍＬ−１及び重みｗｍ０〜ｗｍＬ−１のそれぞれのビット幅Ｂｗｍ０〜ＢｗｍＬ−１が積和演算部２０２ｂに入力される。なお、Ｌ個のフィルタｍの重みｗｍ０〜ｗｍＬ−１、重みｗｍ０〜ｗｍＬ−１のビット幅Ｂｗｍ０〜ＢｗｍＬ−１及び入力ｘｎ，ｋｙ，ｋｘは、メモリ２０１に記憶されずに、直接、積和演算部２０２ｂに入力されても良い。
【００３０】
積和演算部２０２ｂは、メモリ２０１に記憶されたＬ個のフィルタｍの重みｗｍ０〜ｗｍＬ−１及び重みｗｍ０〜ｗｍＬ−１のそれぞれのビット幅Ｂｗｍ０〜ＢｗｍＬ−１及び入力ｘｎ，ｋｙ，ｋｘに関する情報に基づいて、複数のフィルタｍ毎に、積和演算処理を実行する。
積和演算部２０２ｂでは、複数のフィルタｍに関する処理が並列に実行される。入力された重みｗｍ０〜ｗｍＬ−１それぞれのフィルタｍのビット幅Ｂｗｍ０〜ＢｗｍＬ−１に応じてそれに適した積和演算処理が行なわれる。積和演算部２０２ｂによる積和演算処理は、プロセッサによるソフトウェア処理であっても、積和論理演算回路によるハードウェア処理であっても良い。  積和演算部２０２ｂからの出力は、（１）式で示されるようにｙｍ，ｒ，ｃで表わされる。
【００３１】
積和演算部２０２ｂとしては、例えば、後述する図９に示すような、多ビットのデータが入力される構造の積和演算回路であり、さらに、複数のフィルタｍに対して同時に並列実行が可能な構造の積和演算回路を利用することが可能である。
３  第３実施形態
第１実施形態で述べた０番目のフィルタｍの重みの値は、最大値が５０、最小値が−１０であり、通常の２の補数表現でこの範囲を表すためには７ビットが必要であった。しかし、＋５０から−１０の範囲に含まれる整数の種類はたかだか６１であり、これは６ビットで表現できる範囲である。第３実施形態では、フィルタｍ毎の重みの値の最大値と最小値を使用するのではなく、フィルタｍの範囲を評価して、必要最小限のビット幅を用いる。これにより、更に全体の計算量や、重みの保存に必要なメモリ容量を削減することができる。
【００３２】
数式で表すと以下のようになる。
【００３３】
【数３】
2020013455.tif 000005
【００３４】
ここで、ｗｍ，ｎ，ｋｙ，ｋｘ＝ｗ’ｍ，ｎ，ｋｙ，ｋｘ＋ｂｍである。ｂｍは、ｗの範囲を必要最小限のビット精度で表現できるようにｗ’を補正するための値である。ｂｍは、フィルタｍごとに１つの値となる。例えば、ｂｍ＝（ｍａｘ  ｗ  ＋  １  ＋  ｍｉｎ  ｗ）／２と決めることができる。この結果、重みｗ’ｍのビット幅Ｂｗ’ｍはもとの重みｗｍのビット幅Ｂｗｍよりも小さくなるため、（２）式の第１項は小さなビット幅で演算することができる。（１）式と比べ、第２項が追加されているが、第１項がＭ×Ｎ×Ｋｙ×Ｋｘ×Ｒ×Ｃ回の積和演算が必要なのに対して、第２項はＮ×Ｒ×Ｃ＋Ｋｙ×Ｋｘ×Ｒ×Ｃ回の加算で計算することができる。第２項は、第１項に対して十分小さいため、第２項の処理が加わることのオーバーヘッドよりも、第１項のビット幅を小さくしたことの効果の方が大きくなることが期待できる。
【００３５】
図５は、第３実施形態に係る情報処理装置５０１ｃを示す図である。
【００３６】
第３実施形態の情報処理装置５０１ｃは、図５に示すように、第１実施形態に加え、入力ｘと補正値ｂｗ’ｍに関する情報に基づいて、 (２）式の第２項を計算するための、補正項算出部２０３ｃを備える。
【００３７】
メモリ２０１には、重みｗ’ｍ，ｎ，ｋｙ，ｋｘ、重みｗ’ｍ，ｎ，ｋｙ，ｋｘのビット幅Ｂｗ’ｍ、入力ｘｎ，ｋｙ，ｋｘ及び補正値ｂｗ’ｍに関する情報が格納される。重みｗ’のビット幅Ｂｗ’ｍはフィルタｍ毎に決定される。
【００３８】
これら、メモリ２０１に記憶された重みｗ’ｍ，ｎ，ｋｙ，ｋｘ、重みｗ’ｍ，ｎ，ｋｙ，ｋｘのビット幅Ｂｗ’ｍ及び入力ｘｎ，ｋｙ，ｋｘに関する情報は、積和演算部２０２ｃに入力される。なお、これら重みｗ’ｍ，ｎ，ｋｙ，ｋｘ、重みｗ’ｍ，ｎ，ｋｙ，ｋｘのビット幅Ｂｗ’ｍ及び入力ｘｎ，ｋｙ，ｋｘに関する情報は、メモリ２０１に記憶されずに、直接、積和演算部２０２ｃに入力されても良い。
【００３９】
積和演算部２０２ｃは、ビット幅Ｂｗ’ｍの情報に応じてそれに適した積和演算処理を行なう。
【００４０】
積和演算部２０２ｃからの出力は、（２）式の第１項で表わされる。
【００４１】
メモリ２０１に記憶された入力ｘｎ，ｋｙ，ｋｘ及び補正値ｂｗ’ｍは、補正項算出部２０３ｃに入力される。補正項算出部２０３ｃは、メモリ２０１から入力される入力ｘｎ，ｋｙ，ｋｘ及び補正値ｂｗ’ｍに基づいて、（２）式の第２項で表わされる補正項を出力する。
【００４２】
加算器２０４は、積和演算部２０２ｃの出力（（２）式の第１項）と、補正項算出部２０３ｃの出力（（２）式の第２項）とを加算して、ｙｍ，ｒ，ｃを出力する。
【００４３】
積和演算部２０２ｃによる積和演算処理、補正項算出部２０３ｃによる補正項算出処理及び加算器２０４による加算処理は、プロセッサによるソフトウェア処理であっても、積和論理演算回路によるハードウェア処理であっても良い。
【００４４】
これまでの実施形態と同様、重みｗ’のビット幅Ｂｗ’ｍはフィルタｍによって異なる。補正値ｂＷｍもフィルタｍごとに異なる値である。
【００４５】
積和演算部２０２ｃは、ビット幅Ｂｗｍの情報に応じてそれに適した積和演算処理を行なう。
【００４６】
積和演算部２０２ｃとしては、例えば、後述する図９に示すような、多ビットのデータが入力される構造の積和演算回路であり、さらに、複数のフィルタｍに対して同時に並列実行が可能な構造の積和演算回路を利用することが可能である。
【００４７】
加算器２０４からの出力は、（１）式で示されるようにｙｍ，ｒ，ｃで表わされる。
【００４８】
重みｗ’ｍ，ｎ，ｋｙ，ｋｘ、重みｗ’ｍ，ｎ，ｋｙ，ｋｘのフィルタｍ毎のビット幅Ｂｗ’ｍ、補正値ｂｗ’ｍについては、学習により算出された値でありメモリ２０１に記憶されている。
【００４９】
また、重みｗ’、重みｗ’のビット幅Ｂｗ’ｍ及び補正値ｂｗ’ｍについては、ビット幅補正部３０１（プロセッサ）により計算により求めても良い。図６に示すように、メモリ２０１に記憶される前の入力ｘｎ，ｋｙ，ｋｘに対する重みｗｍ，ｎ，ｋｙ，ｋｘからビット幅補正部３０１により、重みｗ’ ｍ、ビット幅Ｂｗ’ｍ、及び補正値ｂｗ’ｍが計算される。ビット幅Ｂｗ’ｍはフィルタｍ毎に計算される。これら重みｗｍ，ｎ，ｋｙ，ｋｘから得られる重みｗ’ ｍ、ビット幅Ｂｗ’ｍ、及び補正値ｂｗ’ｍに関する情報は、メモリ２０１に入力される。
【００５０】
第３実施形態では重みのビット幅をより最適化して小さくするために補正値ｂｗ’ｍが使用される。重みｗ’ ｍ，ｎ，ｋｙ，ｋｘとビット幅Ｂｗ’ｍを及び入力ｘは積和演算部２０２ｃに入力され、補正に使用する補正値ｂｗ’ｍは補正項算出部２０３ｃに入力される。
【００５１】
重みｗ’ ｍ，ｎ，ｋｙ，ｋｘ、ビット幅Ｂｗ’ｍ及び補正値ｂｗ’ｍのビット幅補正部３０１による算出方法は以下の通りである。
【００５２】
図３に示した例では、重みｗｍ，ｎ，ｋｙ，ｋｘには６ビットのビット幅が必要である。
【００５３】
しかし、実際は２０＋１０＋１の３１値を表現出来れば良い。従って、必要最低限の重みのビット幅は、
【数４】
2020013455.tif 000006
となり、５ビットとなる。この例の場合、全ての値から”５”を引けば、最大値が１５、最小値が―１５となり、５ビットで表現することができるようになるので、補正値ｂｗ’ｍは”５”である。この”５”という値は、例えば、（ｍａｘ  ｗｍ＋１＋ｍｉｎ  ｗｍ）／２で計算することができる。
【００５４】
従って、第３実施形態の情報処理装置５０１ｃによれば、演算量の多い積和演算部２０２ｃの重みのビット幅が６ビットから５ビットに減るので演算量を更に減らすことができる。
４  第４実施形態
図７は、第４実施形態に係る情報処理装置５０１ｄを示す図である。第４実施形態の情報処理装置５０１ｄは、複数のフィルタｍに対して同時に並列実行が可能な積和演算部２０２ｄを使用するものである。
【００５５】
図７に示すように、第４実施形態では、メモリ２０１にＬ個のフィルタｍの重みｗ’ｍ０〜ｗ’ｍＬ−１、重みｗ’ｍ０〜ｗ’ｍＬ−１のビット幅Ｂｗ’ｍ０〜Ｂｗ’ｍＬ−１、入力ｘｎ，ｋｙ，ｋｘ、及びビット幅Ｂｗ’ｍ０〜Ｂｗ’ｍＬ−１に対する補正値ｂｗ’ｍ０〜ｂｗ’ｍＬ−１に関する情報が格納される。
【００５６】
第４実施形態では、Ｌ個のフィルタｍのビット幅Ｂｗ’ｍ０〜Ｂｗ’ｍＬ−１がフィルタｍごとに異なる。Ｌ個のフィルタｍの重みｗ’ｍ０〜ｗ’ｍＬ−１、重みｗ’ｍ０〜ｗ’ｍＬ−１のそれぞれのビット幅Ｂｗ’ｍ０〜Ｂｗ’ｍＬ−１、及び入力ｘｎ，ｋｙ，ｋｘに関する情報が積和演算部２０２ｄに入力される。なお、これらＬ個のフィルタｍの重みｗ’ｍ０〜ｗ’Ｌ−１、重みｗ’ｍ０〜ｗ’ｍＬ−１のビット幅Ｂｗ’ｍ０〜Ｂｗ’ｍＬ−１、及び入力ｘｎ，ｋｙ，ｋｘに関する情報は、メモリ２０１に記憶されずに、直接、積和演算部２０２ｄに入力されても良い。
【００５７】
積和演算部２０２ｄでは、メモリ２０１に記憶されたＬ個のフィルタｍの重みｗ’ｍ０〜ｗ’ｍＬ−１、重みｗ’ｍ０〜ｗ’ｍＬ−１のそれぞれのビット幅Ｂｗ’ｍ０〜Ｂｗ’ｍＬ−１、及び入力ｘｎ，ｋｙ，ｋｘに関する情報に基づいて、積和演算処理を行なう。
積和演算部２０２ｄでは、複数のフィルタｍに関する処理が並列に実行される。入力されたｗ’ｍ０〜ｗ’ｍＬ−１のそれぞれのフィルタｍのビット幅Ｂｗ’ｍ０〜ＢｗｍＬ−１に応じてそれに適した積和演算処理が行なわれる。積和演算部２０２ｄからの出力は、（２）式の第１項で表わされる。
【００５８】
積和演算部２０２ｄとしては、例えば、後述する図９に示すような、多ビットのデータが入力される構造の積和演算回路であり、さらに、複数のフィルタｍに対して同時に並列実行が可能な構造の積和演算回路を利用することが可能である。
【００５９】
補正項算出部２０３ｄは、メモリ２０１から入力される入力ｘｎ，ｋｙ，ｋｘ及び補正値ｂｗ’ｍ０〜ｂｗ’ｍＬ−１に基づいて、（２）式の第２項で表わされる補正項を出力する。
【００６０】
加算器２０４は、積和演算部２０２ｄの出力（（２）式の第１項）と、補正項算出部２０３ｄの出力（（２）式の第２項）とを加算して、ｙｍ，ｒ，ｃを出力する。
【００６１】
積和演算部２０２ｄによる積和演算処理、補正項算出部２０３ｄによる補正項算出処理及び加算器２０４による加算処理は、プロセッサによるソフトウェア処理であっても、積和論理演算回路によるハードウェア処理であっても良い。
加算器２０４からの出力は、（１）式で示されるようにｙｍ，ｒ，ｃで表わされる。
５  第５実施形態
第１乃至第４実施形態において説明したように、積和演算部２０２ａ〜２０２ｄにはフィルタｍ毎に異なるビット幅Ｂｗｍ又はＢｗ’ｍのデータが入力される。第５実施形態では、メモリから積和演算回路に入力されるフィルタｍ毎に異なるビット幅Ｂｗのデータｘ、ｗの一連のデータ処理について説明する。
５−１  情報処理装置の構成
図８は、第５実施形態に係る情報処理装置１００を示す図である。
【００６２】
図８に示すように、積和演算回路１には、メモリ２及び後処理回路３が接続されている。積和演算回路１には、メモリ２に記憶された２つのデータ（データＸ、Ｗ）が入力される。
【００６３】
データＸは、ｔ行ｒ列の行列形式で表現されるデータであり、データＷは、ｍ行ｔ列の行列形式で表現されるデータである（ｔ，ｒ，ｍは０又は正の整数）。実施形態では、ｔは時刻（読み出しサイクル）であるものとする。
【００６４】
２つの行列を
Ｗ＝｛ｗｍ，ｔ｝０≦ｍ≦Ｍ-1，０≦ｔ≦Ｔ-1 ， 
Ｘ＝｛ｘｔ，ｒ｝０≦ｔ≦Ｔ−１，０≦ｒ≦Ｒ−１
とする。
【００６５】
ここで、Ｔ−１は読み出しサイクルの最大値、Ｒ−１はデータＸの行列の最大列数、Ｍ−１はデータＷの行列の最大行数である。
【００６６】
積和演算回路１は、メモリ２から入力される２つのデータ（Ｗ，Ｘ）の行列演算を行ない、その計算結果を後処理回路３に出力する。具体的には、積和演算回路１は、複数の演算器を有し、これら各演算器は乗算器とアキュームレータとを有し、アレイ状に配置されている。
【００６７】
計算する行列をＹ＝ＷＸとすると、Ｙ＝｛ｙｍ，ｒ｝０≦ｍ≦Ｍ−１，０≦ｒ≦Ｒ−１の各要素に対する演算は、次のような積和演算の形となる。
【００６８】
【数５】
2020013455.tif 000007
【００６９】
すなわち、積和演算回路１は、積和演算結果を、後処理回路３に出力する。
【００７０】
メモリ２は、ＳＲＡＭ、ＤＲＡＭ、ＳＤＲＡＭ、ＮＡＮＤフラッシュメモリ、３次元構造のフラッシュメモリ、ＭＲＡＭ、レジスタ、ラッチ回路、を含む、半導体メモリであればよい。
【００７１】
後処理回路３は、積和演算回路１からのｍ行ｒ列に対応する時刻Ｔ−１での各演算器の出力に対して、各演算器に対して設定され得る所定の係数を使用して演算を行い、演算結果に出力インデックスを付してプロセッサ５に出力する。このとき、後処理回路３は、必要に応じて、ルックアップテーブル（ＬＵＴ）４から所定の係数及び出力インデックスを取得する。
【００７２】
なお、後処理が必要とされない場合には、後処理回路３を設ける必要なく、積和演算回路１からの出力はプロセッサ５に出力される。
【００７３】
ＬＵＴ４は、積和演算回路１の各演算器に対する所定の係数及び出力インデックスを格納する。なお、ＬＵＴ４は、記憶回路であっても良い。
【００７４】
プロセッサ５は、後処理回路３により処理された各演算器の積和演算結果を受信する。また、プロセッサ５は、ＬＵＴ４に格納され、各演算器に対して設定される所定の係数や出力インデックスを設定可能である。
【００７５】
５−１−１  第１の例の積和演算回路（多ビットの場合１：入力されるデータｗｍ，ｔ，ｘｔ，ｒが３ビットの場合の積和演算回路）
図９は、第５実施形態に係る情報処理装置１００の第１の例の積和演算回路１ａを示す図である。第１の例の積和演算回路１ａは、入力される各データｗ０，ｔ，ｘｔ，０が３ビットの場合を示す。
【００７６】
例えば、第１実施形態の積和演算部２０２ａを図９に示した積和演算回路１ａに適用すると、積和演算部２０２ａに入力される重みｗのビット幅Ｂｗｍが３ビット、フィルタｍが０の場合に相当する。また、インデックスｎ、ｋｙ、ｋｘをまとめてｔ（時刻）としている。例えばｔ＝（ｎ×Ｋｙ＋ｋｙ）×Ｋｘ＋ｋｘとすることができる。
【００７７】
図９に示すように、９個の各演算器ｕｂ０，０〜ｕｂ２，２がアレイ状に並列に配置される。演算器ｕｂｍ，ｒは、ｍ行ｒ列に位置する演算器を表わす。各演算器ｕｂ０，０〜ｕ２，２は、乗算器２１、加算器１２及びレジスタ１３を有する。
【００７８】
各演算器ｕｂ０，０〜ｕ２，２の乗算器２１は第１の入力端子及び第２の入力端子を有する。演算器ｕｂｍ，ｒの乗算器２１の第１の入力端子は、ｍ行に配置された他の演算器と共有のデータ線に接続され、第２の入力端子は、ｒ列に配置された他の演算器と共有のデータ線に接続される。
【００７９】
すなわち、演算器ｕｂｍ，ｒの一部の乗算器２１の第１の入力端子から入力される第１入力は、データｗｍ，ｔのデータ線を行方向で共有し、乗算器２１の第２の入力端子から入力される第２入力は、データｘｔ，ｒのデータ線を列方向で共有する。
【００８０】
従って、時刻ｔにおいて、演算器ｕｂ０，０、ｕｂ０，１、ｕｂ０，２の乗算器２１の第１入力はデータｗ（２）０，ｔの値を共有し、演算器ｕｂ１，０、ｕｂ１，１、ｕｂ１，２の乗算器２１の第１入力はデータｗ（１）０，ｔの値を共有し、演算器ｕｂ２，０、ｕ２，１、ｕ２，２の乗算器２１の第１入力はデータｗ（０）０，ｔの値を共有する。
【００８１】
同様に、時刻ｔにおいて、演算器ｕｂ０，０、ｕｂ１，０、ｕｂ２，０の乗算器２１の第２入力はデータｘ（２）ｔ，０の値を共有し、演算器ｕｂ０，１、ｕｂ１，１、ｕｂ２，１の乗算器２１の第２入力はデータｘ（１）ｔ，０の値を共有し、・・・・、演算器ｕｂ０，２、ｕｂ１，２ｕｂ２，２の乗算器２１の第２入力はデータＸ（０）ｔ，０の値を共有する。
【００８２】
各演算器ｕｂ０，０〜ｕｂ２，２の乗算器２１は、第１入力に入力されたデータと、第２入力に入力されたデータとを乗算して、その乗算結果を加算器１２に出力する。
【００８３】
従って、時刻ｔにおける演算器ｕｂ０，０、ｕｂ０，１、ｕｂ０，２の各乗算器２１は、それぞれ第１入力のデータｗ（２）０，ｔの値と第２入力のデータｘ（２）ｔ，０、ｘ（１）ｔ，０、ｘ（０）ｔ，０とを乗算した各乗算結果を出力する。
【００８４】
また、時刻ｔにおける演算器ｕｂ０，０、ｕｂ１，０、ｕｂ２，２の各乗算器２１は、それぞれ第２入力のデータｘ（２）ｔ，０の値と第１入力のデータｗ（２）０，ｔ、ｗ（１）０，ｔ、ｗ（０）０，ｔとを乗算した各乗算結果を出力する。
【００８５】
各演算器ｕｂ０，０〜ｕｂ２，２の加算器１２とレジスタ１３とは、アキュームレータを構成する。各演算器ｕｂ０，０〜ｕｂ２，２の加算器１２は、乗算器２１からの乗算結果と、レジスタ１３に格納された時刻ｔ−１（時刻ｔの１サイクル前）でのレジスタ１３の値（アキュームレータの値）とを加算する。
【００８６】
レジスタ１３は、時刻ｔ−１における加算器１２からの乗算結果を保持し、時刻ｔのサイクルで加算器１２から出力された加算結果を保持する。
【００８７】
このように、３×３個の演算器がアレイ状に並列に配置され、時刻ｔに、ｍ行にあるｒ個の演算器Ｕｂに対してｗｍ，ｔが入力され、ｒ列にあるｍ個の演算器に対してｘｔ，ｒが入力される。この結果、第ｍ行、第ｒ列の演算器では、時刻ｔに以下の計算が実行される。
【００８８】
ｙｍ、ｒ、ｔ  ＝  ｙｍ、ｒ、ｔ−１  ＋  ｗｍ，ｔ  ×  ｘｔ，ｒ
…（４）
ここで、ｙｍ、ｒ、ｔは、時刻ｔに演算器ｕｂｍ，ｒのレジスタ１３に新たに格納された値である。この結果Ｔサイクルで、（１）式の演算が完了する。つまり、３×３個の演算器が、それぞれＴサイクルかけてｙｍ，ｒを計算することで、行列式Ｙ＝Ｗ×Ｘを計算することができる。
【００８９】
各演算器ｕｂｍ，ｒの時刻ｔにおけるレジスタ１３の値は、後処理回路３に出力される。
演算器ｕｂ０，０〜ｕｂ２，２の構成は、以下の通りである。
【００９０】
各演算器ｕｂｍ，ｒの積和演算回路１ａのＡＮＤ論理ゲート２１の２つの入力は１ビットであり、１ビットのデータｗｍ，ｔ及びｘｔ，ｒが入力される。ＡＮＤ論理ゲート２１の出力は１ビットであり、データｗｍ，ｔ及びｘｔ，ｒのＡＮＤ論理が出力される。
【００９１】
加算器１２の１つの入力は１ビットであり、ＡＮＤ論理ゲート２１からの１ビットの出力データが入力される。加算器１２の他の入力は多ビットであり、レジスタ１３からの時刻ｔ−１における多ビットのレジスタ１３の値が入力される。加算器１２は、ＡＮＤ論理ゲート２１からの１ビットの出力データと、レジスタ１３からの時刻ｔ−１における多ビットのレジスタ１３の値とを加算した多ビットのデータを出力する。
【００９２】
レジスタ１３の入力は多ビットであり、時刻ｔにおける、ＡＮＤ論理ゲート２１からの１ビットの出力データが加算器１２で加算された多ビットの出力データを保持する。時刻Ｔ（サイクル）における各演算器ｕｂｍ，ｒの積和演算回路１ａのレジスタ１３の値は、後処理回路３に出力される。
【００９３】
積和演算回路１ａから出力された各演算器ｕｂｍ，ｒの出力は、後処理回路３に出力される。
【００９４】
なお、１ビットのデータｗｍ，ｔ及びｘｔ，ｒが（１，０）で表現される場合には、ＡＮＤ論理ゲート２１はＡＮＤ論理ゲートであるが、（＋１，−１）で表現される場合には、ＡＮＤ論理ゲート２１はＸＮＯＲ論理ゲートとなる。
【００９５】
また、ＡＮＤ論理ゲート２１と、ＸＮＯＲ論理ゲート（図示せず）と、レジスタの設定によりＡＮＤ論理ゲート２１及びＸＮＯＲ論理ゲートの何れかを選択する選択回路（図示せず）と、を各演算器ｕｂｍ，ｒに設けても良い。
【００９６】
また、入力が１ビットのアキュームレータは、図９に示すように、加算器１２及びレジスタ１３で構成しても良いが、非同期カウンタを使用しても良い。
【００９７】
図９に示すように、入力されるデータｗ０，ｔ，ｘｔ，０が３ビットの場合の積和演算回路１ａは、データｗ０，ｔ（０）のデータ線にはデータｗ０，ｔの０ビット目（ＬＳＢ）の値が入力され、データｗ０，ｔ（１）のデータ線にはデータｗ０，ｔの１ビット目の値が入力され、データｗ０，ｔ（２）のデータ線にはデータｗ０，ｔの２ビット目（ＭＳＢ）の値が入力される。
【００９８】
また、データｘｔ，０（０）のデータ線にはデータｘｔ，０の０ビット目（ＬＳＢ）の値が入力され、データｘｔ，０（１）のデータ線にはデータｘｔ，０の１ビット目の値が入力され、データｘｔ，０（２）のデータ線にはデータｘｔ，０の２ビット目（ＭＳＢ）の値が入力される。
【００９９】
例えば、時刻ｔにおいて、データｗ０，ｔが３ビットで「０１１ｂ」で表わされる場合、データｗ０，ｔ（０）のデータ線には「１」、データｗ０，ｔ（１）のデータ線には「１」、データｗ０，ｔ（２）のデータ線には「０」が入力される。
【０１００】
また、時刻ｔにおいて、データｘｔ，０が３ビットで「１１０ｂ」で表わされる場合、データｘｔ，０（０）のデータ線には「０」、データｘｔ，０（１）のデータ線には「１」、データｘｔ，０（２）のデータ線には「１」が入力される。
【０１０１】
すなわち、データｗｍ，ｔ、ｘｔ，ｒが３ビットの場合、以下のように表現することができる。なお、ここでは、出力の１要素のみに注目することとし、これまでの説明で使ったｍ，ｒの添え字は省略する。ｗｔ（２）等の値は、全て１ビットの値（０又は１）である。
【０１０２】
ｗｔ＝ｗｔ（２）×２２＋ｗｔ（１）×２１＋ｗｔ（０）×２０
…（５）
ｘｔ＝ｘｔ（２）×２２＋ｘｔ（１）×２１＋ｘｔ（０）×２０
…（６）
このとき、（３）式は、次のようになる。
【０１０３】
【数６】
2020013455.tif 000008
【０１０４】
（７）式を見ると、１行目の３つのシグマではｗ（ｔ）（２）が、２行目の３つのシグマではｗ（ｔ）（１）が、３行目の３つのシグマではｗ（ｔ）（０）が利用されている。また、１列目の３つのシグマにはｘ（ｔ）（２）が、２列目の３つのシグマにはｘ（ｔ）（１）が、３列目の３つのシグマにはｘ（ｔ）（０）が利用されている。すなわち、図９に示した演算器ｕｂ０，０〜ｕ２，２の構成は、（７）式における各シグマの項の演算に相当する。
【０１０５】
各演算器ｕｂ０，０〜ｕ２，２の出力は、後処理回路３に出力される。後処理回路３では、各シグマにそれぞれ対応する２のべき乗の係数を掛けて足し合わせることで、最終的な多ビットの積和演算の結果が得られる。なお、後処理回路３における２のべき乗の係数を掛ける処理は、シフト演算で容易に実行することができる。
【０１０６】
ディープニューラルネットワークを含め多くの場合、Ｔは１００を超えるような比較的大きな値である。そのためシグマの項の１ビットの積和演算に対して、最後に２のべき乗の係数をかけてシグマ同士を足し合わせる処理（後処理と呼ぶ）は、低頻度でしか実行されない。後処理の実行方法については、例えば逐次的に実行する等、適宜選択しても良い。
・負の数の取り扱いについて
データの値を２の補数表現で扱う場合、（５）、（６）式は次のようになる。
ｗｔ＝−ｗｔ（２）×２２＋ｗｔ（１）×２１＋ｗｔ（０）×２０
…（５’）
ｘｔ＝−ｘｔ（２）×２２＋ｘｔ（１）×２１＋ｘｔ（０）×２０
…（６’）
この時、（７）式は次のようになる。
【０１０７】
【数７】
2020013455.tif 000009
【０１０８】
つまり、後処理回路３における後処理の際に、係数を負にすれば良く、図９と同様の構成を利用することができる。
５−１−２  第２の例の積和演算回路（多ビットの場合２：入力されるデータｗｍ，ｔ，が異なるビット、ｘｔ，ｒが４ビットの場合の積和演算回路）
次に、第２の例の積和演算回路について説明する。
【０１０９】
第２の例では、積和演算回路が１６×１６の構成の演算器アレイの場合について説明する。
入力データであるＸは３２行４列の行列とし、全ての要素が４ビットで表現されているとする。入力データであるＷは１５行３２列の行列とし、各行の要素のビット幅がそれぞれ｛１，２，４，２，２，１，２，３，２，２，３，２，１，３，２｝であるとする。つまり、例えば、０行目の３２要素は１ビット、１行目の３２要素は２ビット、２行目の３２要素は４ビット、３行目の３２要素は２ビット、・・・、ということを表す。
【０１１０】
例えば、第１実施形態の積和演算部２０２ａを図１０Ａ及び図１０Ｂに示した演算器に適用すると、積和演算部２０２ａに入力される重みｗのビット幅Ｂｗｍが｛１，２，４，２，２，１，２，３，２，２，３，２，１，３，２｝、フィルタｍが０〜１４の場合に相当する。また、インデックスｎ、ｋｙ、ｋｘをまとめてｔ（時刻）としている。例えばｔ＝（ｎ×Ｋｙ＋ｋｙ）×Ｋｘ＋ｋｘとすることができる。
【０１１１】
行列積Ｙ＝ＷＸは１５行４列の行列となる。図１０Ａ及び図１０Ｂは入力データＷ、Ｘの各値をどのように演算器アレイに入力するかを示している。両図中のｕ０，０〜ｕ１５，１５はそれぞれ１個の演算器を示している。ｘｔ，ｒ（ｂ）は、Ｘのｔ行ｒ列のｂビット目の値を意味し、ｗｍ，ｔ（ｂ）は、Ｗのｍ行ｔ列のｂビット目の値を意味する。すなわち、ｔ＝０は、Ｘの０行目且つＷの０列目に対応し、ｔ＝３１は、Ｘの３１行目且つＷの３１列目に対応する。
【０１１２】
図１０Ａのとおり、Ｘは４列×４ビットがちょうど演算器の列数１６に収まっているが、Ｗは７行目の２ビット目と１ビット目までで演算器ｕの行数１６を使い切っていることがわかる。従って、７行目の０ビット目を含むＷの残りの行については後で計算を行なう。
【０１１３】
ｔは初期値が０で、３１になるまで１サイクルに１ずつインクリメントする。ｙ（ｕｍ，ｒ）を、演算器ｕｍ，ｒのアキューミュレータ出力とすると、例えば、３２サイクル後には、ｙ０，０に含まれるｙ（ｕ０，０）からｙ（ｕ０，３）は、（８）式に示す値となる。
【０１１４】
【数８】
2020013455.tif 000010
【０１１５】
これらに対して、後処理回路３において、以下の演算を行なうことで、ｙ０，０を求めることができる。
【０１１６】
ｙ０，０＝２３×ｙ（ｕ０，０）＋２２×ｙ（ｕ０，１）＋２１×ｙ（ｕ０，２）＋２０×ｙ（ｕ０，３）
同様に、３２サイクル後には、ｙ１，０に含まれるｙ（ｕ１，０）からｙ（ｕ２，３）は、（９）式に示す値となる。
【０１１７】
【数９】
2020013455.tif 000011
【０１１８】
これから、ｙ１，０を以下のように計算することができる。
ｙ１，０＝２４×ｙ（ｕ１，０）＋２３×ｙ（ｕ１，１）＋２２×ｙ（ｕ１，２）＋２１×ｙ（ｕ１，３）
＋２３×ｙ（ｕ２，０）＋２２×ｙ（ｕ２，１）＋２１×ｙ（ｕ２，２）＋２０×ｙ（ｕ２，３）
…（１０）
このように、各演算器ｕｍ，ｒの結果それぞれに対する、係数（２のべき乗）の値及び出力のどの要素に対応するか（インデックス）は、互いに異なる。例えば、係数の値と、出力インデックスを以下のように設定する。
【０１１９】
ｙ（ｕ０，０）：係数＝２３、出力インデックス＝（０，０）
ｙ（ｕ０，１）：係数＝２２、出力インデックス＝（０，０）
ｙ（ｕ０，２）：係数＝２１、出力インデックス＝（０，０）
ｙ（ｕ０，３）：係数＝２０、出力インデックス＝（０，０）
ｙ（ｕ１，０）：係数＝２４、出力インデックス＝（１，０）
ｙ（ｕ１，１）：係数＝２３、出力インデックス＝（１，０）
ｙ（ｕ１，２）：係数＝２２、出力インデックス＝（１，０）
ｙ（ｕ１，３）：係数＝２１、出力インデックス＝（１，０）
ｙ（ｕ１，０）：係数＝２３、出力インデックス＝（１，０）
ｙ（ｕ１，１）：係数＝２２、出力インデックス＝（１，０）
ｙ（ｕ１，２）：係数＝２１、出力インデックス＝（１，０）
ｙ（ｕ１，３）：係数＝２０、出力インデックス＝（１，０）
…（１１）
つまり、実施形態では、（ｍ，ｒ）をアドレスとする係数と出力インデックスを格納したＬＵＴ４を用意する。図１１は、ＬＵＴ４を示す図である。
【０１２０】
図１１に示すように、ＬＵＴ４には、ｃｏｅｆ［ｍ，ｒ］及びｉｎｄｅｘ［ｍ，ｒ］が格納される。ｃｏｅｆ［ｍ，ｒ］はｍ行ｒ列の乗算器ｕｍ，ｒの出力ｙ（ｕ（ｍ，ｒ））に乗ぜられる係数、ｉｎｄｅｘ［ｍ，ｒ］は乗算器ｕｍ，ｒの出力ｙ（ｕ（ｍ，ｒ））に付される出力インデックスである。
【０１２１】
図１０Ａに示すように、ｗ７，ｔは、１の演算器ｕにより１回の演算で、３ビットのうちの上位２ビットしか計算することができない。この上位２ビットの一部であり、ｙ７，０に含まれるｙ（ｕ１４，０）からｙ（ｕ１５，３）に対応する係数と出力インデックスは以下の通りである。
【０１２２】
ｙ（ｕ１４，０）：  係数＝２５、  出力インデックス＝（７，０）
ｙ（ｕ１４，１）：  係数＝２４、  出力インデックス＝（７，０）
ｙ（ｕ１４，２）：  係数＝２３、  出力インデックス＝（７，０）
ｙ（ｕ１４，３）：  係数＝２２、  出力インデックス＝（７，０）
ｙ（ｕ１５，０）：  係数＝２４、  出力インデックス＝（７，０）
ｙ（ｕ１５，１）：  係数＝２３、  出力インデックス＝（７，０）
ｙ（ｕ１５，２）：  係数＝２２、  出力インデックス＝（７，０）
ｙ（ｕ１５，３）：  係数＝２１、  出力インデックス＝（７，０）
…（１２）
従って、ｙ７，０は以下の値となる。
【０１２３】
ｙ７，０＝２５×ｙ（ｕ１４，０）＋２４×ｙ（ｕ１４，１）＋２３×ｙ（ｕ１４，２）＋２２×ｙ（ｕ１４，３）＋２４×ｙ（ｕ１５，０）＋２３×ｙ（ｕ１５，１）＋２２×ｙ（ｕ１５，２）＋２１×ｙ（ｕ１５，３）
…（１３）
残りの１ビットは、図１０Ａに示した演算が完了した後に、今度は、図１０Ｂに示すｗを演算器ｕ０，０〜ｕ１５，１５に入力する。この例では、ｘは図１０Ａと同じである。ｙ７，０の残りの下位１ビットに該当するｙ（ｕ０，０）からｙ（ｕ０，３）に対応する係数と出力インデックスは以下の通りである。
【０１２４】
ｙ（ｕ０，０）：係数＝２３，出力インデックス＝（７，０）
ｙ（ｕ０，１）：係数＝２２，出力インデックス＝（７，０）
ｙ（ｕ０，２）：係数＝２１，出力インデックス＝（７，０）
ｙ（ｕ０，３）：係数＝２０，出力インデックス＝（７，０）
これらの値を使って、係数と出力インデックスに基づくアルゴリズムに従って後処理を行なうと、（１３）式の結果と合わせて、（１４）式となる。
【０１２５】
ｙ７，０＝２５×ｙ（ｕ１４，０）＋２４×ｙ（ｕ１４，１）＋２３×ｙ（ｕ１４，２）＋２２×ｙ（ｕ１４，３）＋２４×ｙ（ｕ１５，０）＋２３×ｙ（ｕ１５，１）＋２２×ｙ（ｕ１５，２）＋２１×ｙ（ｕ１５，３）＋２３×ｙ（ｕ０，０）＋２２×ｙ（ｕ０，１）＋２１×ｙ（ｕ０，２）＋２０×ｙ（ｕ０，３）
…（１４）
これにより、図１０Ａに示した処理において途中であったｙ７，０の計算が完了する。
５−２  後処理演算のフローチャート
図１２は、第２の例の積和演算回路に対する後処理演算を説明するためのフローチャートである。
【０１２６】
図１２に示すように、後処理回路３は、時刻ｔ（開始時はｔ＝０である）の各演算器ｕｍ，ｒのアキュームレータの出力を受信する（Ｓ１）。後処理回路３は、各演算器ｕｍ，ｒの出力ｙ（ｕｍ，ｒ）に、各演算器ｕｍ，ｒ出力に対応し、ＬＵＴ４に格納された係数を乗じ、出力インデックスを付加する後処理を実行する（Ｓ２）。
【０１２７】
その後、時刻ｔ＝３１までの全ての演算器ｕ０，０〜ｕ１５，１５のアキュームレータの出力について、後処理演算が終了したか否かが判断される（Ｓ３）。終了していないと判断された場合（Ｓ３のＮｏ）には、Ｓ１に戻り、後処理回路３は、時刻ｔ＝１以降の残りの演算器ｕ０，０〜ｕ１５，１５のアキュームレータの出力について、後処理演算を行う。
【０１２８】
一方、Ｓ３において、時刻ｔ＝３１までの全ての演算器ｕ０，０〜ｕ１５，１５のアキュームレータの出力について、後処理演算が終了したと判断された場合（Ｓ３のＹｅｓ）、後処理回路３は、後処理演算の処理結果をプロセッサ５に送信し（Ｓ４）、処理を終了する。
５−３  効果
実施形態の情報処理装置１００の積和演算回路１の構成によれば、ＳＲＡＭ等のメモリから積和演算回路１の演算器アレイへのデータ移動を少なくできる。その結果、情報処理装置１００のデータ処理の効率化を図ることができる。
【０１２９】
Ｍ×Ｒ個の演算器がアレイ状に並列に配置される場合、総積和演算回数はＭ×Ｒ×Ｔである。仮に、演算器が１個の場合は、１回の積和演算を行うために２個のデータを１回メモリから演算器へ移動する必要があるので、全体では２×Ｍ×Ｒ×Ｔのデータ移動が必要である。実施形態の図９に示した構成では、データｗｍ，ｔ，ｘｔ，ｒのデータ線を演算器ｕｂ０，０〜ｕｂＭ−１，Ｒ−１に対して、行列毎に共通にしているので、データ移動は、（Ｍ＋Ｒ）×Ｔとなる。例えば、Ｍ＝Ｒの場合であって、図９の構成を採用しない場合に比べて、データ移動は、｛（Ｍ＋Ｒ）×Ｔ｝／（２×Ｍ×Ｒ×Ｔ）＝１／Ｍとなる。
【０１３０】
実施形態の第１の例及び第２の例の多ビットの場合の情報処理装置１００によれば、入力されるデータＷ，Ｘのビット幅に応じて、ＬＵＴ４に適切な係数と出力インデックス設定し、上述の後処理アルゴリズムを適用することで、ＸやＷのビット数がばらばらであっても処理が可能である。
【０１３１】
また、第２の例で示したｙ７のケースのように、１つの値が分断されるケースでも問題ない。この特徴により、演算器アレイを無駄なく使い切ることが可能であり、これは演算器の高効率化、高速化に寄与する。
【０１３２】
例えば、複数の１ビットの演算器を並列に動作させる半導体装置では、２ビット以上の精度が要求される場合に対応できない。実施形態の第１の例及び第２の例の１ビット×１ビットの積和演算は、同程度に高速に処理できる上に、多ビットの入力にも対応することができる。
【０１３３】
また、多ビット×多ビット専用回路（ＧＰＵなど）と本実施形態とを比較する。１つの演算器が多ビット×多ビットに対応している場合、演算器ごとの回路規模は、１つの演算器が１ビット×１ビットの場合よりも大きくなる。
【０１３４】
従って、並列数と演算器の演算１回当たりの処理時間が同じ場合、１ビット×１ビットの積和演算では、処理速度は同じで、回路規模が実施形態の第１の例及び第２の例の積和演算回路の方が小さくなる。
【０１３５】
つまり、多ビット×多ビット専用の演算器を使って、１ビット×１ビットの演算をする場合には、使われない回路が存在することになり無駄が大きく効率が悪い。
【０１３６】
例えば演算器が１６×１６個ある場合、１ビット×１ビットの積和演算は１６×１６＝２５６並列で実行することができる。同じ構成を使って４ビット×４ビットの積和演算を（１６／４）×（１６／４）＝１６並列で実行することができる。また２つの行列のビット幅は同じである必要はなく、２ビット×８ビットの積和演算を（１６／２）×（１６／８）＝１６並列で実行することも可能である。
【０１３７】
実施形態の第１の例及び第２の例では、入力のビット幅によらず、演算器を効率よく使い切ることができるので、このような無駄がない。多ビット×多ビットの積和演算を行う場合は、並列数が同じ場合で比較すると、多ビット×多ビット専用の演算器の１つずつで行う計算を、実施形態では複数の演算器を使って行うことになるので、等価的に並列数が少なくなり、実施形態の第３の例及び第４の例の積和演算回路の方が、処理速度が遅くなる。
【０１３８】
しかし、１つの演算器の回路規模は実施形態の方が多ビット×多ビット専用の演算器よりも小さいので、同じ回路規模であれば、実施形態の方が演算器の並列数を大きくすることが可能である。
【０１３９】
その結果、入力のビット幅が小さい場合は、実施形態の方が高速、入力のビット幅が大きい場合は、実施形態の方が低速となる。例えば、ディープラーニングの処理では、層によって要求される入力のビット幅が異なるが、大部分は小さいビット幅で良く、一部のみ大きなビット幅が要求されることがある。このように、入力のビット幅が小さい演算の割合が大きい場合、全体としては、実施形態の情報処理装置１００の方が高速となる。
【０１４０】
本発明のいくつかの実施形態を説明したが、これらの実施形態は、例として提示したものであり、発明の範囲を限定することは意図していない。これら新規な実施形態は、その他の様々な形態で実施されることが可能であり、発明の要旨を逸脱しない範囲で、種々の省略、置き換え、変更を行うことができる。これら実施形態やその変形は、発明の範囲や要旨に含まれるとともに、特許請求の範囲に記載された発明とその均等の範囲に含まれる。
【符号の説明】
【０１４１】
１…積和演算回路、２…メモリ、３…後処理回路、４…ＬＵＴ、５…プロセッサ、１１…、乗算器、１２…加算器、１３…レジスタ、２１…ＡＮＤ論理ゲート、ｘ、ｗ…入力データ、ｕｍ，ｒ…演算器、１００、５０１ａ〜５０１ｄ…情報処理装置、２０１…メモリ、２０２ａ〜２０２ｄ…積和演算部、２０３ｃ、２０３ｄ…補正項算出部、２０４…加算器。
【図１】
2020013455.tif 000012
【図２】
2020013455.tif 000013
【図３】
2020013455.tif 000014
【図４】
2020013455.tif 000015
【図５】
2020013455.tif 000016
【図６】
2020013455.tif 000017
【図７】
2020013455.tif 000018
【図８】
2020013455.tif 000019
【図９】
2020013455.tif 000020
【図１０Ａ】
2020013455.tif 000021
【図１０Ｂ】
2020013455.tif 000022
【図１１】
2020013455.tif 000023
【図１２】
2020013455.tif 000024
【図１３】
2020013455.tif 000025
【図１４】
2020013455.tif 000026
【図１５】
2020013455.tif 000027