JP2022105437A - ニューラルネットワーク回路およびニューラルネットワーク演算方法 - Google Patents

ニューラルネットワーク回路およびニューラルネットワーク演算方法 Download PDF

Info

Publication number
JP2022105437A
JP2022105437A JP2021000241A JP2021000241A JP2022105437A JP 2022105437 A JP2022105437 A JP 2022105437A JP 2021000241 A JP2021000241 A JP 2021000241A JP 2021000241 A JP2021000241 A JP 2021000241A JP 2022105437 A JP2022105437 A JP 2022105437A
Authority
JP
Japan
Prior art keywords
circuit
input
product
data
calculation
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.)
Pending
Application number
JP2021000241A
Other languages
English (en)
Inventor
賢治 渡邊
Kenji Watanabe
Current Assignee (The listed assignees may be inaccurate. Google has not performed a legal analysis and makes no representation or warranty as to the accuracy of the list.)
Leap Mind Inc
Original Assignee
Leap Mind Inc
Priority date (The priority date 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 date listed.)
Filing date
Publication date
Application filed by Leap Mind Inc filed Critical Leap Mind Inc
Priority to JP2021000241A priority Critical patent/JP2022105437A/ja
Publication of JP2022105437A publication Critical patent/JP2022105437A/ja
Pending legal-status Critical Current

Links

Images

Abstract

【課題】IoT機器などの組み込み機器に組み込み可能かつ高性能なニューラルネットワーク回路を提供する。【解決手段】ニューラルネットワーク回路は、入力データと重みとに対して畳み込み演算を行う畳み込み演算回路を備え、前記入力データは、x軸方向、y軸方向およびc軸方向に要素を有する3次以上のテンソルであり、前記畳み込み演算回路は、前記入力データの要素を前記c軸方向ごとに演算する演算器アレイを少なくとも一つ有し、前記演算器アレイは、前記入力データが入力される入力レジスタと、前記入力データの前記x軸方向および前記y軸方向の複数の要素を演算する積和演算ユニットアレイと、を有する。【選択図】図11

Description

