(19)【発行国】日本国特許庁(JP)
(12)【公報種別】公開特許公報(A)
(11)【公開番号】P2022114698
(43)【公開日】2022-08-08
(54)【発明の名称】ニューラルネットワーク生成装置、ニューラルネットワーク制御方法およびソフトウェア生成プログラム
(51)【国際特許分類】
G06N 3/04 20060101AFI20220801BHJP
G06F 17/16 20060101ALI20220801BHJP
【FI】
G06N3/04
G06F17/16 M
【審査請求】未請求
【請求項の数】12
【出願形態】OL
(21)【出願番号】P 2021011094
(22)【出願日】2021-01-27
(71)【出願人】
【識別番号】517048278
【氏名又は名称】LeapMind株式会社
(74)【代理人】
【識別番号】100161207
【弁理士】
【氏名又は名称】西澤 和純
(74)【代理人】
【識別番号】100161506
【弁理士】
【氏名又は名称】川渕 健一
(74)【代理人】
【識別番号】100139686
【弁理士】
【氏名又は名称】鈴木 史朗
(74)【代理人】
【識別番号】100207789
【弁理士】
【氏名又は名称】石田 良平
(72)【発明者】
【氏名】金井 潤一
(72)【発明者】
【氏名】ネバド ヴイルチエス アントニオ トマス
【テーマコード(参考)】
5B056
【Fターム(参考)】
5B056BB26
5B056BB71
5B056FF01
5B056FF02
(57)【要約】
【課題】IoT機器などの組み込み機器に組み込み可能であり、高性能に動作させることができるニューラルネットワークを生成して制御する。
【解決手段】ニューラルネットワーク生成装置は、畳み込み演算回路を有するニューラルネットワークハードウェアを動作させるソフトウェアを生成するソフトウェア生成部を備え、前記ソフトウェア生成部は、X×Y×C×Dの第一重みテンソルを並び替えたX´×Y´×C´×Dの第二重みテンソルを前記畳み込み演算回路に対する入力とする畳み込み演算を実施する前記ソフトウェアを生成し、X´はX以上、Y´はY以上、C´はC以下である。
【選択図】
図2
【特許請求の範囲】
【請求項1】
畳み込み演算回路を有するニューラルネットワークハードウェアを動作させるソフトウェアを生成するソフトウェア生成部を備え、
前記ソフトウェア生成部は、X×Y×C×Dの第一重みテンソルを並び替えたX´×Y´×C´×Dの第二重みテンソルを前記畳み込み演算回路に対する入力とする畳み込み演算を実施する前記ソフトウェアを生成し、
X´はX以上、Y´はY以上、C´はC以下である、
ニューラルネットワーク生成装置。
【請求項2】
X´はXのp倍(pは1より大きい自然数)であり、
Y´はYのp倍であり、
C´はCの1/p2倍である、
請求項1に記載のニューラルネットワーク生成装置。
【請求項3】
前記ソフトウェア生成部は、前記第二重みテンソルを前記畳み込み演算回路に対する入力とし、前記第一重みテンソルを入力とした畳み込み演算と比較してストライドをp倍とした畳み込み演算を実施する前記ソフトウェアを生成する、
請求項2に記載のニューラルネットワーク生成装置。
【請求項4】
前記ソフトウェア生成部は、前記第二重みテンソルと第一入力テンソルとを前記畳み込み演算回路に対する入力とする畳み込み演算を実施する前記ソフトウェアを生成し、
U×V×Wの前記第一入力テンソルを並び替えたU´×V´×W´の第二入力テンソルと前記第一重みテンソルとの畳み込み演算の結果は、前記第一入力テンソルと前記第二重みテンソルとの畳み込み演算の結果と等しく、
U´はU以下、V´はV以下、W´はW以上である、
請求項1から請求項3のいずれか一項に記載のニューラルネットワーク生成装置。
【請求項5】
畳み込み演算回路を有するニューラルネットワークハードウェアを制御する方法であって、
X×Y×C×Dの第一重みテンソルを並び替えたX´×Y´×C´×Dの第二重みテンソルを前記畳み込み演算回路に対する入力とする畳み込み演算を実施させ、
X´はX以上、Y´はY以上、C´はC以下である、
ニューラルネットワーク制御方法。
【請求項6】
X´はXのp倍(pは1より大きい自然数)であり、
Y´はYのp倍であり、
C´はCの1/p2倍である、
請求項5に記載のニューラルネットワーク制御方法。
【請求項7】
前記第二重みテンソルを前記畳み込み演算回路に対する入力とし、前記第一重みテンソルを入力とした畳み込み演算と比較してストライドをp倍とした畳み込み演算を実施させる、
請求項6に記載のニューラルネットワーク制御方法。
【請求項8】
前記第二重みテンソルと第一入力テンソルとを前記畳み込み演算回路に対する入力とする畳み込み演算を実施させ、
U×V×Wの前記第一入力テンソルを並び替えたU´×V´×W´の第二入力テンソルと前記第一重みテンソルとの畳み込み演算の結果は、前記第一入力テンソルと前記第二重みテンソルとの畳み込み演算の結果と等しく、
U´はU以下、V´はV以下、W´はW以上である、
請求項5から請求項7のいずれか一項に記載のニューラルネットワーク制御方法。
【請求項9】
畳み込み演算回路を有するニューラルネットワークハードウェアを制御するソフトウェアを生成するプログラムであって、
X×Y×C×Dの第一重みテンソルを並び替えたX´×Y´×C´×Dの第二重みテンソルを前記畳み込み演算回路に対する入力とする畳み込み演算を実施する前記ソフトウェアをコンピュータに生成させ、
X´はX以上、Y´はY以上、C´はC以下である、
ソフトウェア生成プログラム。
【請求項10】
X´はXのp倍(pは1より大きい自然数)であり、
Y´はYのp倍であり、
C´はCの1/p2倍である、
請求項9に記載のソフトウェア生成プログラム。
【請求項11】
前記第二重みテンソルを前記畳み込み演算回路に対する入力とし、前記第一重みテンソルを入力とした畳み込み演算と比較してストライドをp倍とした畳み込み演算を実施する前記ソフトウェアを生成する、
請求項10に記載のソフトウェア生成プログラム。
【請求項12】
前記第二重みテンソルと第一入力テンソルとを前記畳み込み演算回路に対する入力とする畳み込み演算を実施する前記ソフトウェアを生成し、
U×V×Wの前記第一入力テンソルを並び替えたU´×V´×W´の第二入力テンソルと前記第一重みテンソルとの畳み込み演算の結果は、前記第一入力テンソルと前記第二重みテンソルとの畳み込み演算の結果と等しく、
U´はU以下、V´はV以下、W´はW以上である、
請求項9から請求項11のいずれか一項に記載のソフトウェア生成プログラム。
【発明の詳細な説明】
【技術分野】
【0001】
本発明は、ニューラルネットワーク生成装置、ニューラルネットワーク制御方法およびソフトウェア生成プログラムに関する。
【背景技術】
【0002】
近年、畳み込みニューラルネットワーク(Convolutional Neural Network:CNN)が画像認識等のモデルとして用いられている。畳み込みニューラルネットワークは、畳み込み層やプーリング層を有する多層構造であり、畳み込み演算等の多数の演算を必要とする。畳み込みニューラルネットワークによる演算を高速化する演算手法が様々考案されている(特許文献1など)。
【先行技術文献】
【特許文献】
【0003】
【発明の概要】
【発明が解決しようとする課題】
【0004】
一方で、IoT機器などの組み込み機器においても畳み込みニューラルネットワークを利用した画像認識等が使用されている。組み込み機器において畳み込みニューラルネットワークを効率的に動作させるため、組み込み機器のハードウェア構成に合わせたニューラルネットワークに係る演算を行う回路やモデルを生成することが望まれている。また、これらの回路やモデルを高効率かつ高速に動作させる制御方法が望まれている。また、これらの回路やモデルを高効率かつ高速に動作させるソフトウェアを生成するソフトウェア生成プログラムが望まれている。
【0005】
上記事情を踏まえ、本発明は、IoT機器などの組み込み機器に組み込み可能であり、高効率かつ高速に動作させることができるニューラルネットワークに係る演算を行う回路やモデルを生成するニューラルネットワーク生成装置、ニューラルネットワークに係る演算を行う回路やモデルを高効率かつ高速に動作させるニューラルネットワーク制御方法およびニューラルネットワークに係る演算を行う回路やモデルを高効率かつ高速に動作させるソフトウェアを生成するソフトウェア生成プログラムを提供することを目的とする。
【課題を解決するための手段】
【0006】
上記課題を解決するために、この発明は以下の手段を提案している。
本発明の第一の態様に係るニューラルネットワーク生成装置は、畳み込み演算回路を有するニューラルネットワークハードウェアを動作させるソフトウェアを生成するソフトウェア生成部を備え、前記ソフトウェア生成部は、X×Y×C×Dの第一重みテンソルを並び替えたX´×Y´×C´×Dの第二重みテンソルを前記畳み込み演算回路に対する入力とする畳み込み演算を実施する前記ソフトウェアを生成し、X´はX以上、Y´はY以上、C´はC以下である。
【発明の効果】
【0007】
本発明のニューラルネットワーク生成装置、ニューラルネットワーク制御方法およびソフトウェア生成プログラムは、IoT機器などの組み込み機器に組み込み可能であり、高性能に動作させることができるニューラルネットワークを生成して制御できる。
【図面の簡単な説明】
【0008】
【
図1】第一実施形態に係るニューラルネットワーク生成装置を示す図である。
【
図2】同ニューラルネットワーク生成装置の演算部の入出力を示す図である。
【
図3】畳み込みニューラルネットワークの一例を示す図である。
【
図4】同畳み込みニューラルネットワークの畳み込み層が行う畳み込み演算を説明する図である。
【
図5】ニューラルネットワーク実行モデルの一例を示す図である。
【
図6】同ニューラルネットワーク実行モデルの動作例を示すタイミングチャートである。
【
図7】同ニューラルネットワーク生成装置の制御フローチャートである。
【
図8】生成される畳み込み演算回路の内部ブロック図である。
【
図9】同畳み込み演算回路の乗算器の内部ブロック図である。
【
図10】同乗算器の積和演算ユニットの内部ブロック図である。
【
図11】同畳み込み演算回路のアキュムレータ回路の内部ブロック図である。
【
図12】同アキュムレータ回路のアキュムレータユニットの内部ブロック図である。
【
図13】同畳み込み演算回路の制御回路のステート遷移図である。
【
図14】入力データにおけるc軸方向の要素数を増やす方法Aを示す図である。
【
図15】重みデータにおけるc軸方向の要素数を増やす方法Bを示す図である。
【
図16】方法Bにより並び替えられた重みデータの一例を示す図である。
【
図17】畳み込み演算のデータ分割やデータ展開を説明する図である。
【発明を実施するための形態】
【0009】
(第一実施形態)
本発明の第一実施形態について、
図1から
図17を参照して説明する。
図1は、本実施形態に係るニューラルネットワーク生成装置300を示す図である。
【0010】
[ニューラルネットワーク生成装置300]
ニューラルネットワーク生成装置300は、IoT機器などの組み込み機器に組み込み可能な学習済みのニューラルネットワーク実行モデル100を生成する装置である。ニューラルネットワーク実行モデル100は、畳み込みニューラルネットワーク200(以下、「CNN200」という)を組み込み機器において演算させるために生成されたソフトウェアやハードウェアモデルである。
【0011】
ニューラルネットワーク生成装置300は、CPU(Central Processing Unit)等のプロセッサとメモリ等のハードウェアを備えたプログラム実行可能な装置(コンピュータ)である。ニューラルネットワーク生成装置300の機能は、ニューラルネットワーク生成装置300においてニューラルネットワーク生成プログラムおよびソフトウェア生成プログラムを実行することにより実現される。ニューラルネットワーク生成装置300は、記憶部310と、演算部320と、データ入力部330と、データ出力部340と、表示部350と、操作入力部360と、を備える。
【0012】
記憶部310は、ハードウェア情報HWと、ネットワーク情報NWと、学習データセットDSと、ニューラルネットワーク実行モデル100(以下、「NN実行モデル100」という)と、学習済みパラメータPMと、を記憶する。ハードウェア情報HW、学習データセットDSおよびネットワーク情報NWは、ニューラルネットワーク生成装置300に入力される入力データである。NN実行モデル100および学習済みパラメータPMは、ニューラルネットワーク生成装置300が出力する出力データである。なお、「学習済みのNN実行モデル100」は、NN実行モデル100および学習済みパラメータPMを含む。
【0013】
ハードウェア情報HWは、NN実行モデル100を動作させる組み込み機器(以降、「動作対象ハードウェア」という)の情報である。ハードウェア情報HWは、例えば、動作対象ハードウェアのデバイス種別、デバイス制約、メモリ構成、バス構成、動作周波数、消費電力、製造プロセス種別などである。デバイス種別は、例えば、ASIC(Application Specific Integrated Circuit)、FPGA(Field-Programmable Gate Array)などの種別である。デバイス制約は、動作対象デバイスに含まれる演算器数の上限や回路規模の上限などである。メモリ構成は、メモリ種別やメモリ個数やメモリ容量や入出力データ幅である。バス構成は、バス種類、バス幅、バス通信規格、同一バス上の接続デバイスなどである。また、NN実行モデル100に複数のバリエーションが存在する場合、ハードウェア情報HWには使用するNN実行モデル100のバリエーションに関する情報が含まれる。
【0014】
ネットワーク情報NWは、CNN200の基本情報である。ネットワーク情報NWは、例えば、CNN200のネットワーク構成、入力データ情報、出力データ情報、量子化情報などである。入力データ情報は、画像や音声などの入力データ種別と、入力データサイズなどである。
【0015】
学習データセットDSは、学習に用いる学習データD1と、推論テストに用いるテストデータD2と、を有する。
【0016】
図2は、演算部320の入出力を示す図である。
演算部320は、実行モデル生成部321と、学習部322と、推論部323と、ハードウェア生成部324と、ソフトウェア生成部325と、を有する。演算部320に入力されるNN実行モデル100は、ニューラルネットワーク生成装置300以外の装置で生成されたものであってもよい。
【0017】
実行モデル生成部321は、ハードウェア情報HWおよびネットワーク情報NWに基づいてNN実行モデル100を生成する。NN実行モデル100は、CNN200を動作対象ハードウェアにおいて演算させるために生成されたソフトウェアやハードウェアモデルである。ソフトウェアは、ハードウェアモデルを制御するソフトウェアを含む。ハードウェアモデルは、ビヘイビアレベルであってもよく、RTL(Register Transfer Level)であってもよく、ゲートや回路モジュール間の接続を表すネットリストであってもよく、それらの組み合わせであってもよい。
【0018】
学習部322は、NN実行モデル100および学習データD1を用いて、学習済みパラメータPMを生成する。推論部323は、NN実行モデル100およびテストデータD2を用いて推論テストを実施する。
【0019】
ハードウェア生成部324は、ハードウェア情報HWおよびNN実行モデル100に基づいてニューラルネットワークハードウェアモデル400を生成する。ニューラルネットワークハードウェアモデル400は、動作対象ハードウェアに実装可能なハードウェアモデルである。ニューラルネットワークハードウェアモデル400は、ハードウェア情報HWに基づいて、動作対象ハードウェアに最適化されている。ニューラルネットワークハードウェアモデル400は、RTL(Register Transfer Level)であってもよく、ゲートや回路モジュール間の接続を表すネットリストであってもよく、それらの組み合わせであってもよい。ニューラルネットワークハードウェアモデル400は、NN実行モデル100をハードウェアに実装するために必要なパラメータリストやコンフィグレーションファイルであってもよい。パラメータリストやコンフィグレーションファイルは別途生成されたNN実行モデル100と組み合わせて使用される。
【0020】
以降の説明において、ニューラルネットワークハードウェアモデル400を動作対象ハードウェアに実装したものを、「ニューラルネットワークハードウェア600」という。
【0021】
ソフトウェア生成部325は、ネットワーク情報NWおよびNN実行モデル100に基づいて、ニューラルネットワークハードウェア600を動作させるソフトウェア500を生成する。ソフトウェア500は、例えばニューラルネットワークハードウェア600を動作させるための複数の命令コマンドを含む命令群である。ソフトウェア500は、学習済みパラメータPMを必要に応じてニューラルネットワークハードウェア600へ転送するソフトウェアを含む。
【0022】
データ入力部330には、学習済みのNN実行モデル100を生成するために必要なハードウェア情報HWやネットワーク情報NW等が入力される。ハードウェア情報HWやネットワーク情報NW等は、例えば所定のデータフォーマットで記載されたデータとして入力される。入力されたハードウェア情報HWやネットワーク情報NW等は、記憶部310に記憶される。ハードウェア情報HWやネットワーク情報NW等は、操作入力部360から使用者により入力または変更されてもよい。
【0023】
データ出力部340には、生成された学習済みのNN実行モデル100が出力される。例えば、生成されたNN実行モデル100と、学習済みパラメータPMとがデータ出力部340に出力される。
【0024】
表示部350は、LCDディスプレイ等の公知のモニタを有する。表示部350は、演算部320が生成したGUI(Graphical User Interface)画像やコマンド等を受け付けるためのコンソール画面などを表示できる。また、演算部320が使用者からの情報入力を必要とする場合、表示部350は操作入力部360から情報を入力することを使用者に促すメッセージや情報入力に必要なGUI画像を表示できる。
【0025】
操作入力部360は、使用者が演算部320等に対しての指示を入力する装置である。操作入力部360は、タッチパネル、キーボード、マウス等の公知の入力デバイスである。操作入力部360の入力は、演算部320に送信される。
【0026】
演算部320の機能の全部または一部は、例えばCPU(Central Processing Unit)やGPU(Graphics Processing Unit)のような1つ以上のプロセッサがプログラムメモリに記憶されたプログラムを実行することにより実現される。ただし、演算部320の機能の全部または一部は、LSI(Large Scale Integration)、ASIC(Application Specific Integrated Circuit)、FPGA(Field-Programmable Gate Array)、PLD(Programmable Logic Device)等のハードウェア(例えば回路部;circuity)により実現されてもよい。また、演算部320の機能の全部または一部は、ソフトウェアとハードウェアとの組み合わせにより実現されてもよい。
【0027】
演算部320の機能の全部または一部は、クラウドサーバ等の外部機器に設けられたCPUやGPUやハードウェア等の外部アクセラレータを用いて実現されてもよい。演算部320は、例えばクラウドサーバ上の演算性能が高いGPUや専用ハードウェアを併用することで、演算部320の演算速度を向上させることができる。
【0028】
記憶部310は、フラッシュメモリ、EEPROM(Electrically Erasable Programmable Read-Only Memory)、ROM(Read-Only Memory)、またRAM(Random Access Memory)等により実現される。記憶部310の全部または一部はクラウドサーバ等の外部機器に設けられ、通信回線により演算部320等と接続させてもよい。
【0029】
[畳み込みニューラルネットワーク(CNN)200]
次に、CNN200について説明する。
図3は、CNN200の一例を示す図である。CNN200のネットワーク情報NWは、以下で説明するCNN200の構成に関する情報である。CNN200は、低ビットの重みwや量子化された入力データaを用いており、組み込み機器に組み込みやすい。
【0030】
CNN200は、畳み込み演算を行う畳み込み層210と、量子化演算を行う量子化演算層220と、出力層230と、を含む多層構造のネットワークである。CNN200の少なくとも一部において、畳み込み層210と量子化演算層220とが交互に連結されている。CNN200は、画像認識や動画認識に広く使われるモデルである。CNN200は、全結合層などの他の機能を有する層(レイヤ)をさらに有してもよい。
【0031】
図4は、畳み込み層210が行う畳み込み演算を説明する図である。
畳み込み層210は、入力データaに対して重みwを用いた畳み込み演算を行う。畳み込み層210は、入力データaと重みwとを入力とする積和演算を行う。
【0032】
畳み込み層210への入力データa(アクティベーションデータ、特徴マップともいう)は、画像データ等の多次元データである。本実施形態において、入力データaは、要素(x,y,c)からなる3次元テンソルである。CNN200の畳み込み層210は、低ビットの入力データaに対して畳み込み演算を行う。本実施形態において、入力データaの要素は、2ビットの符号なし整数(0,1,2,3)である。入力データaの要素は、例えば、4ビットや8ビット符号なし整数でもよい。
【0033】
CNN200に入力される入力データが、例えば32ビットの浮動小数点型など、畳み込み層210への入力データaと形式が異なる場合、CNN200は畳み込み層210の前に型変換や量子化を行う入力層をさらに有してもよい。
【0034】
畳み込み層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を表す。
【0035】
畳み込み層210は、式1に示す畳み込み演算を行い、出力データfを出力する。式1において、sはストライドを示す。
図4において点線で示された領域は、入力データaに対して重みwoが適用される領域ao(以降、「適用領域ao」という)の一つを示している。適用領域aoの要素は、(x+i,y+j,c)で表される。
【0036】
【0037】
量子化演算層220は、畳み込み層210が出力する畳み込み演算の出力に対して量子化などを実施する。量子化演算層220は、プーリング層221と、Batch Normalization層222と、活性化関数層223と、量子化層224と、を有する。
【0038】
プーリング層221は、畳み込み層210が出力する畳み込み演算の出力データfに対して平均プーリング(式2)やMAXプーリング(式3)などの演算を実施して、畳み込み層210の出力データfを圧縮する。式2および式3において、uは入力テンソルを示し、vは出力テンソルを示し、Tはプーリング領域の大きさを示す。式3において、maxはTに含まれるiとjの組み合わせに対するuの最大値を出力する関数である。
【0039】
【0040】
【0041】
Batch Normalization層222は、量子化演算層220やプーリング層221の出力データに対して、例えば式4に示すような演算によりデータ分布の正規化を行う。式4において、uは入力テンソルを示し、vは出力テンソルを示し、αはスケールを示し、βはバイアスを示す。学習済みのCNN200において、αおよびβは学習済みの定数ベクトルである。
【0042】
【0043】
活性化関数層223は、量子化演算層220やプーリング層221やBatch Normalization層222の出力に対してReLU(式5)などの活性化関数の演算を行う。式5において、uは入力テンソルであり、vは出力テンソルである。式5において、maxは引数のうち最も大きい数値を出力する関数である。
【0044】
【0045】
量子化層224は、量子化パラメータに基づいて、プーリング層221や活性化関数層223の出力に対して例えば式6に示すような量子化を行う。式6に示す量子化は、入力テンソルuを2ビットにビット削減している。式6において、q(c)は量子化パラメータのベクトルである。学習済みのCNN200において、q(c)は学習済みの定数ベクトルである。式6における不等式「≦」は「<」であってもよい。
【0046】
【0047】
出力層230は、恒等関数やソフトマックス関数等によりCNN200の結果を出力する層である。出力層230の前段のレイヤは、畳み込み層210であってもよいし、量子化演算層220であってもよい。
【0048】
CNN200は、量子化された量子化層224の出力データが、畳み込み層210に入力されるため、量子化を行わない他の畳み込みニューラルネットワークと比較して、畳み込み層210の畳み込み演算の負荷が小さい。
【0049】
[ニューラルネットワーク実行モデル100(NN実行モデル)100]
次に、NN実行モデル100について説明する。
図5は、NN実行モデル100の一例を示す図である。NN実行モデル100は、CNN200を動作対象ハードウェアにおいて演算させるために生成されたソフトウェアやハードウェアモデルである。ソフトウェアは、ハードウェアモデルを制御するソフトウェアを含む。ハードウェアモデルは、ビヘイビアレベルであってもよく、RTL(Register Transfer Level)であってもよく、ゲートや回路モジュール間の接続を表すネットリストであってもよく、それらの組み合わせであってもよい。
【0050】
NN実行モデル100は、第一メモリ1と、第二メモリ2と、DMAコントローラ3(以下、「DMAC3」ともいう)と、畳み込み演算回路4と、量子化演算回路5と、コントローラ6と、を備える。NN実行モデル100は、第一メモリ1および第二メモリ2を介して、畳み込み演算回路4と量子化演算回路5とがループ状に形成されていることを特徴とする。
【0051】
第一メモリ1は、例えばSRAM(Static RAM)などで構成された揮発性のメモリ等の書き換え可能なメモリである。第一メモリ1には、DMAC3やコントローラ6を介してデータの書き込みおよび読み出しが行われる。第一メモリ1は、畳み込み演算回路4の入力ポートと接続されており、畳み込み演算回路4は第一メモリ1からデータを読み出すことができる。また、第一メモリ1は、量子化演算回路5の出力ポートと接続されており、量子化演算回路5は第一メモリ1にデータを書き込むことができる。外部ホストCPUは、第一メモリ1に対するデータの書き込みや読み出しにより、NN実行モデル100に対するデータの入出力を行うことができる。
【0052】
第二メモリ2は、例えばSRAM(Static RAM)などで構成された揮発性のメモリ等の書き換え可能なメモリである。第二メモリ2には、DMAC3やコントローラ6を介してデータの書き込みおよび読み出しが行われる。第二メモリ2は、量子化演算回路5の入力ポートと接続されており、量子化演算回路5は第二メモリ2からデータを読み出すことができる。また、第二メモリ2は、畳み込み演算回路4の出力ポートと接続されており、畳み込み演算回路4は第二メモリ2にデータを書き込むことができる。外部ホストCPUは、第二メモリ2に対するデータの書き込みや読み出しにより、NN実行モデル100に対するデータの入出力を行うことができる。
【0053】
DMAC3は、外部バスEBに接続されており、DRAMなどの外部メモリと第一メモリ1との間のデータ転送を行う。また、DMAC3は、DRAMなどの外部メモリと第二メモリ2との間のデータ転送を行う。また、DMAC3は、DRAMなどの外部メモリと畳み込み演算回路4との間のデータ転送を行う。また、DMAC3は、DRAMなどの外部メモリと量子化演算回路5との間のデータ転送を行う。
【0054】
畳み込み演算回路4は、学習済みのCNN200の畳み込み層210における畳み込み演算を行う回路である。畳み込み演算回路4は、第一メモリ1に格納された入力データaを読み出し、入力データaに対して畳み込み演算を実施する。畳み込み演算回路4は、畳み込み演算の出力データf(以降、「畳み込み演算出力データ」ともいう)を第二メモリ2に書き込む。
【0055】
量子化演算回路5は、学習済みのCNN200の量子化演算層220における量子化演算の少なくとも一部を行う回路である。量子化演算回路5は、第二メモリ2に格納された畳み込み演算の出力データfを読み出し、畳み込み演算の出力データfに対して量子化演算(プーリング、Batch Normalization、活性化関数、および量子化のうち少なくとも量子化を含む演算)を行う。量子化演算回路5は、量子化演算の出力データ(以降、「量子化演算出力データ」ともいう)оutを第一メモリ1に書き込む。
【0056】
コントローラ6は、外部バスEBに接続されており、外部のホストCPUのスレーブとして動作する。コントローラ6は、パラメータレジスタや状態レジスタを含むレジスタ61を有している。パラメータレジスタは、NN実行モデル100の動作を制御するレジスタである。状態レジスタはセマフォSを含むNN実行モデル100の状態を示すレジスタである。外部ホストCPUは、コントローラ6を経由して、レジスタ61にアクセスできる。
【0057】
コントローラ6は、内部バスIBを介して、第一メモリ1と、第二メモリ2と、DMAC3と、畳み込み演算回路4と、量子化演算回路5と、接続されている。外部ホストCPUは、コントローラ6を経由して、各ブロックに対してアクセスできる。例えば、外部ホストCPUは、コントローラ6を経由して、DMAC3や畳み込み演算回路4や量子化演算回路5に対する命令を指示することができる。また、DMAC3や畳み込み演算回路4や量子化演算回路5は、内部バスIBを介して、コントローラ6が有する状態レジスタ(セマフォSを含む)を更新できる。状態レジスタ(セマフォSを含む)は、DMAC3や畳み込み演算回路4や量子化演算回路5と接続された専用配線を介して更新されるように構成されていてもよい。
【0058】
NN実行モデル100は、第一メモリ1や第二メモリ2等を有するため、DRAMなどの外部メモリからのDMAC3によるデータ転送において、重複するデータのデータ転送の回数を低減できる。これにより、メモリアクセスにより発生する消費電力を大幅に低減することができる。
【0059】
図6は、NN実行モデル100の動作例を示すタイミングチャートである。NN実行モデル100は、複数のレイヤの多層構造であるCNN200の演算を、ループ状に形成された回路により演算する。NN実行モデル100は、ループ状の回路構成により、ハードウェア資源を効率的に利用できる。以下、
図6に示すニューラルネットワークハードウェア600の動作例を説明する。
【0060】
DMAC3は、レイヤ1(
図3参照)の入力データaを第一メモリ1に格納する。DMAC3は、畳み込み演算回路4が行う畳み込み演算の順序にあわせて、レイヤ1の入力データaを分割して第一メモリ1に転送してもよい。
【0061】
畳み込み演算回路4は、第一メモリ1に格納されたレイヤ1(
図3参照)の入力データaを読み出す。畳み込み演算回路4は、レイヤ1の入力データaに対してレイヤ1の畳み込み演算を行う。レイヤ1の畳み込み演算の出力データfは、第二メモリ2に格納される。
【0062】
量子化演算回路5は、第二メモリ2に格納されたレイヤ1の出力データfを読み出す。量子化演算回路5は、レイヤ1の出力データfに対してレイヤ2の量子化演算を行う。レイヤ2の量子化演算の出力データоutは、第一メモリ1に格納される。
【0063】
畳み込み演算回路4は、第一メモリ1に格納されたレイヤ2の量子化演算の出力データを読み出す。畳み込み演算回路4は、レイヤ2の量子化演算の出力データоutを入力データaとしてレイヤ3の畳み込み演算を行う。レイヤ3の畳み込み演算の出力データfは、第二メモリ2に格納される。
【0064】
畳み込み演算回路4は、第一メモリ1に格納されたレイヤ2M-2(Mは自然数)の量子化演算の出力データоutを読み出す。畳み込み演算回路4は、レイヤ2M-2の量子化演算の出力データоutを入力データaとしてレイヤ2M-1の畳み込み演算を行う。レイヤ2M-1の畳み込み演算の出力データfは、第二メモリ2に格納される。
【0065】
量子化演算回路5は、第二メモリ2に格納されたレイヤ2M-1の出力データfを読み出す。量子化演算回路5は、2M-1レイヤの出力データfに対してレイヤ2Mの量子化演算を行う。レイヤ2Mの量子化演算の出力データоutは、第一メモリ1に格納される。
【0066】
畳み込み演算回路4は、第一メモリ1に格納されたレイヤ2Mの量子化演算の出力データоutを読み出す。畳み込み演算回路4は、レイヤ2Mの量子化演算の出力データоutを入力データaとしてレイヤ2M+1の畳み込み演算を行う。レイヤ2M+1の畳み込み演算の出力データfは、第二メモリ2に格納される。
【0067】
畳み込み演算回路4と量子化演算回路5とが交互に演算を行い、
図3に示すCNN200の演算を進めていく。NN実行モデル100は、畳み込み演算回路4が時分割によりレイヤ2M-1の畳み込み演算とレイヤ2M+1を実施する。また、NN実行モデル100は、量子化演算回路5が時分割によりレイヤ2M-2の畳み込み演算とレイヤ2Mを実施する。そのため、NN実行モデル100は、レイヤごとに別々の畳み込み演算回路4と量子化演算回路5を実装する場合と比較して、回路規模が著しく小さい。
【0068】
[ニューラルネットワーク生成装置300の動作]
次に、ニューラルネットワーク生成装置300の動作(ニューラルネットワーク制御方法)を、
図7に示すニューラルネットワーク生成装置300の制御フローチャートに沿って説明する。ニューラルネットワーク生成装置300は初期化処理(ステップS10)を実施した後、ステップS11を実行する。
【0069】
<ハードウェア情報取得工程(S11)>
ステップS11において、ニューラルネットワーク生成装置300は、動作対象ハードウェアのハードウェア情報HWを取得する(ハードウェア情報取得工程)。ニューラルネットワーク生成装置300は、例えば、データ入力部330に入力されたハードウェア情報HWを取得する。ニューラルネットワーク生成装置300は、表示部350にハードウェア情報HWの入力に必要なGUI画像を表示させ、使用者にハードウェア情報HWを操作入力部360から入力させることでハードウェア情報HWを取得してもよい。
【0070】
ハードウェア情報HWは、具体的には、第一メモリ1および第二メモリ2として割り当てるメモリのメモリ種別やメモリ容量や入出力データ幅を有する。
【0071】
取得されたハードウェア情報HWは、記憶部310に記憶される。次に、ニューラルネットワーク生成装置300は、ステップS12を実行する。
【0072】
<ネットワーク情報取得工程(S12)>
ステップS12において、ニューラルネットワーク生成装置300は、CNN200のネットワーク情報NWを取得する(ネットワーク情報取得工程)。ニューラルネットワーク生成装置300は、例えば、データ入力部330に入力されたネットワーク情報NWを取得する。ニューラルネットワーク生成装置300は、表示部350にネットワーク情報NWの入力に必要なGUI画像を表示させ、使用者にネットワーク情報NWを操作入力部360から入力させることでネットワーク情報NWを取得してもよい。
【0073】
ネットワーク情報NWは、具体的には、入力層や出力層230を含むネットワーク構成と、重みwや入力データaのビット幅を含む畳み込み層210の構成と、量子化情報を含む量子化演算層220の構成と、を有する。
【0074】
取得されたネットワーク情報NWは、記憶部310に記憶される。次に、ニューラルネットワーク生成装置300は、ステップS13を実行する。
【0075】
<ニューラルネットワーク実行モデル生成工程(S13)>
ステップS13において、ニューラルネットワーク生成装置300の実行モデル生成部321は、ハードウェア情報HWとネットワーク情報NWとに基づいてNN実行モデル100を生成する(ニューラルネットワーク実行モデル生成工程)。
【0076】
ニューラルネットワーク実行モデル生成工程(NN実行モデル生成工程)は、例えば、畳み込み回路生成工程(S13-1)と、量子化回路生成工程(S13-2)と、DMAC生成工程(S13-3)と、を有する。
【0077】
<畳み込み回路生成工程(S13-1)>
実行モデル生成部321は、ハードウェア情報HWとネットワーク情報NWとに基づいてNN実行モデル100の畳み込み回路4を生成する(畳み込み回路生成工程)。実行モデル生成部321は、ネットワーク情報NWとして入力された重みwや入力データaのビット幅などの情報から、畳み込み演算回路4のハードウェアモデルを生成する。ハードウェアモデルは、ビヘイビアレベルであってもよく、RTL(Register Transfer Level)であってもよく、ゲートや回路モジュール間の接続を表すネットリストであってもよく、それらの組み合わせであってもよい。以下、生成される畳み込み演算回路4のハードウェアモデルの一例を説明する。
【0078】
図8は、生成される畳み込み演算回路4の内部ブロック図である。
畳み込み演算回路4は、重みメモリ41と、乗算器42と、アキュムレータ回路43と、ステートコントローラ44と、を有する。畳み込み演算回路4は、乗算器42およびアキュムレータ回路43に対する専用のステートコントローラ44を有しており、命令コマンドが入力されると、外部のコントローラを必要とせずに畳み込み演算を実施できる。
【0079】
重みメモリ41は、畳み込み演算に用いる重みwが格納されるメモリであり、例えばSRAM(Static RAM)などで構成された揮発性のメモリ等の書き換え可能なメモリである。DMAC3は、DMA転送により、畳み込み演算に必要な重みwを重みメモリ41に書き込む。
【0080】
図9は、乗算器42の内部ブロック図である。
乗算器42は、入力データaの各要素と、重みwの各要素とを乗算する。入力データaの各要素は、入力データaが分割されたデータであり、Bc個の要素を持つベクトルデータである(例えば、後述する「入力ベクトルA」)。また、重みwの各要素は、重みwが分割されたデータであり、Bc×Bd個の要素を持つマトリクスデータである(例えば、後述する「重みマトリクスW」)。乗算器42は、Bc×Bd個の積和演算ユニット47を有し、入力ベクトルAと重みマトリクスWとの乗算を並列して実施できる。
【0081】
乗算器42は、乗算に必要な入力ベクトルAと重みマトリクスWを、第一メモリ1および重みメモリ41から読み出して乗算を実施する。乗算器42は、Bd個の積和演算結果O(di)を出力する。
【0082】
図10は、積和演算ユニット47の内部ブロック図である。
積和演算ユニット47は、入力ベクトルAの要素A(ci)と、重みマトリクスWの要素W(ci,di)との乗算を実施する。また、積和演算ユニット47は、乗算結果と他の積和演算ユニット47の乗算結果S(ci,di)と加算する。積和演算ユニット47は、加算結果S(ci+1,di)を出力する。ciは0から(Bc-1)までのインデックスである。diは0から(Bd-1)までのインデックスである。要素A(ci)は、2ビットの符号なし整数(0,1,2,3)である。要素W(ci,di)は、1ビットの符号付整数(0,1)であり、値「0」は+1を表し、値「1」は-1を表す。
【0083】
積和演算ユニット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(ci,di)に要素A(ci)を加算した値を出力する。加算器47cは、要素W(ci,di)が「1」のとき、S(ci,di)から要素A(ci)を減算した値を出力する。
【0084】
図11は、アキュムレータ回路43の内部ブロック図である。
アキュムレータ回路43は、乗算器42の積和演算結果O(di)を第二メモリ2にアキュムレートする。アキュムレータ回路43は、Bd個のアキュムレータユニット48を有し、Bd個の積和演算結果O(di)を並列して第二メモリ2にアキュムレートできる。
【0085】
図12は、アキュムレータユニット48の内部ブロック図である。
アキュムレータユニット48は、加算器48aと、マスク部48bとを有している。加算器48aは、積和演算結果Oの要素O(di)と、第二メモリ2に格納された式1に示す畳み込み演算の途中経過である部分和と、を加算する。加算結果は、要素あたり16ビットである。加算結果は、要素あたり16ビットに限定されず、例えば要素あたり15ビットや17ビットであってもよい。
【0086】
加算器48aは、加算結果を第二メモリ2の同一アドレスに書き込む。マスク部48bは、初期化信号clearがアサートされた場合に、第二メモリ2からの出力をマスクし、要素O(di)に対する加算対象をゼロにする。初期化信号clearは、第二メモリ2に途中経過の部分和が格納されていない場合にアサートされる。
【0087】
乗算器42およびアキュムレータ回路43による畳み込み演算が完了すると、第二メモリに、Bd個の要素を持つ出力データf(x,y,do)が格納される。
【0088】
ステートコントローラ44は、乗算器42およびアキュムレータ回路43のステートを制御する。また、ステートコントローラ44は、内部バスIBを介してコントローラ6と接続されている。ステートコントローラ44は、命令キュー45と制御回路46とを有する。
【0089】
命令キュー45は、畳み込み演算回路4用の命令コマンドC4が格納されるキューであり、例えばFIFOメモリで構成される。命令キュー45には、内部バスIB経由で命令コマンドC4が書き込まれる。
【0090】
制御回路46は、命令コマンドC4をデコードし、命令コマンドC4に基づいて乗算器42およびアキュムレータ回路43を制御するステートマシンである。制御回路46は、論理回路により実装されていてもよいし、ソフトウェアによって制御されるCPUによって実装されていてもよい。
【0091】
図13は、制御回路46のステート遷移図である。
制御回路46は、命令キュー45に命令コマンドC4が入力されると(Not empty)、アイドルステートS1からデコードステートS2に遷移する。
【0092】
制御回路46は、デコードステートS2において、命令キュー45から出力される命令コマンドC3をデコードする。また、制御回路46は、コントローラ6のレジスタ61に格納されたセマフォSを読み出し、命令コマンドC4において指示された乗算器42やアキュムレータ回路43の動作を実行可能であるかを判定する。実行不能である場合(Not ready)、制御回路46は実行可能となるまで待つ(Wait)。実行可能である場合(ready)、制御回路46はデコードステートS2から実行ステートS3に遷移する。
【0093】
制御回路46は、実行ステートS3において、乗算器42やアキュムレータ回路43を制御して、乗算器42やアキュムレータ回路43に命令コマンドC4において指示された動作を実施させる。制御回路46は、乗算器42やアキュムレータ回路43の動作が終わると、命令キュー45から実行を終えた命令コマンドC4を取り除くとともに、コントローラ6のレジスタ61に格納されたセマフォSを更新する。制御回路46は、命令キュー45に命令がある場合(Not empty)、実行ステートS3からデコードステートS2に遷移する。制御回路46は、命令キュー45に命令がない場合(empty)、実行ステートS3からアイドルステートS1に遷移する。
【0094】
実行モデル生成部321は、ネットワーク情報NWとして入力された重みwや入力データaのビット幅などの情報から、畳み込み演算回路4における演算器の仕様やサイズ(BcやBd)を決定する。ハードウェア情報HWとして生成するNN実行モデル100(ニューラルネットワークハードウェアモデル400、ニューラルネットワークハードウェア600)のハードウェア規模が含まれる場合、実行モデル生成部321は、指定された規模にあわせて畳み込み演算回路4における演算器の仕様やサイズ(BcやBd)を調整する。
【0095】
<量子化回路生成工程(S13-2)>
実行モデル生成部321は、ハードウェア情報HWとネットワーク情報NWとに基づいてNN実行モデル100の量子化演算回路5を生成する(量子化回路生成工程)。実行モデル生成部321は、ネットワーク情報NWとして入力された量子化情報から、量子化演算回路5のハードウェアモデルを生成する。ハードウェアモデルは、ビヘイビアレベルであってもよく、RTL(Register Transfer Level)であってもよく、ゲートや回路モジュール間の接続を表すネットリストであってもよく、それらの組み合わせであってもよい。
【0096】
<DMAC生成工程(S13-3)>
実行モデル生成部321は、ハードウェア情報HWとネットワーク情報NWとに基づいてNN実行モデル100のDMAC3を生成する(DMAC生成工程)。実行モデル生成部321は、ネットワーク情報NWとして入力された情報から、DMAC3のハードウェアモデルを生成する。ハードウェアモデルは、ビヘイビアレベルであってもよく、RTL(Register Transfer Level)であってもよく、ゲートや回路モジュール間の接続を表すネットリストであってもよく、それらの組み合わせであってもよい。
【0097】
<学習工程(S14)>
ステップS14において、ニューラルネットワーク生成装置300の学習部322および推論部323は、学習データセットDSを用いて、生成されたNN実行モデル100の学習パラメータを学習する(学習工程)。
【0098】
<確認工程(S15)>
ステップS15において、ニューラルネットワーク生成装置300の推論部323は、操作入力部360から結果に関する確認を入力することを使用者に促すメッセージや情報入力に必要なGUI画像を表示部350に表示させる。使用者は、推論テストの結果を許容するかを、操作入力部360から入力する。使用者が推論テストの結果を許容することを示す入力が操作入力部360から入力された場合、ニューラルネットワーク生成装置300は、次にステップS16を実施する。使用者が推論テストの結果を許容しないことを示す入力が操作入力部360から入力された場合、ニューラルネットワーク生成装置300は、再度ステップS12を実施する。なお、ニューラルネットワーク生成装置300はステップS11まで戻って、ハードウェア情報HWを使用者に再入力させてもよい。
【0099】
<出力工程(S16)>
ステップS16において、ニューラルネットワーク生成装置300のハードウェア生成部324は、ハードウェア情報HWおよびNN実行モデル100に基づいてニューラルネットワークハードウェアモデル400を生成する。
【0100】
<ソフトウェア生成工程(S17)>
ステップS17において、ニューラルネットワーク生成装置300のソフトウェア生成部325は、ネットワーク情報NWおよびNN実行モデル100などに基づいて、ニューラルネットワークハードウェア600(ニューラルネットワークハードウェアモデル400を動作対象ハードウェアに実装したもの)を動作させるソフトウェア500を生成する。ソフトウェア500は、学習済みパラメータPMを必要に応じてニューラルネットワークハードウェア600へ転送するソフトウェアを含む。
【0101】
ソフトウェア生成工程(S17)は、例えば、重み要素並び替え工程(S17-1)と、入力データ分割工程(S17-2)と、アロケーション工程(S17-3)と、を有する。
【0102】
<重み要素並び替え工程(S17-1)>
畳み込み演算回路4に入力される入力データaにおけるc軸方向の要素数が小さい場合、畳み込み演算回路4において並列化(マルチチャンネル化)されたハードウェアリソース(例えば畳み込み演算回路4の乗算器42)を有効に活用できない場合がある。一方で、x軸方向およびy軸方向の要素数が大きい場合、相対的に受容野が狭くなってしまい、推論精度の低下を引き起こす場合がある。
【0103】
図14は、入力データaにおけるx軸方向およびy軸方向の要素数を減らしつつ、c軸方向の要素数を増やす方法Aを示す図である。
一例として、入力データa(第一入力テンソル)の要素を並び替えることにより、x軸方向およびy軸方向の要素数を1/pに減らし、c軸方向の要素数をp
2倍に増やすことができる。例えば
図14に示すように、x軸方向およびy軸方向の要素数を1/2に減らし、c軸方向の要素数を4倍に増やすことができる。並び替えは
図14に示す例に限定されない。ソフトウェア生成部325は、畳み込み演算回路に入力するU(x軸方向)×V(y軸方向)×W(c軸方向)の入力データa(第一入力テンソル)をU´×V´×W´の入力データa´(第二入力テンソル)に並び替える場合、U´はU以下、V´はV以下、W´はW以上であればよい。
【0104】
方法Aにより並び替えられた入力データa´(第二入力テンソル)は、式7により表される。式7において、INT(x)は、xの整数部を出力する関数である。式7において、nおよびpは自然数である。x、yおよびcの範囲は式8に示される。ここで、方法Aにより並び替えられた入力データa´との畳み込み演算に使用される重みwを「重みデータw1(第一重みテンソル)」とする。
【0105】
【0106】
【0107】
方法Aにより入力データaの要素を並び替えることにより、並び替えられた入力データa´におけるc軸方向の要素数を増やし、並列化(マルチチャンネル化)されたハードウェアリソースを有効に活用して高速化を図れる。しかしながら、入力データaを並び替えてc軸方向の要素数を増やす方法(方法A)は、例えば外部ホストCPUによる入力データaの並び替えや複数回のメモリアクセスが必要となる場合もあり、要素の並び替えに時間を要するために、全体としての演算の効率化を阻害する場合がある。
【0108】
図15は、重みデータw1におけるx軸方向およびy軸方向の要素数を増やしつつ、c軸方向の要素数を減らす方法Bを示す図である。
本実施形態において、ソフトウェア生成部325は、入力データaを並び替えてc軸方向の要素数を増やす方法(方法A)ではなく、同等の効果を得るために、重みデータw1を並び替えてc軸方向の要素数を減らす方法(方法B)を用いる。
【0109】
ステップS14における学習工程において、ニューラルネットワーク生成装置300の学習部322および推論部323は、学習データセットDSを用いて、生成されたNN実行モデル100の学習パラメータを学習するが、この際には方法Aにより並びかえられた入力データa´を用いる。つまり、学習結果としては重みデータw1が生成される。方法Bは、方法Aを用いて学習された重みデータw1を重みデータw2に変換する方法に相当する。
【0110】
方法Bにより並び替えられる重みデータw1と並び替えた結果である重みデータw2(第二重みテンソル)は、式9により表される。式9において、INT(x)は、xの整数部を出力する関数である。式9において、nおよびpは自然数である。i、jおよびcの範囲は、式10に示される。
【0111】
【0112】
【0113】
図16は、p=2,imax=jmax=3,cmax=12の場合において方法Bにより並び替えられた重みデータw2を示す図である。並び替えは
図16に示す例に限定されない。ソフトウェア生成部325は、畳み込み演算回路に入力するX(x軸方向)×Y(y軸方向)×C(c軸方向)×D(d軸方向)の重みデータw1(第一重みテンソル)をX´×Y´×C´×Dの重みデータw2(第二重みテンソル)に並び替える場合、X´はX以上、Y´はY以上、C´はC以下であればよい。なお、入力データaが2次のテンソルである場合、畳み込み演算回路に入力するX(x軸方向)×Y(y軸方向)×C(c軸方向)の重みデータ(第一重みテンソル)をX´×Y´×C´の重みデータ(第二重みテンソル)に並び替えればよい。
【0114】
式11に示すように、方法Aにより並び替えられた入力データa´と重みデータw1とに対して畳み込み演算をした結果と、方法Bにより並び替えられた重みデータw2と入力データaに対して畳み込み演算をした結果は等しい。なお、重みデータw2を用いる畳み込み演算の際にはストライドを方法Aに対してp倍することも必要である。
【0115】
【0116】
以上説明した方法Bは一例であり、別の態様であって良い。入力データaから入力データa´に行列変換する変換関数をf(x、y、c)とした場合、重みデータw1から重みデータw2に行列変換する変換関数g(x、y、c、d)は全単射を条件にし、dを除けばf(x、y、c)の逆関数に相当する。つまり、入力データaにおけるx軸方向およびy軸方向の要素数の変化量と、c軸方向の要素数の変化量が対応する行列変換を行った後に畳み込み演算を実行する場合において、重みデータを事前に当該変換の逆関数を用いた逆変換することによって推論動作時の行列変換の演算を省略することができる。言い換えれば、学習時で用いたネットワークに対して、ソフトウェア生成部325はより効率的に演算処理する為に、畳み込み演算に用いる入力データaまたは重みデータwに対する行列変換を用いてネットワークの切り替えを行う。
【0117】
なお、本実施形態においては、入力データaや重みデータw1の要素を並び替えることにより、例えば
図14や
図16に示すように、x軸方向およびy軸方向の要素数を1/2に減らし、c軸方向の要素数を4倍に増やす例を示したが、これに限られない。例えば、xy方向の要素数を1/2倍よりも多く減らしつつ、c軸方向の要素数を4倍よりも増す行列変換にも対応することができる。
【0118】
なお、入力データaから入力データa´に行列変換する際のxy平面内での並びについては式9には限定されず、並び替え単位内で適宜並び替え可能であり、これは重みデータw1から重みデータw2への行列変換も同様であり、必要に応じて適宜変更することができる。
【0119】
また、c軸方向についても行列変換に際して適宜並べ替え可能である。例えば、
図14においてはc0を単位として並び替えを行なっているが、別の例として方法Aによる並び替えに式12により表される行列変換を用いてpを単位として並び替えを行なっても良い。式12において、INT(x)は、xの整数部を出力する関数であり、%は、除算した余を取得する剰余演算子である。式12において、nは自然数である。
【0120】
【0121】
これは方法Bにおいて、重みデータw1の変換においても同様に適用可能であり、方法Bにより並び替えられる重みデータw1と並び替えた結果である重みデータw2は、式13により表される。式13において、INT(x)は、xの整数部を出力する関数であり、%は、除算した余を取得する剰余演算子である。式13において、nは自然数である。
【0122】
【0123】
この式12及び式13で示される行列変換はc軸方向の行列変換における異なる並び替えの例であり、これ以外の並び替えであっても良い。
【0124】
<入力データ分割工程(S17-2):データ分割>
ソフトウェア生成部325は、第一メモリ1および第二メモリ2として割り当てるメモリのメモリ容量や演算器の仕様やサイズ(BcやBd)などに基づいて、畳み込み層210の畳み込み演算の入力データaを部分テンソルに分割する。部分テンソルへの分割方法や分割数は特に限定されない。部分テンソルは、例えば、入力データa(x+i,y+j,c)をa(x+i,y+j,co)に分割することにより形成される。
【0125】
図17は、畳み込み演算のデータ分割やデータ展開を説明する図である。
畳み込み演算のデータ分割において、式1における変数cは、式14に示すように、サイズBcのブロックで分割される。また、式1における変数dは、式15に示すように、サイズBdのブロックで分割される。式7において、coはオフセットであり、ciは0から(Bc-1)までのインデックスである。式8において、doはオフセットであり、diは0から(Bd-1)までのインデックスである。なお、サイズBcとサイズBdは同じであってもよい。
【0126】
【0127】
【0128】
式1における入力データa(x+i,y+j,c)は、c軸方向においてサイズBcにより分割され、分割された入力データa(x+i,y+j,co)で表される。以降の説明において、分割された入力データaを「分割入力データa」ともいう。
【0129】
式1における重みw(i,j,c,d)は、c軸方向においてサイズBcおよびd軸方向においてサイズBdにより分割され、分割された重みw(i,j,co,do)で表される。以降の説明において、分割された重みwを「分割重みw」ともいう。
【0130】
サイズBdにより分割された出力データf(x,y,do)は、式16により求まる。分割された出力データf(x,y,do)を組み合わせることで、最終的な出力データf(x,y,d)を算出できる。
【0131】
【0132】
<入力データ分割工程(S17-2):データ展開>
ソフトウェア生成部325は、NN実行モデル100の畳み込み回路4に、分割された入力データaおよび重みwを展開する。
【0133】
分割入力データ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))までを要素とする。
【0134】
分割重み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))までを要素とする。
【0135】
入力ベクトルAと重みマトリクスWとを乗算することで、ベクトルデータが算出される。i,j,coごとに算出されたベクトルデータを3次元テンソルに整形することで、出力データf(x,y,do)を得ることができる。このようなデータの展開を行うことで、畳み込み層210の畳み込み演算を、ベクトルデータとマトリクスデータとの乗算により実施できる。
【0136】
<アロケーション工程(S17-3)>
ソフトウェア生成部325は、分割された演算をニューラルネットワークハードウェア600に割り当てて実施させるソフトウェア500を生成する(アロケーション工程)。生成されるソフトウェア500は、命令コマンドC4を含む。
【0137】
以上説明したように、本実施形態に係るニューラルネットワーク生成装置300、ニューラルネットワーク制御方法およびソフトウェア生成プログラムによれば、IoT機器などの組み込み機器に組み込み可能であり、高性能に動作させることができるニューラルネットワークを生成および制御できる。
【0138】
以上、本発明の第一実施形態について図面を参照して詳述したが、具体的な構成はこの実施形態に限られるものではなく、本発明の要旨を逸脱しない範囲の設計変更等も含まれる。また、上述の実施形態および変形例において示した構成要素は適宜に組み合わせて構成することが可能である。
【0139】
(変形例1)
上記実施形態において、第一メモリ1と第二メモリ2は別のメモリであったが、第一メモリ1と第二メモリ2の態様はこれに限定されない。第一メモリ1と第二メモリ2は、例えば、同一メモリにおける第一メモリ領域と第二メモリ領域であってもよい。
【0140】
(変形例2)
例えば、上記実施形態に記載のNN実行モデル100やニューラルネットワークハードウェア600に入力されるデータは単一の形式に限定されず、静止画像、動画像、音声、文字、数値およびこれらの組み合わせで構成することが可能である。なお、NN実行モデル100やニューラルネットワークハードウェア600に入力されるデータは、ニューラルネットワークハードウェア600が設けられるエッジデバイスに搭載され得る、光センサ、温度計、Global Positioning System(GPS)計測器、角速度計測器、風速計などの物理量測定器における測定結果に限られない。周辺機器から有線または無線通信経由で受信する基地局情報、車両・船舶等の情報、天候情報、混雑状況に関する情報などの周辺情報や金融情報や個人情報等の異なる情報を組み合わせてもよい。
【0141】
(変形例3)
ニューラルネットワークハードウェア600が設けられるエッジデバイスは、バッテリー等で駆動する携帯電話などの通信機器、パーソナルコンピュータなどのスマートデバイス、デジタルカメラ、ゲーム機器、ロボット製品などのモバイル機器を想定するが、これに限られるものではない。Power on Ethernet(PoE)などでの供給可能なピーク電力制限、製品発熱の低減または長時間駆動の要請が高い製品に利用することでも他の先行例にない効果を得ることができる。例えば、車両や船舶などに搭載される車載カメラや、公共施設や路上などに設けられる監視カメラ等に適用することで長時間の撮影を実現できるだけでなく、軽量化や高耐久化にも寄与する。また、テレビやディスプレイ等の表示デバイス、医療カメラや手術ロボット等の医療機器、製造現場や建築現場で使用される作業ロボットなどにも適用することで同様の効果を奏することができる。
【0142】
上述した実施形態におけるプログラムをコンピュータ読み取り可能な記録媒体に記録して、この記録媒体に記録されたプログラムをコンピュータシステムに読み込ませ、実行することによって実現してもよい。なお、ここでいう「コンピュータシステム」とは、OSや周辺機器等のハードウェアを含むものとする。また、「コンピュータ読み取り可能な記録媒体」とは、フレキシブルディスク、光磁気ディスク、ROM、CD-ROM等の可搬媒体、コンピュータシステムに内蔵されるハードディスク等の記憶装置のことをいう。さらに「コンピュータ読み取り可能な記録媒体」とは、インターネット等のネットワークや電話回線等の通信回線を介してプログラムを送信する場合の通信線のように、短時間の間、動的にプログラムを保持するもの、その場合のサーバやクライアントとなるコンピュータシステム内部の揮発性メモリのように、一定時間プログラムを保持しているものも含んでもよい。また上記プログラムは、前述した機能の一部を実現するためのものであってもよく、さらに前述した機能をコンピュータシステムにすでに記録されているプログラムとの組み合わせで実現できるものであってもよい。
【0143】
また、本明細書に記載された効果は、あくまで説明的または例示的なものであって限定的ではない。つまり、本開示に係る技術は、上記の効果とともに、または上記の効果に代えて、本明細書の記載から当業者には明らかな他の効果を奏しうる。
【産業上の利用可能性】
【0144】
本発明は、ニューラルネットワークの生成に適用することができる。
【符号の説明】
【0145】
300 ニューラルネットワーク生成装置
200 畳み込みニューラルネットワーク(CNN)
100 ニューラルネットワーク実行モデル(NN実行モデル)
400 ニューラルネットワークハードウェアモデル
500 ソフトウェア
600 ニューラルネットワークハードウェア
1 第一メモリ
2 第二メモリ
3 DMAコントローラ(DMAC)
4 畳み込み演算回路
42 乗算器
43 アキュムレータ回路
5 量子化演算回路
52 ベクトル演算回路
53 量子化回路
6 コントローラ
61 レジスタ
PM 学習済みパラメータ
DS 学習データセット
HW ハードウェア情報
NW ネットワーク情報