JP2020013455A - 畳み込みニューラルネットワークの層において畳み込み演算処理を行なう情報処理装置 - Google Patents
畳み込みニューラルネットワークの層において畳み込み演算処理を行なう情報処理装置 Download PDFInfo
- Publication number
- JP2020013455A JP2020013455A JP2018136714A JP2018136714A JP2020013455A JP 2020013455 A JP2020013455 A JP 2020013455A JP 2018136714 A JP2018136714 A JP 2018136714A JP 2018136714 A JP2018136714 A JP 2018136714A JP 2020013455 A JP2020013455 A JP 2020013455A
- Authority
- JP
- Japan
- Prior art keywords
- input
- product
- sum operation
- weight
- bit
- Prior art date
- Legal status (The legal status is an assumption and is not a legal conclusion. Google has not performed a legal analysis and makes no representation as to the accuracy of the status listed.)
- Abandoned
Links
Classifications
-
- G—PHYSICS
- G06—COMPUTING; CALCULATING OR COUNTING
- G06N—COMPUTING ARRANGEMENTS BASED ON SPECIFIC COMPUTATIONAL MODELS
- G06N3/00—Computing arrangements based on biological models
- G06N3/02—Neural networks
- G06N3/08—Learning methods
-
- G—PHYSICS
- G06—COMPUTING; CALCULATING OR COUNTING
- G06F—ELECTRIC DIGITAL DATA PROCESSING
- G06F7/00—Methods or arrangements for processing data by operating upon the order or content of the data handled
- G06F7/38—Methods or arrangements for performing computations using exclusively denominational number representation, e.g. using binary, ternary, decimal representation
- G06F7/48—Methods or arrangements for performing computations using exclusively denominational number representation, e.g. using binary, ternary, decimal representation using non-contact-making devices, e.g. tube, solid state device; using unspecified devices
- G06F7/544—Methods or arrangements for performing computations using exclusively denominational number representation, e.g. using binary, ternary, decimal representation using non-contact-making devices, e.g. tube, solid state device; using unspecified devices for evaluating functions by calculation
- G06F7/5443—Sum of products
-
- G—PHYSICS
- G06—COMPUTING; CALCULATING OR COUNTING
- G06N—COMPUTING ARRANGEMENTS BASED ON SPECIFIC COMPUTATIONAL MODELS
- G06N3/00—Computing arrangements based on biological models
- G06N3/02—Neural networks
- G06N3/04—Architecture, e.g. interconnection topology
-
- G—PHYSICS
- G06—COMPUTING; CALCULATING OR COUNTING
- G06N—COMPUTING ARRANGEMENTS BASED ON SPECIFIC COMPUTATIONAL MODELS
- G06N3/00—Computing arrangements based on biological models
- G06N3/02—Neural networks
- G06N3/04—Architecture, e.g. interconnection topology
- G06N3/045—Combinations of networks
-
- G—PHYSICS
- G06—COMPUTING; CALCULATING OR COUNTING
- G06N—COMPUTING ARRANGEMENTS BASED ON SPECIFIC COMPUTATIONAL MODELS
- G06N3/00—Computing arrangements based on biological models
- G06N3/02—Neural networks
- G06N3/06—Physical realisation, i.e. hardware implementation of neural networks, neurons or parts of neurons
-
- G—PHYSICS
- G06—COMPUTING; CALCULATING OR COUNTING
- G06N—COMPUTING ARRANGEMENTS BASED ON SPECIFIC COMPUTATIONAL MODELS
- G06N3/00—Computing arrangements based on biological models
- G06N3/02—Neural networks
- G06N3/06—Physical realisation, i.e. hardware implementation of neural networks, neurons or parts of neurons
- G06N3/063—Physical realisation, i.e. hardware implementation of neural networks, neurons or parts of neurons using electronic means
-
- G—PHYSICS
- G06—COMPUTING; CALCULATING OR COUNTING
- G06F—ELECTRIC DIGITAL DATA PROCESSING
- G06F2207/00—Indexing scheme relating to methods or arrangements for processing data by operating upon the order or content of the data handled
- G06F2207/38—Indexing scheme relating to groups G06F7/38 - G06F7/575
- G06F2207/48—Indexing scheme relating to groups G06F7/48 - G06F7/575
- G06F2207/4802—Special implementations
- G06F2207/4818—Threshold devices
- G06F2207/4824—Neural networks
Abstract
【課題】 データ処理の効率化を図る。【解決手段】 実施形態の畳み込みニューラルネットワークの層において畳み込み演算処理を行なう情報処理装置であって、入力、前記入力に対する重み、及び前記重みのフィルタ毎に決定されたビット幅に関する情報を記憶するメモリ201と、前記メモリに記憶された入力、前記入力に対する重み、及び前記重みのフィルタ毎に決定されたビット幅に関する情報に基づいて、積和演算処理を実行する積和演算回路202aとを具備する。【選択図】図1
Description
本発明の実施形態は、畳み込みニューラルネットワークの層において畳み込み演算処理を行なう情報処理装置に関する。
画像認識等で用いられる畳み込みニューラルネットワーク(Convolutional Neural Network、以降「CNN」と表記する)の層においては、畳み込み演算処理が行なわれる。
このようなCNNの層における畳み込み処理は、非常に計算量が多いため、計算の負荷を減らして効率を改善することを狙い、処理毎にそれぞれ異なるビット精度を用いることがある。
また、CNNは複数の層を含むが、例えば画像認識で必要な認識精度を得るために必要となるビット精度は、層によって異なることが知られている。
J. Lee, C. Kim, S. Kang, D. Shin, S. Kim, H. J. Yoo, "UNPU: A 50.6TOPS/W unified deep neural network accelerator with 1b−to−16b fully−variable weight bit−precision," 2018 IEEE International Solid −State Circuits Conference − (ISSCC), Feb. 2018.
CNNにおけるデータ処理の効率化を図る。
実施形態によれば、畳み込みニューラルネットワークの層において畳み込み演算処理を行なう情報処理装置であって、入力、前記入力に対する重み、及び前記重みのフィルタ毎に決定されたビット幅に関する情報を記憶するメモリと、前記メモリに記憶された入力、前記入力に対する重み、及び前記重みのフィルタ毎に決定されたビット幅に関する情報に基づいて、積和演算処理を実行する積和演算回路と、を具備する、情報処理装置である。
以下、実施の形態について、図面を参照して説明する。
0 CNNの概要
CNNは複数層で構成されるが、それぞれの層の中心的な処理は以下の(1)式で表わされる。
0 CNNの概要
CNNは複数層で構成されるが、それぞれの層の中心的な処理は以下の(1)式で表わされる。
ここで、ym,r,cは出力、xn,r,cは入力、wm,n,ky,kxは重みと呼ばれる。重みの各値は学習によって予め決定されるため、画像認識等の処理を実行する際には、既知の固定値である。一方、入力xn,r,cや出力ym,r,cは、画像認識であれば入力の画像が変わるとそれに応じて変化する。
入力xは、高さR、幅C、チャネルNの3次元の構造をとり、図13に示すようなN×R×Cの直方体で表現できる。チャネルNというのは、例えば画像で言えばRGBの各色に対応する。重みwは、M個のフィルタmを含む。重みwは、高さKy、幅Kx、入力チャネルN、出力チャネル(あるいはフィルタm)Mの4次元の構造をとる。重みwの高さKy、幅Kx、入力チャネルNの3次元については入力xの構造と対応しており、入力xと同様に直方体で表現できる。ただし、一般にKyはRより小さな値、KxはCより小さな値である。これにもう一つのフィルタmの次元が加わるため、図で表現すると図14のようにM個のN×Ky×Kxの直方体で表現できる。
入力xの直方体から、重みwのフィルタm1つ分と同じ大きさの領域を切り出し、その領域内で、それぞれの値を乗算した結果を全て足しあわせるという、積和演算を行ったものが出力yの1つの値となる(図15参照)。入力xを切り出す場所と、重みwのうちどのフィルタmを用いるかの組み合わせで、R×C×M個の値が計算できるため、出力yは入力xと同様、3次元の直方体の構造となる。
以上の処理を行う場合、出力y、入力x、重みwには例えば単精度浮動小数等の全て同じ型、すなわち同じビット精度を用いることが一般的である。
1 第1実施形態
本実施形態は、上述の説明の通り、CNNの処理では、積和演算がフィルタmごとに行われることに着目したものである。
1 第1実施形態
本実施形態は、上述の説明の通り、CNNの処理では、積和演算がフィルタmごとに行われることに着目したものである。
簡単のため、重みwを整数で表現する場合で説明する。例えば、ある層の重みwに含まれるM×N×Ky×Kx個の値中の最大値が100、最小値が−100であったとする。この場合、最大値と最小値を表現するために、重みwのビット精度として、−128から+127まで表現することが可能な8ビットを用いることが一般的である。
第1実施形態では、重みwのビット幅をフィルタmの重みwの値ごとに決める。重みwにはM個のフィルタmが含まれる。そのうちの何番目かのフィルタmの重みの値の最大値は100、何番目かのフィルタmの重みの値の最小値は−100である。しかし、例えば0番目のフィルタmに注目すると、フィルタmの重みの値の最大値が50、最小値が−10であったとする。この場合、この0番目のフィルタmに関しては、−64から+63まで表現できる7ビットで十分であり、8ビットは必要がない。同様に、フィルタmごとにフィルタmの重みの値の最大値と最小値を評価し、必要最小限のビット幅を用いることで、全体の計算量や、重みの保存に必要なメモリ容量を削減することができる。
また、上述の通り、積和演算はフィルタmごとに行われるため、ある一つの出力yを算出するためのN×Ky×Kx個の積和演算は、フィルタmごとに全て同じビット幅を用いることができるため効率的に処理をすることが可能である。
図1は、第1実施形態に係る情報処理装置501aを示す図である。
図1に示すように、第1実施形態の情報処理装置501aは、メモリ201に重みwm,n,ky,kx、重みwm,n,ky,kxのビット幅Bwm、及び入力xn,ky,kxに関する情報が格納される。重みwのビット幅Bwmはフィルタm毎に決定される。
これら、メモリ201に記憶された重みwm,n,ky,kx、重みwm,n,ky,kxのビット幅Bwm、及び入力xn,ky,kxに関する情報は、積和演算部202aに入力される。なお、これら重みwm,n,ky,kx、重みwm,n,ky,kxのビット幅Bwm及び入力xn,ky,kxに関する情報は、メモリ201に記憶されずに、直接、積和演算部202aに入力されても良い。
積和演算部202aは、メモリ201に記憶された重みwm,n,ky,kx、重みwm,n,ky,kxのビット幅Bwm、及び入力xn,ky,kxに関する情報に基づいて、積和演算処理を行なう。
積和演算部202aは、ビット幅Bwmの情報に応じてそれに適した積和演算処理を行なう。積和演算部202aによる積和演算処理は、プロセッサによるソフトウェア処理であっても、積和論理演算回路によるハードウェア処理であっても良い。積和演算回路は、例えば、論理演算回路である。
積和演算部202aからの出力は、(1)式で示されるようにym,r,cで表わされる。
積和演算部202aは、ビット幅Bwmの情報に応じてそれに適した積和演算処理を行なう。積和演算部202aによる積和演算処理は、プロセッサによるソフトウェア処理であっても、積和論理演算回路によるハードウェア処理であっても良い。積和演算回路は、例えば、論理演算回路である。
積和演算部202aからの出力は、(1)式で示されるようにym,r,cで表わされる。
重みwm,n,ky,kx及び重みwm,n,ky,kxのフィルタm毎のビット幅Bwmについては、学習により算出された値でありメモリ201に記憶されている。
また、ビット幅Bwmは、ビット幅算出部251(プロセッサ)により計算により求めても良い。図2。に示すように、フィルタm毎のビット幅Bwmは、重みwm,n,ky,kxからフィルタm毎に計算され、計算されたビット幅Bwmがメモリ201に入力される。
フィルタm毎のビット幅Bwmの算出方法については以下の通りである。
重みwm,n,ky,kxのうちwn,ky,kx分の重みの例を図3に示す。図14に示すように、このようなまとまりがM個で重みwm,n,ky,kxとなる。重みwn,ky,kxは、様々な値を持ち、図3の例では最大値は20、最小値は−10である。
重みwm,n,ky,kxのビット幅Bwmは、プロセッサ(図示せず)により計算され、重みwm,n,ky,kxの値の最大値(絶対値の最大値)を2進数で表現したときのビット幅に1ビットを加えた数になる。0中心に対して、プラスマイナスの片側の最大値を出して反対側も表現する必要があるため、1ビット加える。
図3の例では、
そのため、必要なビット幅Bwmは6ビットとなる。
積和演算部202aとしては、例えば、後述する図9に示すような、多ビットのデータが入力される構造の積和演算回路を利用することが可能である。図9は、入力xn,ky,kx及び重みwm,n,ky,kxのビット幅Bwmが3ビットの場合を示している。ここで、入力xn,ky,kx及び重みwm,n,ky,kxのky,kxは、時刻tで示されている。また、図9は、フィルタm=0の入力xt,0,及び重みw0,tが示されている。
2 第2実施形態
図4は、第2実施形態に係る情報処理装置501bを示す図である。第2実施形態の情報処理装置501bは、複数のフィルタmに対して同時に並列実行が可能な積和演算部202bを使用するものである。
図4に示すように、第2実施形態では、メモリ201にL個のフィルタmの重みwm0〜wmL−1、重みwm0〜wmL−1のビット幅Bwm0〜BwmL−1及び入力xn,ky,kxに関する情報が格納される。
2 第2実施形態
図4は、第2実施形態に係る情報処理装置501bを示す図である。第2実施形態の情報処理装置501bは、複数のフィルタmに対して同時に並列実行が可能な積和演算部202bを使用するものである。
図4に示すように、第2実施形態では、メモリ201にL個のフィルタmの重みwm0〜wmL−1、重みwm0〜wmL−1のビット幅Bwm0〜BwmL−1及び入力xn,ky,kxに関する情報が格納される。
第2実施形態では、L個のフィルタmの重みwm0〜wmL−1のビット幅Bwm0〜BwmL−1はフィルタmごとに異なる。L個のフィルタmの重みwm0〜wmL−1及び重みwm0〜wmL−1のそれぞれのビット幅Bwm0〜BwmL−1が積和演算部202bに入力される。なお、L個のフィルタmの重みwm0〜wmL−1、重みwm0〜wmL−1のビット幅Bwm0〜BwmL−1及び入力xn,ky,kxは、メモリ201に記憶されずに、直接、積和演算部202bに入力されても良い。
積和演算部202bは、メモリ201に記憶されたL個のフィルタmの重みwm0〜wmL−1及び重みwm0〜wmL−1のそれぞれのビット幅Bwm0〜BwmL−1及び入力xn,ky,kxに関する情報に基づいて、複数のフィルタm毎に、積和演算処理を実行する。
積和演算部202bでは、複数のフィルタmに関する処理が並列に実行される。入力された重みwm0〜wmL−1それぞれのフィルタmのビット幅Bwm0〜BwmL−1に応じてそれに適した積和演算処理が行なわれる。積和演算部202bによる積和演算処理は、プロセッサによるソフトウェア処理であっても、積和論理演算回路によるハードウェア処理であっても良い。 積和演算部202bからの出力は、(1)式で示されるようにym,r,cで表わされる。
積和演算部202bでは、複数のフィルタmに関する処理が並列に実行される。入力された重みwm0〜wmL−1それぞれのフィルタmのビット幅Bwm0〜BwmL−1に応じてそれに適した積和演算処理が行なわれる。積和演算部202bによる積和演算処理は、プロセッサによるソフトウェア処理であっても、積和論理演算回路によるハードウェア処理であっても良い。 積和演算部202bからの出力は、(1)式で示されるようにym,r,cで表わされる。
積和演算部202bとしては、例えば、後述する図9に示すような、多ビットのデータが入力される構造の積和演算回路であり、さらに、複数のフィルタmに対して同時に並列実行が可能な構造の積和演算回路を利用することが可能である。
3 第3実施形態
第1実施形態で述べた0番目のフィルタmの重みの値は、最大値が50、最小値が−10であり、通常の2の補数表現でこの範囲を表すためには7ビットが必要であった。しかし、+50から−10の範囲に含まれる整数の種類はたかだか61であり、これは6ビットで表現できる範囲である。第3実施形態では、フィルタm毎の重みの値の最大値と最小値を使用するのではなく、フィルタmの範囲を評価して、必要最小限のビット幅を用いる。これにより、更に全体の計算量や、重みの保存に必要なメモリ容量を削減することができる。
3 第3実施形態
第1実施形態で述べた0番目のフィルタmの重みの値は、最大値が50、最小値が−10であり、通常の2の補数表現でこの範囲を表すためには7ビットが必要であった。しかし、+50から−10の範囲に含まれる整数の種類はたかだか61であり、これは6ビットで表現できる範囲である。第3実施形態では、フィルタm毎の重みの値の最大値と最小値を使用するのではなく、フィルタmの範囲を評価して、必要最小限のビット幅を用いる。これにより、更に全体の計算量や、重みの保存に必要なメモリ容量を削減することができる。
数式で表すと以下のようになる。
ここで、wm,n,ky,kx=w’m,n,ky,kx+bmである。bmは、wの範囲を必要最小限のビット精度で表現できるようにw’を補正するための値である。bmは、フィルタmごとに1つの値となる。例えば、bm=(max w + 1 + min w)/2と決めることができる。この結果、重みw’mのビット幅Bw’mはもとの重みwmのビット幅Bwmよりも小さくなるため、(2)式の第1項は小さなビット幅で演算することができる。(1)式と比べ、第2項が追加されているが、第1項がM×N×Ky×Kx×R×C回の積和演算が必要なのに対して、第2項はN×R×C+Ky×Kx×R×C回の加算で計算することができる。第2項は、第1項に対して十分小さいため、第2項の処理が加わることのオーバーヘッドよりも、第1項のビット幅を小さくしたことの効果の方が大きくなることが期待できる。
図5は、第3実施形態に係る情報処理装置501cを示す図である。
第3実施形態の情報処理装置501cは、図5に示すように、第1実施形態に加え、入力xと補正値bw’mに関する情報に基づいて、 (2)式の第2項を計算するための、補正項算出部203cを備える。
メモリ201には、重みw’m,n,ky,kx、重みw’m,n,ky,kxのビット幅Bw’m、入力xn,ky,kx及び補正値bw’mに関する情報が格納される。重みw’のビット幅Bw’mはフィルタm毎に決定される。
これら、メモリ201に記憶された重みw’m,n,ky,kx、重みw’m,n,ky,kxのビット幅Bw’m及び入力xn,ky,kxに関する情報は、積和演算部202cに入力される。なお、これら重みw’m,n,ky,kx、重みw’m,n,ky,kxのビット幅Bw’m及び入力xn,ky,kxに関する情報は、メモリ201に記憶されずに、直接、積和演算部202cに入力されても良い。
積和演算部202cは、ビット幅Bw’mの情報に応じてそれに適した積和演算処理を行なう。
積和演算部202cからの出力は、(2)式の第1項で表わされる。
メモリ201に記憶された入力xn,ky,kx及び補正値bw’mは、補正項算出部203cに入力される。補正項算出部203cは、メモリ201から入力される入力xn,ky,kx及び補正値bw’mに基づいて、(2)式の第2項で表わされる補正項を出力する。
加算器204は、積和演算部202cの出力((2)式の第1項)と、補正項算出部203cの出力((2)式の第2項)とを加算して、ym,r,cを出力する。
積和演算部202cによる積和演算処理、補正項算出部203cによる補正項算出処理及び加算器204による加算処理は、プロセッサによるソフトウェア処理であっても、積和論理演算回路によるハードウェア処理であっても良い。
これまでの実施形態と同様、重みw’のビット幅Bw’mはフィルタmによって異なる。補正値bWmもフィルタmごとに異なる値である。
積和演算部202cは、ビット幅Bwmの情報に応じてそれに適した積和演算処理を行なう。
積和演算部202cとしては、例えば、後述する図9に示すような、多ビットのデータが入力される構造の積和演算回路であり、さらに、複数のフィルタmに対して同時に並列実行が可能な構造の積和演算回路を利用することが可能である。
加算器204からの出力は、(1)式で示されるようにym,r,cで表わされる。
重みw’m,n,ky,kx、重みw’m,n,ky,kxのフィルタm毎のビット幅Bw’m、補正値bw’mについては、学習により算出された値でありメモリ201に記憶されている。
また、重みw’、重みw’のビット幅Bw’m及び補正値bw’mについては、ビット幅補正部301(プロセッサ)により計算により求めても良い。図6に示すように、メモリ201に記憶される前の入力xn,ky,kxに対する重みwm,n,ky,kxからビット幅補正部301により、重みw’ m、ビット幅Bw’m、及び補正値bw’mが計算される。ビット幅Bw’mはフィルタm毎に計算される。これら重みwm,n,ky,kxから得られる重みw’ m、ビット幅Bw’m、及び補正値bw’mに関する情報は、メモリ201に入力される。
第3実施形態では重みのビット幅をより最適化して小さくするために補正値bw’mが使用される。重みw’ m,n,ky,kxとビット幅Bw’mを及び入力xは積和演算部202cに入力され、補正に使用する補正値bw’mは補正項算出部203cに入力される。
重みw’ m,n,ky,kx、ビット幅Bw’m及び補正値bw’mのビット幅補正部301による算出方法は以下の通りである。
図3に示した例では、重みwm,n,ky,kxには6ビットのビット幅が必要である。
しかし、実際は20+10+1の31値を表現出来れば良い。従って、必要最低限の重みのビット幅は、
となり、5ビットとなる。この例の場合、全ての値から”5”を引けば、最大値が15、最小値が―15となり、5ビットで表現することができるようになるので、補正値bw’mは”5”である。この”5”という値は、例えば、(max wm+1+min wm)/2で計算することができる。
従って、第3実施形態の情報処理装置501cによれば、演算量の多い積和演算部202cの重みのビット幅が6ビットから5ビットに減るので演算量を更に減らすことができる。
4 第4実施形態
図7は、第4実施形態に係る情報処理装置501dを示す図である。第4実施形態の情報処理装置501dは、複数のフィルタmに対して同時に並列実行が可能な積和演算部202dを使用するものである。
4 第4実施形態
図7は、第4実施形態に係る情報処理装置501dを示す図である。第4実施形態の情報処理装置501dは、複数のフィルタmに対して同時に並列実行が可能な積和演算部202dを使用するものである。
図7に示すように、第4実施形態では、メモリ201にL個のフィルタmの重みw’m0〜w’mL−1、重みw’m0〜w’mL−1のビット幅Bw’m0〜Bw’mL−1、入力xn,ky,kx、及びビット幅Bw’m0〜Bw’mL−1に対する補正値bw’m0〜bw’mL−1に関する情報が格納される。
第4実施形態では、L個のフィルタmのビット幅Bw’m0〜Bw’mL−1がフィルタmごとに異なる。L個のフィルタmの重みw’m0〜w’mL−1、重みw’m0〜w’mL−1のそれぞれのビット幅Bw’m0〜Bw’mL−1、及び入力xn,ky,kxに関する情報が積和演算部202dに入力される。なお、これらL個のフィルタmの重みw’m0〜w’L−1、重みw’m0〜w’mL−1のビット幅Bw’m0〜Bw’mL−1、及び入力xn,ky,kxに関する情報は、メモリ201に記憶されずに、直接、積和演算部202dに入力されても良い。
積和演算部202dでは、メモリ201に記憶されたL個のフィルタmの重みw’m0〜w’mL−1、重みw’m0〜w’mL−1のそれぞれのビット幅Bw’m0〜Bw’mL−1、及び入力xn,ky,kxに関する情報に基づいて、積和演算処理を行なう。
積和演算部202dでは、複数のフィルタmに関する処理が並列に実行される。入力されたw’m0〜w’mL−1のそれぞれのフィルタmのビット幅Bw’m0〜BwmL−1に応じてそれに適した積和演算処理が行なわれる。積和演算部202dからの出力は、(2)式の第1項で表わされる。
積和演算部202dでは、複数のフィルタmに関する処理が並列に実行される。入力されたw’m0〜w’mL−1のそれぞれのフィルタmのビット幅Bw’m0〜BwmL−1に応じてそれに適した積和演算処理が行なわれる。積和演算部202dからの出力は、(2)式の第1項で表わされる。
積和演算部202dとしては、例えば、後述する図9に示すような、多ビットのデータが入力される構造の積和演算回路であり、さらに、複数のフィルタmに対して同時に並列実行が可能な構造の積和演算回路を利用することが可能である。
補正項算出部203dは、メモリ201から入力される入力xn,ky,kx及び補正値bw’m0〜bw’mL−1に基づいて、(2)式の第2項で表わされる補正項を出力する。
加算器204は、積和演算部202dの出力((2)式の第1項)と、補正項算出部203dの出力((2)式の第2項)とを加算して、ym,r,cを出力する。
積和演算部202dによる積和演算処理、補正項算出部203dによる補正項算出処理及び加算器204による加算処理は、プロセッサによるソフトウェア処理であっても、積和論理演算回路によるハードウェア処理であっても良い。
加算器204からの出力は、(1)式で示されるようにym,r,cで表わされる。
5 第5実施形態
第1乃至第4実施形態において説明したように、積和演算部202a〜202dにはフィルタm毎に異なるビット幅Bwm又はBw’mのデータが入力される。第5実施形態では、メモリから積和演算回路に入力されるフィルタm毎に異なるビット幅Bwのデータx、wの一連のデータ処理について説明する。
5−1 情報処理装置の構成
図8は、第5実施形態に係る情報処理装置100を示す図である。
加算器204からの出力は、(1)式で示されるようにym,r,cで表わされる。
5 第5実施形態
第1乃至第4実施形態において説明したように、積和演算部202a〜202dにはフィルタm毎に異なるビット幅Bwm又はBw’mのデータが入力される。第5実施形態では、メモリから積和演算回路に入力されるフィルタm毎に異なるビット幅Bwのデータx、wの一連のデータ処理について説明する。
5−1 情報処理装置の構成
図8は、第5実施形態に係る情報処理装置100を示す図である。
図8に示すように、積和演算回路1には、メモリ2及び後処理回路3が接続されている。積和演算回路1には、メモリ2に記憶された2つのデータ(データX、W)が入力される。
データXは、t行r列の行列形式で表現されるデータであり、データWは、m行t列の行列形式で表現されるデータである(t,r,mは0又は正の整数)。実施形態では、tは時刻(読み出しサイクル)であるものとする。
2つの行列を
W={wm,t}0≦m≦M-1,0≦t≦T-1 ,
X={xt,r}0≦t≦T−1,0≦r≦R−1
とする。
W={wm,t}0≦m≦M-1,0≦t≦T-1 ,
X={xt,r}0≦t≦T−1,0≦r≦R−1
とする。
ここで、T−1は読み出しサイクルの最大値、R−1はデータXの行列の最大列数、M−1はデータWの行列の最大行数である。
積和演算回路1は、メモリ2から入力される2つのデータ(W,X)の行列演算を行ない、その計算結果を後処理回路3に出力する。具体的には、積和演算回路1は、複数の演算器を有し、これら各演算器は乗算器とアキュームレータとを有し、アレイ状に配置されている。
計算する行列をY=WXとすると、Y={ym,r}0≦m≦M−1,0≦r≦R−1の各要素に対する演算は、次のような積和演算の形となる。
すなわち、積和演算回路1は、積和演算結果を、後処理回路3に出力する。
メモリ2は、SRAM、DRAM、SDRAM、NANDフラッシュメモリ、3次元構造のフラッシュメモリ、MRAM、レジスタ、ラッチ回路、を含む、半導体メモリであればよい。
後処理回路3は、積和演算回路1からのm行r列に対応する時刻T−1での各演算器の出力に対して、各演算器に対して設定され得る所定の係数を使用して演算を行い、演算結果に出力インデックスを付してプロセッサ5に出力する。このとき、後処理回路3は、必要に応じて、ルックアップテーブル(LUT)4から所定の係数及び出力インデックスを取得する。
なお、後処理が必要とされない場合には、後処理回路3を設ける必要なく、積和演算回路1からの出力はプロセッサ5に出力される。
LUT4は、積和演算回路1の各演算器に対する所定の係数及び出力インデックスを格納する。なお、LUT4は、記憶回路であっても良い。
プロセッサ5は、後処理回路3により処理された各演算器の積和演算結果を受信する。また、プロセッサ5は、LUT4に格納され、各演算器に対して設定される所定の係数や出力インデックスを設定可能である。
5−1−1 第1の例の積和演算回路(多ビットの場合1:入力されるデータwm,t,xt,rが3ビットの場合の積和演算回路)
図9は、第5実施形態に係る情報処理装置100の第1の例の積和演算回路1aを示す図である。第1の例の積和演算回路1aは、入力される各データw0,t,xt,0が3ビットの場合を示す。
図9は、第5実施形態に係る情報処理装置100の第1の例の積和演算回路1aを示す図である。第1の例の積和演算回路1aは、入力される各データw0,t,xt,0が3ビットの場合を示す。
例えば、第1実施形態の積和演算部202aを図9に示した積和演算回路1aに適用すると、積和演算部202aに入力される重みwのビット幅Bwmが3ビット、フィルタmが0の場合に相当する。また、インデックスn、ky、kxをまとめてt(時刻)としている。例えばt=(n×Ky+ky)×Kx+kxとすることができる。
図9に示すように、9個の各演算器ub0,0〜ub2,2がアレイ状に並列に配置される。演算器ubm,rは、m行r列に位置する演算器を表わす。各演算器ub0,0〜u2,2は、乗算器21、加算器12及びレジスタ13を有する。
各演算器ub0,0〜u2,2の乗算器21は第1の入力端子及び第2の入力端子を有する。演算器ubm,rの乗算器21の第1の入力端子は、m行に配置された他の演算器と共有のデータ線に接続され、第2の入力端子は、r列に配置された他の演算器と共有のデータ線に接続される。
すなわち、演算器ubm,rの一部の乗算器21の第1の入力端子から入力される第1入力は、データwm,tのデータ線を行方向で共有し、乗算器21の第2の入力端子から入力される第2入力は、データxt,rのデータ線を列方向で共有する。
従って、時刻tにおいて、演算器ub0,0、ub0,1、ub0,2の乗算器21の第1入力はデータw(2) 0,tの値を共有し、演算器ub1,0、ub1,1、ub1,2の乗算器21の第1入力はデータw(1) 0,tの値を共有し、演算器ub2,0、u2,1、u2,2の乗算器21の第1入力はデータw(0) 0,tの値を共有する。
同様に、時刻tにおいて、演算器ub0,0、ub1,0、ub2,0の乗算器21の第2入力はデータx(2) t,0の値を共有し、演算器ub0,1、ub1,1、ub2,1の乗算器21の第2入力はデータx(1) t,0の値を共有し、・・・・、演算器ub0,2、ub1,2ub2,2の乗算器21の第2入力はデータX(0) t,0の値を共有する。
各演算器ub0,0〜ub2,2の乗算器21は、第1入力に入力されたデータと、第2入力に入力されたデータとを乗算して、その乗算結果を加算器12に出力する。
従って、時刻tにおける演算器ub0,0、ub0,1、ub0,2の各乗算器21は、それぞれ第1入力のデータw(2) 0,tの値と第2入力のデータx(2) t,0、x(1) t,0、x(0) t,0とを乗算した各乗算結果を出力する。
また、時刻tにおける演算器ub0,0、ub1,0、ub2,2の各乗算器21は、それぞれ第2入力のデータx(2) t,0の値と第1入力のデータw(2) 0,t、w(1) 0,t、w(0) 0,tとを乗算した各乗算結果を出力する。
各演算器ub0,0〜ub2,2の加算器12とレジスタ13とは、アキュームレータを構成する。各演算器ub0,0〜ub2,2の加算器12は、乗算器21からの乗算結果と、レジスタ13に格納された時刻t−1(時刻tの1サイクル前)でのレジスタ13の値(アキュームレータの値)とを加算する。
レジスタ13は、時刻t−1における加算器12からの乗算結果を保持し、時刻tのサイクルで加算器12から出力された加算結果を保持する。
このように、3×3個の演算器がアレイ状に並列に配置され、時刻tに、m行にあるr個の演算器Ubに対してwm,tが入力され、r列にあるm個の演算器に対してxt,rが入力される。この結果、第m行、第r列の演算器では、時刻tに以下の計算が実行される。
ym、r、t = ym、r、t−1 + wm,t × xt,r
…(4)
ここで、ym、r、tは、時刻tに演算器ubm,rのレジスタ13に新たに格納された値である。この結果Tサイクルで、(1)式の演算が完了する。つまり、3×3個の演算器が、それぞれTサイクルかけてym,rを計算することで、行列式Y=W×Xを計算することができる。
…(4)
ここで、ym、r、tは、時刻tに演算器ubm,rのレジスタ13に新たに格納された値である。この結果Tサイクルで、(1)式の演算が完了する。つまり、3×3個の演算器が、それぞれTサイクルかけてym,rを計算することで、行列式Y=W×Xを計算することができる。
各演算器ubm,rの時刻tにおけるレジスタ13の値は、後処理回路3に出力される。
演算器ub0,0〜ub2,2の構成は、以下の通りである。
演算器ub0,0〜ub2,2の構成は、以下の通りである。
各演算器ubm,rの積和演算回路1aのAND論理ゲート21の2つの入力は1ビットであり、1ビットのデータwm,t及びxt,rが入力される。AND論理ゲート21の出力は1ビットであり、データwm,t及びxt,rのAND論理が出力される。
加算器12の1つの入力は1ビットであり、AND論理ゲート21からの1ビットの出力データが入力される。加算器12の他の入力は多ビットであり、レジスタ13からの時刻t−1における多ビットのレジスタ13の値が入力される。加算器12は、AND論理ゲート21からの1ビットの出力データと、レジスタ13からの時刻t−1における多ビットのレジスタ13の値とを加算した多ビットのデータを出力する。
レジスタ13の入力は多ビットであり、時刻tにおける、AND論理ゲート21からの1ビットの出力データが加算器12で加算された多ビットの出力データを保持する。時刻T(サイクル)における各演算器ubm,rの積和演算回路1aのレジスタ13の値は、後処理回路3に出力される。
積和演算回路1aから出力された各演算器ubm,rの出力は、後処理回路3に出力される。
なお、1ビットのデータwm,t及びxt,rが(1,0)で表現される場合には、AND論理ゲート21はAND論理ゲートであるが、(+1,−1)で表現される場合には、AND論理ゲート21はXNOR論理ゲートとなる。
また、AND論理ゲート21と、XNOR論理ゲート(図示せず)と、レジスタの設定によりAND論理ゲート21及びXNOR論理ゲートの何れかを選択する選択回路(図示せず)と、を各演算器ubm,rに設けても良い。
また、入力が1ビットのアキュームレータは、図9に示すように、加算器12及びレジスタ13で構成しても良いが、非同期カウンタを使用しても良い。
図9に示すように、入力されるデータw0,t,xt,0が3ビットの場合の積和演算回路1aは、データw0,t (0)のデータ線にはデータw0,tの0ビット目(LSB)の値が入力され、データw0,t (1)のデータ線にはデータw0,tの1ビット目の値が入力され、データw0,t (2)のデータ線にはデータw0,tの2ビット目(MSB)の値が入力される。
また、データxt,0 (0)のデータ線にはデータxt,0の0ビット目(LSB)の値が入力され、データxt,0 (1)のデータ線にはデータxt,0の1ビット目の値が入力され、データxt,0 (2)のデータ線にはデータxt,0の2ビット目(MSB)の値が入力される。
例えば、時刻tにおいて、データw0,tが3ビットで「011b」で表わされる場合、データw0,t (0)のデータ線には「1」、データw0,t (1)のデータ線には「1」、データw0,t (2)のデータ線には「0」が入力される。
また、時刻tにおいて、データxt,0が3ビットで「110b」で表わされる場合、データxt,0 (0)のデータ線には「0」、データxt,0 (1)のデータ線には「1」、データxt,0 (2)のデータ線には「1」が入力される。
すなわち、データwm,t、xt,rが3ビットの場合、以下のように表現することができる。なお、ここでは、出力の1要素のみに注目することとし、これまでの説明で使ったm,rの添え字は省略する。wt (2)等の値は、全て1ビットの値(0又は1)である。
wt=wt (2)×22+wt (1)×21+wt (0)×20
…(5)
xt=xt (2)×22+xt (1)×21+xt (0)×20
…(6)
このとき、(3)式は、次のようになる。
…(5)
xt=xt (2)×22+xt (1)×21+xt (0)×20
…(6)
このとき、(3)式は、次のようになる。
(7)式を見ると、1行目の3つのシグマではw(t) (2)が、2行目の3つのシグマではw(t) (1)が、3行目の3つのシグマではw(t) (0)が利用されている。また、1列目の3つのシグマにはx(t) (2)が、2列目の3つのシグマにはx(t) (1)が、3列目の3つのシグマにはx(t) (0)が利用されている。すなわち、図9に示した演算器ub0,0〜u2,2の構成は、(7)式における各シグマの項の演算に相当する。
各演算器ub0,0〜u2,2の出力は、後処理回路3に出力される。後処理回路3では、各シグマにそれぞれ対応する2のべき乗の係数を掛けて足し合わせることで、最終的な多ビットの積和演算の結果が得られる。なお、後処理回路3における2のべき乗の係数を掛ける処理は、シフト演算で容易に実行することができる。
ディープニューラルネットワークを含め多くの場合、Tは100を超えるような比較的大きな値である。そのためシグマの項の1ビットの積和演算に対して、最後に2のべき乗の係数をかけてシグマ同士を足し合わせる処理(後処理と呼ぶ)は、低頻度でしか実行されない。後処理の実行方法については、例えば逐次的に実行する等、適宜選択しても良い。
・負の数の取り扱いについて
データの値を2の補数表現で扱う場合、(5)、(6)式は次のようになる。
wt=−wt (2)×22+wt (1)×21+wt (0)×20
…(5’)
xt=−xt (2)×22+xt (1)×21+xt (0)×20
…(6’)
この時、(7)式は次のようになる。
・負の数の取り扱いについて
データの値を2の補数表現で扱う場合、(5)、(6)式は次のようになる。
wt=−wt (2)×22+wt (1)×21+wt (0)×20
…(5’)
xt=−xt (2)×22+xt (1)×21+xt (0)×20
…(6’)
この時、(7)式は次のようになる。
つまり、後処理回路3における後処理の際に、係数を負にすれば良く、図9と同様の構成を利用することができる。
5−1−2 第2の例の積和演算回路(多ビットの場合2:入力されるデータwm,t,が異なるビット、xt,rが4ビットの場合の積和演算回路)
次に、第2の例の積和演算回路について説明する。
5−1−2 第2の例の積和演算回路(多ビットの場合2:入力されるデータwm,t,が異なるビット、xt,rが4ビットの場合の積和演算回路)
次に、第2の例の積和演算回路について説明する。
第2の例では、積和演算回路が16×16の構成の演算器アレイの場合について説明する。
入力データであるXは32行4列の行列とし、全ての要素が4ビットで表現されているとする。入力データであるWは15行32列の行列とし、各行の要素のビット幅がそれぞれ{1,2,4,2,2,1,2,3,2,2,3,2,1,3,2}であるとする。つまり、例えば、0行目の32要素は1ビット、1行目の32要素は2ビット、2行目の32要素は4ビット、3行目の32要素は2ビット、・・・、ということを表す。
入力データであるXは32行4列の行列とし、全ての要素が4ビットで表現されているとする。入力データであるWは15行32列の行列とし、各行の要素のビット幅がそれぞれ{1,2,4,2,2,1,2,3,2,2,3,2,1,3,2}であるとする。つまり、例えば、0行目の32要素は1ビット、1行目の32要素は2ビット、2行目の32要素は4ビット、3行目の32要素は2ビット、・・・、ということを表す。
例えば、第1実施形態の積和演算部202aを図10A及び図10Bに示した演算器に適用すると、積和演算部202aに入力される重みwのビット幅Bwmが{1,2,4,2,2,1,2,3,2,2,3,2,1,3,2}、フィルタmが0〜14の場合に相当する。また、インデックスn、ky、kxをまとめてt(時刻)としている。例えばt=(n×Ky+ky)×Kx+kxとすることができる。
行列積Y=WXは15行4列の行列となる。図10A及び図10Bは入力データW、Xの各値をどのように演算器アレイに入力するかを示している。両図中のu0,0〜u15,15はそれぞれ1個の演算器を示している。xt,r (b)は、Xのt行r列のbビット目の値を意味し、wm,t (b)は、Wのm行t列のbビット目の値を意味する。すなわち、t=0は、Xの0行目且つWの0列目に対応し、t=31は、Xの31行目且つWの31列目に対応する。
図10Aのとおり、Xは4列×4ビットがちょうど演算器の列数16に収まっているが、Wは7行目の2ビット目と1ビット目までで演算器uの行数16を使い切っていることがわかる。従って、7行目の0ビット目を含むWの残りの行については後で計算を行なう。
tは初期値が0で、31になるまで1サイクルに1ずつインクリメントする。y(um,r)を、演算器um,rのアキューミュレータ出力とすると、例えば、32サイクル後には、y0,0に含まれるy(u0,0)からy(u0,3)は、(8)式に示す値となる。
これらに対して、後処理回路3において、以下の演算を行なうことで、y0,0を求めることができる。
y0,0=23×y(u0,0)+22×y(u0,1)+21×y(u0,2)+20×y(u0,3)
同様に、32サイクル後には、y1,0に含まれるy(u1,0)からy(u2,3)は、(9)式に示す値となる。
同様に、32サイクル後には、y1,0に含まれるy(u1,0)からy(u2,3)は、(9)式に示す値となる。
これから、y1,0を以下のように計算することができる。
y1,0=24×y(u1,0)+23×y(u1,1)+22×y(u1,2)+21×y(u1,3)
+23×y(u2,0)+22×y(u2,1)+21×y(u2,2)+20×y(u2,3)
…(10)
このように、各演算器um,rの結果それぞれに対する、係数(2のべき乗)の値及び出力のどの要素に対応するか(インデックス)は、互いに異なる。例えば、係数の値と、出力インデックスを以下のように設定する。
y1,0=24×y(u1,0)+23×y(u1,1)+22×y(u1,2)+21×y(u1,3)
+23×y(u2,0)+22×y(u2,1)+21×y(u2,2)+20×y(u2,3)
…(10)
このように、各演算器um,rの結果それぞれに対する、係数(2のべき乗)の値及び出力のどの要素に対応するか(インデックス)は、互いに異なる。例えば、係数の値と、出力インデックスを以下のように設定する。
y(u0,0):係数=23、出力インデックス=(0,0)
y(u0,1):係数=22、出力インデックス=(0,0)
y(u0,2):係数=21、出力インデックス=(0,0)
y(u0,3):係数=20、出力インデックス=(0,0)
y(u1,0):係数=24、出力インデックス=(1,0)
y(u1,1):係数=23、出力インデックス=(1,0)
y(u1,2):係数=22、出力インデックス=(1,0)
y(u1,3):係数=21、出力インデックス=(1,0)
y(u1,0):係数=23、出力インデックス=(1,0)
y(u1,1):係数=22、出力インデックス=(1,0)
y(u1,2):係数=21、出力インデックス=(1,0)
y(u1,3):係数=20、出力インデックス=(1,0)
…(11)
つまり、実施形態では、(m,r)をアドレスとする係数と出力インデックスを格納したLUT4を用意する。図11は、LUT4を示す図である。
y(u0,1):係数=22、出力インデックス=(0,0)
y(u0,2):係数=21、出力インデックス=(0,0)
y(u0,3):係数=20、出力インデックス=(0,0)
y(u1,0):係数=24、出力インデックス=(1,0)
y(u1,1):係数=23、出力インデックス=(1,0)
y(u1,2):係数=22、出力インデックス=(1,0)
y(u1,3):係数=21、出力インデックス=(1,0)
y(u1,0):係数=23、出力インデックス=(1,0)
y(u1,1):係数=22、出力インデックス=(1,0)
y(u1,2):係数=21、出力インデックス=(1,0)
y(u1,3):係数=20、出力インデックス=(1,0)
…(11)
つまり、実施形態では、(m,r)をアドレスとする係数と出力インデックスを格納したLUT4を用意する。図11は、LUT4を示す図である。
図11に示すように、LUT4には、coef[m,r]及びindex[m,r]が格納される。coef[m,r]はm行r列の乗算器um,rの出力y(u(m,r))に乗ぜられる係数、index[m,r]は乗算器um,rの出力y(u(m,r))に付される出力インデックスである。
図10Aに示すように、w7,tは、1の演算器uにより1回の演算で、3ビットのうちの上位2ビットしか計算することができない。この上位2ビットの一部であり、y7,0に含まれるy(u14,0)からy(u15,3)に対応する係数と出力インデックスは以下の通りである。
y(u14,0): 係数=25、 出力インデックス=(7,0)
y(u14,1): 係数=24、 出力インデックス=(7,0)
y(u14,2): 係数=23、 出力インデックス=(7,0)
y(u14,3): 係数=22、 出力インデックス=(7,0)
y(u15,0): 係数=24、 出力インデックス=(7,0)
y(u15,1): 係数=23、 出力インデックス=(7,0)
y(u15,2): 係数=22、 出力インデックス=(7,0)
y(u15,3): 係数=21、 出力インデックス=(7,0)
…(12)
従って、y7,0は以下の値となる。
y(u14,1): 係数=24、 出力インデックス=(7,0)
y(u14,2): 係数=23、 出力インデックス=(7,0)
y(u14,3): 係数=22、 出力インデックス=(7,0)
y(u15,0): 係数=24、 出力インデックス=(7,0)
y(u15,1): 係数=23、 出力インデックス=(7,0)
y(u15,2): 係数=22、 出力インデックス=(7,0)
y(u15,3): 係数=21、 出力インデックス=(7,0)
…(12)
従って、y7,0は以下の値となる。
y7,0=25×y(u14,0)+24×y(u14,1)+23×y(u14,2)+22×y(u14,3)+24×y(u15,0)+23×y(u15,1)+22×y(u15,2)+21×y(u15,3)
…(13)
残りの1ビットは、図10Aに示した演算が完了した後に、今度は、図10Bに示すwを演算器u0,0〜u15,15に入力する。この例では、xは図10Aと同じである。y7,0の残りの下位1ビットに該当するy(u0,0)からy(u0,3)に対応する係数と出力インデックスは以下の通りである。
…(13)
残りの1ビットは、図10Aに示した演算が完了した後に、今度は、図10Bに示すwを演算器u0,0〜u15,15に入力する。この例では、xは図10Aと同じである。y7,0の残りの下位1ビットに該当するy(u0,0)からy(u0,3)に対応する係数と出力インデックスは以下の通りである。
y(u0,0):係数=23,出力インデックス=(7,0)
y(u0,1):係数=22,出力インデックス=(7,0)
y(u0,2):係数=21,出力インデックス=(7,0)
y(u0,3):係数=20,出力インデックス=(7,0)
これらの値を使って、係数と出力インデックスに基づくアルゴリズムに従って後処理を行なうと、(13)式の結果と合わせて、(14)式となる。
y(u0,1):係数=22,出力インデックス=(7,0)
y(u0,2):係数=21,出力インデックス=(7,0)
y(u0,3):係数=20,出力インデックス=(7,0)
これらの値を使って、係数と出力インデックスに基づくアルゴリズムに従って後処理を行なうと、(13)式の結果と合わせて、(14)式となる。
y7,0=25×y(u14,0)+24×y(u14,1)+23×y(u14,2)+22×y(u14,3)+24×y(u15,0)+23×y(u15,1)+22×y(u15,2)+21×y(u15,3)+23×y(u0,0)+22×y(u0,1)+21×y(u0,2)+20×y(u0,3)
…(14)
これにより、図10Aに示した処理において途中であったy7,0の計算が完了する。
5−2 後処理演算のフローチャート
図12は、第2の例の積和演算回路に対する後処理演算を説明するためのフローチャートである。
…(14)
これにより、図10Aに示した処理において途中であったy7,0の計算が完了する。
5−2 後処理演算のフローチャート
図12は、第2の例の積和演算回路に対する後処理演算を説明するためのフローチャートである。
図12に示すように、後処理回路3は、時刻t(開始時はt=0である)の各演算器um,rのアキュームレータの出力を受信する(S1)。後処理回路3は、各演算器um,rの出力y(um,r)に、各演算器um,r出力に対応し、LUT4に格納された係数を乗じ、出力インデックスを付加する後処理を実行する(S2)。
その後、時刻t=31までの全ての演算器u0,0〜u15,15のアキュームレータの出力について、後処理演算が終了したか否かが判断される(S3)。終了していないと判断された場合(S3のNo)には、S1に戻り、後処理回路3は、時刻t=1以降の残りの演算器u0,0〜u15,15のアキュームレータの出力について、後処理演算を行う。
一方、S3において、時刻t=31までの全ての演算器u0,0〜u15,15のアキュームレータの出力について、後処理演算が終了したと判断された場合(S3のYes)、後処理回路3は、後処理演算の処理結果をプロセッサ5に送信し(S4)、処理を終了する。
5−3 効果
実施形態の情報処理装置100の積和演算回路1の構成によれば、SRAM等のメモリから積和演算回路1の演算器アレイへのデータ移動を少なくできる。その結果、情報処理装置100のデータ処理の効率化を図ることができる。
5−3 効果
実施形態の情報処理装置100の積和演算回路1の構成によれば、SRAM等のメモリから積和演算回路1の演算器アレイへのデータ移動を少なくできる。その結果、情報処理装置100のデータ処理の効率化を図ることができる。
M×R個の演算器がアレイ状に並列に配置される場合、総積和演算回数はM×R×Tである。仮に、演算器が1個の場合は、1回の積和演算を行うために2個のデータを1回メモリから演算器へ移動する必要があるので、全体では2×M×R×Tのデータ移動が必要である。実施形態の図9に示した構成では、データwm,t,xt,rのデータ線を演算器ub0,0〜ubM−1,R−1に対して、行列毎に共通にしているので、データ移動は、(M+R)×Tとなる。例えば、M=Rの場合であって、図9の構成を採用しない場合に比べて、データ移動は、{(M+R)×T}/(2×M×R×T)=1/Mとなる。
実施形態の第1の例及び第2の例の多ビットの場合の情報処理装置100によれば、入力されるデータW,Xのビット幅に応じて、LUT4に適切な係数と出力インデックス設定し、上述の後処理アルゴリズムを適用することで、XやWのビット数がばらばらであっても処理が可能である。
また、第2の例で示したy7のケースのように、1つの値が分断されるケースでも問題ない。この特徴により、演算器アレイを無駄なく使い切ることが可能であり、これは演算器の高効率化、高速化に寄与する。
例えば、複数の1ビットの演算器を並列に動作させる半導体装置では、2ビット以上の精度が要求される場合に対応できない。実施形態の第1の例及び第2の例の1ビット×1ビットの積和演算は、同程度に高速に処理できる上に、多ビットの入力にも対応することができる。
また、多ビット×多ビット専用回路(GPUなど)と本実施形態とを比較する。1つの演算器が多ビット×多ビットに対応している場合、演算器ごとの回路規模は、1つの演算器が1ビット×1ビットの場合よりも大きくなる。
従って、並列数と演算器の演算1回当たりの処理時間が同じ場合、1ビット×1ビットの積和演算では、処理速度は同じで、回路規模が実施形態の第1の例及び第2の例の積和演算回路の方が小さくなる。
つまり、多ビット×多ビット専用の演算器を使って、1ビット×1ビットの演算をする場合には、使われない回路が存在することになり無駄が大きく効率が悪い。
例えば演算器が16×16個ある場合、1ビット×1ビットの積和演算は16×16=256並列で実行することができる。同じ構成を使って4ビット×4ビットの積和演算を(16/4)×(16/4)=16並列で実行することができる。また2つの行列のビット幅は同じである必要はなく、2ビット×8ビットの積和演算を(16/2)×(16/8)=16並列で実行することも可能である。
実施形態の第1の例及び第2の例では、入力のビット幅によらず、演算器を効率よく使い切ることができるので、このような無駄がない。多ビット×多ビットの積和演算を行う場合は、並列数が同じ場合で比較すると、多ビット×多ビット専用の演算器の1つずつで行う計算を、実施形態では複数の演算器を使って行うことになるので、等価的に並列数が少なくなり、実施形態の第3の例及び第4の例の積和演算回路の方が、処理速度が遅くなる。
しかし、1つの演算器の回路規模は実施形態の方が多ビット×多ビット専用の演算器よりも小さいので、同じ回路規模であれば、実施形態の方が演算器の並列数を大きくすることが可能である。
その結果、入力のビット幅が小さい場合は、実施形態の方が高速、入力のビット幅が大きい場合は、実施形態の方が低速となる。例えば、ディープラーニングの処理では、層によって要求される入力のビット幅が異なるが、大部分は小さいビット幅で良く、一部のみ大きなビット幅が要求されることがある。このように、入力のビット幅が小さい演算の割合が大きい場合、全体としては、実施形態の情報処理装置100の方が高速となる。
本発明のいくつかの実施形態を説明したが、これらの実施形態は、例として提示したものであり、発明の範囲を限定することは意図していない。これら新規な実施形態は、その他の様々な形態で実施されることが可能であり、発明の要旨を逸脱しない範囲で、種々の省略、置き換え、変更を行うことができる。これら実施形態やその変形は、発明の範囲や要旨に含まれるとともに、特許請求の範囲に記載された発明とその均等の範囲に含まれる。
1…積和演算回路、2…メモリ、3…後処理回路、4…LUT、5…プロセッサ、11…、乗算器、12…加算器、13…レジスタ、21…AND論理ゲート、x、w…入力データ、um,r…演算器、100、501a〜501d…情報処理装置、201…メモリ、202a〜202d…積和演算部、203c、203d…補正項算出部、204…加算器。
Claims (8)
- 畳み込みニューラルネットワークの層において畳み込み演算処理を行なう情報処理装置であって、
入力、前記入力に対する重み、及び前記重みのフィルタ毎に決定されたビット幅に関する情報を記憶するメモリと、
前記メモリに記憶された入力、前記入力に対する重み、及び前記重みのフィルタ毎に決定されたビット幅に関する情報に基づいて、積和演算処理を実行する積和演算回路と、を具備する、
情報処理装置。 - 前記重みのフィルタ毎に決定されたビット幅を、前記フィルタの重みの値の最大値と最小値とに基づいてフィルタ毎に決定するビット幅算出回路をさらに具備する、請求項1記載の情報処理装置。
- 畳み込みニューラルネットワークの層において畳み込み演算処理を行なう情報処理装置であって、
入力、前記入力に対する複数の重み、及び前記複数の重みそれぞれに対してフィルタ毎に決定された複数のビット幅に関する情報を記憶するメモリと、
前記メモリに記憶された前記入力、前記入力に対する複数のフィルタの重み、及び前記複数のフィルタの重みそれぞれに対してフィルタ毎に決定された複数のビット幅に関する情報に基づいて、前記複数のフィルタ毎に、積和演算処理を実行する積和演算回路と、を具備する、
情報処理装置。 - 前記メモリは、さらに、前記ビット幅の補正値に関する情報を記憶し、
前記メモリに記憶された入力及び前記補正値に関する情報に基づいて、前記重みのフィルタ毎に算出された前記積和演算処理の補正項を出力する補正項算出回路と、
前記積和演算回路による積和演算処理結果と、補正項算出回路により出力された補正項とを加算して出力する加算回路と
をさらに具備する、
請求項1記載の情報処理装置。 - 前記メモリは、さらに、前記ビット幅の補正値に関する情報を記憶し、
前記メモリに記憶される前の前記入力に対する重みから、前記メモリに記憶される前記重み、前記重みのビット幅及び前記補正値に関する情報を求めるビット幅補正回路をさらに具備する、請求項1記載の情報処理装置。 - 前記メモリは、前記複数のビット幅に対する複数の補正値に関する情報を記憶し、
前記メモリに記憶された入力及び前記複数のフィルタの前記補正値に関する情報に基づいて、前記積和演算処理の補正項を出力する補正項算出回路と、
前記積和演算回路による積和演算処理結果と、補正項算出回路により出力された補正項とを加算して出力する加算回路と
をさらに具備し、
前記複数のフィルタの重みのビット幅及び前記補正値は、前記重みのフィルタ毎に決定される、
請求項3記載の情報処理装置。 - 前記積和演算回路は論理演算回路である、請求項1乃至6いずれか1項に記載の情報処理装置。
- 前記積和演算回路はプロセッサである、請求項1乃至6いずれか1項に記載の情報処理装置。
Priority Applications (2)
Application Number | Priority Date | Filing Date | Title |
---|---|---|---|
JP2018136714A JP2020013455A (ja) | 2018-07-20 | 2018-07-20 | 畳み込みニューラルネットワークの層において畳み込み演算処理を行なう情報処理装置 |
US16/291,471 US20200026998A1 (en) | 2018-07-20 | 2019-03-04 | Information processing apparatus for convolution operations in layers of convolutional neural network |
Applications Claiming Priority (1)
Application Number | Priority Date | Filing Date | Title |
---|---|---|---|
JP2018136714A JP2020013455A (ja) | 2018-07-20 | 2018-07-20 | 畳み込みニューラルネットワークの層において畳み込み演算処理を行なう情報処理装置 |
Publications (1)
Publication Number | Publication Date |
---|---|
JP2020013455A true JP2020013455A (ja) | 2020-01-23 |
Family
ID=69161113
Family Applications (1)
Application Number | Title | Priority Date | Filing Date |
---|---|---|---|
JP2018136714A Abandoned JP2020013455A (ja) | 2018-07-20 | 2018-07-20 | 畳み込みニューラルネットワークの層において畳み込み演算処理を行なう情報処理装置 |
Country Status (2)
Country | Link |
---|---|
US (1) | US20200026998A1 (ja) |
JP (1) | JP2020013455A (ja) |
Cited By (1)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
WO2021153114A1 (ja) | 2020-01-30 | 2021-08-05 | 三菱パワー株式会社 | 運用計画作成装置、運用計画作成方法及びプログラム |
Families Citing this family (1)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
WO2021226720A1 (en) * | 2020-05-14 | 2021-11-18 | The Governing Council Of The University Of Toronto | System and method for memory compression for deep learning networks |
-
2018
- 2018-07-20 JP JP2018136714A patent/JP2020013455A/ja not_active Abandoned
-
2019
- 2019-03-04 US US16/291,471 patent/US20200026998A1/en not_active Abandoned
Cited By (1)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
WO2021153114A1 (ja) | 2020-01-30 | 2021-08-05 | 三菱パワー株式会社 | 運用計画作成装置、運用計画作成方法及びプログラム |
Also Published As
Publication number | Publication date |
---|---|
US20200026998A1 (en) | 2020-01-23 |
Similar Documents
Publication | Publication Date | Title |
---|---|---|
CN107844828B (zh) | 神经网络中的卷积计算方法和电子设备 | |
CN111353579A (zh) | 利用反向传播为深度神经网络选择量化参数的方法和系统 | |
CN112988657A (zh) | 用于机器学习的fpga专家处理块 | |
US10768898B2 (en) | Efficient modulo calculation | |
US11341400B1 (en) | Systems and methods for high-throughput computations in a deep neural network | |
JP2020013455A (ja) | 畳み込みニューラルネットワークの層において畳み込み演算処理を行なう情報処理装置 | |
CN112988656A (zh) | 用于将权重加载到张量处理块中的系统和方法 | |
US10635397B2 (en) | System and method for long addition and long multiplication in associative memory | |
JP7023149B2 (ja) | 半導体装置 | |
JP7129857B2 (ja) | 積和演算装置、積和演算方法、及びシステム | |
JP2020098469A (ja) | 演算処理装置および演算処理装置の制御方法 | |
US20230075348A1 (en) | Computing device and method using multiplier-accumulator | |
CN113705784A (zh) | 一种基于矩阵共享的神经网络权重编码方法及硬件系统 | |
CN109669670B (zh) | 用于蒙哥马利模乘中的不均等分块的数据处理方法及装置 | |
JP7251354B2 (ja) | 情報処理装置、情報処理プログラム、及び情報処理方法 | |
JP7279293B2 (ja) | メモリデバイスおよびその動作方法 | |
CN111126580B (zh) | 采用Booth编码的多精度权重系数神经网络加速芯片运算装置 | |
CN109416757A (zh) | 用于处理数值数据的方法、设备和计算机可读存储介质 | |
US11610095B2 (en) | Systems and methods for energy-efficient data processing | |
CN110765413A (zh) | 矩阵求和结构及神经网络计算平台 | |
US20220004363A1 (en) | Semiconductor device, data generation methods used for the same, and method of controlling the same | |
US20220207332A1 (en) | Scalable neural network accelerator architecture | |
US11157594B2 (en) | Matrix multiplication in hardware using modular math | |
WO2022247368A1 (en) | Methods, systems, and mediafor low-bit neural networks using bit shift operations | |
CN117392249A (zh) | 一种基于脉神经网络的图像编码方法及系统 |
Legal Events
Date | Code | Title | Description |
---|---|---|---|
A711 | Notification of change in applicant |
Free format text: JAPANESE INTERMEDIATE CODE: A712 Effective date: 20180831 |
|
A621 | Written request for application examination |
Free format text: JAPANESE INTERMEDIATE CODE: A621 Effective date: 20210316 |
|
A762 | Written abandonment of application |
Free format text: JAPANESE INTERMEDIATE CODE: A762 Effective date: 20220228 |
|
A521 | Request for written amendment filed |
Free format text: JAPANESE INTERMEDIATE CODE: A523 Effective date: 20220309 |