本発明は、ニューラルネットワーク回路およびニューラルネットワーク演算方法に関する。
近年、畳み込みニューラルネットワーク(Convolutional Neural Network:CNN)が画像認識等のモデルとして用いられている。畳み込みニューラルネットワークは、畳み込み層やプーリング層を有する多層構造であり、畳み込み演算等の多数の演算を必要とする。畳み込みニューラルネットワークによる演算を高速化する演算手法が様々考案されている(特許文献1など)。
特開2018-077829号公報
一方で、IoT機器などの組み込み機器においても畳み込みニューラルネットワークを利用した画像認識等を実現することが望まれている。組み込み機器においては、特許文献1等に記載された大規模な専用回路を組み込むことは難しい。また、CPUやメモリ等のハードウェアリソースが限られた組み込み機器においては、畳み込みニューラルネットワークの十分な演算性能をソフトウェアのみにより実現することは難しい。
上記事情を踏まえ、本発明は、IoT機器などの組み込み機器に組み込み可能かつ高性能なニューラルネットワーク回路およびニューラルネットワーク演算方法を提供することを目的とする。
上記課題を解決するために、この発明は以下の手段を提案している。
本発明の第一の態様に係るニューラルネットワーク回路は、入力データと重みとに対して畳み込み演算を行う畳み込み演算回路を備え、前記入力データは、x軸方向、y軸方向およびc軸方向に要素を有する3次以上のテンソルであり、前記畳み込み演算回路は、前記入力データの要素を前記c軸方向ごとに演算する演算器アレイを少なくとも一つ有し、前記演算器アレイは、前記入力データが入力される入力レジスタと、前記入力データの前記x軸方向および前記y軸方向の複数の要素を演算する積和演算ユニットアレイと、を有する。
本発明の第二の態様に係るニューラルネットワーク演算方法は、x軸方向、y軸方向およびc軸方向に要素を有する3次以上のテンソルである入力データを畳み込み演算する演算方法であって、前記入力データの要素を前記c軸方向ごとに分割し、前記入力データの前記x軸方向および前記y軸方向の複数の要素を並列に演算する。
本発明のニューラルネットワーク回路およびニューラルネットワーク演算方法は、IoT機器などの組み込み機器に組み込み可能かつ高性能である。
畳み込みニューラルネットワークを示す図である。 畳み込み層が行う畳み込み演算を説明する図である。 畳み込み演算のデータの展開を説明する図である。 第一実施形態に係るニューラルネットワーク回路の全体構成を示す図である。 同ニューラルネットワーク回路の動作例を示すタイミングチャートである。 同ニューラルネットワーク回路の他の動作例を示すタイミングチャートである。 同ニューラルネットワーク回路のDMACの内部ブロック図である。 同DMACの制御回路のステート遷移図である。 同ニューラルネットワーク回路の畳み込み演算回路の内部ブロック図である。 同畳み込み演算回路の乗算器の内部ブロック図である。 同乗算器のマルチ積和演算ユニットの内部ブロック図である。 同乗算器の積和演算ユニットの内部ブロック図である。 入力レジスタと同積和演算ユニットとの接続を示す図である。 データをシフトした同入力レジスタと同積和演算ユニットとの接続を示す図である。 要素32個分だけ左シフトした同入力レジスタと同積和演算ユニットとの接続を示す図である。 同入力レジスタと同積和演算ユニットとの他の接続態様を示す図である。 同畳み込み演算回路のアキュムレータ回路の内部ブロック図である。 同アキュムレータ回路のアキュムレータユニットの内部ブロック図である。 同ニューラルネットワーク回路の量子化演算回路の内部ブロック図である。 同量子化演算回路のベクトル演算回路と量子化回路の内部ブロック図である。 演算ユニットのブロック図である。 同量子化回路のベクトル量子化ユニットの内部ブロック図である。
(第一実施形態)
本発明の第一実施形態について、図1から図22を参照して説明する。
図1は、畳み込みニューラルネットワーク200(以下、「CNN200」という)を示す図である。第一実施形態に係るニューラルネットワーク回路100(以下、「NN回路100」という)が行う演算は、推論時に使用する学習済みのCNN200の少なくとも一部である。
[CNN200]
CNN200は、畳み込み演算を行う畳み込み層210と、量子化演算を行う量子化演算層220と、出力層230と、を含む多層構造のネットワークである。CNN200の少なくとも一部において、畳み込み層210と量子化演算層220とが交互に連結されている。CNN200は、画像認識や動画認識に広く使われるモデルである。CNN200は、全結合層などの他の機能を有する層(レイヤ)をさらに有してもよい。
図2は、畳み込み層210が行う畳み込み演算を説明する図である。
畳み込み層210は、入力データaに対して重みwを用いた畳み込み演算を行う。畳み込み層210は、入力データaと重みwとを入力とする積和演算を行う。
畳み込み層210への入力データa(アクティベーションデータ、特徴マップともいう)は、画像データ等の多次元データである。本実施形態において、入力データaは、要素(x,y,c)からなる3次元テンソルである。CNN200の畳み込み層210は、低ビットの入力データaに対して畳み込み演算を行う。本実施形態において、入力データaの要素は、2ビットの符号なし整数(0,1,2,3)である。入力データaの要素は、例えば、4ビットや8ビット符号なし整数でもよい。
CNN200に入力される入力データが、例えば32ビットの浮動小数点型など、畳み込み層210への入力データaと形式が異なる場合、CNN200は畳み込み層210の前に型変換や量子化を行う入力層をさらに有してもよい。
畳み込み層210の重みw(フィルタ、カーネルともいう)は、学習可能なパラメータである要素を有する多次元データである。本実施形態において、重みwは、要素(i,j,c,d)からなる4次元テンソルである。重みwは、要素(i,j,c)からなる3次元テンソル(以降、「重みwo」という)をd個有している。学習済みのCNN200における重みwは、学習済みのデータである。CNN200の畳み込み層210は、低ビットの重みwを用いて畳み込み演算を行う。本実施形態において、重みwの要素は、1ビットの符号付整数(0,1)であり、値「0」は+1を表し、値「1」は-1を表す。
畳み込み層210は、式1に示す畳み込み演算を行い、出力データfを出力する。式1において、sはストライドを示す。図2において点線で示された領域は、入力データaに対して重みwoが適用される領域ao(以降、「適用領域ao」という)の一つを示している。適用領域aoの要素は、(x+i,y+j,c)で表される。
Figure 2022105437000002
量子化演算層220は、畳み込み層210が出力する畳み込み演算の出力に対して量子化などを実施する。量子化演算層220は、プーリング層221と、Batch Normalization層222と、活性化関数層223と、量子化層224と、を有する。
プーリング層221は、畳み込み層210が出力する畳み込み演算の出力データfに対して平均プーリング(式2)やMAXプーリング(式3)などの演算を実施して、畳み込み層210の出力データfを圧縮する。式2および式3において、uは入力テンソルを示し、vは出力テンソルを示し、Tはプーリング領域の大きさを示す。式3において、maxはTに含まれるiとjの組み合わせに対するuの最大値を出力する関数である。
Figure 2022105437000003
Figure 2022105437000004
Batch Normalization層222は、量子化演算層220やプーリング層221の出力データに対して、例えば式4に示すような演算によりデータ分布の正規化を行う。式4において、uは入力テンソルを示し、vは出力テンソルを示し、αはスケールを示し、βはバイアスを示す。学習済みのCNN200において、αおよびβは学習済みの定数ベクトルである。
Figure 2022105437000005
活性化関数層223は、量子化演算層220やプーリング層221やBatch Normalization層222の出力に対してReLU(式5)などの活性化関数の演算を行う。式5において、uは入力テンソルであり、vは出力テンソルである。式5において、maxは引数のうち最も大きい数値を出力する関数である。
Figure 2022105437000006
量子化層224は、量子化パラメータに基づいて、プーリング層221や活性化関数層223の出力に対して例えば式6に示すような量子化を行う。式6に示す量子化は、入力テンソルuを2ビットにビット削減している。式6において、q(c)は量子化パラメータのベクトルである。学習済みのCNN200において、q(c)は学習済みの定数ベクトルである。式6における不等式「≦」は「<」であってもよい。
Figure 2022105437000007
出力層230は、恒等関数やソフトマックス関数等によりCNN200の結果を出力する層である。出力層230の前段のレイヤは、畳み込み層210であってもよいし、量子化演算層220であってもよい。
CNN200は、量子化された量子化層224の出力データが、畳み込み層210に入力されるため、量子化を行わない他の畳み込みニューラルネットワークと比較して、畳み込み層210の畳み込み演算の負荷が小さい。
[畳み込み演算の分割]
NN回路100は、畳み込み層210の畳み込み演算(式1)の入力データを部分テンソルに分割して演算する。部分テンソルへの分割方法や分割数は特に限定されない。部分テンソルは、例えば、入力データa(x+i,y+j,c)をa(x+i,y+j,co)に分割することにより形成される。なお、NN回路100は、畳み込み層210の畳み込み演算(式1)の入力データを分割せずに演算することもできる。
畳み込み演算の入力データ分割において、式1における変数cは、式7に示すように、サイズBcのブロックで分割される。また、式1における変数dは、式8に示すように、サイズBdのブロックで分割される。式7において、coはオフセットであり、ciは0から(Bc-1)までのインデックスである。式8において、doはオフセットであり、diは0から(Bd-1)までのインデックスである。なお、サイズBcとサイズBdは同じであってもよい。
Figure 2022105437000008
Figure 2022105437000009
式1における入力データa(x+i,y+j,c)は、サイズBcにより分割され、分割された入力データa(x+i,y+j,co)で表される。以降の説明において、分割された入力データaを「分割入力データa」ともいう。
式1における重みw(i,j,c,d)は、サイズBcおよびBdにより分割され、分割された重みw(i,j,co,do)で表される。以降の説明において、分割された重みwを「分割重みw」ともいう。
サイズBdにより分割された出力データf(x,y,do)は、式9により求まる。分割された出力データf(x,y,do)を組み合わせることで、最終的な出力データf(x,y,d)を算出できる。
Figure 2022105437000010
[畳み込み演算のデータの展開]
NN回路100は、畳み込み層210の畳み込み演算における入力データaおよび重みwを展開して畳み込み演算を行う。
図3は、畳み込み演算のデータの展開を説明する図である。
分割入力データa(x+i、y+j、co)は、Bc個の要素を持つベクトルデータに展開される。分割入力データaの要素は、ciでインデックスされる(0≦ci<Bc)。以降の説明において、i,jごとにベクトルデータに展開された分割入力データaを「入力ベクトルA」ともいう。入力ベクトルAは、分割入力データa(x+i、y+j、co×Bc)から分割入力データa(x+i、y+j、co×Bc+(Bc-1))までを要素とする。
分割重みw(i,j,co、do)は、Bc×Bd個の要素を持つマトリクスデータに展開される。マトリクスデータに展開された分割重みwの要素は、ciとdiでインデックスされる(0≦di<Bd)。以降の説明において、i,jごとにマトリクスデータに展開された分割重みwを「重みマトリクスW」ともいう。重みマトリクスWは、分割重みw(i,j,co×Bc、do×Bd)から分割重みw(i,j,co×Bc+(Bc-1)、do×Bd+(Bd-1))までを要素とする。
入力ベクトルAと重みマトリクスWとを乗算することで、ベクトルデータが算出される。i,j,coごとに算出されたベクトルデータを3次元テンソルに整形することで、出力データf(x,y,do)を得ることができる。このようなデータの展開を行うことで、畳み込み層210の畳み込み演算を、ベクトルデータとマトリクスデータとの乗算により実施できる。
[NN回路100]
図4は、本実施形態に係るNN回路100の全体構成を示す図である。
NN回路100は、第一メモリ1と、第二メモリ2と、DMAコントローラ3(以下、「DMAC3」ともいう)と、畳み込み演算回路4と、量子化演算回路5と、コントローラ6と、を備える。NN回路100は、第一メモリ1および第二メモリ2を介して、畳み込み演算回路4と量子化演算回路5とがループ状に形成されていることを特徴とする。
第一メモリ1は、例えばSRAM(Static RAM)などで構成された揮発性のメモリ等の書き換え可能なメモリである。第一メモリ1には、DMAC3やコントローラ6を介してデータの書き込みおよび読み出しが行われる。第一メモリ1は、畳み込み演算回路4の入力ポートと接続されており、畳み込み演算回路4は第一メモリ1からデータを読み出すことができる。また、第一メモリ1は、量子化演算回路5の出力ポートと接続されており、量子化演算回路5は第一メモリ1にデータを書き込むことができる。外部ホストCPUは、第一メモリ1に対するデータの書き込みや読み出しにより、NN回路100に対するデータの入出力を行うことができる。
第二メモリ2は、例えばSRAM(Static RAM)などで構成された揮発性のメモリ等の書き換え可能なメモリである。第二メモリ2には、DMAC3やコントローラ6を介してデータの書き込みおよび読み出しが行われる。第二メモリ2は、量子化演算回路5の入力ポートと接続されており、量子化演算回路5は第二メモリ2からデータを読み出すことができる。また、第二メモリ2は、畳み込み演算回路4の出力ポートと接続されており、畳み込み演算回路4は第二メモリ2にデータを書き込むことができる。外部ホストCPUは、第二メモリ2に対するデータの書き込みや読み出しにより、NN回路100に対するデータの入出力を行うことができる。
DMAC3は、外部バスEBに接続されており、DRAMなどの外部メモリと第一メモリ1との間のデータ転送を行う。また、DMAC3は、DRAMなどの外部メモリと第二メモリ2との間のデータ転送を行う。また、DMAC3は、DRAMなどの外部メモリと畳み込み演算回路4との間のデータ転送を行う。また、DMAC3は、DRAMなどの外部メモリと量子化演算回路5との間のデータ転送を行う。
畳み込み演算回路4は、学習済みのCNN200の畳み込み層210における畳み込み演算を行う回路である。畳み込み演算回路4は、第一メモリ1に格納された入力データaを読み出し、入力データaに対して畳み込み演算を実施する。畳み込み演算回路4は、畳み込み演算の出力データf(以降、「畳み込み演算出力データ」ともいう)を第二メモリ2に書き込む。
量子化演算回路5は、学習済みのCNN200の量子化演算層220における量子化演算の少なくとも一部を行う回路である。量子化演算回路5は、第二メモリ2に格納された畳み込み演算の出力データfを読み出し、畳み込み演算の出力データfに対して量子化演算(プーリング、Batch Normalization、活性化関数、および量子化のうち少なくとも量子化を含む演算)を行う。量子化演算回路5は、量子化演算の出力データ(以降、「量子化演算出力データ」ともいう)を第一メモリ1に書き込む。
コントローラ6は、外部バスEBに接続されており、外部のホストCPUのスレーブとして動作する。コントローラ6は、パラメータレジスタや状態レジスタを含むレジスタ61を有している。パラメータレジスタは、NN回路100の動作を制御するレジスタである。状態レジスタはセマフォSを含むNN回路100の状態を示すレジスタである。外部ホストCPUは、コントローラ6を経由して、レジスタ61にアクセスできる。
コントローラ6は、内部バスIBを介して、第一メモリ1と、第二メモリ2と、DMAC3と、畳み込み演算回路4と、量子化演算回路5と、接続されている。外部ホストCPUは、コントローラ6を経由して、各ブロックに対してアクセスできる。例えば、外部ホストCPUは、コントローラ6を経由して、DMAC3や畳み込み演算回路4や量子化演算回路5に対する命令を指示することができる。また、DMAC3や畳み込み演算回路4や量子化演算回路5は、内部バスIBを介して、コントローラ6が有する状態レジスタ(セマフォSを含む)を更新できる。状態レジスタ(セマフォSを含む)は、DMAC3や畳み込み演算回路4や量子化演算回路5と接続された専用配線を介して更新されるように構成されていてもよい。
NN回路100は、第一メモリ1や第二メモリ2等を有するため、DRAMなどの外部メモリからのDMAC3によるデータ転送において、重複するデータのデータ転送の回数を低減できる。これにより、メモリアクセスにより発生する消費電力を大幅に低減することができる。
[NN回路100の動作例1]
図5は、NN回路100の動作例を示すタイミングチャートである。
DMAC3は、レイヤ1の入力データaを第一メモリ1に格納する。DMAC3は、畳み込み演算回路4が行う畳み込み演算の順序にあわせて、レイヤ1の入力データaを分割して第一メモリ1に転送してもよい。
畳み込み演算回路4は、第一メモリ1に格納されたレイヤ1の入力データaを読み出す。畳み込み演算回路4は、レイヤ1の入力データaに対して図1に示すレイヤ1の畳み込み演算を行う。レイヤ1の畳み込み演算の出力データfは、第二メモリ2に格納される。
量子化演算回路5は、第二メモリ2に格納されたレイヤ1の出力データfを読み出す。量子化演算回路5は、レイヤ1の出力データfに対してレイヤ2の量子化演算を行う。レイヤ2の量子化演算の出力データは、第一メモリ1に格納される。
畳み込み演算回路4は、第一メモリ1に格納されたレイヤ2の量子化演算の出力データを読み出す。畳み込み演算回路4は、レイヤ2の量子化演算の出力データを入力データaとしてレイヤ3の畳み込み演算を行う。レイヤ3の畳み込み演算の出力データfは、第二メモリ2に格納される。
畳み込み演算回路4は、第一メモリ1に格納されたレイヤ2M-2(Mは自然数)の量子化演算の出力データを読み出す。畳み込み演算回路4は、レイヤ2M-2の量子化演算の出力データを入力データaとしてレイヤ2M-1の畳み込み演算を行う。レイヤ2M-1の畳み込み演算の出力データfは、第二メモリ2に格納される。
量子化演算回路5は、第二メモリ2に格納されたレイヤ2M-1の出力データfを読み出す。量子化演算回路5は、2M-1レイヤの出力データfに対してレイヤ2Mの量子化演算を行う。レイヤ2Mの量子化演算の出力データは、第一メモリ1に格納される。
畳み込み演算回路4は、第一メモリ1に格納されたレイヤ2Mの量子化演算の出力データを読み出す。畳み込み演算回路4は、レイヤ2Mの量子化演算の出力データを入力データaとしてレイヤ2M+1の畳み込み演算を行う。レイヤ2M+1の畳み込み演算の出力データfは、第二メモリ2に格納される。
畳み込み演算回路4と量子化演算回路5とが交互に演算を行い、図1に示すCNN200の演算を進めていく。NN回路100は、畳み込み演算回路4が時分割によりレイヤ2M-1の畳み込み演算とレイヤ2M+1を実施する。また、NN回路100は、量子化演算回路5が時分割によりレイヤ2M-2の畳み込み演算とレイヤ2Mを実施する。そのため、NN回路100は、レイヤごとに別々の畳み込み演算回路4と量子化演算回路5を実装する場合と比較して、回路規模が著しく小さい。
NN回路100は、複数のレイヤの多層構造であるCNN200の演算を、ループ状に形成された回路により演算する。NN回路100は、ループ状の回路構成により、ハードウェア資源を効率的に利用できる。なお、NN回路100は、ループ状に回路を形成するために、各レイヤで変化する畳み込み演算回路4や量子化演算回路5におけるパラメータは適宜更新される。
CNN200の演算にNN回路100により実施できない演算が含まれる場合、NN回路100は外部ホストCPUなどの外部演算デバイスに中間データを転送する。外部演算デバイスが中間データに対して演算を行った後、外部演算デバイスによる演算結果は第一メモリ1や第二メモリ2に入力される。NN回路100は、外部演算デバイスによる演算結果に対する演算を再開する。
[NN回路100の動作例2]
図6は、NN回路100の他の動作例を示すタイミングチャートである。
NN回路100は、入力データaを部分テンソルに分割して、時分割により部分テンソルに対する演算を行ってもよい。部分テンソルへの分割方法や分割数は特に限定されない。
図6は、入力データaを二つの部分テンソルに分解した場合の動作例を示している。分解された部分テンソルを、「第一部分テンソルa1」、「第二部分テンソルa2」とする。例えば、レイヤ2M-1の畳み込み演算は、第一部分テンソルa1に対応する畳み込み演算(図6において、「レイヤ2M-1(a1)」と表記)と、第二部分テンソルa2に対応する畳み込み演算(図6において、「レイヤ2M-1(a2)」と表記)と、に分解される。
第一部分テンソルa1に対応する畳み込み演算および量子化演算と、第二部分テンソルa2に対応する畳み込み演算および量子化演算とは、図6に示すように、独立して実施することができる。
畳み込み演算回路4は、第一部分テンソルa1に対応するレイヤ2M-1の畳み込み演算(図6において、レイヤ2M-1(a1)で示す演算)を行う。その後、畳み込み演算回路4は、第二部分テンソルaに対応するレイヤ2M-1の畳み込み演算(図6において、レイヤ2M-1(a)で示す演算)を行う。また、量子化演算回路5は、第一部分テンソルa1に対応するレイヤ2Mの量子化演算(図6において、レイヤ2M(a1)で示す演算)を行う。このように、NN回路100は、第二部分テンソルaに対応するレイヤ2M-1の畳み込み演算と、第一部分テンソルa1に対応するレイヤ2Mの量子化演算と、を並列に実施できる。
次に、畳み込み演算回路4は、第一部分テンソルa1に対応するレイヤ2M+1の畳み込み演算(図6において、レイヤ2M+1(a1)で示す演算)を行う。また、量子化演算回路5は、第二部分テンソルaに対応するレイヤ2Mの量子化演算(図6において、レイヤ2M(a)で示す演算)を行う。このように、NN回路100は、第一部分テンソルa1に対応するレイヤ2M+1の畳み込み演算と、第二部分テンソルaに対応するレイヤ2Mの量子化演算と、を並列に実施できる。
入力データaを部分テンソルに分割することで、NN回路100は畳み込み演算回路4と量子化演算回路5とを並列して動作させることができる。その結果、畳み込み演算回路4と量子化演算回路5が待機する時間が削減され、NN回路100の演算処理効率が向上する。図6に示す動作例において分割数は2であったが、分割数が2より大きい場合も同様に、NN回路100は畳み込み演算回路4と量子化演算回路5とを並列して動作させることができる。
なお、部分テンソルに対する演算方法としては、同一レイヤにおける部分テンソルの演算を畳み込み演算回路4または量子化演算回路5で行った後に次のレイヤにおける部分テンソルの演算を行う例(方法1)を示したが、演算方法はこれに限られない。NN回路100は、複数レイヤにおける一部の部分テンソルの演算をした後に残部の部分テンソルの演算をしてもよい(方法2)。また、NN回路100は、方法1と方法2とを組み合わせて部分テンソルを演算してもよい。
次に、NN回路100の各構成に関して詳しく説明する。
[DMAC3]
図7は、DMAC3の内部ブロック図である。
DMAC3は、データ転送回路31と、ステートコントローラ32と、を有する。DMAC3は、データ転送回路31に対する専用のステートコントローラ32を有しており、命令コマンドが入力されると、外部のコントローラを必要とせずにDMAデータ転送を実施できる。
データ転送回路31は、外部バスEBに接続されており、DRAMなどの外部メモリと第一メモリ1との間のDMAデータ転送を行う。また、データ転送回路31は、DRAMなどの外部メモリと第二メモリ2との間のDMAデータ転送を行う。また、データ転送回路31は、DRAMなどの外部メモリと畳み込み演算回路4との間のデータ転送を行う。また、データ転送回路31は、DRAMなどの外部メモリと量子化演算回路5との間のデータ転送を行う。データ転送回路31のDMAチャンネル数は限定されない。例えば、第一メモリ1と第二メモリ2のそれぞれに専用のDMAチャンネルを有していてもよい。
ステートコントローラ32は、データ転送回路31のステートを制御する。また、ステートコントローラ32は、内部バスIBを介してコントローラ6と接続されている。ステートコントローラ32は、命令キュー33と制御回路34とを有する。
命令キュー33は、DMAC3用の命令コマンドC3が格納されるキューであり、例えばFIFOメモリで構成される。命令キュー33には、内部バスIB経由で1つ以上の命令コマンドC3が書き込まれる。
制御回路34は、命令コマンドC3をデコードし、命令コマンドC3に基づいて順次データ転送回路31を制御するステートマシンである。制御回路34は、論理回路により実装されていてもよいし、ソフトウェアによって制御されるCPUによって実装されていてもよい。
図8は、制御回路34のステート遷移図である。
制御回路34は、命令キュー33に命令コマンドC3が入力されると(Not empty)、アイドルステートS1からデコードステートS2に遷移する。
制御回路34は、デコードステートS2において、命令キュー33から出力される命令コマンドC3をデコードする。また、制御回路34は、コントローラ6のレジスタ61に格納されたセマフォSを読み出し、命令コマンドC3において指示されたデータ転送回路31の動作を実行可能であるかを判定する。実行不能である場合(Not ready)、制御回路34は実行可能となるまで待つ(Wait)。実行可能である場合(ready)、制御回路34はデコードステートS2から実行ステートS3に遷移する。
制御回路34は、実行ステートS3において、データ転送回路31を制御して、データ転送回路31に命令コマンドC3において指示された動作を実施させる。制御回路34は、データ転送回路31の動作が終わると、命令キュー33から実行を終えた命令コマンドC3を取り除くとともに、コントローラ6のレジスタ61に格納されたセマフォSを更新する。制御回路34は、命令キュー33に命令がある場合(Not empty)、実行ステートS3からデコードステートS2に遷移する。制御回路34は、命令キュー33に命令がない場合(empty)、実行ステートS3からアイドルステートS1に遷移する。
[畳み込み演算回路4]
図9は、畳み込み演算回路4の内部ブロック図である。
畳み込み演算回路4は、重みメモリ41と、乗算器42と、アキュムレータ回路43と、ステートコントローラ44と、を有する。畳み込み演算回路4は、乗算器42およびアキュムレータ回路43に対する専用のステートコントローラ44を有しており、命令コマンドが入力されると、外部のコントローラを必要とせずに畳み込み演算を実施できる。
重みメモリ41は、畳み込み演算に用いる重みwが格納されるメモリであり、例えばSRAM(Static RAM)などで構成された揮発性のメモリ等の書き換え可能なメモリである。DMAC3は、DMA転送により、畳み込み演算に必要な重みwを重みメモリ41に書き込む。
図10は、乗算器42の内部ブロック図である。
乗算器(演算器アレイ)42は、分割入力データa(x+i,y+j,co)の各要素a(x+i,y+j,ci)と、分割重みw(i,j,co,do)の各要素w(i,j,ci,di)と、を乗算する。乗算器42は、Bc×Bd個の積和演算ユニットアレイ42Aを有し、分割入力データa(x+i,y+j,co)の要素a(x+i,y+j,ci)と分割重みw(i,j,co,do)の要素w(i,j,ci,di)との乗算を並列して実施できる。
乗算器(演算器アレイ)42は、乗算に必要な要素a(x+i,y+j,ci)と要素w(i,j,ci,di)を、第一メモリ1および重みメモリ41から読み出して乗算を実施する。乗算器42は、Bd個の積和演算結果O(x+i,y+j,di)を出力する。ここで、本実施形態において第一メモリ1には一度に32×32個の要素aを格納可能とする。
なお、乗算器42に含まれる積和演算ユニットアレイ42Aの数はBc×Bd個に限定されない。例えば、積和演算ユニットアレイ42Aの数を(Bc/P)×Bd個(PはBc又はBcの約数)とし、分割入力データa(x+i,y+j,co)をc軸方向にP個に分割してP回演算を繰り返す。これにより、Bd個の積和演算結果O(x+i,y+j,di)を乗算器42のアウトプットとして得ることも可能である。この様に積和演算ユニットアレイ42Aの数を減少させることで並列演算数が低下し演算速度に影響を及ぼす場合もあるが、回路規模縮小による低コスト化や低消費電力化を実現できる。
図11は、積和演算ユニットアレイ42Aの内部ブロック図である。
積和演算ユニットアレイ42Aは、要素a(x+i,y+j,ci)と、要素w(i,j,ci,di)とを乗算する。積和演算ユニットアレイ42Aは、9個の要素wを乗算可能な9個の積和演算ユニット47を有する。本実施形態においては、重みwのxy軸平面における3x3の9要素が、9個の積和演算ユニット47により乗算される。
積和演算ユニットアレイ42Aは、要素aが格納される入力レジスタ49を有する。入力レジスタ49は、第一入力レジスタ49aと、第二入力レジスタ49bと、第三入力レジスタ49cと、を有する。
第一入力レジスタ49aは、例えばy軸座標が(y)であり、x軸方向に連続する32個の要素a(x+αi,y,ci)が入力される(0≦αi<32)。このデータを「ラインデータL(y)」とする。
第二入力レジスタ49bは、例えばy軸座標が(y+1)であり、x軸方向に連続する32個の要素a(x+αi,y+1,ci)が入力される(0≦αi<32)。このデータを「ラインデータL(y+1)」とする。
第三入力レジスタ49cは、例えばy軸座標が(y+2)であり、x軸方向に連続する32個の要素a(x+αi,y+2,ci)が入力される(0≦αi<32)。このデータを「ラインデータL(y+2)」とする。
同様に、y軸座標が(y+3)であり、x軸方向に連続する32個の要素a(x+αi,y+3,ci)を「ラインデータL(y+3)」とする。
ラインデータL(y)とラインデータL(y+1)とラインデータL(y+2)とラインデータL(y+3)とは、xy軸平面におけるy軸方向に連続するラインデータである。なお、入力レジスタ49に入力可能な要素aの個数は第一メモリに格納可能な要素aの個数によって決定することが好ましい。第一メモリ1に格納された入力データaを効率的に読み出すことが可能となる。また、入力レジスタ49に含まれる第一入力レジスタ49a、第二入力レジスタ49b、第三入力レジスタ49cに保持できる要素aの個数は同じでなくても良い。例えば、第三入力レジスタ49cに保持できる個数を他よりも少なくすることで、全体の回路規模を縮小することができる。
積和演算ユニットアレイ42Aは、9個の積和演算ユニット47と、加算器47Aと、を有する。以降の説明において、9個の積和演算ユニット47を、第一積和演算ユニット471、第二積和演算ユニット472、第三積和演算ユニット473、第四積和演算ユニット474、第五積和演算ユニット475、第六積和演算ユニット476、第七積和演算ユニット477、第八積和演算ユニット478、第九積和演算ユニット479という。
図12は、積和演算ユニット47の内部ブロック図である。
積和演算ユニット47は、入力ベクトルAの要素A(ci)と、重みマトリクスWの要素W(ci,di)とを乗算する。また、積和演算ユニット47は、乗算結果と他の積和演算ユニット47の乗算結果S(i,j)と加算する。積和演算ユニット47は、加算結果S(i+1,j)を出力する。要素A(ci)は、2ビットの符号なし整数(0,1,2,3)である。要素W(ci,di)は、1ビットの符号付整数(0,1)であり、値「0」は+1を表し、値「1」は-1を表す。
積和演算ユニット47は、反転器(インバータ)47aと、セレクタ47bと、加算器47cと、を有する。積和演算ユニット47は、乗算器を用いず、反転器47aおよびセレクタ47bのみを用いて乗算を行う。セレクタ47bは、要素W(ci,di)が「0」の場合、要素A(ci)の入力を選択する。セレクタ47bは、要素W(ci,di)が「1」の場合、要素A(ci)を反転器により反転させた補数を選択する。要素W(ci,di)は、加算器47cのCarry-inにも入力される。加算器47cは、要素W(ci,di)が「0」のとき、S(i,j)に要素A(ci)を加算した値を出力する。加算器47cは、W(ci,di)が「1」のとき、S(i,j)から要素A(ci)を減算した値を出力する。
第一積和演算ユニット471は、要素a(X,Y,ci)と要素w(i,j,ci,di)とを乗算する(Xは入力データaに含まれる任意のx座標、Yは入力データaに含まれる任意のy座標)。第一積和演算ユニット471は、出力S(i,j)を第二積和演算ユニット472に出力する。
第二積和演算ユニット472は、要素a(X+1,Y,ci)と要素w(i+1,j,ci,di)とを乗算する。また、第二積和演算ユニット472は、乗算結果とS(i,j)とを加算する。第二積和演算ユニット472は、出力S(i+1,j)を第三積和演算ユニット473に出力する。
第三積和演算ユニット473は、要素a(X+2,Y,ci)と要素w(i+2,j,ci,di)とを乗算する。また、第三積和演算ユニット473は、乗算結果とS(i+1,j)とを加算する。第三積和演算ユニット473は、出力S1を加算器47Aに出力する。
第四積和演算ユニット474は、要素a(X,Y+1,ci)と要素w(i,j+1,ci,di)とを乗算する。第四積和演算ユニット474は、出力S(i,j+1)を第五積和演算ユニット475に出力する。
第五積和演算ユニット475は、要素a(X+1,Y+1,ci)と要素w(i+1,j+1,ci,di)とを乗算する。また、第五積和演算ユニット475は、乗算結果とS(i,j+1)とを加算する。第五積和演算ユニット475は、出力S(i+1,j+1)を第六積和演算ユニット476に出力する。
第六積和演算ユニット476は、要素a(X+2,Y+1,ci)と要素w(i+2,j+1,ci,di)とを乗算する。また、第六積和演算ユニット476は、乗算結果とS(i+1,j+1)とを加算する。第六積和演算ユニット476は、出力S2を加算器47Aに出力する。
第七積和演算ユニット477は、要素a(X,Y+2,ci)と要素w(i,j+2,ci,di)とを乗算する。第七積和演算ユニット477は、出力S(i,j+2)を第八積和演算ユニット478に出力する。
第八積和演算ユニット478は、要素a(X+1,Y+2,ci)と要素w(i+1,j+2,ci,di)とを乗算する。また、第八積和演算ユニット478は、乗算結果とS(i,j+2)とを加算する。第八積和演算ユニット478は、出力S(i+1,j+2)を第九積和演算ユニット479に出力する。
第九積和演算ユニット479は、要素a(X+2,Y+2,ci)と要素w(i+2,j+2,ci,di)とを乗算する。また、第九積和演算ユニット479は、乗算結果とS(i+1,j+2)とを加算する。第九積和演算ユニット479は、出力S3を加算器47Aに出力する。
加算器47Aは、出力S1と出力S2と出力S3と加算して、加算結果O(x+i,y+j,di)を出力する。なお、積和演算ユニットアレイ42Aに加算器47Aを設けずに、アキュムレータ回路43が加算処理を行ってもよい。
第一積和演算ユニット471と、第二積和演算ユニット472と、第三積和演算ユニット473とは、カスケード接続されていなくてもよい。その場合、加算器47Aやアキュムレータ回路43が積和演算ユニット47の出力を加算する。
第四積和演算ユニット474と、第五積和演算ユニット475と、第六積和演算ユニット476とは、カスケード接続されていなくてもよい。その場合、加算器47Aやアキュムレータ回路43が積和演算ユニット47の出力を加算する。
第七積和演算ユニット477と、第八積和演算ユニット478と、第九積和演算ユニット479とは、カスケード接続されていなくてもよい。その場合、加算器47Aやアキュムレータ回路43が積和演算ユニット47の出力を加算する。
図13は、入力レジスタ49と積和演算ユニット47との接続を示す図である。
第一入力レジスタ49aに格納されたラインデータL(y)において、要素a(x,y,ci)が第一積和演算ユニット471に入力され、要素a(x+1,y,ci)が第二積和演算ユニット472に入力され、要素a(x+2,y,ci)が第三積和演算ユニット473に入力される。
第二入力レジスタ49bに格納されたラインデータL(y+1)において、要素a(x,y+1,ci)が第四積和演算ユニット474に入力され、要素a(x+1,y+1,ci)が第五積和演算ユニット475に入力され、要素a(x+2,y+1,ci)が第六積和演算ユニット476に入力される。
第三入力レジスタ49cに格納されたラインデータL(y+2)において、要素a(x,y+2,ci)が第七積和演算ユニット477に入力され、要素a(x+1,y+2,ci)が第八積和演算ユニット478に入力され、要素a(x+2,y+2,ci)が第九積和演算ユニット479に入力される。
図14は、データをシフトした入力レジスタ49と積和演算ユニット47との接続を示す図である。第一入力レジスタ49aと、第二入力レジスタ49bと、第三入力レジスタ49cと、は連続するシフトレジスタとして機能する。左シフトにより第三入力レジスタ49cから出力されたデータは、第二入力レジスタ49bに入力される。左シフトにより第二入力レジスタ49bから出力されたデータは、第一入力レジスタ49aに入力される。
図14にラインデータLは、図13に示すラインデータLと比べて、要素1個分だけ左シフトしている(左シフト量sht=1)。第一入力レジスタ49aには、ラインデータL(y+1)の先頭の1要素が入力される。第二入力レジスタ49bには、ラインデータL(y+2)の先頭の1要素が入力される。第三入力レジスタ49cには、ラインデータL(y+3)の先頭の1要素が入力される。
ラインデータLが要素1個分だけ左シフトすることで(左シフト量sht=1)、積和演算ユニット47に入力される分割入力データa(x+i,y+j,co)の要素が切り替わる。
図14に示すように、第一入力レジスタ49aに格納されたラインデータL(y)が要素1個分だけ左シフトすることで、要素a(x+1,y,ci)が第一積和演算ユニット471に入力され、要素a(x+2,y,ci)が第二積和演算ユニット472に入力され、要素a(x+3,y,ci)が第三積和演算ユニット473に入力される。
図14に示すように、第二入力レジスタ49bに格納されたラインデータL(y+1)が要素1個分だけ左シフトすることで、要素a(x+1,y+1,ci)が第四積和演算ユニット474に入力され、要素a(x+2,y+1,ci)が第五積和演算ユニット475に入力され、要素a(x+3,y+1,ci)が第六積和演算ユニット476に入力される。
図14に示すように、第三入力レジスタ49cに格納されたラインデータL(y+2)が要素1個分だけ左シフトすることで、要素a(x+1,y+2,ci)が第七積和演算ユニット477に入力され、要素a(x+2,y+2,ci)が第八積和演算ユニット478に入力され、要素a(x+3,y+2,ci)が第九積和演算ユニット479に入力される。
このように、第一入力レジスタ49aと、第二入力レジスタ49bと、第三入力レジスタ49cとに格納されるラインデータLをデータシフトすることにより、積和演算ユニット47に入力される分割入力データa(x+i,y+j,co)の要素を切り替えることができる。積和演算ユニットアレイ42Aは、ラインデータLを一要素分左シフトするごとに、加算結果O(x+i,y+j,di)を出力する。
図15は、要素32個分だけ左シフトした入力レジスタ49と積和演算ユニット47との接続を示す図である(左シフト量sht=32)。
データシフトにより、第一入力レジスタ49aにはラインデータL(y+1)が入力され、第二入力レジスタ49bにはラインデータL(y+2)が入力され、第三入力レジスタ49cにはラインデータL(y+2)が入力される。
ラインデータL(y+1)が第一入力レジスタ49aに格納されることで、要素a(x,y+1,ci)が第一積和演算ユニット471に入力され、要素a(x+1,y+1,ci)が第二積和演算ユニット472に入力され、要素a(x+2,y+1,ci)が第三積和演算ユニット473に入力される。
ラインデータL(y+2)が第二入力レジスタ49bに格納されることで、要素a(x,y+2,ci)が第四積和演算ユニット474に入力され、要素a(x+1,y+2,ci)が第五積和演算ユニット475に入力され、要素a(x+2,y+2,ci)が第六積和演算ユニット476に入力される。
ラインデータL(y+3)が第三入力レジスタ49cに格納されることで、要素a(x,y+3,ci)が第七積和演算ユニット477に入力され、要素a(x+1,y+3,ci)が第八積和演算ユニット478に入力され、要素a(x+2,y+3,ci)が第九積和演算ユニット479に入力される。
このように、乗算に必要な分割入力データa(x+i,y+j,co)の要素aをラインデータLとして積和演算ユニットアレイ42Aに順次入力する。積和演算ユニットアレイ42Aは、ラインデータLを一要素分左シフトするごとに、加算結果O(x+i,y+j,di)を出力する。
図16は、入力レジスタ49と積和演算ユニット47との他の接続態様を示す図である。
第一入力レジスタ49aから積和演算ユニット47に出力される要素は、x軸方向に連続する要素でなくてもよい。図16に示すように、第一入力レジスタ49aから積和演算ユニット47に出力される要素は、例えばx軸方向に連続する2要素ごとに1要素を飛ばして選択した要素を出力してもよい。
また、入力レジスタ49は、スイッチまたはマルチプレクサ(以降、「選択部」という)により任意に選択した要素を出力してもよい。選択部は、制御回路46などにより制御される。つまり、選択部によって、入力レジスタ49に保持された複数の要素aに対して畳み込み演算を行う場合に、フィルタのサイズや種類などに応じて適宜演算対象を選択することができる。また、入力レジスタ49と積和演算ユニット47を選択的に接続可能な接続部を備えることにより、入力レジスタ49に入力される要素aの個数がレイヤや部分テンソルごとに変化する場合や、入力レジスタ49に入力可能な最大幅と第一メモリ1に格納されている入力データaの個数に差がある場合でも、接続を適宜変更することによって対応することができる。
入力レジスタ49に入力する複数のラインデータLは、xy軸平面におけるy軸方向に連続するラインデータでなくてもよい。入力レジスタ49に入力する複数のラインデータLは、y軸方向に所定のライン数分だけ離れたラインデータであってもよい。
図17は、アキュムレータ回路43の内部ブロック図である。
アキュムレータ回路43は、乗算器42の積和演算結果O(di)を第二メモリ2にアキュムレートする。アキュムレータ回路43は、Bd個のアキュムレータユニット48を有し、Bd個の積和演算結果O(di)を並列して第二メモリ2にアキュムレートできる。
図18は、アキュムレータユニット48の内部ブロック図である。
アキュムレータユニット48は、加算器48aと、マスク部48bとを有している。加算器48aは、積和演算結果Oの要素O(di)と、第二メモリ2に格納された式1に示す畳み込み演算の途中経過である部分和と、を加算する。加算結果は、要素あたり16ビットである。加算結果は、要素あたり16ビットに限定されず、例えば要素あたり15ビットや17ビットであってもよい。
加算器48aは、加算結果を第二メモリ2の同一アドレスに書き込む。マスク部48bは、初期化信号clearがアサートされた場合に、第二メモリ2からの出力をマスクし、要素O(di)に対する加算対象をゼロにする。初期化信号clearは、第二メモリ2に途中経過の部分和が格納されていない場合にアサートされる。
乗算器42およびアキュムレータ回路43による畳み込み演算が完了すると、第二メモリに、出力データf(x,y,do)が格納される。
ステートコントローラ44は、乗算器42およびアキュムレータ回路43のステートを制御する。また、ステートコントローラ44は、内部バスIBを介してコントローラ6と接続されている。ステートコントローラ44は、命令キュー45と制御回路46とを有する。
命令キュー45は、畳み込み演算回路4用の命令コマンドC4が格納されるキューであり、例えばFIFOメモリで構成される。命令キュー45には、内部バスIB経由で命令コマンドC4が書き込まれる。
制御回路46は、命令コマンドC4をデコードし、命令コマンドC4に基づいて乗算器42およびアキュムレータ回路43を制御するステートマシンである。制御回路46は、DMAC3のステートコントローラ32の制御回路34と同様の構成である。
[量子化演算回路5]
図19は、量子化演算回路5の内部ブロック図である。
量子化演算回路5は、量子化パラメータメモリ51と、ベクトル演算回路52と、量子化回路53と、ステートコントローラ54と、を有する量子化演算回路5は、ベクトル演算回路52および量子化回路53に対する専用のステートコントローラ54を有しており、命令コマンドが入力されると、外部のコントローラを必要とせずに量子化演算を実施できる。
量子化パラメータメモリ51は、量子化演算に用いる量子化パラメータqが格納されるメモリであり、例えばSRAM(Static RAM)などで構成された揮発性のメモリ等の書き換え可能なメモリである。DMAC3は、DMA転送により、量子化演算に必要な量子化パラメータqを量子化パラメータメモリ51に書き込む。
図20は、ベクトル演算回路52と量子化回路53の内部ブロック図である。
ベクトル演算回路52は、第二メモリ2に格納された出力データf(x,y,do)に対して演算を行う。ベクトル演算回路52は、Bd個の演算ユニット57を有し、出力データf(x,y,do)に対して並列にSIMD演算を行う。
図21は、演算ユニット57のブロック図である。
演算ユニット57は、例えば、ALU57aと、第一セレクタ57bと、第二セレクタ57cと、レジスタ57dと、シフタ57eと、を有する。演算ユニット57は、公知の汎用SIMD演算回路が有する他の演算器等をさらに有してもよい。
ベクトル演算回路52は、演算ユニット57が有する演算器等を組み合わせることで、出力データf(x,y,do)に対して、量子化演算層220におけるプーリング層221や、Batch Normalization層222や、活性化関数層223の演算のうち少なくとも一つの演算を行う。
演算ユニット57は、レジスタ57dに格納されたデータと第二メモリ2から読み出した出力データf(x,y,do)の要素f(di)とをALU57aにより加算できる。演算ユニット57は、ALU57aによる加算結果をレジスタ57dに格納できる。演算ユニット57は、第一セレクタ57bの選択によりレジスタ57dに格納されたデータに代えて「0」をALU57aに入力することで加算結果を初期化できる。例えばプーリング領域が2×2である場合、シフタ57eはALU57aの出力を2bit右シフトすることで加算結果の平均値を出力できる。ベクトル演算回路52は、Bd個の演算ユニット57による上記の演算等を繰り返すことで、式2に示す平均プーリングの演算を実施できる。
演算ユニット57は、レジスタ57dに格納されたデータと第二メモリ2から読み出した出力データf(x,y,do)の要素f(di)とをALU57aにより比較できる。
演算ユニット57は、ALU57aによる比較結果に応じて第二セレクタ57cを制御して、レジスタ57dに格納されたデータと要素f(di)の大きい方を選択できる。演算ユニット57は、第一セレクタ57bの選択により要素f(di)の取りうる値の最小値をALU57aに入力することで比較対象を最小値に初期化できる。本実施形態において要素f(di)は16bit符号付き整数であるので、要素f(di)の取りうる値の最小値は「0x8000」である。ベクトル演算回路52は、Bd個の演算ユニット57による上記の演算等を繰り返すことで、式3のMAXプーリングの演算を実施できる。なお、MAXプーリングの演算ではシフタ57eは第二セレクタ57cの出力をシフトしない。
演算ユニット57は、レジスタ57dに格納されたデータと第二メモリ2から読み出した出力データf(x,y,do)の要素f(di)とをALU57aにより減算できる。シフタ57eはALU57aの出力を左シフト(すなわち乗算)もしくは右シフト(すなわち除算)できる。ベクトル演算回路52は、Bd個の演算ユニット57による上記の演算等を繰り返すことで、式4のBatch Normalizationの演算を実施できる。
演算ユニット57は、第二メモリ2から読み出した出力データf(x,y,do)の要素f(di)と第一セレクタ57bにより選択された「0」とをALU57aにより比較できる。演算ユニット57は、ALU57aによる比較結果に応じて要素f(di)と予めレジスタ57dに格納された定数値「0」のいずれかを選択して出力できる。ベクトル演算回路52は、Bd個の演算ユニット57による上記の演算等を繰り返すことで、式5のReLU演算を実施できる。
ベクトル演算回路52は、平均プーリング、MAXプーリング、Batch Normalization、活性化関数の演算およびこれらの演算の組み合わせを実施できる。ベクトル演算回路52は、汎用SIMD演算を実施できるため、量子化演算層220における演算に必要な他の演算を実施してもよい。また、ベクトル演算回路52は、量子化演算層220における演算以外の演算を実施してもよい。
なお、量子化演算回路5は、ベクトル演算回路52を有してなくてもよい。量子化演算回路5がベクトル演算回路52を有していない場合、出力データf(x,y,do)は量子化回路53に入力される。
量子化回路53は、ベクトル演算回路52の出力データに対して、量子化を行う。量子化回路53は、図20に示すように、Bd個の量子化ユニット58を有し、ベクトル演算回路52の出力データに対して並列に演算を行う。
図22は、量子化ユニット58の内部ブロック図である。
量子化ユニット58は、ベクトル演算回路52の出力データの要素in(di)に対して量子化を行う。量子化ユニット58は、比較器58aと、エンコーダ58bと、を有する。量子化ユニット58はベクトル演算回路52の出力データ(16ビット/要素)に対して、量子化演算層220における量子化層224の演算(式6)を行う。量子化ユニット58は、量子化パラメータメモリ51から必要な量子化パラメータq(th0,th1,th2)を読み出し、比較器58aにより入力in(di)と量子化パラメータqとの比較を行う。量子化ユニット58は、比較器58aによる比較結果をエンコーダ58bにより2ビット/要素に量子化する。式4におけるα(c)とβ(c)は、変数cごとに異なるパラメータであるため、α(c)とβ(c)を反映する量子化パラメータq(th0,th1,th2)はin(di)ごとに異なるパラメータである。
量子化ユニット58は、入力in(di)を3つの閾値th0,th1,th2と比較することにより、入力in(di)を4領域(例えば、in≦th0,th0<in≦th1,th1<in≦th2,th2<in)に分類し、分類結果を2ビットにエンコードして出力する。量子化ユニット58は、量子化パラメータq(th0,th1,th2)の設定により、量子化と併せてBatch Normalizationや活性化関数の演算を行うこともできる。
量子化ユニット58は、閾値th0を式4のβ(c)、閾値の差(th1―th0)および(th2―th1)を式4のα(c)として設定して量子化を行うことで、式4に示すBatch Normalizationの演算を量子化と併せて実施できる。(th1―th0)および(th2―th1)を大きくすることでα(c)を小さくできる。(th1―th0)および(th2―th1)を小さくすることで、α(c)を大きくできる。
量子化ユニット58は、入力in(di)の量子化と併せて活性化関数のReLU演算を実施できる。例えば、量子化ユニット58は、in(di)≦th0およびth2<in(di)となる領域では出力値を飽和させる。量子化ユニット58は、出力が非線形とするように量子化パラメータqを設定することで活性化関数の演算を量子化と併せて実施できる。
ステートコントローラ54は、ベクトル演算回路52および量子化回路53のステートを制御する。また、ステートコントローラ54は、内部バスIBを介してコントローラ6と接続されている。ステートコントローラ54は、命令キュー55と制御回路56とを有する。
命令キュー55は、量子化演算回路5用の命令コマンドC5が格納されるキューであり、例えばFIFOメモリで構成される。命令キュー55には、内部バスIB経由で命令コマンドC5が書き込まれる。
制御回路56は、命令コマンドC5をデコードし、命令コマンドC5に基づいてベクトル演算回路52および量子化回路53を制御するステートマシンである。制御回路56は、DMAC3のステートコントローラ32の制御回路34と同様の構成である。
量子化演算回路5は、Bd個の要素を持つ量子化演算出力データを第一メモリ1に書き込む。なお、BdとBcの好適な関係を式10に示す。式10においてnは整数である。
Figure 2022105437000011
以上、本発明の第一実施形態について図面を参照して詳述したが、具体的な構成はこの実施形態に限られるものではなく、本発明の要旨を逸脱しない範囲の設計変更等も含まれる。また、上述の実施形態および変形例において示した構成要素は適宜に組み合わせて構成することが可能である。
(変形例1)
本実施形態においては、重みwのxy軸平面において3x3の9要素を9個の積和演算ユニット47により乗算する例を示したが、演算対象の要素の数を増減することも可能である。例えば、要素の数を9個より少なくする場合には、入力レジスタ49と積和演算ユニット47の間の接続部を制御し、接続する個数を9個以下の任意の個数とすることで実現することができる。また要素が入力されない積和演算ユニット47の出力を0または無効とする事によって積和演算ユニットアレイ42Aに含まれる積和演算ユニット47の個数よりも少ない要素に対して積和演算を行うことができる。
また、要素の数を9個より多くする場合には、xy軸平面において重みwを分割してサイズを3x3以下とすることで実現することができる。具体的に一例として5x5の25要素を9個の積和演算ユニット47により乗算する場合には、重みwを3x3、3x2、2x3、2x2の4つの分割重みに分割する。そして、それぞれの分割重みを用いて、順次第一メモリ1に格納された入力データaに対して演算を行い、演算結果をアキュムレータ回路43などを用いて加算する。この様に、重みwを一つの積和演算ユニットアレイ42Aに含まれる積和演算ユニット47の個数よりも小さいサイズに重みを分割し、それぞれで積和演算をこないその後加算することによって積和演算ユニットアレイ42Aに含まれる積和演算ユニット47の個数よりも多い要素に対して積和演算を行うことができる。
(変形例2)
上記実施形態において、第一メモリ1と第二メモリ2は別のメモリであったが、第一メモリ1と第二メモリ2の態様はこれに限定されない。第一メモリ1と第二メモリ2は、例えば、同一メモリにおける第一メモリ領域と第二メモリ領域であってもよい。
(変形例3)
例えば、上記実施形態に記載のNN回路100に入力されるデータは単一の形式に限定されず、静止画像、動画像、音声、文字、数値およびこれらの組み合わせで構成することが可能である。なお、NN回路100に入力されるデータは、NN回路100が設けられるエッジデバイスに搭載され得る、光センサ、温度計、Global Positioning System(GPS)計測器、角速度計測器、風速計などの物理量測定器における測定結果に限られない。周辺機器から有線または無線通信経由で受信する基地局情報、車両・船舶等の情報、天候情報、混雑状況に関する情報などの周辺情報や金融情報や個人情報等の異なる情報を組み合わせてもよい。
(変形例4)
NN回路100が設けられるエッジデバイスは、バッテリー等で駆動する携帯電話などの通信機器、パーソナルコンピュータなどのスマートデバイス、デジタルカメラ、ゲーム機器、ロボット製品などのモバイル機器を想定するが、これに限られるものではない。Power on Ethernet(PoE)などでの供給可能なピーク電力制限、製品発熱の低減または長時間駆動の要請が高い製品に利用することでも他の先行例にない効果を得ることができる。例えば、車両や船舶などに搭載される車載カメラや、公共施設や路上などに設けられる監視カメラ等に適用することで長時間の撮影を実現できるだけでなく、軽量化や高耐久化にも寄与する。また、テレビやディスプレイ等の表示デバイス、医療カメラや手術ロボット等の医療機器、製造現場や建築現場で使用される作業ロボットなどにも適用することで同様の効果を奏することができる。
(変形例5)
NN回路100は、NN回路100の一部または全部を一つ以上のプロセッサを用いて実現してもよい。例えば、NN回路100は、入力層または出力層の一部または全部をプロセッサによるソフトウェア処理により実現してもよい。ソフトウェア処理により実現する入力層または出力層の一部は、例えば、データの正規化や変換である。これにより、様々な形式の入力形式または出力形式に対応できる。なお、プロセッサで実行するソフトウェアは、通信手段や外部メディアを用いて書き換え可能に構成してもよい。
(変形例6)
NN回路100は、CNN200における処理の一部をクラウド上のGraphics Processing Unit(GPU)等を組み合わせることで実現してもよい。NN回路100は、NN回路100が設けられるエッジデバイスで行った処理に加えて、クラウド上でさらに処理を行ったり、クラウド上での処理に加えてエッジデバイス上で処理を行ったりすることで、より複雑な処理を少ないリソースで実現できる。このような構成によれば、NN回路100は、処理分散によりエッジデバイスとクラウドとの間の通信量を低減できる。
(変形例7)
NN回路100が行う演算は、学習済みのCNN200の少なくとも一部であったが、NN回路100が行う演算の対象はこれに限定されない。NN回路100が行う演算は、例えば畳み込み演算と量子化演算のように、2種類の演算を繰り返す学習済みのニューラルネットワークの少なくとも一部であってもよい。
また、本明細書に記載された効果は、あくまで説明的または例示的なものであって限定的ではない。つまり、本開示に係る技術は、上記の効果とともに、または上記の効果に代えて、本明細書の記載から当業者には明らかな他の効果を奏しうる。
本発明は、ニューラルネットワークの演算に適用することができる。
200 畳み込みニューラルネットワーク
100 ニューラルネットワーク回路(NN回路)
1 第一メモリ
2 第二メモリ
3 DMAコントローラ(DMAC)
4 畳み込み演算回路
42 乗算器(演算器アレイ)
42A 積和演算ユニットアレイ
47 積和演算ユニット
43 アキュムレータ回路
5 量子化演算回路
52 ベクトル演算回路
53 量子化回路
6 コントローラ
61 レジスタ

