JP2022117866A - ニューラルネットワーク生成装置、ニューラルネットワーク演算装置、エッジデバイス、ニューラルネットワーク制御方法およびソフトウェア生成プログラム - Google Patents
ニューラルネットワーク生成装置、ニューラルネットワーク演算装置、エッジデバイス、ニューラルネットワーク制御方法およびソフトウェア生成プログラム Download PDFInfo
- Publication number
- JP2022117866A JP2022117866A JP2021014621A JP2021014621A JP2022117866A JP 2022117866 A JP2022117866 A JP 2022117866A JP 2021014621 A JP2021014621 A JP 2021014621A JP 2021014621 A JP2021014621 A JP 2021014621A JP 2022117866 A JP2022117866 A JP 2022117866A
- Authority
- JP
- Japan
- Prior art keywords
- neural network
- input
- data
- unit
- hardware
- 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.)
- Withdrawn
Links
- 238000013528 artificial neural network Methods 0.000 title claims abstract description 144
- 238000000034 method Methods 0.000 title claims description 17
- 238000006243 chemical reaction Methods 0.000 claims description 63
- 230000001131 transforming effect Effects 0.000 claims description 11
- 230000015654 memory Effects 0.000 description 127
- 238000013139 quantization Methods 0.000 description 90
- 238000004364 calculation method Methods 0.000 description 43
- 238000013527 convolutional neural network Methods 0.000 description 43
- 230000006870 function Effects 0.000 description 41
- 238000012545 processing Methods 0.000 description 27
- 238000010586 diagram Methods 0.000 description 24
- 238000012546 transfer Methods 0.000 description 16
- 239000013598 vector Substances 0.000 description 16
- 238000012360 testing method Methods 0.000 description 15
- 238000004891 communication Methods 0.000 description 14
- 239000011159 matrix material Substances 0.000 description 12
- 230000004913 activation Effects 0.000 description 10
- 238000011176 pooling Methods 0.000 description 10
- 238000010606 normalization Methods 0.000 description 9
- 238000003860 storage Methods 0.000 description 8
- 238000012986 modification Methods 0.000 description 6
- 230000004048 modification Effects 0.000 description 6
- 230000007704 transition Effects 0.000 description 6
- 239000008186 active pharmaceutical agent Substances 0.000 description 5
- 230000003542 behavioural effect Effects 0.000 description 5
- 230000000694 effects Effects 0.000 description 4
- 230000036961 partial effect Effects 0.000 description 4
- 230000007423 decrease Effects 0.000 description 3
- 230000002093 peripheral effect Effects 0.000 description 3
- 238000007781 pre-processing Methods 0.000 description 3
- 230000003068 static effect Effects 0.000 description 3
- 238000012790 confirmation Methods 0.000 description 2
- 239000000470 constituent Substances 0.000 description 2
- 238000013135 deep learning Methods 0.000 description 2
- 238000013461 design Methods 0.000 description 2
- 238000001514 detection method Methods 0.000 description 2
- 238000011161 development Methods 0.000 description 2
- 238000009826 distribution Methods 0.000 description 2
- 230000010354 integration Effects 0.000 description 2
- 238000004519 manufacturing process Methods 0.000 description 2
- 230000002829 reductive effect Effects 0.000 description 2
- 239000003086 colorant Substances 0.000 description 1
- 230000000295 complement effect Effects 0.000 description 1
- 238000010276 construction Methods 0.000 description 1
- 230000003247 decreasing effect Effects 0.000 description 1
- 230000006866 deterioration Effects 0.000 description 1
- 238000005516 engineering process Methods 0.000 description 1
- 238000007667 floating Methods 0.000 description 1
- 230000020169 heat generation Effects 0.000 description 1
- 230000000670 limiting effect Effects 0.000 description 1
- 238000012886 linear function Methods 0.000 description 1
- 238000010801 machine learning Methods 0.000 description 1
- 238000005259 measurement Methods 0.000 description 1
- 238000012544 monitoring process Methods 0.000 description 1
- 230000003287 optical effect Effects 0.000 description 1
- 238000005457 optimization Methods 0.000 description 1
- 230000001151 other effect Effects 0.000 description 1
- 230000008569 process Effects 0.000 description 1
- 238000007493 shaping process Methods 0.000 description 1
- 239000007787 solid Substances 0.000 description 1
- 239000013585 weight reducing agent Substances 0.000 description 1
Images
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/10—Interfaces, programming languages or software development kits, e.g. for simulating neural 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/08—Learning methods
-
- 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
-
- 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
- G06N3/063—Physical realisation, i.e. hardware implementation of neural networks, neurons or parts of neurons using electronic means
Landscapes
- Engineering & Computer Science (AREA)
- Physics & Mathematics (AREA)
- Theoretical Computer Science (AREA)
- Health & Medical Sciences (AREA)
- Life Sciences & Earth Sciences (AREA)
- Biomedical Technology (AREA)
- Biophysics (AREA)
- Software Systems (AREA)
- Computing Systems (AREA)
- General Health & Medical Sciences (AREA)
- Evolutionary Computation (AREA)
- Molecular Biology (AREA)
- Data Mining & Analysis (AREA)
- General Engineering & Computer Science (AREA)
- General Physics & Mathematics (AREA)
- Mathematical Physics (AREA)
- Computational Linguistics (AREA)
- Artificial Intelligence (AREA)
- Neurology (AREA)
- Complex Calculations (AREA)
Abstract
【課題】IoT機器などの組み込み機器に組み込み可能であり、高性能に動作させることができるニューラルネットワークを生成して制御する。【解決手段】ニューラルネットワーク生成装置は、ニューラルネットワークを演算するニューラルネットワーク実行モデルを生成するニューラルネットワーク生成装置であって、前記ニューラルネットワーク実行モデルは、8ビット以上の要素を含む入力データを、複数の閾値との比較に基づいて、前記要素よりも低ビットである変換値に変換する。【選択図】図2
Description
本発明は、ニューラルネットワーク生成装置、ニューラルネットワーク演算装置、エッジデバイス、ニューラルネットワーク制御方法およびソフトウェア生成プログラムに関する。
近年、畳み込みニューラルネットワーク(Convolutional Neural Network:CNN)が画像認識等のモデルとして用いられている。畳み込みニューラルネットワークは、畳み込み層やプーリング層を有する多層構造であり、畳み込み演算等の多数の演算を必要とする。畳み込みニューラルネットワークによる演算を高速化する演算手法が様々考案されている(特許文献1など)。
一方で、IoT機器などの組み込み機器においても畳み込みニューラルネットワークを利用した画像認識等が使用されている。組み込み機器において畳み込みニューラルネットワークを効率的に動作させるため、組み込み機器のハードウェア構成に合わせたニューラルネットワークに係る演算を行う回路やモデルを生成することが望まれている。また、これらの回路やモデルを高効率かつ高速に動作させる制御方法が望まれている。また、これらの回路やモデルを高効率かつ高速に動作させるソフトウェアを生成するソフトウェア生成プログラムが望まれている。
上記事情を踏まえ、本発明は、IoT機器などの組み込み機器に組み込み可能であり、高効率かつ高速に動作させることができるニューラルネットワークに係る演算を行う回路やモデルを生成するニューラルネットワーク生成装置、高効率かつ高速に動作させることができるニューラルネットワークに係る演算を行うニューラルネットワーク演算装置、ニューラルネットワーク演算装置を含むエッジデバイス、ニューラルネットワークに係る演算を行う回路やモデルを高効率かつ高速に動作させるニューラルネットワーク制御方法およびニューラルネットワークに係る演算を行う回路やモデルを高効率かつ高速に動作させるソフトウェアを生成するソフトウェア生成プログラムを提供することを目的とする。
上記課題を解決するために、この発明は以下の手段を提案している。
本発明の第一の態様に係るニューラルネットワーク生成装置は、ニューラルネットワーク生成装置は、ニューラルネットワークを演算するニューラルネットワーク実行モデルを生成するニューラルネットワーク生成装置であって、前記ニューラルネットワーク実行モデルは、8ビット以上の要素を含む入力データを、複数の閾値との比較に基づいて、前記要素よりも低ビットである変換値に変換する。
本発明の第一の態様に係るニューラルネットワーク生成装置は、ニューラルネットワーク生成装置は、ニューラルネットワークを演算するニューラルネットワーク実行モデルを生成するニューラルネットワーク生成装置であって、前記ニューラルネットワーク実行モデルは、8ビット以上の要素を含む入力データを、複数の閾値との比較に基づいて、前記要素よりも低ビットである変換値に変換する。
本発明のニューラルネットワーク生成装置、ニューラルネットワーク演算装置、エッジデバイス、ニューラルネットワーク制御方法およびソフトウェア生成プログラムは、IoT機器などの組み込み機器に組み込み可能であり、高性能に動作させることができるニューラルネットワークを生成して制御できる。
(第一実施形態)
本発明の第一実施形態について、図1から図18を参照して説明する。
図1は、本実施形態に係るニューラルネットワーク生成装置300を示す図である。
本発明の第一実施形態について、図1から図18を参照して説明する。
図1は、本実施形態に係るニューラルネットワーク生成装置300を示す図である。
[ニューラルネットワーク生成装置300]
ニューラルネットワーク生成装置300は、IoT機器などの組み込み機器に組み込み可能な学習済みのニューラルネットワーク実行モデル100を生成する装置である。ニューラルネットワーク実行モデル100は、畳み込みニューラルネットワーク200(以下、「CNN200」という)を組み込み機器において演算させるために生成されたソフトウェアやハードウェアモデルである。
ニューラルネットワーク生成装置300は、IoT機器などの組み込み機器に組み込み可能な学習済みのニューラルネットワーク実行モデル100を生成する装置である。ニューラルネットワーク実行モデル100は、畳み込みニューラルネットワーク200(以下、「CNN200」という)を組み込み機器において演算させるために生成されたソフトウェアやハードウェアモデルである。
ニューラルネットワーク生成装置300は、CPU(Central Processing Unit)等のプロセッサとメモリ等のハードウェアを備えたプログラム実行可能な装置(コンピュータ)である。ニューラルネットワーク生成装置300の機能は、ニューラルネットワーク生成装置300においてニューラルネットワーク生成プログラムおよびソフトウェア生成プログラムを実行することにより実現される。ニューラルネットワーク生成装置300は、記憶部310と、演算部320と、データ入力部330と、データ出力部340と、表示部350と、操作入力部360と、を備える。
記憶部310は、ハードウェア情報HWと、ネットワーク情報NWと、学習データセットDSと、ニューラルネットワーク実行モデル100(以下、「NN実行モデル100」という)と、学習済みパラメータPMと、を記憶する。ハードウェア情報HW、学習データセットDSおよびネットワーク情報NWは、ニューラルネットワーク生成装置300に入力される入力データである。NN実行モデル100および学習済みパラメータPMは、ニューラルネットワーク生成装置300が出力する出力データである。なお、「学習済みのNN実行モデル100」は、NN実行モデル100および学習済みパラメータPMを含む。
ハードウェア情報HWは、NN実行モデル100を動作させる組み込み機器(以降、「動作対象ハードウェア」という)の情報である。ハードウェア情報HWは、例えば、動作対象ハードウェアのデバイス種別、デバイス制約、メモリ構成、バス構成、動作周波数、消費電力、製造プロセス種別などである。デバイス種別は、例えば、ASIC(Application Specific Integrated Circuit)、FPGA(Field-Programmable Gate Array)などの種別である。デバイス制約は、動作対象デバイスに含まれる演算器数の上限や回路規模の上限などである。メモリ構成は、メモリ種別やメモリ個数やメモリ容量や入出力データ幅である。バス構成は、バス種類、バス幅、バス通信規格、同一バス上の接続デバイスなどである。また、NN実行モデル100に複数のバリエーションが存在する場合、ハードウェア情報HWには使用するNN実行モデル100のバリエーションに関する情報が含まれる。
ネットワーク情報NWは、CNN200の基本情報である。ネットワーク情報NWは、例えば、CNN200のネットワーク構成、入力データ情報、出力データ情報、量子化情報などである。入力データ情報は、画像や音声などの入力データ種別と、入力データサイズなどである。
学習データセットDSは、学習に用いる学習データD1と、推論テストに用いるテストデータD2と、を有する。
図2は、演算部320の入出力を示す図である。
演算部320は、実行モデル生成部321と、学習部322と、推論部323と、ハードウェア生成部324と、ソフトウェア生成部325と、を有する。演算部320に入力されるNN実行モデル100は、ニューラルネットワーク生成装置300以外の装置で生成されたものであってもよい。
演算部320は、実行モデル生成部321と、学習部322と、推論部323と、ハードウェア生成部324と、ソフトウェア生成部325と、を有する。演算部320に入力されるNN実行モデル100は、ニューラルネットワーク生成装置300以外の装置で生成されたものであってもよい。
実行モデル生成部321は、ハードウェア情報HWおよびネットワーク情報NWに基づいてNN実行モデル100を生成する。NN実行モデル100は、CNN200を動作対象ハードウェアにおいて演算させるために生成されたソフトウェアやハードウェアモデルである。ソフトウェアは、ハードウェアモデルを制御するソフトウェアを含む。ハードウェアモデルは、ビヘイビアレベルであってもよく、RTL(Register Transfer Level)であってもよく、ゲートや回路モジュール間の接続を表すネットリストであってもよく、それらの組み合わせであってもよい。
学習部322は、NN実行モデル100および学習データD1を用いて、学習済みパラメータPMを生成する。推論部323は、NN実行モデル100およびテストデータD2を用いて推論テストを実施する。
ハードウェア生成部324は、ハードウェア情報HWおよびNN実行モデル100に基づいてニューラルネットワークハードウェアモデル400を生成する。ニューラルネットワークハードウェアモデル400は、動作対象ハードウェアに実装可能なハードウェアモデルである。ニューラルネットワークハードウェアモデル400は、ハードウェア情報HWに基づいて、動作対象ハードウェアに最適化されている。ニューラルネットワークハードウェアモデル400は、RTL(Register Transfer Level)であってもよく、ゲートや回路モジュール間の接続を表すネットリストであってもよく、それらの組み合わせであってもよい。ニューラルネットワークハードウェアモデル400は、NN実行モデル100をハードウェアに実装するために必要なパラメータリストやコンフィグレーションファイルであってもよい。パラメータリストやコンフィグレーションファイルは別途生成されたNN実行モデル100と組み合わせて使用される。
以降の説明において、ニューラルネットワークハードウェアモデル400を動作対象ハードウェアに実装したものを、「ニューラルネットワークハードウェア600」という。
ソフトウェア生成部325は、ネットワーク情報NWおよびNN実行モデル100に基づいて、ニューラルネットワークハードウェア600を動作させるソフトウェア500を生成する。ソフトウェア500は、学習済みパラメータPMを必要に応じてニューラルネットワークハードウェア600へ転送するソフトウェアを含む。
データ入力部330には、学習済みのNN実行モデル100を生成するために必要なハードウェア情報HWやネットワーク情報NW等が入力される。ハードウェア情報HWやネットワーク情報NW等は、例えば所定のデータフォーマットで記載されたデータとして入力される。入力されたハードウェア情報HWやネットワーク情報NW等は、記憶部310に記憶される。ハードウェア情報HWやネットワーク情報NW等は、操作入力部360から使用者により入力または変更されてもよい。
データ出力部340には、生成された学習済みのNN実行モデル100が出力される。例えば、生成されたNN実行モデル100と、学習済みパラメータPMとがデータ出力部340に出力される。
表示部350は、LCDディスプレイ等の公知のモニタを有する。表示部350は、演算部320が生成したGUI(Graphical User Interface)画像やコマンド等を受け付けるためのコンソール画面などを表示できる。また、演算部320が使用者からの情報入力を必要とする場合、表示部350は操作入力部360から情報を入力することを使用者に促すメッセージや情報入力に必要なGUI画像を表示できる。
操作入力部360は、使用者が演算部320等に対しての指示を入力する装置である。操作入力部360は、タッチパネル、キーボード、マウス等の公知の入力デバイスである。操作入力部360の入力は、演算部320に送信される。
演算部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の機能の全部または一部は、ソフトウェアとハードウェアとの組み合わせにより実現されてもよい。
演算部320の機能の全部または一部は、クラウドサーバ等の外部機器に設けられたCPUやGPUやハードウェア等の外部アクセラレータを用いて実現されてもよい。演算部320は、例えばクラウドサーバ上の演算性能が高いGPUや専用ハードウェアを併用することで、演算部320の演算速度を向上させることができる。
記憶部310は、フラッシュメモリ、EEPROM(Electrically Erasable Programmable Read-Only Memory)、ROM(Read-Only Memory)、またRAM(Random Access Memory)等により実現される。記憶部310の全部または一部はクラウドサーバ等の外部機器に設けられ、通信回線により演算部320等と接続させてもよい。
[畳み込みニューラルネットワーク(CNN)200]
次に、CNN200について説明する。図3は、CNN200の一例を示す図である。CNN200のネットワーク情報NWは、以下で説明するCNN200の構成に関する情報である。CNN200は、低ビットの重みwや量子化された入力データaを用いており、組み込み機器に組み込みやすい。
次に、CNN200について説明する。図3は、CNN200の一例を示す図である。CNN200のネットワーク情報NWは、以下で説明するCNN200の構成に関する情報である。CNN200は、低ビットの重みwや量子化された入力データaを用いており、組み込み機器に組み込みやすい。
CNN200は、畳み込み演算を行う畳み込み層210と、量子化演算を行う量子化演算層220と、出力層230と、を含む多層構造のネットワークである。CNN200の少なくとも一部において、畳み込み層210と量子化演算層220とが交互に連結されている。CNN200は、画像認識や動画認識に広く使われるモデルである。CNN200は、全結合層などの他の機能を有する層(レイヤ)をさらに有してもよい。
図4は、畳み込み層210が行う畳み込み演算を説明する図である。
畳み込み層210は、入力データaに対して重みwを用いた畳み込み演算を行う。畳み込み層210は、入力データaと重みwとを入力とする積和演算を行う。
畳み込み層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はストライドを示す。図4において点線で示された領域は、入力データaに対して重みwoが適用される領域ao(以降、「適用領域ao」という)の一つを示している。適用領域aoの要素は、(x+i,y+j,c)で表される。
量子化演算層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の最大値を出力する関数である。
Batch Normalization層222は、量子化演算層220やプーリング層221の出力データに対して、例えば式4に示すような演算によりデータ分布の正規化を行う。式4において、uは入力テンソルを示し、vは出力テンソルを示し、αはスケールを示し、βはバイアスを示す。学習済みのCNN200において、αおよびβは学習済みの定数ベクトルである。
活性化関数層223は、量子化演算層220やプーリング層221やBatch Normalization層222の出力に対してReLU(式5)などの活性化関数の演算を行う。式5において、uは入力テンソルであり、vは出力テンソルである。式5において、maxは引数のうち最も大きい数値を出力する関数である。
量子化層224は、量子化パラメータに基づいて、プーリング層221や活性化関数層223の出力に対して例えば式6に示すような量子化を行う。式6に示す量子化は、入力テンソルuを2ビットにビット削減している。式6において、q(c)は量子化パラメータのベクトルである。学習済みのCNN200において、q(c)は学習済みの定数ベクトルである。式6における不等式「≦」は「<」であってもよい。
出力層230は、恒等関数やソフトマックス関数等によりCNN200の結果を出力する層である。出力層230の前段のレイヤは、畳み込み層210であってもよいし、量子化演算層220であってもよい。
CNN200は、量子化された量子化層224の出力データが、畳み込み層210に入力されるため、量子化を行わない他の畳み込みニューラルネットワークと比較して、畳み込み層210の畳み込み演算の負荷が小さい。
[ニューラルネットワーク実行モデル100(NN実行モデル)100]
次に、NN実行モデル100について説明する。図5は、NN実行モデル100の一例を示す図である。NN実行モデル100は、CNN200を動作対象ハードウェアにおいて演算させるために生成されたソフトウェアやハードウェアモデルである。ソフトウェアは、ハードウェアモデルを制御するソフトウェアを含む。ハードウェアモデルは、ビヘイビアレベルであってもよく、RTL(Register Transfer Level)であってもよく、ゲートや回路モジュール間の接続を表すネットリストであってもよく、それらの組み合わせであってもよい。
次に、NN実行モデル100について説明する。図5は、NN実行モデル100の一例を示す図である。NN実行モデル100は、CNN200を動作対象ハードウェアにおいて演算させるために生成されたソフトウェアやハードウェアモデルである。ソフトウェアは、ハードウェアモデルを制御するソフトウェアを含む。ハードウェアモデルは、ビヘイビアレベルであってもよく、RTL(Register Transfer Level)であってもよく、ゲートや回路モジュール間の接続を表すネットリストであってもよく、それらの組み合わせであってもよい。
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は、量子化演算の出力データ(以降、「量子化演算出力データ」ともいう)оutを第一メモリ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によるデータ転送において、重複するデータのデータ転送の回数を低減できる。これにより、メモリアクセスにより発生する消費電力を大幅に低減することができる。
図6は、NN実行モデル100の動作例を示すタイミングチャートである。NN実行モデル100は、複数のレイヤの多層構造であるCNN200の演算を、ループ状に形成された回路により演算する。NN実行モデル100は、ループ状の回路構成により、ハードウェア資源を効率的に利用できる。以下、図6に示すニューラルネットワークハードウェア600の動作例を説明する。
DMAC3は、レイヤ1(図3参照)の入力データaを第一メモリ1に格納する。DMAC3は、畳み込み演算回路4が行う畳み込み演算の順序にあわせて、レイヤ1の入力データaを分割して第一メモリ1に転送してもよい。
畳み込み演算回路4は、第一メモリ1に格納されたレイヤ1(図3参照)の入力データaを読み出す。畳み込み演算回路4は、レイヤ1の入力データaに対してレイヤ1の畳み込み演算を行う。レイヤ1の畳み込み演算の出力データfは、第二メモリ2に格納される。
量子化演算回路5は、第二メモリ2に格納されたレイヤ1の出力データfを読み出す。量子化演算回路5は、レイヤ1の出力データfに対してレイヤ2の量子化演算を行う。レイヤ2の量子化演算の出力データоutは、第一メモリ1に格納される。
畳み込み演算回路4は、第一メモリ1に格納されたレイヤ2の量子化演算の出力データを読み出す。畳み込み演算回路4は、レイヤ2の量子化演算の出力データоutを入力データaとしてレイヤ3の畳み込み演算を行う。レイヤ3の畳み込み演算の出力データfは、第二メモリ2に格納される。
畳み込み演算回路4は、第一メモリ1に格納されたレイヤ2M-2(Mは自然数)の量子化演算の出力データоutを読み出す。畳み込み演算回路4は、レイヤ2M-2の量子化演算の出力データоutを入力データaとしてレイヤ2M-1の畳み込み演算を行う。レイヤ2M-1の畳み込み演算の出力データfは、第二メモリ2に格納される。
量子化演算回路5は、第二メモリ2に格納されたレイヤ2M-1の出力データfを読み出す。量子化演算回路5は、2M-1レイヤの出力データfに対してレイヤ2Mの量子化演算を行う。レイヤ2Mの量子化演算の出力データоutは、第一メモリ1に格納される。
畳み込み演算回路4は、第一メモリ1に格納されたレイヤ2Mの量子化演算の出力データоutを読み出す。畳み込み演算回路4は、レイヤ2Mの量子化演算の出力データоutを入力データaとしてレイヤ2M+1の畳み込み演算を行う。レイヤ2M+1の畳み込み演算の出力データfは、第二メモリ2に格納される。
畳み込み演算回路4と量子化演算回路5とが交互に演算を行い、図3に示すCNN200の演算を進めていく。NN実行モデル100は、畳み込み演算回路4が時分割によりレイヤ2M-1の畳み込み演算とレイヤ2M+1を実施する。また、NN実行モデル100は、量子化演算回路5が時分割によりレイヤ2M-2の畳み込み演算とレイヤ2Mを実施する。そのため、NN実行モデル100は、レイヤごとに別々の畳み込み演算回路4と量子化演算回路5を実装する場合と比較して、回路規模が著しく小さい。
[ニューラルネットワーク生成装置300の動作]
次に、ニューラルネットワーク生成装置300の動作(ニューラルネットワーク制御方法)を、図7に示すニューラルネットワーク生成装置300の制御フローチャートに沿って説明する。ニューラルネットワーク生成装置300は初期化処理(ステップS10)を実施した後、ステップS11を実行する。
次に、ニューラルネットワーク生成装置300の動作(ニューラルネットワーク制御方法)を、図7に示すニューラルネットワーク生成装置300の制御フローチャートに沿って説明する。ニューラルネットワーク生成装置300は初期化処理(ステップS10)を実施した後、ステップS11を実行する。
<ハードウェア情報取得工程(S11)>
ステップS11において、ニューラルネットワーク生成装置300は、動作対象ハードウェアのハードウェア情報HWを取得する(ハードウェア情報取得工程)。ニューラルネットワーク生成装置300は、例えば、データ入力部330に入力されたハードウェア情報HWを取得する。ニューラルネットワーク生成装置300は、表示部350にハードウェア情報HWの入力に必要なGUI画像を表示させ、使用者にハードウェア情報HWを操作入力部360から入力させることでハードウェア情報HWを取得してもよい。
ステップS11において、ニューラルネットワーク生成装置300は、動作対象ハードウェアのハードウェア情報HWを取得する(ハードウェア情報取得工程)。ニューラルネットワーク生成装置300は、例えば、データ入力部330に入力されたハードウェア情報HWを取得する。ニューラルネットワーク生成装置300は、表示部350にハードウェア情報HWの入力に必要なGUI画像を表示させ、使用者にハードウェア情報HWを操作入力部360から入力させることでハードウェア情報HWを取得してもよい。
ハードウェア情報HWは、具体的には、第一メモリ1および第二メモリ2として割り当てるメモリのメモリ種別やメモリ容量や入出力データ幅を有する。
取得されたハードウェア情報HWは、記憶部310に記憶される。次に、ニューラルネットワーク生成装置300は、ステップS12を実行する。
<ネットワーク情報取得工程(S12)>
ステップS12において、ニューラルネットワーク生成装置300は、CNN200のネットワーク情報NWを取得する(ネットワーク情報取得工程)。ニューラルネットワーク生成装置300は、例えば、データ入力部330に入力されたネットワーク情報NWを取得する。ニューラルネットワーク生成装置300は、表示部350にネットワーク情報NWの入力に必要なGUI画像を表示させ、使用者にネットワーク情報NWを操作入力部360から入力させることでネットワーク情報NWを取得してもよい。
ステップS12において、ニューラルネットワーク生成装置300は、CNN200のネットワーク情報NWを取得する(ネットワーク情報取得工程)。ニューラルネットワーク生成装置300は、例えば、データ入力部330に入力されたネットワーク情報NWを取得する。ニューラルネットワーク生成装置300は、表示部350にネットワーク情報NWの入力に必要なGUI画像を表示させ、使用者にネットワーク情報NWを操作入力部360から入力させることでネットワーク情報NWを取得してもよい。
ネットワーク情報NWは、具体的には、入力層や出力層230を含むネットワーク構成と、重みwや入力データaのビット幅を含む畳み込み層210の構成と、量子化情報を含む量子化演算層220の構成と、を有する。
取得されたネットワーク情報NWは、記憶部310に記憶される。次に、ニューラルネットワーク生成装置300は、ステップS13を実行する。
<ニューラルネットワーク実行モデル生成工程(S13)>
ステップS13において、ニューラルネットワーク生成装置300の実行モデル生成部321は、ハードウェア情報HWとネットワーク情報NWとに基づいてNN実行モデル100を生成する(ニューラルネットワーク実行モデル生成工程)。
ステップS13において、ニューラルネットワーク生成装置300の実行モデル生成部321は、ハードウェア情報HWとネットワーク情報NWとに基づいてNN実行モデル100を生成する(ニューラルネットワーク実行モデル生成工程)。
ニューラルネットワーク実行モデル生成工程(NN実行モデル生成工程)は、例えば、畳み込み回路生成工程(S13-1)と、量子化回路生成工程(S13-2)と、DMAC生成工程(S13-3)と、を有する。
<畳み込み回路生成工程(S13-1)>
実行モデル生成部321は、ハードウェア情報HWとネットワーク情報NWとに基づいてNN実行モデル100の畳み込み回路4を生成する(畳み込み回路生成工程)。実行モデル生成部321は、ネットワーク情報NWとして入力された重みwや入力データaのビット幅などの情報から、畳み込み演算回路4のハードウェアモデルを生成する。ハードウェアモデルは、ビヘイビアレベルであってもよく、RTL(Register Transfer Level)であってもよく、ゲートや回路モジュール間の接続を表すネットリストであってもよく、それらの組み合わせであってもよい。以下、生成される畳み込み演算回路4のハードウェアモデルの一例を説明する。
実行モデル生成部321は、ハードウェア情報HWとネットワーク情報NWとに基づいてNN実行モデル100の畳み込み回路4を生成する(畳み込み回路生成工程)。実行モデル生成部321は、ネットワーク情報NWとして入力された重みwや入力データaのビット幅などの情報から、畳み込み演算回路4のハードウェアモデルを生成する。ハードウェアモデルは、ビヘイビアレベルであってもよく、RTL(Register Transfer Level)であってもよく、ゲートや回路モジュール間の接続を表すネットリストであってもよく、それらの組み合わせであってもよい。以下、生成される畳み込み演算回路4のハードウェアモデルの一例を説明する。
図8は、生成される畳み込み演算回路4の内部ブロック図である。
畳み込み演算回路4は、重みメモリ41と、乗算器42と、アキュムレータ回路43と、ステートコントローラ44と、入力変換部49と、を有する。畳み込み演算回路4は、乗算器42およびアキュムレータ回路43に対する専用のステートコントローラ44を有しており、命令コマンドが入力されると、外部のコントローラを必要とせずに畳み込み演算を実施できる。
畳み込み演算回路4は、重みメモリ41と、乗算器42と、アキュムレータ回路43と、ステートコントローラ44と、入力変換部49と、を有する。畳み込み演算回路4は、乗算器42およびアキュムレータ回路43に対する専用のステートコントローラ44を有しており、命令コマンドが入力されると、外部のコントローラを必要とせずに畳み込み演算を実施できる。
重みメモリ41は、畳み込み演算に用いる重みwが格納されるメモリであり、例えばSRAM(Static RAM)などで構成された揮発性のメモリ等の書き換え可能なメモリである。DMAC3は、DMA転送により、畳み込み演算に必要な重みwを重みメモリ41に書き込む。
図9は、乗算器42の内部ブロック図である。
乗算器42は、入力データaの各要素と重みwの各要素とを乗算する。入力データaの各要素は、入力データaが分割されたデータであり、Bc個の要素を持つベクトルデータである(例えば、後述する「入力ベクトルA」)。また、重みwの各要素は、重みwが分割されたデータであり、Bc×Bd個の要素を持つマトリクスデータである(例えば、後述する「重みマトリクスW」)。乗算器42は、Bc×Bd個の積和演算ユニット47を有し、入力ベクトルAと重みマトリクスWとの乗算を並列して実施できる。
乗算器42は、入力データaの各要素と重みwの各要素とを乗算する。入力データaの各要素は、入力データaが分割されたデータであり、Bc個の要素を持つベクトルデータである(例えば、後述する「入力ベクトルA」)。また、重みwの各要素は、重みwが分割されたデータであり、Bc×Bd個の要素を持つマトリクスデータである(例えば、後述する「重みマトリクスW」)。乗算器42は、Bc×Bd個の積和演算ユニット47を有し、入力ベクトルAと重みマトリクスWとの乗算を並列して実施できる。
乗算器42は、乗算に必要な入力ベクトルAと重みマトリクスWを、第一メモリ1および重みメモリ41から読み出して乗算を実施する。乗算器42は、Bd個の積和演算結果O(di)を出力する。
図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を表す。
積和演算ユニット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を表す。
積和演算ユニット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)を減算した値を出力する。
図11は、アキュムレータ回路43の内部ブロック図である。
アキュムレータ回路43は、乗算器42の積和演算結果O(di)を第二メモリ2にアキュムレートする。アキュムレータ回路43は、Bd個のアキュムレータユニット48を有し、Bd個の積和演算結果O(di)を並列して第二メモリ2にアキュムレートできる。
アキュムレータ回路43は、乗算器42の積和演算結果O(di)を第二メモリ2にアキュムレートする。アキュムレータ回路43は、Bd個のアキュムレータユニット48を有し、Bd個の積和演算結果O(di)を並列して第二メモリ2にアキュムレートできる。
図12は、アキュムレータユニット48の内部ブロック図である。
アキュムレータユニット48は、加算器48aと、マスク部48bとを有している。加算器48aは、積和演算結果Oの要素O(di)と、第二メモリ2に格納された式1に示す畳み込み演算の途中経過である部分和と、を加算する。加算結果は、要素あたり16ビットである。加算結果は、要素あたり16ビットに限定されず、例えば要素あたり15ビットや17ビットであってもよい。
アキュムレータユニット48は、加算器48aと、マスク部48bとを有している。加算器48aは、積和演算結果Oの要素O(di)と、第二メモリ2に格納された式1に示す畳み込み演算の途中経過である部分和と、を加算する。加算結果は、要素あたり16ビットである。加算結果は、要素あたり16ビットに限定されず、例えば要素あたり15ビットや17ビットであってもよい。
加算器48aは、加算結果を第二メモリ2の同一アドレスに書き込む。マスク部48bは、初期化信号clearがアサートされた場合に、第二メモリ2からの出力をマスクし、要素O(di)に対する加算対象をゼロにする。初期化信号clearは、第二メモリ2に途中経過の部分和が格納されていない場合にアサートされる。
乗算器42およびアキュムレータ回路43による畳み込み演算が完了すると、第二メモリに、Bd個の要素を持つ出力データ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は、論理回路により実装されていてもよいし、ソフトウェアによって制御されるCPUによって実装されていてもよい。
図13は、制御回路46のステート遷移図である。
制御回路46は、命令キュー45に命令コマンドC4が入力されると(Not empty)、アイドルステートS1からデコードステートS2に遷移する。
制御回路46は、命令キュー45に命令コマンドC4が入力されると(Not empty)、アイドルステートS1からデコードステートS2に遷移する。
制御回路46は、デコードステートS2において、命令キュー45から出力される命令コマンドC3をデコードする。また、制御回路46は、コントローラ6のレジスタ61に格納されたセマフォSを読み出し、命令コマンドC4において指示された乗算器42やアキュムレータ回路43の動作を実行可能であるかを判定する。実行不能である場合(Not ready)、制御回路46は実行可能となるまで待つ(Wait)。実行可能である場合(ready)、制御回路46はデコードステートS2から実行ステートS3に遷移する。
制御回路46は、実行ステートS3において、乗算器42やアキュムレータ回路43を制御して、乗算器42やアキュムレータ回路43に命令コマンドC4において指示された動作を実施させる。制御回路34は、乗算器42やアキュムレータ回路43の動作が終わると、命令キュー45から実行を終えた命令コマンドC4を取り除くとともに、コントローラ6のレジスタ61に格納されたセマフォSを更新する。制御回路46は、命令キュー45に命令がある場合(Not empty)、実行ステートS3からデコードステートS2に遷移する。制御回路46は、命令キュー45に命令がない場合(empty)、実行ステートS3からアイドルステートS1に遷移する。
実行モデル生成部321は、ネットワーク情報NWとして入力された重みwや入力データaのビット幅などの情報から、畳み込み演算回路4における演算器の仕様やサイズ(BcやBd)を決定する。ハードウェア情報HWとして生成するNN実行モデル100(ニューラルネットワークハードウェアモデル400、ニューラルネットワークハードウェア600)のハードウェア規模が含まれる場合、実行モデル生成部321は、指定された規模にあわせて畳み込み演算回路4における演算器の仕様やサイズ(BcやBd)を調整する。
図14は、入力変換部49のブロック図である。
入力変換部49は、多ビット(8ビット以上)の要素を含む入力データaを8ビット以下の値に変換する。入力変換部49は、CNN200の入力層に相当する機能を有する。入力変換部49は、複数の変換部491と、閾値メモリ492と、を有する。
入力変換部49は、多ビット(8ビット以上)の要素を含む入力データaを8ビット以下の値に変換する。入力変換部49は、CNN200の入力層に相当する機能を有する。入力変換部49は、複数の変換部491と、閾値メモリ492と、を有する。
ここで、入力変換部49の説明においては、説明を簡略化するために入力データaがc軸方向の要素数が1である画像データ(すなわちxy平面における2次元画像)であるとする。また、画像データは、x軸方向およびy軸方向の各要素として8ビット以上の多値を画素データとする行列的なデータ構造を備えるとする。この入力データaを入力変換部49で変換すると各要素は量子化され低ビット(例えば、2ビットまたは1ビット)になる。
変換部491は、入力データaの各要素に対して所定の閾値と比較する。変換部491は、比較結果に基づいて入力データaの各要素を量子化する。変換部491は、例えば8ビットの入力データaを2ビットまたは1ビットの値に量子化する。変換部491は、例えば量子化層224が実施する量子化と同様の量子化を行う。具体的には、変換部491は、入力データaの各要素を式6で示したように閾値と比較し、その結果を量子化結果として出力する。変換部491が行う量子化が1ビット量子化の場合には1つの閾値が用いられ、2ビット量子化の場合には3つの閾値が用いられる。
入力変換部49は、c0個の変換部491を含み、それぞれの変換部491は同じ要素に対して独立した閾値を用いて量子化を行う。つまり、入力変換部49は入力データaに対して最大でc0個の演算結果を出力する。なお、変換部491の出力であって入力データaを変換した結果である変換値のビット精度は、入力データaのビット精度などに基づいて適宜変更してもよい。
閾値メモリ492は、変換部491での演算に用いる複数の閾値thを記憶するメモリである。閾値メモリ492に記憶された閾値thは所定の値であり、c0個の変換部491のそれぞれに対して設定される。なお、それぞれの閾値thは学習対象のパラメータであり、後述する学習ステップを実行することにより決定および更新される。
画像データは、c軸方向にc0個の要素を有する3次元テンソルのデータ構造に連結される。すなわち、入力変換部49が行う処理は、画像データの各画素データを低ビット化すると共に、異なる閾値に基づいて生成したc0個の画像データを生成することに相当する。この場合、c0個の変換部491の出力は、c軸方向に連結されることにより要素(x,y,c0)からなる3次元的なデータ構造として乗算器42に出力される。
入力変換部49を備えない場合には、乗算器42において多ビットの乗算演算が必要になるうえに、ハードウェアとして実装されているc軸方向の演算資源が無駄になってしまう場合がある。一方、入力変換部49を乗算器42の前段に設けて入力データaを量子化することによって、乗算器42における乗算演算を簡易な論理演算で置き換えることが可能となるだけでなく、上記の演算資源を効率的に利用することが可能となる。
なお、本実施形態においては複数の変換部491に対して入力データaの同一の要素が入力される例を示したが、入力変換部49の態様はこれに限られない。例えば、入力データaが色成分を含む3チャンネル以上の要素を含む画像データである場合には、変換部491を対応する複数のグループにわけ、それぞれのグループに対して対応する要素を入力して変換してもよい。また、色成分以外にも所定の変換部491に入力する要素に対して事前に何らかの変換処理を加えてもよいし、事前処理の有無によっていずれの変換部491に入力するかを切り替えてもよい。また、入力データaの全ての要素に対して変換処理を行わなくてもよく、例えば入力データa内の特定の要素である特定色に対応する要素に対してのみ変換処理を行なってもよい。
また、複数の変換部491に対して入力データaの異なる要素が入力されてもよい。この場合、入力変換部49は単に入力データaを量子化するユニットとして機能する。
変換部491の個数c0の値は固定値ではなく、NN実行モデル100のネットワーク構造またはハードウェア情報HWに合わせて適宜決定した値であることが好ましい。なお、変換部491による量子化による演算精度の低下を補う必要がある場合には、変換部491の個数は入力データaの各要素のビット精度以上に設定することが好ましい。より一般的には、量子化前後による入力データaのビット精度の差分以上に変換部491の個数を設定することが好ましい。具体的には8ビットの入力データaを1ビットに量子化する場合には、変換部491の個数は差分である7ビットに相当する7個以上(例えば、16個や32個)に設定することが好ましい。
なお、入力変換部49は、必ずしもハードウェアとして実装されるものでなくてもよい。後述するソフトウェア生成工程(S17)において事前処理として入力データaの変換処理を行ってもよい。
<量子化回路生成工程(S13-2)>
実行モデル生成部321は、ハードウェア情報HWとネットワーク情報NWとに基づいてNN実行モデル100の量子化演算回路5を生成する(量子化回路生成工程)。実行モデル生成部321は、ネットワーク情報NWとして入力された量子化情報から、量子化演算回路5のハードウェアモデルを生成する。ハードウェアモデルは、ビヘイビアレベルであってもよく、RTL(Register Transfer Level)であってもよく、ゲートや回路モジュール間の接続を表すネットリストであってもよく、それらの組み合わせであってもよい。
実行モデル生成部321は、ハードウェア情報HWとネットワーク情報NWとに基づいてNN実行モデル100の量子化演算回路5を生成する(量子化回路生成工程)。実行モデル生成部321は、ネットワーク情報NWとして入力された量子化情報から、量子化演算回路5のハードウェアモデルを生成する。ハードウェアモデルは、ビヘイビアレベルであってもよく、RTL(Register Transfer Level)であってもよく、ゲートや回路モジュール間の接続を表すネットリストであってもよく、それらの組み合わせであってもよい。
<DMAC生成工程(S13-3)>
実行モデル生成部321は、ハードウェア情報HWとネットワーク情報NWとに基づいてNN実行モデル100のDMAC3を生成する(DMAC生成工程)。実行モデル生成部321は、ネットワーク情報NWとして入力された情報から、DMAC3のハードウェアモデルを生成する。ハードウェアモデルは、ビヘイビアレベルであってもよく、RTL(Register Transfer Level)であってもよく、ゲートや回路モジュール間の接続を表すネットリストであってもよく、それらの組み合わせであってもよい。
実行モデル生成部321は、ハードウェア情報HWとネットワーク情報NWとに基づいてNN実行モデル100のDMAC3を生成する(DMAC生成工程)。実行モデル生成部321は、ネットワーク情報NWとして入力された情報から、DMAC3のハードウェアモデルを生成する。ハードウェアモデルは、ビヘイビアレベルであってもよく、RTL(Register Transfer Level)であってもよく、ゲートや回路モジュール間の接続を表すネットリストであってもよく、それらの組み合わせであってもよい。
<学習工程(S14)>
ステップS14において、ニューラルネットワーク生成装置300の学習部322および推論部323は、学習データセットDSを用いて、生成されたNN実行モデル100の学習パラメータを学習する(学習工程)。学習工程(S14)は、例えば、学習済みパラメータ生成工程(S14-1)と、推論テスト工程(S14-2)と、を有する。
ステップS14において、ニューラルネットワーク生成装置300の学習部322および推論部323は、学習データセットDSを用いて、生成されたNN実行モデル100の学習パラメータを学習する(学習工程)。学習工程(S14)は、例えば、学習済みパラメータ生成工程(S14-1)と、推論テスト工程(S14-2)と、を有する。
<学習工程:学習済みパラメータ生成工程(S14-1)>
学習部322は、NN実行モデル100および学習データD1を用いて、学習済みパラメータPMを生成する。学習済みパラメータPMは、学習済みの重みw、量子化パラメータqおよび入力変換部49の閾値等である。
学習部322は、NN実行モデル100および学習データD1を用いて、学習済みパラメータPMを生成する。学習済みパラメータPMは、学習済みの重みw、量子化パラメータqおよび入力変換部49の閾値等である。
例えば、NN実行モデル100が画像認識を実施するCNN200の実行モデルである場合、学習データD1は入力画像と教師データTとの組み合わせである。入力画像は、CNN200に入力される入力データaである。教師データTは、画像に撮像された被写体の種類や、画像における検出対象物の有無や、画像における検出対象物の座標値などである。
学習部322は、公知の技術である誤差逆伝播法などによる教師あり学習によって、学習済みパラメータPMを生成する。学習部322は、入力画像に対するNN実行モデル100の出力と、入力画像に対応する教師データTと、の差分Eを損失関数(誤差関数)により求め、差分Eが小さくなるように重みwおよび量子化パラメータqを更新する。また、学習部322は、量子化演算回路5において実施するBatch Normalizationにおけるデータ分布の正規化を行う際の正規化パラメータも更新する。具体的には学習部322は、式4において示すスケールαとバイアスβを更新する。
例えば重みwを更新する場合、重みwに関する損失関数の勾配が用いられる。勾配は、例えば損失関数を微分することにより算出される。誤差逆伝播法を用いる場合、勾配は逆伝番(backward)により算出される。
学習部322は、勾配を算出して重みwを更新する際において、畳み込み演算に関連する演算を高精度化する。具体的には、NN実行モデル100が使用する低ビットの重みw(例えば1ビット)より高精度な32ビットの浮動小数点型の重みwが学習に使用される。また、NN実行モデル100の畳み込み演算回路4において実施する畳み込み演算が高精度化される。
学習部322は、勾配を算出して重みwを更新する際において、活性化関数に関連する演算を高精度化する。具体的には、NN実行モデル100の量子化演算回路5において実施するReLU関数などの活性化関数より高精度なシグモンド関数が学習に使用される。
一方、学習部322は、順伝搬(fоrward)により入力画像に対する出力データを算出する際においては、畳み込み演算および活性化関数に関連する演算を高精度化せず、NN実行モデル100に基づいた演算を実施する。重みwを更新する際に用いられた高精度な重みwは、ルックアップテーブル等により低ビット化される。
学習部322は、勾配を算出して重みwを更新する際において、畳み込み演算および活性化関数に関連する演算を高精度化することにより、演算における中間データの精度低下を防止して、高い推論精度を実現できる学習済みパラメータPMを生成できる。
一方、学習部322は、入力画像に対する出力データを算出する際において、順伝搬(fоrward)の演算を高精度化せず、NN実行モデル100に基づいた演算を実施する。そのため、学習部322が算出した出力データと、生成された学習済みパラメータPMを用いたNN実行モデル100の出力データと、が一致する。
さらに、学習部322は、学習後の重みwや量子化パラメータqを考慮して閾値thを決定する。学習部322は、正規化パラメータに含まれるスケールαとバイアスβを用いて閾値thを更新する。一例として学習により更新したスケールをα、バイアスをβ、閾値thの初期値をth0とした場合、th=(th0-β)/αとして学習によって更新された正規化パラメータに基づいて閾値thを更新する。なお、ここでは正規化パラメータは、一次関数に関するパラメータを前提に説明したが、例えば非線形的に単調増加または単調減少する関数に関するパラメータであってもよい。また、正規化パラメータでなく、重みw、量子化パラメータqまたはこれらの組み合わせを用いて閾値thを更新してもよい。
<学習工程:推論テスト工程(S14-2)>
推論部323は、学習部322が生成した学習済みパラメータPM、NN実行モデル100およびテストデータD2を用いて推論テストを実施する。例えば、NN実行モデル100が画像認識を実施するCNN200の実行モデルである場合、テストデータD2は、学習データD1同様に入力画像と教師データTとの組み合わせである。
推論部323は、学習部322が生成した学習済みパラメータPM、NN実行モデル100およびテストデータD2を用いて推論テストを実施する。例えば、NN実行モデル100が画像認識を実施するCNN200の実行モデルである場合、テストデータD2は、学習データD1同様に入力画像と教師データTとの組み合わせである。
推論部323は、推論テストの進捗および結果を表示部350に表示する。推論テストの結果は、例えばテストデータD2に対する正解率である。
<確認工程(S15)>
ステップS15において、ニューラルネットワーク生成装置300の推論部323は、操作入力部360から結果に関する確認を入力することを使用者に促すメッセージや情報入力に必要なGUI画像を表示部350に表示させる。使用者は、推論テストの結果を許容するかを、操作入力部360から入力する。使用者が推論テストの結果を許容することを示す入力が操作入力部360から入力された場合、ニューラルネットワーク生成装置300は、次にステップS16を実施する。使用者が推論テストの結果を許容しないことを示す入力が操作入力部360から入力された場合、ニューラルネットワーク生成装置300は、再度ステップS12を実施する。なお、ニューラルネットワーク生成装置300はステップS11まで戻って、ハードウェア情報HWを使用者に再入力させてもよい。
ステップS15において、ニューラルネットワーク生成装置300の推論部323は、操作入力部360から結果に関する確認を入力することを使用者に促すメッセージや情報入力に必要なGUI画像を表示部350に表示させる。使用者は、推論テストの結果を許容するかを、操作入力部360から入力する。使用者が推論テストの結果を許容することを示す入力が操作入力部360から入力された場合、ニューラルネットワーク生成装置300は、次にステップS16を実施する。使用者が推論テストの結果を許容しないことを示す入力が操作入力部360から入力された場合、ニューラルネットワーク生成装置300は、再度ステップS12を実施する。なお、ニューラルネットワーク生成装置300はステップS11まで戻って、ハードウェア情報HWを使用者に再入力させてもよい。
<出力工程(S16)>
ステップS16において、ニューラルネットワーク生成装置300のハードウェア生成部324は、ハードウェア情報HWおよびNN実行モデル100に基づいてニューラルネットワークハードウェアモデル400を生成する。
ステップS16において、ニューラルネットワーク生成装置300のハードウェア生成部324は、ハードウェア情報HWおよびNN実行モデル100に基づいてニューラルネットワークハードウェアモデル400を生成する。
<ソフトウェア生成工程(S17)>
ステップS17において、ニューラルネットワーク生成装置300のソフトウェア生成部325は、ネットワーク情報NWおよびNN実行モデル100などに基づいて、ニューラルネットワークハードウェア600(ニューラルネットワークハードウェアモデル400を動作対象ハードウェアに実装したもの)を動作させるソフトウェア500を生成する。ソフトウェア500は、学習済みパラメータPMを必要に応じてニューラルネットワークハードウェア600へ転送するソフトウェアを含む。
ステップS17において、ニューラルネットワーク生成装置300のソフトウェア生成部325は、ネットワーク情報NWおよびNN実行モデル100などに基づいて、ニューラルネットワークハードウェア600(ニューラルネットワークハードウェアモデル400を動作対象ハードウェアに実装したもの)を動作させるソフトウェア500を生成する。ソフトウェア500は、学習済みパラメータPMを必要に応じてニューラルネットワークハードウェア600へ転送するソフトウェアを含む。
ソフトウェア生成工程(S17)は、例えば、入力データ変換工程(S17-1)と、入力データ分割工程(S17-2)と、ネットワーク分割工程(S17-3)と、アロケーション工程(S17-4)と、を有する。
<入力データ変換工程(S17-1)>
畳み込み演算回路4において入力変換部49がハードウェアとして実装されない場合、ソフトウェア生成部325は、事前処理として、事前に変化可能な入力データaを変換して変換済み入力データa´を生成する。入力データ変換工程における入力データaの変換方法は、入力変換部49での変換方法と同じである。
畳み込み演算回路4において入力変換部49がハードウェアとして実装されない場合、ソフトウェア生成部325は、事前処理として、事前に変化可能な入力データaを変換して変換済み入力データa´を生成する。入力データ変換工程における入力データaの変換方法は、入力変換部49での変換方法と同じである。
<入力データ分割工程(S17-2):データ分割>
ソフトウェア生成部325は、第一メモリ1および第二メモリ2として割り当てるメモリのメモリ容量や演算器の仕様やサイズ(BcやBd)などに基づいて、畳み込み層210の畳み込み演算の入力データaを部分テンソルに分割する。部分テンソルへの分割方法や分割数は特に限定されない。部分テンソルは、例えば、入力データa(x+i,y+j,c)をa(x+i,y+j,co)に分割することにより形成される。
ソフトウェア生成部325は、第一メモリ1および第二メモリ2として割り当てるメモリのメモリ容量や演算器の仕様やサイズ(BcやBd)などに基づいて、畳み込み層210の畳み込み演算の入力データaを部分テンソルに分割する。部分テンソルへの分割方法や分割数は特に限定されない。部分テンソルは、例えば、入力データa(x+i,y+j,c)をa(x+i,y+j,co)に分割することにより形成される。
図15は、畳み込み演算のデータ分割やデータ展開を説明する図である。
畳み込み演算のデータ分割において、式1における変数cは、式7に示すように、サイズBcのブロックで分割される。また、式1における変数dは、式8に示すように、サイズBdのブロックで分割される。式7において、coはオフセットであり、ciは0から(Bc-1)までのインデックスである。式8において、doはオフセットであり、diは0から(Bd-1)までのインデックスである。なお、サイズBcとサイズBdは同じであってもよい。
畳み込み演算のデータ分割において、式1における変数cは、式7に示すように、サイズBcのブロックで分割される。また、式1における変数dは、式8に示すように、サイズBdのブロックで分割される。式7において、coはオフセットであり、ciは0から(Bc-1)までのインデックスである。式8において、doはオフセットであり、diは0から(Bd-1)までのインデックスである。なお、サイズBcとサイズBdは同じであってもよい。
式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)を算出できる。
<入力データ分割工程(S17-3):データ展開>
ソフトウェア生成部325は、NN実行モデル100の畳み込み回路4に、分割された入力データaおよび重みwを展開する。
ソフトウェア生成部325は、NN実行モデル100の畳み込み回路4に、分割された入力データaおよび重みwを展開する。
分割入力データ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の畳み込み演算を、ベクトルデータとマトリクスデータとの乗算により実施できる。
<アロケーション工程(S17-4)>
ソフトウェア生成部325は、分割された演算をニューラルネットワークハードウェア600に割り当てて実施させるソフトウェア500を生成する(アロケーション工程)。生成されるソフトウェア500は、命令コマンドC4を含む。入力データ変換工程(S17-1)において入力データaの変換が行われた場合、ソフトウェア500は、変換済み入力データa´を含む。
ソフトウェア生成部325は、分割された演算をニューラルネットワークハードウェア600に割り当てて実施させるソフトウェア500を生成する(アロケーション工程)。生成されるソフトウェア500は、命令コマンドC4を含む。入力データ変換工程(S17-1)において入力データaの変換が行われた場合、ソフトウェア500は、変換済み入力データa´を含む。
以上説明したように、本実施形態に係るニューラルネットワーク生成装置300、ニューラルネットワーク制御方法およびソフトウェア生成プログラムによれば、IoT機器などの組み込み機器に組み込み可能であり、高性能に動作させることができるニューラルネットワークを生成および制御できる。
以上、本発明の第一実施形態について図面を参照して詳述したが、具体的な構成はこの実施形態に限られるものではなく、本発明の要旨を逸脱しない範囲の設計変更等も含まれる。また、上述の実施形態および変形例において示した構成要素は適宜に組み合わせて構成することが可能である。
(変形例1-1)
上記実施形態において、第一メモリ1と第二メモリ2は別のメモリであったが、第一メモリ1と第二メモリ2の態様はこれに限定されない。第一メモリ1と第二メモリ2は、例えば、同一メモリにおける第一メモリ領域と第二メモリ領域であってもよい。
上記実施形態において、第一メモリ1と第二メモリ2は別のメモリであったが、第一メモリ1と第二メモリ2の態様はこれに限定されない。第一メモリ1と第二メモリ2は、例えば、同一メモリにおける第一メモリ領域と第二メモリ領域であってもよい。
(変形例1-2)
例えば、上記実施形態に記載のNN実行モデル100やニューラルネットワークハードウェア600に入力されるデータは単一の形式に限定されず、静止画像、動画像、音声、文字、数値およびこれらの組み合わせで構成することが可能である。なお、NN実行モデル100やニューラルネットワークハードウェア600に入力されるデータは、ニューラルネットワークハードウェア600が設けられるエッジデバイスに搭載され得る、光センサ、温度計、Global Positioning System(GPS)計測器、角速度計測器、風速計などの物理量測定器における測定結果に限られない。周辺機器から有線または無線通信経由で受信する基地局情報、車両・船舶等の情報、天候情報、混雑状況に関する情報などの周辺情報や金融情報や個人情報等の異なる情報を組み合わせてもよい。
例えば、上記実施形態に記載のNN実行モデル100やニューラルネットワークハードウェア600に入力されるデータは単一の形式に限定されず、静止画像、動画像、音声、文字、数値およびこれらの組み合わせで構成することが可能である。なお、NN実行モデル100やニューラルネットワークハードウェア600に入力されるデータは、ニューラルネットワークハードウェア600が設けられるエッジデバイスに搭載され得る、光センサ、温度計、Global Positioning System(GPS)計測器、角速度計測器、風速計などの物理量測定器における測定結果に限られない。周辺機器から有線または無線通信経由で受信する基地局情報、車両・船舶等の情報、天候情報、混雑状況に関する情報などの周辺情報や金融情報や個人情報等の異なる情報を組み合わせてもよい。
(変形例1-3)
ニューラルネットワークハードウェア600が設けられるエッジデバイスは、バッテリ等で駆動する携帯電話などの通信機器、パーソナルコンピュータなどのスマートデバイス、デジタルカメラ、ゲーム機器、ロボット製品などのモバイル機器を想定するが、これに限られるものではない。Power on Ethernet(PoE)などでの供給可能なピーク電力制限、製品発熱の低減または長時間駆動の要請が高い製品に利用することでも他の先行例にない効果を得ることができる。例えば、車両や船舶などに搭載される車載カメラや、公共施設や路上などに設けられる監視カメラ等に適用することで長時間の撮影を実現できるだけでなく、軽量化や高耐久化にも寄与する。また、テレビやディスプレイ等の表示デバイス、医療カメラや手術ロボット等の医療機器、製造現場や建築現場で使用される作業ロボットなどにも適用することで同様の効果を奏することができる。
ニューラルネットワークハードウェア600が設けられるエッジデバイスは、バッテリ等で駆動する携帯電話などの通信機器、パーソナルコンピュータなどのスマートデバイス、デジタルカメラ、ゲーム機器、ロボット製品などのモバイル機器を想定するが、これに限られるものではない。Power on Ethernet(PoE)などでの供給可能なピーク電力制限、製品発熱の低減または長時間駆動の要請が高い製品に利用することでも他の先行例にない効果を得ることができる。例えば、車両や船舶などに搭載される車載カメラや、公共施設や路上などに設けられる監視カメラ等に適用することで長時間の撮影を実現できるだけでなく、軽量化や高耐久化にも寄与する。また、テレビやディスプレイ等の表示デバイス、医療カメラや手術ロボット等の医療機器、製造現場や建築現場で使用される作業ロボットなどにも適用することで同様の効果を奏することができる。
(第二実施形態)
本発明の第二実施形態に係る電子機器(ニューラルネットワーク演算装置)700について、図16から図18を参照して説明する。以降の説明において、既に説明したものと共通する構成については、同一の符号を付して重複する説明を省略する。
本発明の第二実施形態に係る電子機器(ニューラルネットワーク演算装置)700について、図16から図18を参照して説明する。以降の説明において、既に説明したものと共通する構成については、同一の符号を付して重複する説明を省略する。
図16は、ニューラルネットワークハードウェア600を含む電子機器700の構成の一例を説明する図である。電子機器700は、バッテリ等の電源で駆動するモバイル製品であり、一例として携帯電話などのエッジデバイスである。電子機器700は、プロセッサ710と、メモリ711と、演算部712と、入出力部713と、表示部714と、通信ネットワーク716と通信する通信部715と、を備える。電子機器700は、各構成要素を組わせることで、NN実行モデル100の機能を実現する。
プロセッサ710は、例えばCPU(Central Processing Unit)であり、メモリ711に事前に記憶されたソフトウェア500を読み出して実行し、演算部712と合わせてニューラルネットワークハードウェア600の各機能を実現する。また、プロセッサ710は、ソフトウェア500以外のプログラムを読み出して実行し、ディープラーニングプログラムが有する各機能を実現する上で必要な機能を実現してもよい。
メモリ711は、例えばRAM(Random Access Memory)であり、プロセッサ710により読み出されて実行される命令群や各種パラメータ等を含むソフトウェア500を予め記憶している。また、メモリ711には表示部714に表示されるためのGUIに使用するための画像データや各種設定ファイルを記憶している。なお、メモリ711はRAMに限られるものではなく、例えば、ハードディスクドライブ(HDD:Hard Disk Drive)、ソリッドステートドライブ(SSD:Solid State Drive)、フラッシュメモリ(Flash Memory)、ROM(Read Only Memory)であってもよいし、これらを組み合わせたものであってもよい。
演算部712は、図5に示したNN実行モデル100の機能を1つ以上含み、外部バスEBを経由してプロセッサ710と連携してニューラルネットワークハードウェア600の各機能を実現する。具体的には、外部バスEBを経由して、入力データaを読み出して各種ディープラーニングに関する演算を行い、その結果をメモリ711などに書き出す。
入出力部713は、例えば、入出力ポート(Input/Output Port)である。入出力部713は、例えば、1以上のカメラ装置、マウス、キーボード等の入力装置、ディスプレイ、スピーカ等の出力装置が接続される。カメラ装置は、例えば、ドライブレコーダー、防犯用監視システムに接続されているカメラである。また、入出力部713は、USBポートなどの汎用的なデータの入出力ポートを含んでもよい。
表示部714は、LCDディスプレイ等の各種モニタを有する。表示部714は、GUI画像などを表示できる。また、プロセッサ710が使用者からの情報入力を必要とする場合、表示部714は入出力部713から情報を入力することを使用者に促すメッセージや情報入力に必要なGUI画像を表示できる。
通信部715は、通信ネットワーク716を介して他の機器と通信を実行するためのインターフェース回路である。また、通信ネットワーク716は、例えば、WAN(Wide Area Network)、LAN(Local Area Network)、インターネット、イントラネットである。また、通信部716は、ディープラーニングに関する演算結果を含む各種データを送信する機能を有するだけではなく、サーバ等の外部装置から所定のデータを受信する機能を有する。例えば、通信部715は、プロセッサ710が実行する各種プログラム、当該プログラムに含まれるパラメータ、機械学習に使用される学習モデル、当該学習モデルを学習するためのプログラムや学習結果を外部装置から受信する。
なお、プロセッサ710または演算部712の機能の一部は、例えばCPU(Central Processing Unit)やGPU(Graphics Processing Unit)のような1つ以上のプロセッサがプログラムメモリに記憶されたプログラムを実行することにより実現されてもよい。ただし、演算部712の機能の全部または一部は、LSI(Large Scale Integration)、ASIC(Application Specific Integrated Circuit)、FPGA(Field-Programmable Gate Array)、PLD(Programmable Logic Device)等のハードウェア(例えば回路部;circuity)により実現されてもよい。また、演算部712の機能の一部は、ソフトウェアとハードウェアとの組み合わせにより実現されてもよい。
次に、電子機器(ニューラルネットワーク演算装置)700の動作について説明する。
ニューラルネットワークハードウェア600は畳み込み演算回路4と量子化演算回路5が二つのメモリを介してループ状に形成されている。これにより、量子化された入力データaおよび重みwに対して畳み込み演算を効率的に実施可能に構成される。しかし、特殊な演算を実行する場合には効率化が下がる場合がある。
ニューラルネットワークハードウェア600は畳み込み演算回路4と量子化演算回路5が二つのメモリを介してループ状に形成されている。これにより、量子化された入力データaおよび重みwに対して畳み込み演算を効率的に実施可能に構成される。しかし、特殊な演算を実行する場合には効率化が下がる場合がある。
ニューラルネットワークハードウェア600の各構成要素の制御は、プロセッサ710のスレーブとして動作するコントローラ6によって行われる。コントローラ6は、プロセッサ710による動作レジスタへの書き込みに同期して、メモリ711の所定の領域に格納されている命令セットを順次読み込む。プロセッサ710は、読み込んだ命令セットに応じて各構成要素の制御を実施して、NN実行モデル100に関する演算を実行する。
一方で、NN実行モデル100の演算の全てをニューラルネットワークハードウェア600で実行する必要はなく、一部の演算を外部の演算資源である例えばプロセッサ710で実施してもよい。具体的には、ニューラルネットワークハードウェア600では実行する場合に演算効率が低下する多ビットの演算や入力層や出力層の演算の全部または一部をプロセッサ710が実行することで、演算効率を低下させずに可能な演算の範囲を広げることができる。
本実施形態では、入力層において、多ビットの入力データa(例えば、画像データなど)を変換する演算(入力変換部49に相当する変換)をプロセッサ710で実施し、その後の畳み込み演算をニューラルネットワークハードウェア600を含む演算部712で実施する場合について説明する。
図17は、電子機器700におけるプロセッサ710および演算部712がNN実行モデル100の演算処理動作を実施する例を示すタイミングチャートである。NN実行モデル100における一部の演算をプロセッサ710にて行い、その後の演算をループ状の回路構成を有するニューラルネットワークハードウェア600により行うことによりハードウェア資源を効率的に利用することができ、演算全体の効率化を図ることができる。
プロセッサ710は、メモリ711に格納された入力データaを読み出す。プロセッサ710は、所定のプログラムを実行し、入力データaの変換(入力変換部49に相当する変換)を実施する。
図18は、プロセッサ710が実行する入力データaを変換するプログラムの動作を示すフローチャートである。まず、プロセッサ710は、ステップS110にてメモリ711から入力データaの一部を読み出す。具体的には、プロセッサ710は、畳み込み演算を行う単位で入力データaを読み出す。なお、プロセッサ710はニューラルネットワークハードウェア600が備えるメモリサイズに合わせて入力データaを読み出すことが好ましい。これにより、プロセッサ710が処理した後のデータを効率的に後段の演算部712で処理することが可能となる。なお、本実施形態における処理対象の入力データaは、x軸方向の要素数が32、y軸方向の要素数が32、c軸方向の要素数が1である画像データ(すなわちxy平面における2次元画像)であるとする。
プロセッサ510は、ステップS111にてステップS110で読み出した入力データaのコピーをc0個作成する。ここで、コピーする対象データは、入力データaの全ての要素である32×32の画素データである。コピーする対象データは、1画素分のデータでもよいし、畳み込み演算において同時に演算可能な入力データ(例えば、9画素分の入力データ)でもよい。また、本実施形態において生成されるコピーの個数c0は32とするが、これ以外の個数であってもよい。生成されるコピーの個数c0は、演算部512で処理可能なチャンネル数と同数または倍数に設定することが好ましい。
プロセッサ510は、ステップS112にてステップS111でコピーした入力データaの要素である画素データa(i,j)と事前に学習により決定しておいた対応する閾値th(c)との比較を行う。cは、0から(c0-1)までのインデックスである。なお、本実施形態においては入力データaのコピーがc0個作成される例を示したが、入力データaの変換の態様はこれに限定されない。例えば、入力データaが色成分を含む3チャンネル以上の要素を含む画像データである場合には、c0個に変換されるデータのそれぞれが異なっていてもよい。なお、閾値th(c)は事前に学習したパラメータであって、メモリ511に記憶されているが、サーバやホスト機器などの外部装置より通信部515を介して適宜取得してもよい。また、ステップS112の処理は、1画素データごとでなく、複数の画素データを並列して行ってもよい。
プロセッサ710は、ステップS113にてステップS112の比較結果として、画素データaijが閾値th(c)より大きい場合には、出力yとして1を出力する。一方、プロセッサ710は、ステップS114にてステップS112の比較結果として、画素データaijが閾値th(c)以下の場合には、出力yとして0を出力する。この結果として、c0個のビット幅をもつバイナリ値が生成される。ここで、ステップS112おける出力yは、1ビット値に限られず、2ビットまたは4ビットなどの多ビット値でもよい。
プロセッサ510は、ステップS112からステップS115を繰り返し、全ての変換対象の全ての画素データに対して変換処理を実施する。
図17に示すように、プロセッサ710は、入力データaの変換を実施した後、変換済み入力データa´に対するレイヤ1の畳み込み演算を行う。
プロセッサ710は、レイヤ1の畳み込み演算結果である多ビットの要素を含むデータに対してレイヤ2の量子化演算を行う。当該演算は演算部712に含まれる量子化演算回路5が実行する演算と同一である。プロセッサ710が量子化演算を行う場合、フィルタのサイズや演算ビット精度などが量子化演算回路5と異なっていてもよい。プロセッサ710は、量子化演算結果をメモリ711へ書き戻す。
演算部712は、プロセッサ710による演算開始のレジスタの制御または所定のウェイト処理に応じて演算を開始する。具体的には、演算部712は、レイヤ2の量子化演算が終了してメモリ511にデータが書き込まれた後において、当該データを読み出して、レイヤ3の畳み込み演算、レイヤ4の量子化演算及び必要な後段の処理を順次実行する。
以上説明したように、ニューラルネットワークに係る演算を実行する際に、演算対象の入力データaを量子化することにより演算効率を向上させることができる。そして、入力データaが多ビットの場合には、入力データaの変換処理(量子化処理)を設けることによって演算精度の低下を抑えつつさらに演算効率を向上させることが可能となる。
以上、本発明の第二実施形態について図面を参照して詳述したが、具体的な構成はこの実施形態に限られるものではなく、本発明の要旨を逸脱しない範囲の設計変更等も含まれる。また、上述の実施形態および変形例において示した構成要素は適宜に組み合わせて構成することが可能である。
(変形例2-1)
図17ではメモリ711を介してプロセッサ710と演算部712とが演算処理動作を実施する例を示したが、演算処理動作を実施する主体の組み合わせはこれに限られない。
図17ではメモリ711を介してプロセッサ710と演算部712とが演算処理動作を実施する例を示したが、演算処理動作を実施する主体の組み合わせはこれに限られない。
例えば、入力変換部49の比較処理などの少なくとも一部の処理について、演算部712で処理を行ってもよい。一例として、量子化演算回路5が入力変換部49の比較処理を行ってもよい。この場合、第二メモリ2に格納できるサイズに入力データaを修正してもよい。また、プロセッサ710がレイヤ2の処理結果をメモリ711を介さずに、演算部712内のメモリに直接書き込んでもよい。また、レイヤ1の畳み込み演算結果をメモリ711などに一時的に格納する場合には、レイヤ2の量子化演算を第二メモリ2経由で演算部712で実施してもよい。
また、図17ではプロセッサ710の演算処理と演算部712の演算処理とが時分割で実施される例を示したが、複数の入力データaを処理する場合等においては、演算を並列に処理するようにしてもよい。これにより、さらに演算を効率化することが可能となる。
上述した実施形態におけるプログラムをコンピュータ読み取り可能な記録媒体に記録して、この記録媒体に記録されたプログラムをコンピュータシステムに読み込ませ、実行することによって実現してもよい。なお、ここでいう「コンピュータシステム」とは、OSや周辺機器等のハードウェアを含むものとする。また、「コンピュータ読み取り可能な記録媒体」とは、フレキシブルディスク、光磁気ディスク、ROM、CD-ROM等の可搬媒体、コンピュータシステムに内蔵されるハードディスク等の記憶装置のことをいう。さらに「コンピュータ読み取り可能な記録媒体」とは、インターネット等のネットワークや電話回線等の通信回線を介してプログラムを送信する場合の通信線のように、短時間の間、動的にプログラムを保持するもの、その場合のサーバやクライアントとなるコンピュータシステム内部の揮発性メモリのように、一定時間プログラムを保持しているものも含んでもよい。また上記プログラムは、前述した機能の一部を実現するためのものであってもよく、さらに前述した機能をコンピュータシステムにすでに記録されているプログラムとの組み合わせで実現できるものであってもよい。
また、本明細書に記載された効果は、あくまで説明的または例示的なものであって限定的ではない。つまり、本開示に係る技術は、上記の効果とともに、または上記の効果に代えて、本明細書の記載から当業者には明らかな他の効果を奏しうる。
本発明は、ニューラルネットワークの生成に適用することができる。
300 ニューラルネットワーク生成装置
200 畳み込みニューラルネットワーク(CNN)
100 ニューラルネットワーク実行モデル(NN実行モデル)
400 ニューラルネットワークハードウェアモデル
500 ソフトウェア
600 ニューラルネットワークハードウェア
1 第一メモリ
2 第二メモリ
3 DMAコントローラ(DMAC)
4 畳み込み演算回路
42 乗算器
43 アキュムレータ回路
49 入力変換部
5 量子化演算回路
6 コントローラ
PM 学習済みパラメータ
DS 学習データセット
HW ハードウェア情報
NW ネットワーク情報
200 畳み込みニューラルネットワーク(CNN)
100 ニューラルネットワーク実行モデル(NN実行モデル)
400 ニューラルネットワークハードウェアモデル
500 ソフトウェア
600 ニューラルネットワークハードウェア
1 第一メモリ
2 第二メモリ
3 DMAコントローラ(DMAC)
4 畳み込み演算回路
42 乗算器
43 アキュムレータ回路
49 入力変換部
5 量子化演算回路
6 コントローラ
PM 学習済みパラメータ
DS 学習データセット
HW ハードウェア情報
NW ネットワーク情報
Claims (12)
- ニューラルネットワークを演算するニューラルネットワーク実行モデルを生成するニューラルネットワーク生成装置であって、
前記ニューラルネットワーク実行モデルは、8ビット以上の要素を含む入力データを、複数の閾値との比較に基づいて、前記要素よりも低ビットである変換値に変換する、
ニューラルネットワーク生成装置。 - 前記ニューラルネットワーク実行モデルは、前記入力データの少なくとも一部の要素を、2ビット以下の前記変換値に変換する、
請求項1に記載のニューラルネットワーク生成装置。 - 前記ニューラルネットワーク実行モデルの学習パラメータを学習する学習部を備え、
前記学習部は、前記ニューラルネットワークが実施するする畳み込み演算に用いる重みとともに前記閾値を生成する、
請求項1または請求項2に記載のニューラルネットワーク生成装置。 - 前記ニューラルネットワーク実行モデルの少なくとも一部をハードウェアに実装したニューラルネットワークハードウェアを動作させるソフトウェアを生成するソフトウェア生成部を備え、
前記ソフトウェア生成部は、前記入力データを前記変換値に変換し、前記変換値を前記ニューラルネットワークハードウェアに対する入力とする前記ソフトウェアを生成する、
請求項1から請求項3のいずれか一項に記載のニューラルネットワーク生成装置。 - 8ビット以上の要素を含む入力データを、複数の閾値との比較に基づいて、前記要素よりも低ビットである変換値に変換する入力変換部と、
前記変換値を入力とする畳み込み演算回路と、
を備える、
ニューラルネットワーク演算装置。 - 前記入力変換部は、前記入力データの少なくとも一部の要素を、2ビット以下の前記変換値に変換する
請求項5に記載のニューラルネットワーク演算装置。 - 前記入力変換部は、前記入力データを前記変換値に変換する複数の変換部を有し、
前記複数の変換部の個数は、前記変換部による変換の前後ビット精度の差分以上である、
請求項6に記載のニューラルネットワーク演算装置。 - 請求項5から請求項7のいずれか1項に記載のニューラルネットワーク演算装置と、
前記ニューラルネットワーク演算装置を動作させる電源と、
を備える
エッジデバイス。 - ニューラルネットワークを演算するニューラルネットワークハードウェアを制御する方法であって、
8ビット以上の要素を含む入力データを、複数の閾値との比較に基づいて、前記要素よりも低ビットである変換値に変換する変換ステップと、
前記変換値に対して畳み込み演算を実施する演算ステップと、
を備える、
ニューラルネットワーク制御方法。 - 前記変換ステップは、前記ニューラルネットワークハードウェア以外の装置によって事前処置される、
請求項9に記載のニューラルネットワーク制御方法。 - ニューラルネットワークを演算するニューラルネットワークハードウェアを制御するソフトウェアを生成するプログラムであって、
8ビット以上の要素を含む入力データを、複数の閾値との比較に基づいて、前記要素よりも低ビットである変換値に変換させる変換ステップと、
前記変換値に対して畳み込み演算を実施させる演算ステップと
を備える前記ソフトウェアを生成する
ソフトウェア生成プログラム。 - ニューラルネットワークを演算するニューラルネットワークハードウェアを制御するソフトウェアを生成するプログラムであって、
8ビット以上の要素を含む入力データを、複数の閾値との比較に基づいて、前記要素よりも低ビットに変換した変換値を用いて、畳み込み演算を実施させる演算ステップを備える前記ソフトウェアを生成する
ソフトウェア生成プログラム。
Priority Applications (4)
Application Number | Priority Date | Filing Date | Title |
---|---|---|---|
JP2021014621A JP2022117866A (ja) | 2021-02-01 | 2021-02-01 | ニューラルネットワーク生成装置、ニューラルネットワーク演算装置、エッジデバイス、ニューラルネットワーク制御方法およびソフトウェア生成プログラム |
US18/263,051 US20240095522A1 (en) | 2021-02-01 | 2022-02-01 | Neural network generation device, neural network computing device, edge device, neural network control method, and software generation program |
PCT/JP2022/003745 WO2022163861A1 (ja) | 2021-02-01 | 2022-02-01 | ニューラルネットワーク生成装置、ニューラルネットワーク演算装置、エッジデバイス、ニューラルネットワーク制御方法およびソフトウェア生成プログラム |
CN202280011699.4A CN116762080A (zh) | 2021-02-01 | 2022-02-01 | 神经网络生成装置、神经网络运算装置、边缘设备、神经网络控制方法以及软件生成程序 |
Applications Claiming Priority (1)
Application Number | Priority Date | Filing Date | Title |
---|---|---|---|
JP2021014621A JP2022117866A (ja) | 2021-02-01 | 2021-02-01 | ニューラルネットワーク生成装置、ニューラルネットワーク演算装置、エッジデバイス、ニューラルネットワーク制御方法およびソフトウェア生成プログラム |
Publications (1)
Publication Number | Publication Date |
---|---|
JP2022117866A true JP2022117866A (ja) | 2022-08-12 |
Family
ID=82654662
Family Applications (1)
Application Number | Title | Priority Date | Filing Date |
---|---|---|---|
JP2021014621A Withdrawn JP2022117866A (ja) | 2021-02-01 | 2021-02-01 | ニューラルネットワーク生成装置、ニューラルネットワーク演算装置、エッジデバイス、ニューラルネットワーク制御方法およびソフトウェア生成プログラム |
Country Status (4)
Country | Link |
---|---|
US (1) | US20240095522A1 (ja) |
JP (1) | JP2022117866A (ja) |
CN (1) | CN116762080A (ja) |
WO (1) | WO2022163861A1 (ja) |
Families Citing this family (2)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
JP2024027919A (ja) * | 2022-08-19 | 2024-03-01 | LeapMind株式会社 | ニューラルネットワーク学習装置およびニューラルネットワーク学習方法 |
CN117112776A (zh) * | 2023-09-23 | 2023-11-24 | 宏景科技股份有限公司 | 一种基于大语言模型的企业知识库管理和检索平台与方法 |
-
2021
- 2021-02-01 JP JP2021014621A patent/JP2022117866A/ja not_active Withdrawn
-
2022
- 2022-02-01 WO PCT/JP2022/003745 patent/WO2022163861A1/ja active Application Filing
- 2022-02-01 US US18/263,051 patent/US20240095522A1/en active Pending
- 2022-02-01 CN CN202280011699.4A patent/CN116762080A/zh active Pending
Also Published As
Publication number | Publication date |
---|---|
CN116762080A (zh) | 2023-09-15 |
WO2022163861A1 (ja) | 2022-08-04 |
US20240095522A1 (en) | 2024-03-21 |
Similar Documents
Publication | Publication Date | Title |
---|---|---|
US20200364552A1 (en) | Quantization method of improving the model inference accuracy | |
CN110020723B (zh) | 神经网络处理单元及包括该神经网络处理单元的片上系统 | |
WO2022163861A1 (ja) | ニューラルネットワーク生成装置、ニューラルネットワーク演算装置、エッジデバイス、ニューラルネットワーク制御方法およびソフトウェア生成プログラム | |
CN114118347A (zh) | 用于神经网络量化的细粒度每向量缩放 | |
KR20190098671A (ko) | 뉴럴 네트워크의 고속 처리 방법 및 그 방법을 이용한 장치 | |
KR102667790B1 (ko) | 뉴럴 네트워크 회로, 에지 디바이스 및 뉴럴 네트워크 연산 방법 | |
CN116070557A (zh) | 使用强化学习的数据路径电路设计 | |
JP2023084094A (ja) | 面積高効率畳み込みブロック | |
WO2021210527A1 (ja) | ニューラルネットワーク回路の制御方法 | |
CN114781618A (zh) | 一种神经网络量化处理方法、装置、设备及可读存储介质 | |
WO2022230906A1 (ja) | ニューラルネットワーク生成装置、ニューラルネットワーク演算装置、エッジデバイス、ニューラルネットワーク制御方法およびソフトウェア生成プログラム | |
WO2022085661A1 (ja) | ニューラルネットワーク生成装置、ニューラルネットワーク制御方法およびソフトウェア生成プログラム | |
JP2023154880A (ja) | ニューラルネットワーク生成方法およびニューラルネットワーク生成プログラム | |
WO2022004815A1 (ja) | ニューラルネットワーク生成装置、ニューラルネットワーク生成方法およびニューラルネットワーク生成プログラム | |
KR102384588B1 (ko) | 신경망 연산방법 및 신경망 가중치 생성방법 | |
WO2024038662A1 (ja) | ニューラルネットワーク学習装置およびニューラルネットワーク学習方法 | |
JP2023006509A (ja) | ソフトウェア生成装置およびソフトウェア生成方法 | |
US11086634B2 (en) | Data processing apparatus and method | |
JP2022114698A (ja) | ニューラルネットワーク生成装置、ニューラルネットワーク制御方法およびソフトウェア生成プログラム | |
CN114692865A (zh) | 一种神经网络量化训练方法、装置及相关产品 | |
WO2024111644A1 (ja) | ニューラルネットワーク回路およびニューラルネットワーク演算方法 | |
JP2022183833A (ja) | ニューラルネットワーク回路およびニューラルネットワーク演算方法 | |
WO2023139990A1 (ja) | ニューラルネットワーク回路およびニューラルネットワーク演算方法 | |
WO2023058422A1 (ja) | ニューラルネットワーク回路およびニューラルネットワーク回路の制御方法 | |
JP2024118195A (ja) | ニューラルネットワーク回路およびニューラルネットワーク演算方法 |
Legal Events
Date | Code | Title | Description |
---|---|---|---|
A621 | Written request for application examination |
Free format text: JAPANESE INTERMEDIATE CODE: A621 Effective date: 20240124 |
|
A761 | Written withdrawal of application |
Free format text: JAPANESE INTERMEDIATE CODE: A761 Effective date: 20240813 |