(19)【発行国】日本国特許庁(JP)
(12)【公報種別】公開特許公報(A)
(11)【公開番号】P2022183833
(43)【公開日】2022-12-13
(54)【発明の名称】ニューラルネットワーク回路およびニューラルネットワーク演算方法
(51)【国際特許分類】
G06F 17/10 20060101AFI20221206BHJP
【FI】
G06F17/10 A
【審査請求】未請求
【請求項の数】8
【出願形態】OL
(21)【出願番号】P 2021091331
(22)【出願日】2021-05-31
(71)【出願人】
【識別番号】517048278
【氏名又は名称】LeapMind株式会社
(74)【代理人】
【識別番号】100213104
【弁理士】
【氏名又は名称】市川 茂
(72)【発明者】
【氏名】渡邊 賢治
【テーマコード(参考)】
5B056
【Fターム(参考)】
5B056BB26
(57)【要約】
【課題】IoT機器などの組み込み機器に組み込み可能かつ高性能なニューラルネットワーク回路を提供する。
【解決手段】入力データに対して演算を行う複数のレイヤのための演算手段を備えるニューラルネットワーク装置であって、複数のレイヤは少なくとも第1のパラメータを用いて第1の演算を行う第1のレイヤと、第1の演算とは異なる第2の演算を行う第2のレイヤを含み、第2の演算は第1のパラメータ及び第1のパラメータとは異なる第2のパラメータに基づいて演算を行うことを特徴とする。
【選択図】
図10
【特許請求の範囲】
【請求項1】
入力データに対して演算を行う複数のレイヤのための演算手段を備えるニューラルネットワーク装置であって、
前記複数のレイヤは少なくとも第1のパラメータを用いて第1の演算を行う第1のレイヤと、前記第1の演算とは異なる第2の演算を行う第2のレイヤを含み、
前記第2の演算は前記第1のパラメータ及び前記第1のパラメータとは異なる第2のパラメータに基づいて演算を行うことを特徴とするニューラルネットワーク装置。
【請求項2】
前記第1のレイヤと前記第2のレイヤは前記複数のレイヤにおいて連続して演算を行うレイヤであることを特徴とする請求項1に記載のニューラルネットワーク装置
【請求項3】
前記第1の演算は畳み込み演算を含み、前記第2の演算は量子化演算を含むことを特徴とする請求項1または2に記載のニューラルネットワーク装置
【請求項4】
前記第1のパラメータは畳み込み演算に用いる重みを含み、前記第2のパラメータ量子化演算に用いる量子化パラメータを含むことを特徴とする請求項3に記載のニューラルネットワーク装置。
【請求項5】
前記畳み込み演算を行う入力データの各要素は2ビット以下で表され、前記重みに含まれる各要素は1ビットで表されることを特徴とする請求項4に記載のニューラルネットワーク装置。
【請求項6】
前記演算手段は畳み込み演算を行うための第1の回路を含み、
前記第1の回路は1つ以上の排他的論理和回路及びカウンタ回路を含むことを特徴とする請求項5に記載のニューラルネットワーク装置。
【請求項7】
前記演算手段は第1のレイヤにおける第1の演算と第2のレイヤにおける第2の演算とを並列に行うことを特徴とする請求項1乃至6のいずれか1項に記載のニューラルネットワーク装置。
【請求項8】
請求項1乃至7のいずれか1項に記載のニューラルネットワーク装置を含むエッジデバイス。
【発明の詳細な説明】
【技術分野】
【0001】
本発明は、ニューラルネットワーク回路およびニューラルネットワーク演算方法に関する。
【背景技術】
【0002】
近年、畳み込みニューラルネットワーク(Convolutional Neural Network:CNN)が画像認識等のモデルとして用いられている。畳み込みニューラルネットワークは、畳み込み層やプーリング層を有する多層構造であり、畳み込み演算等の多数の演算を必要とする。畳み込みニューラルネットワークによる演算を高速化する演算手法が様々考案されている(特許文献1)。
また、組み込み機器において、少ないリソースで畳み込み演算を高速処理する手法として、排他的論理和回路とビットシフトを用いる方法が考案されている(特許文献2)。
【先行技術文献】
【特許文献】
【0003】
【特許文献1】特開2018-077829号公報
【特許文献2】特開2020-060968号公報
【発明の概要】
【発明が解決しようとする課題】
【0004】
一方で、IoT機器などの組み込み機器においても畳み込みニューラルネットワークを利用した画像認識等を実現することが望まれている。組み込み機器においては、特許文献1等に記載された大規模な専用回路を組み込むことは難しい。また、CPUやメモリ等のハードウェアリソースが限られた組み込み機器においては、ハードウェアリソースをより効率的に用いて演算性能を高めることが求められる。
【0005】
上記事情を踏まえ、本発明は、IoT機器などの組み込み機器に組み込み可能かつ高性能なニューラルネットワーク回路およびニューラルネットワーク演算方法を提供することを目的とする。
【課題を解決するための手段】
【0006】
上記課題を解決するために、この発明は以下の手段を提案している。
本発明の第一の態様に係るニューラルネットワーク装置は、入力データに対して演算を行う複数のレイヤのための演算手段を備えるニューラルネットワーク装置であって、前記複数のレイヤは少なくとも第1のパラメータを用いて第1の演算を行う第1のレイヤと、前記第1の演算とは異なる第2の演算を行う第2のレイヤを含み、前記第2の演算は前記第1のパラメータ及び前記第1のパラメータとは異なる第2のパラメータに基づいて演算を行うことを特徴とする。
【発明の効果】
【0007】
本発明のニューラルネットワーク回路およびニューラルネットワーク演算方法は、IoT機器などの組み込み機器に組み込み可能かつ高性能である。
【図面の簡単な説明】
【0008】
【
図1】畳み込みニューラルネットワークを示す図である。
【
図2】畳み込み層が行う畳み込み演算を説明する図である。
【
図3】畳み込み演算のデータの展開を説明する図である。
【
図4】第一実施形態に係るニューラルネットワーク回路の全体構成を示す図である。
【
図5】同ニューラルネットワーク回路の動作例を示すタイミングチャートである。
【
図6】同ニューラルネットワーク回路の他の動作例を示すタイミングチャートである。
【
図7】同ニューラルネットワーク回路のDMACの内部ブロック図である。
【
図8】同DMACの制御回路のステート遷移図である。
【
図9】同ニューラルネットワーク回路の畳み込み演算回路の内部ブロック図である。
【
図10】同畳み込み演算回路の乗算器の内部ブロック図である。
【
図11】同乗算器の積和演算ユニットの内部ブロック図である。
【
図12】同畳み込み演算回路のアキュムレータ回路の内部ブロック図である。
【
図13】同アキュムレータ回路のアキュムレータユニットの内部ブロック図である。
【
図14】同ニューラルネットワーク回路の量子化演算回路の内部ブロック図である。
【
図15】同量子化演算回路のベクトル演算回路と量子化回路の内部ブロック図である。
【
図17】同量子化回路のベクトル量子化ユニットの内部ブロック図である。
【発明を実施するための形態】
【0009】
(第一実施形態)
本発明の第一実施形態について、
図1から
図17を参照して説明する。
図1は、畳み込みニューラルネットワーク200(以下、「CNN200」という)を示す図である。第一実施形態に係るニューラルネットワーク回路100(以下、「NN回路100」という)が行う演算は、推論時に使用する学習済みのCNN200の少なくとも一部である。
【0010】
[CNN200]
CNN200は、畳み込み演算を行う畳み込み層210と、量子化演算を行う量子化演算層220と、出力層230と、を含む多層構造のネットワークである。CNN200の少なくとも一部において、畳み込み層210と量子化演算層220とが交互に連結されている。CNN200は、画像認識や動画認識に広く使われるモデルである。CNN200は、全結合層などの他の機能を有する層(レイヤ)をさらに有してもよい。
【0011】
図2は、畳み込み層210が行う畳み込み演算を説明する図である。
畳み込み層210は、入力データaに対して重みwを用いた畳み込み演算を行う。畳み込み層210は、入力データaと重みwとを入力とする積和演算を行う。
【0012】
畳み込み層210への入力データa(アクティベーションデータ、特徴マップともいう)は、画像データ等の多次元データである。本実施形態において、入力データaは、要素(x,y,c)からなる3次元テンソルである。CNN200の畳み込み層210は、低ビットの入力データaに対して畳み込み演算を行う。本実施形態において、入力データaの要素は、2ビットの符号なし整数(0,1,2,3)である。入力データaの要素は、例えば、4ビットや8ビット符号なし整数でもよい。
【0013】
CNN200に入力される入力データが、例えば32ビットの浮動小数点型など、畳み込み層210への入力データaと形式が異なる場合、CNN200は畳み込み層210の前に型変換や量子化を行う入力層をさらに有してもよい。
【0014】
畳み込み層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を表す。
【0015】
畳み込み層210は、式1に示す畳み込み演算を行い、出力データfを出力する。式1において、sはストライドを示す。
図2において点線で示された領域は、入力データaに対して重みwoが適用される領域ao(以降、「適用領域ao」という)の一つを示している。適用領域aoの要素は、a(x+i,y+j,c)で表される。
【0016】
【0017】
量子化演算層220は、畳み込み層210が出力する畳み込み演算の出力に対して量子化などを実施する。量子化演算層220は、プーリング層221と、Batch Normalization層222と、活性化関数層223と、量子化層224と、を有する。
【0018】
プーリング層221は、畳み込み層210が出力する畳み込み演算の出力データfに対して平均プーリング(式2)やMAXプーリング(式3)などの演算を実施して、畳み込み層210の出力データfを圧縮する。式2および式3において、uは入力テンソルを示し、vは出力テンソルを示し、Tはプーリング領域の大きさを示す。式3において、maxはTに含まれるiとjの組み合わせに対するuの最大値を出力する関数である。
【0019】
【0020】
【0021】
Batch Normalization層222は、量子化演算層220やプーリング層221の出力データに対して、例えば式4に示すような演算によりデータ分布の正規化を行う。式4において、uは入力テンソルを示し、vは出力テンソルを示し、αはスケールを示し、βはバイアスを示す。学習済みのCNN200において、αおよびβは学習済みの定数ベクトルである。
【0022】
【0023】
活性化関数層223は、量子化演算層220やプーリング層221やBatch Normalization層222の出力に対してReLU(式5)などの活性化関数の演算を行う。式5において、uは入力テンソルであり、vは出力テンソルである。式5において、maxは引数のうち最も大きい数値を出力する関数である。
【0024】
【0025】
量子化層224は、量子化パラメータに基づいて、プーリング層221や活性化関数層223の出力に対して例えば式6に示すような量子化を行う。式6に示す量子化は、入力テンソルuを2ビットにビット削減している。式6において、q(c)は量子化パラメータのベクトルである。学習済みのCNN200において、q(c)は学習済みの定数ベクトルである。式6における不等式「≦」は「<」であってもよい。
【0026】
【0027】
出力層230は、恒等関数やソフトマックス関数等によりCNN200の結果を出力する層である。出力層230の前段のレイヤは、畳み込み層210であってもよいし、量子化演算層220であってもよい。
【0028】
CNN200は、量子化された量子化層224の出力データが、畳み込み層210に入力されるため、量子化を行わない他の畳み込みニューラルネットワークと比較して、畳み込み層210の畳み込み演算の負荷が小さい。
【0029】
[畳み込み演算の分割]
NN回路100は、畳み込み層210の畳み込み演算(式1)の入力データを部分テンソルに分割して演算する。部分テンソルへの分割方法や分割数は特に限定されない。部分テンソルは、例えば、入力データa(x+i,y+j,c)をa(x+i,y+j,co)に分割することにより形成される。なお、NN回路100は、畳み込み層210の畳み込み演算(式1)の入力データを分割せずに演算することもできる。
【0030】
畳み込み演算の入力データ分割において、式1における変数cは、式7に示すように、サイズBcのブロックで分割される。また、式1における変数dは、式8に示すように、サイズBdのブロックで分割される。式7において、coはオフセットであり、ciは0から(Bc-1)までのインデックスである。式8において、doはオフセットであり、diは0から(Bd-1)までのインデックスである。なお、サイズBcとサイズBdは同じであってもよい。
【0031】
【0032】
【0033】
式1における入力データa(x+i,y+j,c)は、サイズBcにより分割され、分割された入力データa(x+i,y+j,co)で表される。以降の説明において、分割された入力データaを「分割入力データa」ともいう。
【0034】
式1における重みw(i,j,c,d)は、サイズBcおよびBdにより分割され、分割された重みw(i,j,co,do)で表される。以降の説明において、分割された重みwを「分割重みw」ともいう。
【0035】
サイズBdにより分割された出力データf(x,y,do)は、式9により求まる。分割された出力データf(x,y,do)を組み合わせることで、最終的な出力データf(x,y,d)を算出できる。
【0036】
【0037】
[畳み込み演算のデータの展開]
NN回路100は、畳み込み層210の畳み込み演算における入力データaおよび重みwを展開して畳み込み演算を行う。
【0038】
図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))までを要素とする。
【0039】
分割重み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))までを要素とする。
【0040】
入力ベクトルAと重みマトリクスWとを乗算することで、ベクトルデータが算出される。i,j,coごとに算出されたベクトルデータを3次元テンソルに整形することで、出力データf(x,y,do)を得ることができる。このようなデータの展開を行うことで、畳み込み層210の畳み込み演算を、ベクトルデータとマトリクスデータとの乗算により実施できる。
【0041】
[NN回路100]
図4は、本実施形態に係るNN回路100の全体構成を示す図である。
NN回路100は、第一メモリ1と、第二メモリ2と、DMAコントローラ3(以下、「DMAC3」ともいう)と、畳み込み演算回路4と、量子化演算回路5と、コントローラ6と、を備える。NN回路100は、第一メモリ1および第二メモリ2を介して、畳み込み演算回路4と量子化演算回路5とがループ状に形成されていることを特徴とする。
【0042】
第一メモリ1は、例えばSRAM(Static RAM)などで構成された揮発性のメモリ等の書き換え可能なメモリである。第一メモリ1には、DMAC3やコントローラ6を介してデータの書き込みおよび読み出しが行われる。第一メモリ1は、畳み込み演算回路4の入力ポートと接続されており、畳み込み演算回路4は第一メモリ1からデータを読み出すことができる。また、第一メモリ1は、量子化演算回路5の出力ポートと接続されており、量子化演算回路5は第一メモリ1にデータを書き込むことができる。外部ホストCPUは、第一メモリ1に対するデータの書き込みや読み出しにより、NN回路100に対するデータの入出力を行うことができる。
【0043】
第二メモリ2は、例えばSRAM(Static RAM)などで構成された揮発性のメモリ等の書き換え可能なメモリである。第二メモリ2には、DMAC3やコントローラ6を介してデータの書き込みおよび読み出しが行われる。第二メモリ2は、量子化演算回路5の入力ポートと接続されており、量子化演算回路5は第二メモリ2からデータを読み出すことができる。また、第二メモリ2は、畳み込み演算回路4の出力ポートと接続されており、畳み込み演算回路4は第二メモリ2にデータを書き込むことができる。外部ホストCPUは、第二メモリ2に対するデータの書き込みや読み出しにより、NN回路100に対するデータの入出力を行うことができる。
【0044】
DMAC3は、外部バスEBに接続されており、DRAMなどの外部メモリと第一メモリ1との間のデータ転送を行う。また、DMAC3は、DRAMなどの外部メモリと第二メモリ2との間のデータ転送を行う。また、DMAC3は、DRAMなどの外部メモリと畳み込み演算回路4との間のデータ転送を行う。また、DMAC3は、DRAMなどの外部メモリと量子化演算回路5との間のデータ転送を行う。
【0045】
畳み込み演算回路4は、学習済みのCNN200の畳み込み層210における畳み込み演算を行う回路である。畳み込み演算回路4は、第一メモリ1に格納された入力データaを読み出し、入力データaに対して畳み込み演算を実施する。畳み込み演算回路4は、畳み込み演算の出力データf(以降、「畳み込み演算出力データ」ともいう)を第二メモリ2に書き込む。
【0046】
量子化演算回路5は、学習済みのCNN200の量子化演算層220における量子化演算の少なくとも一部を行う回路である。量子化演算回路5は、第二メモリ2に格納された畳み込み演算の出力データfを読み出し、畳み込み演算の出力データfに対して量子化演算(プーリング、Batch Normalization、活性化関数、および量子化のうち少なくとも量子化を含む演算)を行う。量子化演算回路5は、量子化演算の出力データ(以降、「量子化演算出力データ」ともいう)を第一メモリ1に書き込む。
【0047】
コントローラ6は、外部バスEBに接続されており、外部のホストCPUのスレーブとして動作する。コントローラ6は、パラメータレジスタや状態レジスタを含むレジスタ61を有している。パラメータレジスタは、NN回路100の動作を制御するレジスタである。状態レジスタはセマフォSを含むNN回路100の状態を示すレジスタである。外部ホストCPUは、コントローラ6を経由して、レジスタ61にアクセスできる。
【0048】
コントローラ6は、内部バスIBを介して、第一メモリ1と、第二メモリ2と、DMAC3と、畳み込み演算回路4と、量子化演算回路5と、接続されている。外部ホストCPUは、コントローラ6を経由して、各ブロックに対してアクセスできる。例えば、外部ホストCPUは、コントローラ6を経由して、DMAC3や畳み込み演算回路4や量子化演算回路5に対する命令を指示することができる。また、DMAC3や畳み込み演算回路4や量子化演算回路5は、内部バスIBを介して、コントローラ6が有する状態レジスタ(セマフォSを含む)を更新できる。状態レジスタ(セマフォSを含む)は、DMAC3や畳み込み演算回路4や量子化演算回路5と接続された専用配線を介して更新されるように構成されていてもよい。
【0049】
NN回路100は、第一メモリ1や第二メモリ2等を有するため、DRAMなどの外部メモリからのDMAC3によるデータ転送において、重複するデータのデータ転送の回数を低減できる。これにより、メモリアクセスにより発生する消費電力を大幅に低減することができる。
【0050】
[NN回路100の動作例1]
図5は、NN回路100の動作例を示すタイミングチャートである。
DMAC3は、レイヤ1の入力データaを第一メモリ1に格納する。DMAC3は、畳み込み演算回路4が行う畳み込み演算の順序にあわせて、レイヤ1の入力データaを分割して第一メモリ1に転送してもよい。
【0051】
畳み込み演算回路4は、第一メモリ1に格納されたレイヤ1の入力データaを読み出す。畳み込み演算回路4は、レイヤ1の入力データaに対して
図1に示すレイヤ1の畳み込み演算を行う。レイヤ1の畳み込み演算の出力データfは、第二メモリ2に格納される。
【0052】
量子化演算回路5は、第二メモリ2に格納されたレイヤ1の出力データfを読み出す。量子化演算回路5は、レイヤ1の出力データfに対してレイヤ2の量子化演算を行う。レイヤ2の量子化演算の出力データは、第一メモリ1に格納される。
【0053】
畳み込み演算回路4は、第一メモリ1に格納されたレイヤ2の量子化演算の出力データを読み出す。畳み込み演算回路4は、レイヤ2の量子化演算の出力データを入力データaとしてレイヤ3の畳み込み演算を行う。レイヤ3の畳み込み演算の出力データfは、第二メモリ2に格納される。
【0054】
畳み込み演算回路4は、第一メモリ1に格納されたレイヤ2M-2(Mは自然数)の量子化演算の出力データを読み出す。畳み込み演算回路4は、レイヤ2M-2の量子化演算の出力データを入力データaとしてレイヤ2M-1の畳み込み演算を行う。レイヤ2M-1の畳み込み演算の出力データfは、第二メモリ2に格納される。
【0055】
量子化演算回路5は、第二メモリ2に格納されたレイヤ2M-1の出力データfを読み出す。量子化演算回路5は、2M-1レイヤの出力データfに対してレイヤ2Mの量子化演算を行う。レイヤ2Mの量子化演算の出力データは、第一メモリ1に格納される。
【0056】
畳み込み演算回路4は、第一メモリ1に格納されたレイヤ2Mの量子化演算の出力データを読み出す。畳み込み演算回路4は、レイヤ2Mの量子化演算の出力データを入力データaとしてレイヤ2M+1の畳み込み演算を行う。レイヤ2M+1の畳み込み演算の出力データfは、第二メモリ2に格納される。
【0057】
畳み込み演算回路4と量子化演算回路5とが交互に演算を行い、
図1に示すCNN200の演算を進めていく。NN回路100は、畳み込み演算回路4が時分割によりレイヤ2M-1の畳み込み演算とレイヤ2M+1を実施する。また、NN回路100は、量子化演算回路5が時分割によりレイヤ2M-2の畳み込み演算とレイヤ2Mを実施する。そのため、NN回路100は、レイヤごとに別々の畳み込み演算回路4と量子化演算回路5を実装する場合と比較して、回路規模が著しく小さい。
【0058】
NN回路100は、複数のレイヤの多層構造であるCNN200の演算を、ループ状に形成された回路により演算する。NN回路100は、ループ状の回路構成により、ハードウェア資源を効率的に利用できる。なお、NN回路100は、ループ状に回路を形成するために、各レイヤで変化する畳み込み演算回路4や量子化演算回路5におけるパラメータは適宜更新される。
【0059】
CNN200の演算にNN回路100により実施できない演算が含まれる場合、NN回路100は外部ホストCPUなどの外部演算デバイスに中間データを転送する。外部演算デバイスが中間データに対して演算を行った後、外部演算デバイスによる演算結果は第一メモリ1や第二メモリ2に入力される。NN回路100は、外部演算デバイスによる演算結果に対する演算を再開する。
【0060】
[NN回路100の動作例2]
図6は、NN回路100の他の動作例を示すタイミングチャートである。
NN回路100は、入力データaを部分テンソルに分割して、時分割により部分テンソルに対する演算を行ってもよい。部分テンソルへの分割方法や分割数は特に限定されない。
【0061】
図6は、入力データaを二つの部分テンソルに分解した場合の動作例を示している。分解された部分テンソルを、「第一部分テンソルa
1」、「第二部分テンソルa
2」とする。例えば、レイヤ2M-1の畳み込み演算は、第一部分テンソルa
1に対応する畳み込み演算(
図6において、「レイヤ2M-1(a
1)」と表記)と、第二部分テンソルa
2に対応する畳み込み演算(
図6において、「レイヤ2M-1(a
2)」と表記)と、に分解される。
【0062】
第一部分テンソルa
1に対応する畳み込み演算および量子化演算と、第二部分テンソルa
2に対応する畳み込み演算および量子化演算とは、
図6に示すように、独立して実施することができる。
【0063】
畳み込み演算回路4は、第一部分テンソルa
1に対応するレイヤ2M-1の畳み込み演算(
図6において、レイヤ2M-1(a
1)で示す演算)を行う。その後、畳み込み演算回路4は、第二部分テンソルa
2に対応するレイヤ2M-1の畳み込み演算(
図6において、レイヤ2M-1(a
2)で示す演算)を行う。また、量子化演算回路5は、第一部分テンソルa
1に対応するレイヤ2Mの量子化演算(
図6において、レイヤ2M(a
1)で示す演算)を行う。このように、NN回路100は、第二部分テンソルa
2に対応するレイヤ2M-1の畳み込み演算と、第一部分テンソルa
1に対応するレイヤ2Mの量子化演算と、を並列に実施できる。
【0064】
次に、畳み込み演算回路4は、第一部分テンソルa
1に対応するレイヤ2M+1の畳み込み演算(
図6において、レイヤ2M+1(a
1)で示す演算)を行う。また、量子化演算回路5は、第二部分テンソルa
2に対応するレイヤ2Mの量子化演算(
図6において、レイヤ2M(a
2)で示す演算)を行う。このように、NN回路100は、第一部分テンソルa
1に対応するレイヤ2M+1の畳み込み演算と、第二部分テンソルa
2に対応するレイヤ2Mの量子化演算と、を並列に実施できる。
【0065】
入力データaを部分テンソルに分割することで、NN回路100は畳み込み演算回路4と量子化演算回路5とを並列して動作させることができる。その結果、畳み込み演算回路4と量子化演算回路5が待機する時間が削減され、NN回路100の演算処理効率が向上する。
図6に示す動作例において分割数は2であったが、分割数が2より大きい場合も同様に、NN回路100は畳み込み演算回路4と量子化演算回路5とを並列して動作させることができる。
【0066】
なお、部分テンソルに対する演算方法としては、同一レイヤにおける部分テンソルの演算を畳み込み演算回路4または量子化演算回路5で行った後に次のレイヤにおける部分テンソルの演算を行う例(方法1)を示したが、演算方法はこれに限られない。NN回路100は、複数レイヤにおける一部の部分テンソルの演算をした後に残部の部分テンソルの演算をしてもよい(方法2)。また、NN回路100は、方法1と方法2とを組み合わせて部分テンソルを演算してもよい。また、並列した動作としては、レイヤ2M-1の畳み込み演算とレイヤ2Mの量子化演算のように連続したレイヤに限られるものではなく、レイヤ2M-1の畳み込み演算とレイヤ2M+2の量子化演算のように不連続なレイヤ間で行っても良い。また、複数のレイヤ2M-1の結果を加算などの演算を行って統合する場合などにおいては、レイヤ2M-1の畳み込み演算とレイヤ2Mの量子化演算の時間が大きく異なる。この場合には、両演算を並列して実施する期間が短くなるために、当該余った期間に異なる演算を並列に行うようにしても良い。
【0067】
次に、NN回路100の各構成に関して詳しく説明する。
【0068】
[DMAC3]
図7は、DMAC3の内部ブロック図である。
DMAC3は、データ転送回路31と、ステートコントローラ32と、を有する。DMAC3は、データ転送回路31に対する専用のステートコントローラ32を有しており、命令コマンドが入力されると、外部のコントローラを必要とせずにDMAデータ転送を実施できる。
【0069】
データ転送回路31は、外部バスEBに接続されており、DRAMなどの外部メモリと第一メモリ1との間のDMAデータ転送を行う。また、データ転送回路31は、DRAMなどの外部メモリと第二メモリ2との間のDMAデータ転送を行う。また、データ転送回路31は、DRAMなどの外部メモリと畳み込み演算回路4との間のデータ転送を行う。また、データ転送回路31は、DRAMなどの外部メモリと量子化演算回路5との間のデータ転送を行う。データ転送回路31のDMAチャンネル数は限定されない。例えば、第一メモリ1と第二メモリ2のそれぞれに専用のDMAチャンネルを有していてもよい。
【0070】
ステートコントローラ32は、データ転送回路31のステートを制御する。また、ステートコントローラ32は、内部バスIBを介してコントローラ6と接続されている。ステートコントローラ32は、命令キュー33と制御回路34とを有する。
【0071】
命令キュー33は、DMAC3用の命令コマンドC3が格納されるキューであり、例えばFIFOメモリで構成される。命令キュー33には、内部バスIB経由で1つ以上の命令コマンドC3が書き込まれる。
【0072】
制御回路34は、命令コマンドC3をデコードし、命令コマンドC3に基づいて順次データ転送回路31を制御するステートマシンである。制御回路34は、論理回路により実装されていてもよいし、ソフトウェアによって制御されるCPUによって実装されていてもよい。
【0073】
図8は、制御回路34のステート遷移図である。
制御回路34は、命令キュー33に命令コマンドC3が入力されると(Not empty)、アイドルステートS1からデコードステートS2に遷移する。
【0074】
制御回路34は、デコードステートS2において、命令キュー33から出力される命令コマンドC3をデコードする。また、制御回路34は、コントローラ6のレジスタ61に格納されたセマフォSを読み出し、命令コマンドC3において指示されたデータ転送回路31の動作を実行可能であるかを判定する。実行不能である場合(Not ready)、制御回路34は実行可能となるまで待つ(Wait)。実行可能である場合(ready)、制御回路34はデコードステートS2から実行ステートS3に遷移する。
【0075】
制御回路34は、実行ステートS3において、データ転送回路31を制御して、データ転送回路31に命令コマンドC3において指示された動作を実施させる。制御回路34は、データ転送回路31の動作が終わると、命令キュー33から実行を終えた命令コマンドC3を取り除くとともに、コントローラ6のレジスタ61に格納されたセマフォSを更新する。制御回路34は、命令キュー33に命令がある場合(Not empty)、実行ステートS3からデコードステートS2に遷移する。制御回路34は、命令キュー33に命令がない場合(empty)、実行ステートS3からアイドルステートS1に遷移する。
【0076】
[畳み込み演算回路4]
図9は、畳み込み演算回路4の内部ブロック図である。
畳み込み演算回路4は、重みメモリ41と、乗算器42と、アキュムレータ回路43と、ステートコントローラ44と、を有する。畳み込み演算回路4は、乗算器42およびアキュムレータ回路43に対する専用のステートコントローラ44を有しており、命令コマンドが入力されると、外部のコントローラを必要とせずに畳み込み演算を実施できる。
【0077】
重みメモリ41は、畳み込み演算に用いる重みwが格納されるメモリであり、例えばSRAM(Static RAM)などで構成された揮発性のメモリ等の書き換え可能なメモリである。DMAC3は、DMA転送により、畳み込み演算に必要な重みwを重みメモリ41に書き込む。
【0078】
図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は、パイプライン的に接続されたBd個の積和演算ユニット48を有し、分割入力データa(x+i,y+j,co)の要素a(x+i,y+j,ci)と分割重みw(i,j,co,do)の要素w(i,j,ci,di)との乗算を並列して実施できる。
【0079】
本実施形態において、要素a(x+i,y+j,ci)は、例えば2ビットなどの低ビットに量子化されていることから分割入力データa(x+i,y+j,co)は、Bcを8とした場合には16ビットの大きさを持つデータとなる。これは第一メモリ1または第二メモリ2のバス幅と同程度であることから、分割入力データa(x+i,y+j,co)の複数の要素を短いタイミングで効率的に読み出すことや書き込むことが可能となる。同様に、要素w(i,j,ci,di)も、例えば1ビットに量子化されていることから、分割重みw(i,j,co,do)の複数の要素を短いタイミングで読み出すことや書き込むことが可能となる。
【0080】
なお、乗算器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を格納可能とするが、これに限られるものではない。
【0081】
図11は、積和演算ユニット48の内部ブロック図である。
積和演算ユニット48は、複数のXOR回路47、複数のカウンタ回路49、加算回路50を含み、分割入力データa(x+i,y+j,co)と、分割重みw(i,j,co,do)とを乗算する。本実施形態において、一つの積和演算ユニット48は、1x1サイズの畳み込み演算を行う回路に相当する。
【0082】
積和演算ユニット48は、分割入力データa(x+i,y+j,co)に含まれる2ビットの各要素aの上位ビットからなるデータa[1]と下位ビットからなるデータa[0]とを入力する入力部を備える。一例として、Bcを8とした場合に、a[1]及びa[0]は、それぞれ8つのバイナリ値からなる8ビットのデータとなる。さらに、積和演算ユニット48は、分割重みw(i,j,co,do)を入力する入力部を備える。なお、分割重みw(i,j,co,do)は1ビットの各要素で構成されるため、一例としてBcを8とした場合に、8ビットの値となる。
【0083】
XOR回路47は入力されるデータa[1]またはデータa[0]と分割重みw(i,j,co,do)とのXOR演算を行う。データa[1]及びデータa[0]に対するXOR演算結果は、それぞれBc個のバイナリ値からなるデータとなる。
【0084】
XOR回路47におけるXOR演算の演算結果はそれぞれ、カウンタ回路49に入力される。カウンタ回路49は、それぞれのXOR演算の演算結果に含まれるバイナリ値として1の個数をカウントする(popcount演算)。そして、加算回路50は複数のカウンタの出力を加算して積和演算結果O(x+i,y+j,do)を出力する。本実施形態において、積和演算ユニット48が行う演算は式10で表すことができる。
【0085】
【0086】
図12は、アキュムレータ回路43の内部ブロック図である。
アキュムレータ回路43は、乗算器42の積和演算結果O(di)を第二メモリ2にアキュムレートする。アキュムレータ回路43は、Bd個のアキュムレータユニット48を有し、Bd個の積和演算結果O(di)を並列して第二メモリ2にアキュムレートできる。
【0087】
図13は、アキュムレータユニット48の内部ブロック図である。
アキュムレータユニット48は、加算器48aと、マスク部48bとを有している。加算器48aは、積和演算結果Oの要素O(di)と、第二メモリ2に格納された式1に示す畳み込み演算の途中経過である部分和と、を加算する。加算結果は、要素あたり16ビットである。加算結果は、要素あたり16ビットに限定されず、例えば要素あたり15ビットや17ビットであってもよい。
【0088】
加算器48aは、加算結果を第二メモリ2の同一アドレスに書き込む。マスク部48bは、初期化信号clearがアサートされた場合に、第二メモリ2からの出力をマスクし、要素O(di)に対する加算対象をゼロにする。初期化信号clearは、第二メモリ2に途中経過の部分和が格納されていない場合にアサートされる。
【0089】
乗算器42およびアキュムレータ回路43による畳み込み演算が完了すると、第二メモリに、出力データf(x,y,do)が格納される。
【0090】
ステートコントローラ44は、乗算器42およびアキュムレータ回路43のステートを制御する。また、ステートコントローラ44は、内部バスIBを介してコントローラ6と接続されている。ステートコントローラ44は、命令キュー45と制御回路46とを有する。
【0091】
命令キュー45は、畳み込み演算回路4用の命令コマンドC4が格納されるキューであり、例えばFIFOメモリで構成される。命令キュー45には、内部バスIB経由で命令コマンドC4が書き込まれる。
【0092】
制御回路46は、命令コマンドC4をデコードし、命令コマンドC4に基づいて乗算器42およびアキュムレータ回路43を制御するステートマシンである。制御回路46は、DMAC3のステートコントローラ32の制御回路34と同様の構成である。
【0093】
なお、本実施形態において、一つの積和演算ユニット48は、1x1サイズの畳み込み演算を行う回路に相当する例を示したが、これに限定されない。例えば、適宜分割重みw(i,j,co,do)を重みメモリ41から読み出しして複数の1x1サイズの畳み込み演算を行い、それぞれの結果をアキュムレータユニット48でアキュムレートすることにより大きいサイズの重みwを用いた畳み込み演算を実現することもできる。
【0094】
[量子化演算回路5]
図14は、量子化演算回路5の内部ブロック図である。
量子化演算回路5は、量子化パラメータメモリ51と、ベクトル演算回路52と、量子化回路53と、ステートコントローラ54と、を有する量子化演算回路5は、ベクトル演算回路52および量子化回路53に対する専用のステートコントローラ54を有しており、命令コマンドが入力されると、外部のコントローラを必要とせずに量子化演算を実施できる。
【0095】
量子化パラメータメモリ51は、量子化演算に用いる量子化パラメータqが格納されるメモリであり、例えばSRAM(Static RAM)などで構成された揮発性のメモリ等の書き換え可能なメモリである。DMAC3は、DMA転送により、量子化演算に必要な量子化パラメータqを量子化パラメータメモリ51に書き込む。
【0096】
図15は、ベクトル演算回路52と量子化回路53の内部ブロック図である。
ベクトル演算回路52は、第二メモリ2に格納された出力データf(x,y,do)に対して演算を行う。ベクトル演算回路52は、Bd個の演算ユニット57を有し、出力データf(x,y,do)に対して並列にSIMD演算を行う。
【0097】
図16は、演算ユニット57のブロック図である。
演算ユニット57は、例えば、ALU57aと、第一セレクタ57bと、第二セレクタ57cと、レジスタ57dと、シフタ57eと、を有する。演算ユニット57は、公知の汎用SIMD演算回路が有する他の演算器等をさらに有してもよい。
【0098】
ベクトル演算回路52は、演算ユニット57が有する演算器等を組み合わせることで、出力データf(x,y,do)に対して、量子化演算層220におけるプーリング層221や、Batch Normalization層222や、活性化関数層223の演算のうち少なくとも一つの演算を行う。
【0099】
演算ユニット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に示す平均プーリングの演算を実施できる。
【0100】
演算ユニット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の出力をシフトしない。
【0101】
演算ユニット57は、レジスタ57dに格納されたデータと第二メモリ2から読み出した出力データf(x,y,do)の要素f(di)とをALU57aにより減算できる。シフタ57eはALU57aの出力を左シフト(すなわち乗算)もしくは右シフト(すなわち除算)できる。ベクトル演算回路52は、Bd個の演算ユニット57による上記の演算等を繰り返すことで、式4のBatch Normalizationの演算を実施できる。
【0102】
演算ユニット57は、第二メモリ2から読み出した出力データf(x,y,do)の要素f(di)と第一セレクタ57bにより選択された「0」とをALU57aにより比較できる。演算ユニット57は、ALU57aによる比較結果に応じて要素f(di)と予めレジスタ57dに格納された定数値「0」のいずれかを選択して出力できる。ベクトル演算回路52は、Bd個の演算ユニット57による上記の演算等を繰り返すことで、式5のReLU演算を実施できる。
【0103】
ベクトル演算回路52は、平均プーリング、MAXプーリング、Batch Normalization、活性化関数の演算およびこれらの演算の組み合わせを実施できる。ベクトル演算回路52は、汎用SIMD演算を実施できるため、量子化演算層220における演算に必要な他の演算を実施してもよい。また、ベクトル演算回路52は、量子化演算層220における演算以外の演算を実施してもよい。
【0104】
なお、量子化演算回路5は、ベクトル演算回路52を有してなくてもよい。量子化演算回路5がベクトル演算回路52を有していない場合、出力データf(x,y,do)は量子化回路53に入力される。
【0105】
量子化回路53は、ベクトル演算回路52の出力データに対して、量子化を行う。量子化回路53は、
図15に示すように、Bd個の量子化ユニット58を有し、ベクトル演算回路52の出力データに対して並列に演算を行う。
【0106】
図17は、量子化ユニット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)ごとに異なるパラメータである。
【0107】
本実施形態において、比較器58aは量子化パラメータq(th0,th1,th2)に対してのオフセット演算機能を備える。具体的には、量子化パラメータqに含まれるそれぞれの閾値に対してOff(di)を加算する。Off(di)は式11で表すことができる。
【0108】
【0109】
ここで、popcount(w)は畳み込み演算に用いた分割重みw(i,j,co,do)に含まれるバイナリ値として1の個数をカウントしたものである。より詳細には比較器58aにおいて比較対象となるin(di)に相当する第二メモリ2から読み出した出力データf(x,y,do)であって、当該出力データf(x,y,do)を求める際の畳み込み演算に用いた分割重みwに含まれるバイナリ値として1の個数をカウントしたものである。例えば、レイヤ2M―1の畳み込み演算で用いた分割重みwを用い、レイヤ2Mの量子化演算の量子化パラメータqに対してpopcount(w)に依存するOff(di)を加算する。なお、ベクトル演算回路52において、出力データf(x,y,do)に対してプーリング処理、正規化処理、活性化処理などの処理を行なっている場合には、popcount(w)に対しても同様の処理を行うことが好ましい。一例として、ベクトル演算回路52において、出力データf(x,y,do)に対してビットシフト処理を行なっている場合には、同じ量のビットシフトをpopcount(w)に対しても行うことが好ましい。
【0110】
本実施形態において、入力データaの要素は、2ビットの符号なし整数(0,1,2,3)として、重みwの要素は、1ビットの符号付整数(0,1)であり、値「0」は+1を表し、値「1」として例示する。この場合、式1に示した畳み込み演算は式12で表すことができる。
【0111】
【0112】
一例として出力データf(x,y,do)を16ビットの大きさを持つデータとすると、とりうる値は―32768から32767となる。このため、符号用ビットを設けるが必要がある。一方で、式10と式12を比較すると、式10では負の値を取る第3項のpopcount(w)に依存する項が存在しない。そのため、符号ビットが不要となる。この結果、式10の演算結果であるO(di)は16ビットの大きさを持つとすると、符号用ビットを設ける必要がないことから、とりうる値は0から65535となる。言い換えれば、負の値を取る項を省略することにより、f(x,y,do)の取りうるレンジを拡大することができる。言い換えれば、畳み込み演算の対象範囲を拡大することができる。より詳細には、重みwのxy方向のサイズは畳み込み演算に用いるフィルタサイズで決定されるが、c方向のサイズは加算結果がオーバーフローしない範囲で制限される。そのため、出力データf(x,y,do)の取りうる最大値の増加はオーバーフローしない範囲が拡大することに相当し、演算効率をより高めることが可能となる。
【0113】
さらに、式10において必要なpopcount(w)に依存する項については、上述したように量子化パラメータq(th0,th1,th2)に対してのオフセット演算機能として相殺する。特にpopcount(w)は入力データaに依存しないため、学習結果としてレイヤごとに事前に決定することができる。なお、本実施形態においては、比較器58aが量子化パラメータq(th0,th1,th2)に対してのオフセット演算機能を備える場合を示したが、演算ユニット57の演算に含めるようにしても良い。また、量子化パラメータメモリ51に記憶されている量子化パラメータqに対して事前に演算を行なった結果を再度量子化パラメータメモリ51に記憶させておくようにしても良い。言い換えれば、学習した結果に基づいて学習済モデルを生成する際に、量子化パラメータqを対応する重みwを用いて更新するようにしてもよい。
【0114】
量子化ユニット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や活性化関数の演算を行うこともできる。
【0115】
量子化ユニット58は、閾値th0を式4のβ(c)、閾値の差(th1―th0)および(th2―th1)を式4のα(c)として設定して量子化を行うことで、式4に示すBatch Normalizationの演算を量子化と併せて実施できる。(th1―th0)および(th2―th1)を大きくすることでα(c)を小さくできる。(th1―th0)および(th2―th1)を小さくすることで、α(c)を大きくできる。
【0116】
量子化ユニット58は、入力in(di)の量子化と併せて活性化関数のReLU演算を実施できる。例えば、量子化ユニット58は、in(di)≦th0およびth2<in(di)となる領域では出力値を飽和させる。量子化ユニット58は、出力が非線形とするように量子化パラメータqを設定することで活性化関数の演算を量子化と併せて実施できる。
【0117】
ステートコントローラ54は、ベクトル演算回路52および量子化回路53のステートを制御する。また、ステートコントローラ54は、内部バスIBを介してコントローラ6と接続されている。ステートコントローラ54は、命令キュー55と制御回路56とを有する。
【0118】
命令キュー55は、量子化演算回路5用の命令コマンドC5が格納されるキューであり、例えばFIFOメモリで構成される。命令キュー55には、内部バスIB経由で命令コマンドC5が書き込まれる。
【0119】
制御回路56は、命令コマンドC5をデコードし、命令コマンドC5に基づいてベクトル演算回路52および量子化回路53を制御するステートマシンである。制御回路56は、DMAC3のステートコントローラ32の制御回路34と同様の構成である。
【0120】
量子化演算回路5は、Bd個の要素を持つ量子化演算出力データを第一メモリ1に書き込む。なお、BdとBcの好適な関係を式10に示す。式10においてnは整数である。
【0121】
この様に、量子化パラメータq及び重みwを学習した結果として、例えばレイヤ2M-1の畳み込み演算における重みwを用いて、レイヤ2Mなどの異なるレイヤの量子化パラメータqを更新などの量子化演算に反映することで、全体の演算効率を高めることができる。またより一般的には複数のレイヤに含まれる一つのレイヤを第1のレイヤとし、これと異なるレイヤを第2のレイヤとした場合に、第1のレイヤの演算(第1の演算)で用いたパラメータ(第1のパラメータ)を、第2のレイヤの演算(第2の演算)に用いることで演算効率を高めることができる。
【0122】
以上、本発明の第一実施形態について図面を参照して詳述したが、具体的な構成はこの実施形態に限られるものではなく、本発明の要旨を逸脱しない範囲の設計変更等も含まれる。また、上述の実施形態および変形例において示した構成要素は適宜に組み合わせて構成することが可能である。
(変形例1)
なお、本実施形態では、畳み込み演算に用いた重みwを用いて量子化演算に用いる量子化パラメータに反映させたが、演算を効率化させる方法としてはこれに限定されるものではない。例えば、畳み込み演算に用いた重みwを演算ユニット57の演算に反映させることも可能である。また、畳み込み演算は主に線形計算で成り立っているため、交換法則が成り立つことから、逆に量子化演算に用いる量子化パラメータの演算を簡略化するために畳み込み演算の重みwに反映させることも可能である。
【0123】
(変形例2)
上記実施形態において、第一メモリ1と第二メモリ2は別のメモリであったが、第一メモリ1と第二メモリ2の態様はこれに限定されない。第一メモリ1と第二メモリ2は、例えば、同一メモリにおける第一メモリ領域と第二メモリ領域であってもよい。
【0124】
(変形例3)
例えば、上記実施形態に記載のNN回路100に入力されるデータは単一の形式に限定されず、静止画像、動画像、音声、文字、数値およびこれらの組み合わせで構成することが可能である。なお、NN回路100に入力されるデータは、NN回路100が設けられるエッジデバイスに搭載され得る、光センサ、温度計、Global Positioning System(GPS)計測器、角速度計測器、風速計などの物理量測定器における測定結果に限られない。周辺機器から有線または無線通信経由で受信する基地局情報、車両・船舶等の情報、天候情報、混雑状況に関する情報などの周辺情報や金融情報や個人情報等の異なる情報を組み合わせてもよい。
【0125】
(変形例4)
NN回路100が設けられるエッジデバイスは、バッテリー等で駆動する携帯電話などの通信機器、パーソナルコンピュータなどのスマートデバイス、デジタルカメラ、ゲーム機器、ロボット製品などのモバイル機器を想定するが、これに限られるものではない。Power on Ethernet(PoE)などでの供給可能なピーク電力制限、製品発熱の低減または長時間駆動の要請が高い製品に利用することでも他の先行例にない効果を得ることができる。例えば、車両や船舶などに搭載される車載カメラや、公共施設や路上などに設けられる監視カメラ等に適用することで長時間の撮影を実現できるだけでなく、軽量化や高耐久化にも寄与する。また、テレビやディスプレイ等の表示デバイス、医療カメラや手術ロボット等の医療機器、製造現場や建築現場で使用される作業ロボットなどにも適用することで同様の効果を奏することができる。
【0126】
(変形例5)
NN回路100は、NN回路100の一部または全部を一つ以上のプロセッサを用いて実現してもよい。例えば、NN回路100は、入力層または出力層の一部または全部をプロセッサによるソフトウェア処理により実現してもよい。ソフトウェア処理により実現する入力層または出力層の一部は、例えば、データの正規化や変換である。これにより、様々な形式の入力形式または出力形式に対応できる。なお、プロセッサで実行するソフトウェアは、通信手段や外部メディアを用いて書き換え可能に構成してもよい。
【0127】
(変形例6)
NN回路100は、CNN200における処理の一部をクラウド上のGraphics Processing Unit(GPU)等を組み合わせることで実現してもよい。NN回路100は、NN回路100が設けられるエッジデバイスで行った処理に加えて、クラウド上でさらに処理を行ったり、クラウド上での処理に加えてエッジデバイス上で処理を行ったりすることで、より複雑な処理を少ないリソースで実現できる。このような構成によれば、NN回路100は、処理分散によりエッジデバイスとクラウドとの間の通信量を低減できる。
【0128】
(変形例7)
NN回路100が行う演算は、学習済みのCNN200の少なくとも一部であったが、NN回路100が行う演算の対象はこれに限定されない。NN回路100が行う演算は、例えば畳み込み演算と量子化演算のように、2種類の演算を繰り返す学習済みのニューラルネットワークの少なくとも一部であってもよい。
【0129】
また、本明細書に記載された効果は、あくまで説明的または例示的なものであって限定的ではない。つまり、本開示に係る技術は、上記の効果とともに、または上記の効果に代えて、本明細書の記載から当業者には明らかな他の効果を奏しうる。
【産業上の利用可能性】
【0130】
本発明は、ニューラルネットワークの演算に適用することができる。
【符号の説明】
【0131】
200 畳み込みニューラルネットワーク
100 ニューラルネットワーク回路(NN回路)
1 第一メモリ
2 第二メモリ
3 DMAコントローラ(DMAC)
4 畳み込み演算回路
42 乗算器
43 アキュムレータ回路
5 量子化演算回路
52 ベクトル演算回路
53 量子化回路
6 コントローラ
61 レジスタ