Claims (8)

  1. 入力データと重みとに対して畳み込み演算を行う畳み込み演算回路を備え、
    前記入力データは、x軸方向、y軸方向およびc軸方向に要素を有する3次以上のテンソルであり、
    前記畳み込み演算回路は、前記入力データの要素を前記c軸方向ごとに演算する演算器アレイを少なくとも一つ有し、
    前記演算器アレイは、前記入力データが入力される入力レジスタと、前記入力データの前記x軸方向および前記y軸方向の複数の要素を演算する積和演算ユニットアレイと、を有する、
    ニューラルネットワーク回路。
  2. 前記入力レジスタに格納される前記入力データの要素数は、前記積和演算ユニットアレイが演算する前記入力データの要素数より多い、
    請求項1に記載のニューラルネットワーク回路。
  3. 前記積和演算ユニットアレイは、前記入力データの要素を演算する積和演算ユニットを複数有し、
    前記入力レジスタに格納される前記入力データがシフトされることにより、前記積和演算ユニットに入力される前記入力データの要素が切り替わる、
    請求項1または請求項2に記載のニューラルネットワーク回路。
  4. 前記積和演算ユニットアレイは、前記入力データの要素を演算する積和演算ユニットを複数有し、
    前記積和演算ユニットアレイは、前記積和演算ユニットに入力される前記入力データの要素を切り替える接続部をさらに有する、
    請求項1または請求項2に記載のニューラルネットワーク回路。
  5. 複数の前記積和演算ユニットは、カスケード接続されている、
    請求項3または請求項4に記載のニューラルネットワーク回路。
  6. 前記積和演算ユニットアレイは、9個の前記積和演算ユニットを有する、
    請求項3または請求項4に記載のニューラルネットワーク回路。
  7. 前記畳み込み演算回路は、前記演算器アレイの積和演算結果を累積加算するアキュムレータ回路をさらに有する、
    請求項1から請求項6のいずれか一項に記載のニューラルネットワーク回路。
  8. x軸方向、y軸方向およびc軸方向に要素を有する3次以上のテンソルである入力データを畳み込み演算する演算方法であって、
    前記入力データの要素を前記c軸方向ごとに分割し、前記入力データの前記x軸方向および前記y軸方向の複数の要素を並列に演算する、
    ニューラルネットワーク演算方法。
JP2021000241A 2021-01-04 2021-01-04 ニューラルネットワーク回路およびニューラルネットワーク演算方法 Pending JP2022105437A (ja)

Priority Applications (1)

Application Number Priority Date Filing Date Title
JP2021000241A JP2022105437A (ja) 2021-01-04 2021-01-04 ニューラルネットワーク回路およびニューラルネットワーク演算方法

Applications Claiming Priority (1)

Application Number Priority Date Filing Date Title
JP2021000241A JP2022105437A (ja) 2021-01-04 2021-01-04 ニューラルネットワーク回路およびニューラルネットワーク演算方法

Publications (1)

Publication Number Publication Date
JP2022105437A true JP2022105437A (ja) 2022-07-14

Family

ID=82362618

Family Applications (1)

Application Number Title Priority Date Filing Date
JP2021000241A Pending JP2022105437A (ja) 2021-01-04 2021-01-04 ニューラルネットワーク回路およびニューラルネットワーク演算方法

Country Status (1)

Country Link
JP (1) JP2022105437A (ja)

Similar Documents

Publication Publication Date Title
JP7329533B2 (ja) 演算を加速するための方法および加速器装置
Jiao et al. Accelerating low bit-width convolutional neural networks with embedded FPGA
US9411726B2 (en) Low power computation architecture
KR102354722B1 (ko) 계산 장치 및 방법
WO2021210527A1 (ja) ニューラルネットワーク回路の制御方法
EP3709225A1 (en) System and method for efficient utilization of multipliers in neural-network computations
JP6896306B1 (ja) ニューラルネットワーク回路、エッジデバイスおよびニューラルネットワーク演算方法
US20240095522A1 (en) Neural network generation device, neural network computing device, edge device, neural network control method, and software generation program
KR100919236B1 (ko) 병렬 프로세서를 이용한 3차원 그래픽 기하 변환 방법
Tomasi et al. FPGA–DSP co-processing for feature tracking in smart video sensors
US20100257342A1 (en) Row of floating point accumulators coupled to respective pes in uppermost row of pe array for performing addition operation
JP2022105437A (ja) ニューラルネットワーク回路およびニューラルネットワーク演算方法
CN113240101B (zh) 卷积神经网络软硬件协同加速的异构SoC实现方法
WO2022085661A1 (ja) ニューラルネットワーク生成装置、ニューラルネットワーク制御方法およびソフトウェア生成プログラム
JP2022183833A (ja) ニューラルネットワーク回路およびニューラルネットワーク演算方法
WO2022004815A1 (ja) ニューラルネットワーク生成装置、ニューラルネットワーク生成方法およびニューラルネットワーク生成プログラム
WO2023058422A1 (ja) ニューラルネットワーク回路およびニューラルネットワーク回路の制御方法
WO2023139990A1 (ja) ニューラルネットワーク回路およびニューラルネットワーク演算方法
WO2024038662A1 (ja) ニューラルネットワーク学習装置およびニューラルネットワーク学習方法
JP2022074442A (ja) 演算装置および演算方法
JP6931252B1 (ja) ニューラルネットワーク回路およびニューラルネットワーク回路の制御方法
JP2023154880A (ja) ニューラルネットワーク生成方法およびニューラルネットワーク生成プログラム
JP2022114698A (ja) ニューラルネットワーク生成装置、ニューラルネットワーク制御方法およびソフトウェア生成プログラム
JP2023006509A (ja) ソフトウェア生成装置およびソフトウェア生成方法
WO2008077803A1 (en) Simd processor with reduction unit