JP2022153634A - 情報処理装置及び情報処理方法 - Google Patents
情報処理装置及び情報処理方法 Download PDFInfo
- Publication number
- JP2022153634A JP2022153634A JP2022124392A JP2022124392A JP2022153634A JP 2022153634 A JP2022153634 A JP 2022153634A JP 2022124392 A JP2022124392 A JP 2022124392A JP 2022124392 A JP2022124392 A JP 2022124392A JP 2022153634 A JP2022153634 A JP 2022153634A
- Authority
- JP
- Japan
- Prior art keywords
- processing
- function
- data
- native
- layer
- 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.)
- Granted
Links
- 230000010365 information processing Effects 0.000 title claims abstract description 14
- 238000003672 processing method Methods 0.000 title description 4
- 238000013528 artificial neural network Methods 0.000 claims abstract description 174
- 238000012545 processing Methods 0.000 claims description 351
- 238000000034 method Methods 0.000 abstract description 181
- 230000008569 process Effects 0.000 abstract description 55
- 238000003860 storage Methods 0.000 abstract description 20
- 238000010801 machine learning Methods 0.000 abstract description 12
- 230000006870 function Effects 0.000 description 277
- 238000004422 calculation algorithm Methods 0.000 description 186
- 230000015654 memory Effects 0.000 description 140
- 238000010586 diagram Methods 0.000 description 99
- 238000004364 calculation method Methods 0.000 description 65
- 238000004891 communication Methods 0.000 description 47
- 238000006243 chemical reaction Methods 0.000 description 38
- 230000009471 action Effects 0.000 description 36
- 238000007726 management method Methods 0.000 description 24
- 230000007246 mechanism Effects 0.000 description 23
- 238000005457 optimization Methods 0.000 description 23
- 238000007667 floating Methods 0.000 description 19
- 238000011161 development Methods 0.000 description 18
- 238000011156 evaluation Methods 0.000 description 18
- 238000003491 array Methods 0.000 description 17
- 230000001419 dependent effect Effects 0.000 description 16
- 238000013135 deep learning Methods 0.000 description 15
- 238000013461 design Methods 0.000 description 15
- 239000000203 mixture Substances 0.000 description 15
- 239000011800 void material Substances 0.000 description 14
- 238000012546 transfer Methods 0.000 description 11
- 230000002829 reductive effect Effects 0.000 description 10
- 230000008859 change Effects 0.000 description 9
- 230000002194 synthesizing effect Effects 0.000 description 8
- 238000011176 pooling Methods 0.000 description 7
- 239000004065 semiconductor Substances 0.000 description 7
- 238000013144 data compression Methods 0.000 description 6
- 230000000694 effects Effects 0.000 description 6
- 238000005516 engineering process Methods 0.000 description 6
- 230000009467 reduction Effects 0.000 description 6
- 238000012549 training Methods 0.000 description 5
- 238000012795 verification Methods 0.000 description 5
- 238000013459 approach Methods 0.000 description 4
- 238000007906 compression Methods 0.000 description 4
- 230000006835 compression Effects 0.000 description 4
- 230000006837 decompression Effects 0.000 description 4
- 238000012360 testing method Methods 0.000 description 4
- ORILYTVJVMAKLC-UHFFFAOYSA-N Adamantane Natural products C1C(C2)CC3CC1CC2C3 ORILYTVJVMAKLC-UHFFFAOYSA-N 0.000 description 3
- 230000015572 biosynthetic process Effects 0.000 description 3
- 238000004590 computer program Methods 0.000 description 3
- 239000011159 matrix material Substances 0.000 description 3
- 230000001902 propagating effect Effects 0.000 description 3
- 230000002441 reversible effect Effects 0.000 description 3
- 238000003786 synthesis reaction Methods 0.000 description 3
- 230000002776 aggregation Effects 0.000 description 2
- 238000004220 aggregation Methods 0.000 description 2
- 230000008901 benefit Effects 0.000 description 2
- 230000000052 comparative effect Effects 0.000 description 2
- 238000007796 conventional method Methods 0.000 description 2
- 230000006378 damage Effects 0.000 description 2
- 230000007547 defect Effects 0.000 description 2
- 230000004069 differentiation Effects 0.000 description 2
- 238000005259 measurement Methods 0.000 description 2
- 238000012986 modification Methods 0.000 description 2
- 230000036961 partial effect Effects 0.000 description 2
- 238000013139 quantization Methods 0.000 description 2
- 230000004044 response Effects 0.000 description 2
- HPTJABJPZMULFH-UHFFFAOYSA-N 12-[(Cyclohexylcarbamoyl)amino]dodecanoic acid Chemical compound OC(=O)CCCCCCCCCCCNC(=O)NC1CCCCC1 HPTJABJPZMULFH-UHFFFAOYSA-N 0.000 description 1
- 230000004913 activation Effects 0.000 description 1
- 239000008186 active pharmaceutical agent Substances 0.000 description 1
- 230000002411 adverse Effects 0.000 description 1
- 230000001174 ascending effect Effects 0.000 description 1
- 230000004888 barrier function Effects 0.000 description 1
- 230000000903 blocking effect Effects 0.000 description 1
- 238000000354 decomposition reaction Methods 0.000 description 1
- 230000006866 deterioration Effects 0.000 description 1
- 230000008278 dynamic mechanism Effects 0.000 description 1
- 230000006872 improvement Effects 0.000 description 1
- 230000002427 irreversible effect Effects 0.000 description 1
- 230000000670 limiting effect Effects 0.000 description 1
- 238000012886 linear function Methods 0.000 description 1
- 239000004973 liquid crystal related substance Substances 0.000 description 1
- 230000007774 longterm Effects 0.000 description 1
- 238000012423 maintenance Methods 0.000 description 1
- 230000004048 modification Effects 0.000 description 1
- 230000001537 neural effect Effects 0.000 description 1
- 230000003287 optical effect Effects 0.000 description 1
- 230000000644 propagated effect Effects 0.000 description 1
- 230000000306 recurrent effect Effects 0.000 description 1
- 238000011160 research Methods 0.000 description 1
- 238000005549 size reduction Methods 0.000 description 1
- 230000009466 transformation Effects 0.000 description 1
- 238000000844 transformation Methods 0.000 description 1
- 239000002699 waste material 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/08—Learning methods
- G06N3/084—Backpropagation, e.g. using gradient descent
-
- G—PHYSICS
- G06—COMPUTING; CALCULATING OR COUNTING
- G06F—ELECTRIC DIGITAL DATA PROCESSING
- G06F8/00—Arrangements for software engineering
- G06F8/30—Creation or generation of source code
- G06F8/31—Programming languages or programming paradigms
- G06F8/311—Functional or applicative languages; Rewrite languages
-
- 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/044—Recurrent networks, e.g. Hopfield 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
- G06N3/082—Learning methods modifying the architecture, e.g. adding, deleting or silencing nodes or connections
-
- 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
- G06N3/105—Shells for specifying net layout
Landscapes
- Engineering & Computer Science (AREA)
- Theoretical Computer Science (AREA)
- Physics & Mathematics (AREA)
- Software Systems (AREA)
- Computing Systems (AREA)
- General Engineering & Computer Science (AREA)
- General Physics & Mathematics (AREA)
- General Health & Medical Sciences (AREA)
- Artificial Intelligence (AREA)
- Evolutionary Computation (AREA)
- Computational Linguistics (AREA)
- Molecular Biology (AREA)
- Biophysics (AREA)
- Biomedical Technology (AREA)
- Data Mining & Analysis (AREA)
- Mathematical Physics (AREA)
- Life Sciences & Earth Sciences (AREA)
- Health & Medical Sciences (AREA)
- Machine Translation (AREA)
- Devices For Executing Special Programs (AREA)
- Stored Programmes (AREA)
Abstract
Description
このような機械学習を実行するに際して、開発者等は、所定のプログラミング言語を用いて、ニューラルネットワークのネットワーク構造等を定義したソースコードを作成し、そのように作成したソースコードをパーソナルコンピュータ等に実行させることによって、そのようなパーソナルコンピュータに機械学習を実行させることができる(非特許文献1)。
また、一態様に係るコンピュータプログラムは、コンピュータを、ニューラルネットワークを構成する各層のフォワード処理を定義したコードを含むソースコードを取得する取得手段、各フォワード処理と該フォワード処理に対応するバックワード処理との対応関係を記憶する記憶手段、及び、前記ソースコードに含まれた各コードを順次実行する実行手段であって、各コードを実行した時点において、該コードにより定義されたフォワード処理の出力値を入力値に基づいて計算し、かつ、前記記憶手段に記憶された前記対応関係に基づいて該コードに対応する層におけるバックワード処理のための参照構造を生成する、ように構成された実行手段、として機能させるものである。
まず、第1部において、実施形態に係る情報処理装置(以下、情報処理装置の一例である学習装置として説明を行う)について説明し、第2部において、実施形態に係る情報処理装置に実装されたアルゴリズムを組み込み系チップ(組み込み系半導体集積回路)に実装する手法について説明する。
1.背景及び概略
深層学習(ディープラーニング)を含む機械学習アルゴリズムは、モデル毎に定義される損失関数の総和の最小化問題として定式化できることが多い。損失関数とは、与えられた学習用データサンプルにおいて、モデルの出力と正解との誤差で表されるような指標のことである。ここでは、データをモデルに入力してから出力を得て正解との比較を行うまでの一連の処理を計算グラフと呼び、その結果を損失関数とする。損失関数の最小化問題は、損失関数を微分した勾配(gradient)さえ計算可能であれば、勾配法と呼ばれる一般的な手法で解ける。
これに対して図2に示すDefine-by-runの構成では、汎用プログラミング言語の処理系がモデル定義、入力データ、パラメータを入力しながらフォワード(識別)処理を実行すると同時にバックワード(学習)処理の計算手順を生成する。ここでモデル定義は関数呼び出しや四則演算、ループや分岐といった汎用プログラミング言語の文法にそのまま準拠して定義されたものである。バックワード(学習)処理の計算手順はフォワード(識別)処理の実行とは独立して動的に変更することもできる。任意のタイミングでBackwardの処理系を呼び出すことができる。Backwardの処理系はBackwardの計算手順に従って入力データとFoward処理の結果からパラメータを更新する。
2-1.ニューラルネットワークの基本的な処理の流れ
ニューラルネットワークにおいて行われる処理には、主に、フォワード(Forward)処理、バックワード(Backward)処理、及び、重みの更新が含まれる。
フォワード処理とは、ニューラルネットワークの入力層から出力層に向かって情報を加工して伝播する処理をいう。
ニューラルネットワークを構成する各層は、例えば次に列挙するレイヤーアルゴリズムにより実現されるものである。
-Linear
-ReLu
-Dropout
-Softmax Cross Entropy
-Convolution 2D
-Pooling(Average Pooling及びMax Pooling等)等
-momentum-SGD
-Adam等
図3は、ニューラルネットワークのネットワーク構成の一例を示す模式図である。図3には、一例として、入力層と出力層(Softmax)との間に6つの中間層(Linear、ReLU、Linear、ReLU、Dropout及びLinear)が配置されたニューラルネットワークが例示されている。紙面上、右向きの矢印がフォワード処理を示し、左向きの矢印がバックワード処理を示す。
入力層は、更新すべき重みを持たないものであるので、バックワード処理は、この入力層に最も近い重みを有する中間層(図3に示した例では、入力層に隣接して配置されたLinear層)まで行われる。
図4は、ニューラルネットワークのネットワーク構成の別の例を示す模式図である。図4には、一例として、入力層と出力層(Softmax)に隣接して配置された中間層(Linear)との間に、直列に配置された複数の中間層(Convolution 2D、ReLU、Convolution 2D、ReLU)が、複数(3つ)並列に配置されたニューラルネットワークが例示されている。紙面上、上向きの矢印がフォワード処理を示し、下向きの矢印がバックワード処理を示す。
図5は、ニューラルネットワークのネットワーク構成のさらに別の例を示す模式図である。図5には、一例として、ループを有するニューラルネットワーク(これは、「Recurrent Neural Network」と呼ばれることがある。)が例示されている。同図には、フォワード処理におけるデータの流れが矢印により示されている。中間層(ここではLinear)は、前回のこの中間層の出力値と今回の入力層の出力値とを加算したものをこの中間層の入力とする計算を実行する。このようなニューラルネットワークにおいてバックワード処理を実現する方法としては、予めネットワークを時間軸方向に展開してループのないネットワークに変換する方法(BPTT)が知られている。
レイヤーアルゴリズムの1つであるLinearは、入力側レイヤーの全ノードの加重平均を取る操作をその中間層内のノード数分だけ繰り返す計算を実行するものである。
図6は、Linearによりフォワード処理時に実行される計算を実現するための擬似コードを示す図であり、図7は、Linearによりバックワード処理時に実行される計算を実現するための擬似コードを示す図である。
レイヤーアルゴリズムの1つであるReLUは、入力側レイヤーの各ノードにMax(0,val)の計算を実行するものである。このアルゴリズムは、ニューラルネットワークの計算に非線形性を加える処理(活性化関数)で近年最も使われている手法である。
図8は、ReLUによりフォワード処理時に実行される計算を実現するための擬似コードを示す図であり、図9は、ReLUによりバックワード処理時に実行される計算を実現するための擬似コードを示す図である。
レイヤーアルゴリズムの1つであるDropoutは、ランダムに一定の割合のノードを選択し、出力及び誤差逆伝播を不活性化する計算を実行するものである。このアルゴリズムは、識別のみを実行する場合(すなわち、学習を実行しない場合)には、不要となるものである。
2-9.レイヤーアルゴリズムの計算内容(Softmax Cross Entropy)
レイヤーアルゴリズムの1つであるSoftmax Cross Entropyは、入力側レイヤーの値を以下の式により補正するものである。
また、このレイヤーアルゴリズムは、バックワード処理時には、正解ラベル(1又は0)と出力値との差分から誤差を計算する。
レイヤーアルゴリズムの1つであるConvolution 2Dは、Channel*Width*Heightのデータ構造を有する画像を畳み込むものである。入力側レイヤーも、当該レイヤーの出力も、Channel*Width*Heightのデータ構造を有する。このアルゴリズムでは、ストライド処理により画像サイズの縮小も可能である。また、このアルゴリズムでは、入力側レイヤーの画像にパディングを挿入することが行われる。このアルゴリズムは、Channel方向に関しては、Linearと同様の計算構造(出力Channel回数だけ入力Channelの内積計算を繰り返す)を有する。
図10は、Convolution 2Dによりフォワード処理時に実行される計算を実現するための擬似コードを示す図である。
なお、Convolution 2Dは、バックワード処理時には、Linearと同様に重みの勾配計算及び誤差逆伝播を実行する。それぞれの処理のループの規模は、フォワード処理時におけるものと同様である。
レイヤーアルゴリズムの1つであるMax Poolingは、入力側レイヤーの画像の最大値を取ることによってその画像を縦横方向に縮小するものである。なお、最大値を取るフィルタサイズと画像縮小のストライド幅とが異なる場合もある。また、Channel数に変化はない。
レイヤーアルゴリズムの1つであるMax Poolingは、入力側レイヤーの画像の平均値を取ることによってその画像を縦横方向に縮小するものである。なお、平均値を取るフィルタサイズと画像縮小のストライド幅とが異なる場合もある。また、Channel数に変化はない。
重みの更新アルゴリズムとしては、確率的勾配降下法(SGD)から派生した様々なアルゴリズムが存在する。これらのアルゴリズムでは、重みの要素ごとに計算は独立している。
先に挙げたmomentum-SGDの計算式は次のとおりである。
次に、本発明の実施形態に係る学習装置のハードウェア構成について説明する。図11は、本発明の一実施形態に係る学習装置のハードウェア構成例を示す模式図である。
外部メモリ16は、例えば磁気ディスクドライブやフラッシュメモリ等により構成され、オペレーティングシステム及びプログラミング言語(例えばPython)をサポートするプログラム(ソースコードの作成に用いられるプログラム)等の様々なプログラムを記憶する。
次に、上記構成を有する学習装置10が有する機能について簡単に説明する。図12は、本発明の一実施形態に係る学習装置が有する機能例を模式的に示すブロック図である。
かかる取得部110は、例えば、図11に示したCPU11、メインメモリ12、外部メモリ16及びユーザI/F17等が協働することによって、実現されるものとすることができる。
なお、記憶部120は、取得部110に取得されたソースコード、及び、このソースコードに対応するプログラミング言語において用いられる様々なライブラリ等を含む様々な情報を記憶することができる。
かかる記憶部120は、例えば、図11に示したCPU11、メインメモリ12及び外部メモリ16等が協働することによって、実現されるものとすることができる。
かかる実行部130は、例えば、図11に示したCPU11、メインメモリ12及び外部メモリ16等が協働することによって、実現されるものとすることができる。
まず、Functionというクラスは、フォワード処理とバックワード処理とをペアにして定義したクラスである。このFunctionというクラスは、上記「2-6」~「2-12」で例示した具体的なレイヤーアルゴリズムをサブクラスで定義するものである。
次に、Variableというクラスは、Function間で入出力されるデータを管理するクラスである。このVariableというクラスは、GPUとCPUとの違いを隠蔽する役割を有するものであり、また、ループを含むネットワークのバックワード処理を有限範囲で打ち切るためのメソッド(後述するunchain_backward)を有する。
さらに、Optimizerというクラスは、重みの更新を行うクラスである。
次に、上記構成を有する実施形態に係る学習装置10によりなされる動作の具体例について説明する。図13は、本発明の一実施形態に係る学習装置に入力されるソースコードの一例を示す図である。なお、図13に例示されたソースコードは、本実施形態に係る学習装置の特徴を説明することを目的として意図的に簡略化されたものであることに留意されたい。また、図13において左端に記載された行数は、本具体例を説明するために付されたものであって、実際のソースコードには含まれない。
以下、本実施形態では、ソースコードが一例としてPythonにより記述される場合について説明するが、ソースコードはPython以外のプログラミング言語により記載されるものであってもよい。Phythonの詳細は、https://www.python.org/に開示されている。このURLに開示された内容は、引用によりその内容の全体が本明細書に組み込まれる。
第1行~第3行は、FunctionSetによるパラメータを含むFunctionの登録を記述している。具体的には、ここでは、FunctionSetというクラスのオブジェクトに重みを含むFunction(本例では内積を行うレイヤーアルゴリズムを定義したFunctionサブクラスであるLinearクラスのインスタンスl1,l2,l3)を登録している。重みを含むFunctionはOptimizerによりその重みを更新できる。FunctionSetは、Optimizerによって更新されるFunctionをひとまとめにすることでコードの可読性を高めるための仕組みである。
第8行は、h1=F.relu(model.l1(x))と記述している。
浅いコピーとはオブジェクトをコピーする際に、オブジェクトが内部的に参照するデータをコピーしないようなオブジェクトのコピー方法である。浅いコピーとすることで例えばFuntionのインスタンスが持つ重みのデータの重複を避けることができる。
また、矢印の意味はオブジェクトの参照の方向を表す。例えばA←Bという記述はBのオブジェクトのメンバにAのオブジェクトへの参照が含まれることを意味する。
以上のように、フォワード処理の実行時には、自然な形式の関数呼び出しによってバックワード処理のための参照構造が生成される。
この時点で、h1を起点にバックワードの処理が実行可能な状態と成っている。実際にh1からバックワード処理を実行する場合のバックワード処理系が実行する処理の流れを以下に示す。
h1のインスタンスが参照するrelu'をたどりrelu'のBackward処理を呼び出す。この時の入力はh1が保持する誤差の値であり、出力結果はy'のインスタンスに格納される。このようなFunctionインスタンスが入出力するデータ対応はFunctionのサブクラスごとに定義されるFoward処理/Backward処理においてそれぞれ定義される。次にrelu'からy'を経由してspliterにたどり着く、spliterはy'が保持する誤差の値をyにコピーする。(splitterが挿入される理由は次節で述べる)。次にyからl1'をたどりl1'のBackward処理を実行する。この時の入力はyが保持する誤差の値であり、出力結果はx'のインスタンスに格納される。また重みの誤差も計算される。重みの誤差は、x’に格納されたFoward時の出力値と、yが保持する誤差の値から計算される。以下同様にバックワード処理のための参照構造の終点であるxまでたどるとバックワード処理は終了となる。
上記参照構造の作成直後に“model.l1(x)”をもう一度コールすると以下のような参照構造が生成される。
次に、本実施形態に係る学習装置の優位性を示すために、図13に例示したソースコードにより実行されるものと等価な処理を従来技術に係るCaffeにより記述した場合について説明する。図15は、従来技術に係るCaffeにより記述されたソースコードの一例を示す図である。
これに対して、本実施形態に係る学習装置では、図14を参照して上述したように、ニューラルネットワークの構成を定義する各コードを実行した時点において、そのコードに対応するフォワード処理が実行される。すなわち、ニューラルネットワークの構成の定義とその構成によるフォワード処理の実行とが同じタイミングで実行される。これにより、データの性質に応じてネットワークの構成を動的に変更することも容易に行うことができる。例えば図13のコードに分岐を加えて変数tの値や、変数xのデータサイズに応じて、フォワード処理を実行するレイヤーを切り替えても良い。また例えば図19のコードで9行目の定数「10」の代わりに可変な値を入力データとして与えることもできる。
これに対して、本実施形態に係る学習装置では、開発者等は、フォワード処理(ネットワーク構成)を1行ずつ記載する時点において、いずれの変数のインスタンスをいずれの関数に与えることによって得られた実行結果をいずれの変数のインスタンスに保持させるかを1行ずつ記述する方式により、ソースコードを記述する。これにより、開発者等は、ソースコードを直感的に記述することができる。
次に、上記構成を有する実施形態に係る学習装置10によりなされる動作の別の具体例について説明する。図16は、本発明の一実施形態に係る学習装置に入力されるソースコードの別の例を示す図である。なお、図16に例示されたソースコードは、本実施形態に係る学習装置の特徴を説明することを目的として意図的に簡略化されたものであることに留意されたい。また、図16において左端に記載された行数は、本具体例を説明するために付されたものであって、実際のソースコードには含まれない。
第4行は、iの値が0~1000になるまで第5行~第10行に記述された処理をループ処理することを記述している。
第5行及び第6行については、図13に示したソースコードにおける第6行及び第7行と同様であるので、詳細な説明を省略する。
第7行は、関数l1及び関数reluの処理結果であるyを再度l1の引数に足し込むことを記述している。
第8行~第10行については、図13に示したソースコードにおける第11行~第13行と同様であるので、詳細な説明を省略する。
次に、本実施形態に係る学習装置の優位性を示すために、図16に例示したソースコードにより実行されるものと等価な処理を従来技術に係るCaffeにより記述した場合について説明する。図18は、従来技術に係るCaffeにより記述されたソースコードにより生成されるニューラルネットワークのネットワーク構成を概念的に示す模式図である。
一実施形態に係る学習装置は、バックワード処理のための参照構造を断ち切る関数を実行することが可能であってもよい。
具体的には、Variableクラスのインスタンスのunchain_backwardメソッドがコールされると、そのインスタンスを起点に入力側へと向かうバックワード処理のための参照構造が断ち切られる。例えば、以下のようなバックワード処理のための参照構造がフォワード処理の実行により生成されていたとする(splitterなどの詳細な構成は省略して示す)。
ここで、A,B,C,DはVariableクラスのインスタンスを表し、Convolution2D, Linear, SoftmaxはFunctionクラスのインスタンスを表す。
B←Linear←C←Softmax←D(出力層)
第9行で実行されるバックワード処理は、成長したバックワード処理のための参照構造に対して実行される。第9行の処理は、ループ内に含まれているため、このループ処理全体の計算時間は、ループサイズの2乗に比例してしまう。
第9行は、第4行以降のループが10回実行される度に、第10行~第12行の処理が実行されることを記述している。
第11行は、unchain_backwardをコールし、lossを起点にバックワード処理のための参照構造を破棄している。これにより、ループ処理全体の計算時間を短く抑えることができる。
さらに、別の実施形態では、特定のFunctionについて重みの更新を行わないようにすることを目的として、unchain_backwardを用いることも可能である。
一実施形態に係る学習装置は、Variableクラスのインスタンス初期化時にvolatile属性を指定することができる。volatile属性が有効な場合には、そのVariableを入力するフォワード処理についてバックワード処理のための参照構造は生成されない。
最も好ましい実施形態として、Pythonにより記述されたソースコードが学習装置に入力される実施形態を説明してきたが、本明細書に開示された技術は、Pythonにより記述されたソースコードを用いた場合のみに限定されるものではない。すなわち、本明細書に開示された技術は、学習装置が各コードを実行した時点においてそのコードに記述されたフォワード処理の出力値を入力値に基づいて計算すること、学習装置が各コードに記述されたフォワード処理を実行する度にバックワード処理のための参照構造を生成(してこの参照構造に基づいてバックワード処理を実行可能に)すること、及び、制御構文を用いてニューラルネットワークの構成を定義すること、のうちの少なくとも1つを実現することが可能なPythonと等価なプログラミング言語(例えば、R、Julia、Sparkz及びMLib等)により記述されたソースコードを用いた場合にも、同様に適用可能なものである。
1.背景
ディープラーニング(深層学習)は、その高い性能を得られる反面、大規模な演算量及びメモリ使用量、並びに、学習サンプル量を要求するアルゴリズムである。潤沢な計算資源を安価に得られるGPU及びクラウド、並びに、学習サンプルの共有を可能とするWebインフラの普及が、近年のディープラーニングの隆盛を支える背景にあったといえる。
ディープラーニングのアルゴリズム開発を支援する環境(ライブラリ、フレームワーク)には様々なものが存在する。多くの開発環境はGPUを用いて学習速度を向上させる機能を有している。
しかしながら、こうした分野は、安全性やチップ価格、消費電力などの要請からGPUやクラウドと比べると計算資源に乏しい組み込み環境に依存しているため、高い計算資源を必要とするディープラーニングの応用が遅れている。
組み込み環境へのディープラーニングの応用が遅れている要因は、こうしたアルゴリズムの計算資源への要求が現実的・経済的な組み込み環境の性能を超えているという側面の他に、ソフトウェア環境を初めとしてディープラーニングをサポートする実装が出揃っていない面も挙げられる。
組み込み環境においても、ハードウェアの性能は年々向上しており、ディープラーニングのアルゴリズムにおいても、計算資源への要請を緩和する改良が継続しているので、前者の要因は徐々に解決していくものと考えられる。
GPUベースではありながらディープラーニングのアルゴリズム開発において高い生産性をもたらすフレームワークである上記第1部において述べた実施形態に係る学習装置を、組み込み環境向けに機能拡張することが本課題を解決する上で最適な手段と考えられるので、次段落以降では実施形態に係る学習装置にフォーカスした組み込み環境適応への課題を述べる。
上記第1部において説明した実施形態に係る学習装置は、高度な言語機能やライブラリに依存しているので、この学習装置において動作するアルゴリズムをそのまま組み込み系半導体チップ上で動作させようとすることは、以下のような弊害をもたらす可能性がある。
まずセキュリティ面に関して、ライブラリや言語の規模が大きくなると事実上不可知な実装にアプリケーションが依存する度合いが高まる。それにつれて、そうした実装に含まれる不具合が、そのままチップ製品の不具合となってしまうリスクが高まる。
次に、フットプリント面に関して、ライブラリや言語の実装自体がチップ製品のメモリ資源を圧迫する。
さらに、オーバーヘッド面に関して、高度に抽象化したAPIを持つライブラリ経由では、チップ製品の計算資源をフル活用できない。少なくともニューラルネットワークで必要とされる大規模計算についてはチップに特化した低レベルなパフォーマンスチューニングが必須となる。
以上のような理由から、実施形態に係る学習装置において動作するアルゴリズムをそのまま組み込み系半導体チップ上で動作させるだけでは、製品レベルの要求を満たせない可能性が高い。
実施形態に係る実装手法では、豊富な計算資源を有するパーソナルコンピュータ等において設計した新規のニューラルネットワーク(NN)のアルゴリズムを任意の組み込みチップ(組み込み系半導体集積回路)において製品レベルの要件を満たした上で動作できる状態を最短期間で実現する。そのためには、アルゴリズムを設計する開発者と、ハードウェアを深く意識する開発者とがなるべく独立して仕事を進められることが望ましい。本実施形態では、それを助ける装置(フレームワーク)に関する技術的思想を提案する。
組み込み系チップを開発する際に辿るステップとして、以下の3つのステップが想定される。
ステップI:PC(+GPU)上で実施形態に係る学習装置に用いられるコード(一例としてPythonで記述されたコード)が動いている状態
この状態は、複雑な構成を有するニューラルネットワークを用いたアルゴリズムの設計・検証を少ないコード記述で実現した状態である。これは、上述した「Define-by-Run」という手法のコンセプトである。
ステップII:チップ向けに最適化した実装とPythonコードとが混在した状態
この状態は、実施形態に係る学習装置で設計したアルゴリズムのチップ上での動作確認及びパフォーマンス検証をPythonコードをほとんど変えずに実現した状態である。
ステップIII:チップ向けに最適化した実装のみで実施形態に係る学習装置で設計したアルゴリズムが動作する状態
この状態は、チップとしての製品レベルの仕様要件を満たした上でアルゴリズムが動作する(チップ上で他のモジュールや制御機構とのリアルタイム性の高い協調動作ができる)状態である。
本実施形態に係る実装手法では、実施形態に係る学習装置で新しいアルゴリズムを開発するときに、上記ステップI~IIIのステップ間において、なるべく再修正、再設計及び再学習の手間を省くことにより、短期間で開発を進められるようなフレームワークを提案する。
図20は、本発明の実施形態に係る実装手法のステップIを説明する模式図である。図20に示された構成は、上記第1部において説明した実施形態に係る学習装置が前提としている構成である。すなわち、この構成は、プログラミング言語の一態様としてのPythonで記述されたソースコードが、ライブラリの一態様としてのPyCUDA及びライブラリの一態様としてのnumpy(BLAS)を利用し、これらのライブラリがそれぞれGPU及び汎用計算機をドライブするものである。なお、図20に示された「Chainer」とは、上記第1部において述べた実施形態に係る学習装置において用いられるソースコードを記述するためのフレームワークに対して本件出願人により付された名称である。
図21は、本発明の実施形態に係る実装手法のステップIIを説明する模式図である。図21に示された構成では、Python上でChainerのフロントエンドを実行する。図21に示すように、本実施形態では、Native I/F(例えばC言語など低水準の言語で記載されたChainerの主要機能と同等な実装を呼び出すためのインターフェイス)を設けることで、PC上の実行と組み込みチップ向けに最適化した実行とを同一コードで実行できる。
ChainerのFunction及びOptimizerに対してリファレンスコード(例えばC言語など低水準の言語を想定)を実装する。このリファレンスコードは、numpyなどの外部ライブラリに依存しない形で実装する。また、動的ネットワーク定義に適したメモリプールの仕組みを実装する。また、Function/Optimizerとは別口でnumpyとのデータコンバート関数を作成する。さらに、上記Function/Optimizerの浮動小数点版リファレンスコードを作成する。
さらにまた、上記Function/Optimizerの固定小数点版リファレンスコードを作成する。また、Function/Optimizerとは別口で浮動小数点・固定小数点間のデータコンバート関数を作成する。これは、固定小数点版リファレンスコードを作成する理由は、FPUが付いてないチップも少なくないためである。
上記リファレンスコードを元に各種チップ向けに最適化したコードを実装する。
図23は、本発明の実施形態に係る実装手法のステップIIIを説明する模式図である。図23に示すように、Chainerからネットワーク定義及び重みをバイトコードとして出力するメソッドが追加されている。また、バイトコードを解釈してニューラルネットワークの処理(フォワード処理、バックワード処理、重みの更新)を実行する仮想マシンが設けられる。Native I/Fのチップ向け最適化実装を流用することができる。
(Native IFの構成)
図42は、本発明の一実施形態に係るNative I/Fの構成例を示す図である。
NNアルゴリズム毎に、計算機の種類に非依存のインターフェイスを設ける構成。
NNアルゴリズムを利用する処理系がこのインターフェイスを経由して特定の計算機にアルゴリズムの実行を指示する。
ここでいうインターフェイスとは、入力データの形式と出力データの形式、並びに、入力データの形式の加工方法と出力データの形式の対応を定義する手段。インターフェイスが同一であれば同一の入力に対して同一の出力結果が得られる。例えば、C言語で記載された関数と、その関数宣言が挙げられる。
NNアルゴリズムを利用する側の処理系は、特に限定しない。例えば、NN設計のための既存のフレームワーク(Chainerほか)などがあげられ。また、アルゴリズムの開発と併せて開発される処理系も挙げられる。
ここでいう計算機とは、計算を実行する装置を意味する。計算機は、演算コア、メモリ階層、及び、計算を実行するのに必要なハードウェア資源を含む装置である。
汎用計算機は、一般的に使用される計算機を意味する。Linux(登録商標)OS、及びPythonを含む従来のアルゴリズムが容易に動作する計算機である。
ここでいうアクセラレータとは、NNアルゴリズムの計算を含む特定の計算を高速に実行する装置を意味する。
ここでいうGPUとは、画像処理に特化した計算機だが汎用的計算を実行する能力も持つ計算機である。GPUは、前記アクセラレータの一形態も含む。CUDAなどのソフトウェア資産があるので、NNアルゴリズムを実装する容易さは、汎用計算機の場合と、一般的なアクセラレータの場合の中間程度である。
(NNによる識別・学習を実行するための構成)
図43は、本発明の一実施形態に係るNNによる識別・学習を実行するための構成例を示す図である。
Native I/Fは、少なとも、Forward処理部を有する。この構成によって、Native I/Fは、NNアルゴリズムを用いて、識別処理を実行することができる。
更に、Native I/Fは、少なくとも、Forward処理部、Backward処理部、重みの更新アルゴリズムの内部状態初期化処理部、及び重みの更新処理部を有する。かかる構成によって、Native I/Fは、NNアルゴリズムを用いて識別処理及び学習処理を実行することができる。
Forward処理部、及び Backward処理部は、レイヤーアルゴリズム毎に含まれる。重みの更新アルゴリズムの内部状態初期化処理部、及び重みの更新処理部は、重みの更新アルゴリズム毎に含まれる。
更に、Native I/Fは、レイヤーアルゴリズム毎に、Forward処理呼び出しインターフェイス、及び、Backward処理呼び出しインターフェイスを、並びに、重みの更新アルゴリズム毎に、重みの更新アルゴリズムの内部状態初期化処理インターフェイス、及び、重みの更新処理呼び出しインターフェイスを、有する。
更に、Native I/Fを通じて呼び出される側の実装は、NativeI/F呼び出し管理部を有する。かかる構成によって、Native I/Fを通じて呼び出される側の実装は、NativeI/Fのパラメータの違いによって、Native I/Fの動作を最適に実行できる実装を変えることができる。因みに、NativeI/Fの動作を実行できる実装が存在しない場合、該Native I/Fの呼び出し管理部は、その呼び出し元にエラーを返す。したがって、Native
I/Fを通じて呼び出される側の実装は、その動作を最適に実行できる実装を選択して実行することができる。
(NNによる識別・学習を実行するための構成1;多次元配列を管理する構成(多次元配列管理部)の場合)
図44は、本発明の一実施形態に係る多次元配列を管理する構成例を示す図である。
Native I/Fは、更に、多次元配列管理部を有する。該多次元配列管理部は、多次元配列の生成、破棄、属性(軸数、軸毎の要素数)取得、集計結果(軸毎の総和や平均、分散など)取得、及び、多次元配列同士の要素ごとの四則演算、を含む群から選択される少なくとも1つを行うことができる。
(データを共有するための構成)
(データを共有するための構成1;データ表現変換部の場合)
図45は、本発明の一実施形態に係るデータ表現変換部の構成例を示す図である。
更に、Native I/Fは、データ表現変換部を有する。該データ表現変換部は、Native I/Fに特定の計算機に依存するデータ表現(デバイス依存データ表現)と、特定の計算機に依存しないデータ表現(デバイス非依存データ表現)を相互に変換することができる。
(データを共有するための構成2;+外部記憶媒体を有する場合)
更に、Native I/Fを呼び出す側の処理系は、外部記憶媒体を有する。該外部記憶媒体は、デバイス非依存データに変換された重みデータを保存することができる。
(データを共有するための構成3;+通信部を有する場合)
図46は、本発明の一実施形態に係る通信部の構成例を示す図である。
更に、Natieve I/Fを通じて呼び出される側の実装は、通信部を有する。該通信部は、呼び出される側の実装にNativeI/Fの呼び出し情報を通信することができる。また、NNアルゴリズムを利用する任意の処理系が、呼び出し情報の通信の有無と関係ないNative I/Fを呼び出そうとするとき、該NativeI/Fを通じて呼び出される側の実装は、必要に応じて最適な通信処理を実行することができる。この工程によって、計算機の物理的な距離、メモリ共有の有無、又は、通信プロトコルの違いを、NNアルゴリズムを利用する任意の処理系から隠蔽することができる。
例えば、呼び出し情報の通信の有無と関係ないNative I/Fは、レイヤーアルゴリズムを実行するためのインターフェイス、重みの更新アルゴリズムを実行するためのインターフェイス、又は、データ表現変換を実行するためのインターフェイスなどがある。
(Native I/Fの拡張版の構成)
(Native I/Fの拡張版の構成1;型変換部、並びに、浮動小数点用のNNアルゴリズム実行部、及び/又は、固定小数点用のNNアルゴリズム実行部を有する場合)
図47は、本発明の一実施形態に係る浮動小数点及び固定小数点の実行部及び型変換部の構成例を示す図である。
Native I/Fは、型変換部、並びに、浮動小数点用のNNアルゴリズム実行部、及び/又は、固定小数点用のNNアルゴリズム実行部を有する。
例えば、型変換部のみを有する計算機B、浮動小数点用のNNアルゴリズム実行部のみを有する計算機A、又は固定小数点用のNNアルゴリズム実行部のみを有する計算機Cがある。かかる計算機A, 計算機B、及び計算機Cを、Native I/Fの基本構成と組み合わせとき、該計算機Aが生成した浮動小数点型のデータは計算機Bに転送される。引き続き、該計算機Aから該計算機Bに転送されたデータは、該計算機Bによって固定小数点型のデータに変換される。そして、該計算機Bによって変換された固定小数点型のデータは、該計算機Cに転送される。そして、該計算機Bから転送された固定小数点型のデータは、該計算機Cの入力データになり、NNアルゴリズムの全体動作が実行される。かかる工程は逆順に実行することもできる。
(Native I/Fの拡張版の構成2;メモリプールモジュールを有する場合)
図48は、本発明の一実施形態に係るメモリプールの構成例を示す図である。
更に、Native I/Fを通じて呼び出される側の実装は、メモリプールモジュールを有する。該メモリプールモジュールは、動的なメモリ管理を実現することができる。
(Native I/Fの拡張版の構成3;複数のNNアルゴリズムを融合したアルゴリズム実行部を有する場合)
図49は、本発明の一実施形態に係る複数のNNアルゴリズムを融合したアルゴリズム実行部の構成例を示す図である。
更に、Native I/Fは、複数のNNアルゴリズムを融合したアルゴリズム実行部を有する。該複数のNNアルゴリズムを融合したアルゴリズム実行部は、頻出するNNアルゴリズムの組み合わせに対して、複数のアルゴリズムを同時に実行する。
(Native I/Fの拡張版の構成4;多次元配列データ圧縮解凍部を有する場合)
図50は、本発明の一実施形態に係る多次元配列のデータ通信量削減部の構成例を示す図である。
更に、Native I/Fを通じて呼び出される側の実装は、多次元配列データ圧縮解凍部を有する。該多次元配列データ圧縮解凍部は、前記通信部に備わる。
(Native I/F+Chainer実行部の構成)
図51は、本発明の一実施形態に係る既存実行部との連携例を示す図である。
(Native I/F+Chainer実行部の構成1;バイトコード生成部と仮想マシンを有する場合)
図53は、本発明の一実施形態に係るバイトコード生成部と仮想マシンの構成例を示す図である。
更に、Chainer実行部は、バイトコード生成部を有する。該バイトコード生成部は、Backwardの計算手順と重みを入力し、バイトコードとして出力する。例えば、バイトコード生成部を ChainerのPython層に有する。
また、Native I/Fは、仮想マシンを有する。該仮想マシンは、バイトコードを解釈してNNアルゴリズム処理を実行させる。ここでいうNNアルゴリズム処理とは、フォワード処理、バックワード処理、及び、重みの更新のいずれか、又は、その組み合わせである。
(Native I/F+Chainer実行部の構成2;比較部を有する場合)
図54は、本発明の一実施形態に係る比較部の構成例を示す図である。
更に、Chainer実行部は、比較部を有する。該比較部は、同一のNNアルゴリズムに対応する既存実行部とNative層実行部の入出力結果を比較する、又は、同一のNativeI/Fにおいて異なる実装のNative層実行部を呼びだすNative層実行部同士の入出力結果を比較する。
(Native I/F+Chainer実行部の構成3;関数合成部を有する場合)
図55は、本発明の一実施形態に係る関数合成部の構成例を示す図である。
更に、Chainer実行部は、関数合成部を有する。該関数合成部は、Backwardの計算手順を入力し、「複数のアルゴリズムを同時に実行するNative I/F」が対応可能なFunctionクラスのインスタンスの組み合わせを、「複数のアルゴリズムを同時に実行するNative I/F」に対応したFunctionクラスのインスタンスに置換する。しかし、Backwardの計算手順を実行する計算機のためのNative層の実装において、「複数のアルゴリズムを同時に実行するNative I/F」が存在しない場合は、上記の置換はしない。
ここでいう置換は、Backwardの計算手順を文字列として見立てた場合、部分一致検索により実行することができる。
例えば、該関数合成部は、ChainerのPython層に備わる。
(Forward処理実行を特化させる最適化装置の構成)
(Forward処理実行を特化させた最適化装置の構成1;重みの最適化処理手段を有する場合)
更に、Chainer実行部は、重みの最適化処理手段を有する。該重みの最適化処理手段は、Functionクラスに適した重みの最適化処理を実行する。
(Forward処理実行を特化させた最適化装置の構成2;データメモリ領域の再利用手段を有する場合)
更に、Chainer実行部、並びにNative I/Fは、データメモリ領域の再利用手段を有する。該データメモリ領域の再利用手段は、レイヤー間で入出力されるデータのメモリ領域を再利用する。該再利用手段は、Forward処理実行部、又は、前記仮想マシンに備わる。
例えば、仮想マシンのForward処理を実行するインターフェイス(NativeI/Fにて定義されるもの)の引数にForward処理のみの実行であることを識別するためのフラグを設ける。この処理を実行する条件は、ChainerのFunctionクラスのインスタンスが入力するVariable変数にvolatile属性が指定されているとき、又は、仮想マシンのForward処理が実行される際にForward処理のみの実行であることを識別するためのフラグが有効となっているとき、である。
(NativeIFの構成による作用)
NNのアルゴリズムを設計・利用する開発者と、計算機のハードウェア構成を深く意識する開発者の分業が容易となる。
例えば、アルゴリズムを設計・利用する開発者は、実行したいNNアルゴリズム毎のインターフェイスの同一性がNative I/Fにより保証されるので、Native I/Fを呼び出す側のソフトウェアを変更することなく様々な計算機で処理を実行することができる。
具体的には、特定の計算機に自ら開発しているソフトウェアが依存してしまうリスクを下げることができる。その結果、計算機の価格や特定用途での弱み強みといったより本質的な基準で計算機を選別することができるようになる。
計算機のハードウェア構成を深く意識する開発者にとっては、 Native I/Fに対応した計算機に最適化な実装を提供すれば、幅広いNNアルゴリズムの利用者に対して自ら開発した計算機を利用してもらえる。
(NNによる識別・学習を実行するための構成による作用)
NNのアルゴリズムを設計・利用する開発者は、NNアルゴリズムを利用する任意の処理系を用いて、NativeI/Fに具備されているインターフェイスを呼び出すことにより、NNのアルゴリズム全体動作を実現することができる。
また、NNのアルゴリズムを設計・利用する開発者は、計算機の具体的な構成を意識せずとも利用している計算機に最適な実装を用いて、NNのアルゴリズム全体動作を実現することができる。
(NNによる識別・学習を実行するための構成1による作用;多次元配列を管理する構成(多次元配列管理部)の場合)
NNのアルゴリズムを設計・利用する開発者は、NNアルゴリズムの全体動作を実行するとき、余計なデータ変換処理を経ることなく任意のNNアルゴリズムを組み合わせて実行することができる。
このとき、任意のNNアルゴリズムの処理結果である多次元配列の内容の集計結果を確認することにより、NNアルゴリズムが意図した通りの計算を実行できているかどうかを確認することができる。
(データを共有するための構成による作用)
作用1-2-1
(データを共有するための構成1による作用;データ表現変換部の場合)
デバイス非依存データ表現を経由することで、異なるハードウェア構成の計算機の間でNNのアルゴリズム全体動作を実現するのに必要なデータを交換することができる。
計算機毎に固有の情報を隠すことができる。
(データを共有するための構成2;+外部記憶媒体を有する場合)
重みのデータをデバイス非依存データ表現に変換した後、外部記憶媒体に保存することによって、特定の計算機を用いて学習済みの重みを用いて、任意の計算機上で識別処理を実行することができる。
(データを共有するための構成3による作用;+通信部を有する場合)
計算機のハードウェア構成や、物理的な距離、メモリ共有の有無に関わらず、NNのアルゴリズム全体動作を実現するのに必要なデータを交換することができる。
NNアルゴリズムを利用する側の処理系が動作可能な計算機から、NNアルゴリズムを利用する側の処理系が動作不能な計算機に実装されたNNアルゴリズム実装を呼び出すこともできる。
したがって、コンピュータネットワークに繋がれた複数台の計算機を用いてNNのアルゴリズム全体動作を実現することができる。
(Native I/Fの拡張版の構成による作用)
(Native I/Fの拡張版の構成1による作用;型変換部、並びに、浮動小数点用のNNアルゴリズム実行部、及び/又は、固定小数点用のNNアルゴリズム実行部を有する場合)
浮動小数点演算器(FPU)を持たない計算機と、FPUを持つ計算機が混在するハードウェア構成において、それぞれの計算機に適したデータ型を用いて、NNのアルゴリズム全体動作を実現することができる。
浮動小数点演算、又は、固定小数点演算を用いて、NNのアルゴリズム全体動作を実現できる。
具体的には、計算機Aは、計算機Aの浮動小数点用のNNアルゴリズム実行部が生成した浮動小数点型データを計算機Bに転送する。次に、計算機Bは、計算機Aから転送された当該浮動小数点型データを型変換部により固定小数点型データに変換した後、当該固定小数点型データを計算機Cに転送する。
計算機Cは、計算機Cの固定小数点用のNNアルゴリズム実行部が生成した固定小数点型データを計算機Bに転送する。次に、計算機Bは、計算機Cから転送された当該固定小数点型データを型変換部により浮動小数点型データに変換した後、当該浮動小数点型データを計算機Aに転送する。
(Native I/Fの拡張版の構成2による作用;メモリプールモジュールを有する場合)
動的なメモリ管理の仕組みに依存した処理系が、データの生成と破棄を含むNativeI/Fを呼び出しNNアルゴリズム全体動作を実行するとき、その動作を軽量に実現することができる。
(Native I/Fの拡張版の構成3による作用;複数のNNアルゴリズムを融合したアルゴリズム実行部を有する場合)
グローバルなメモリへの不要なアクセスを回避することができる。また、関数呼び出しのオーバーヘッドを削減できる。したがって、頻出するNNアルゴリズムの組み合わせを高速に実行することができる。
(Native I/Fの拡張版の構成4による作用;多次元配列データ圧縮解凍部を有する場合) コンピュータネットワークに繋がれた複数台の計算機を用いてNNのアルゴリズム全体動作を実行させるとき、多次元配列のデータ通信量を削減することができる。したがって、動作速度を向上させることができる。
(Native I/F+Chainer実行部による作用)
NativeI/FのサポートがあるNNのアルゴリズムと、NativeI/FのサポートのないNNのアルゴリズムとを組み合わせて、NNの全体動作を定義及び実行することができる。
NativeI/Fのサポートを得ることができ次第、適宜NativeI/Fに置き換えることによって、NN全体動作を実行することができる。したがって、既存のソフトウェアの修正が不要になる。
NativeI/Fを組み合わせる場合も、Define-by-runの既存のメリットを享受することができる。
(Native I/F+Chainer実行部の構成1による作用;バイトコード生成部と仮想マシンを有する場合)
Chainer実行部がバイトコード生成部を有し、NativeI/Fが仮想マシンを有することによって、高度なライブラリやプログラミング言語への依存度を減少させることができる。よって、アクセラレータなどの貧弱な実行環境を含む様々な計算機においても、製品レベルの要件を満たしつつ、Chainerで設計したNNの全体動作を実行することができる。
(Native I/F+Chainer実行部の構成2による作用;比較部を有する場合)
比較部は、同一のNNアルゴリズムに対応する既存実行部とNative層実行部の入出力結果を比較する、並びに、同一のNativeI/Fにおいて異なる実装のNative層を呼びだすNative層実行部同士の入出力結果を比較する。
かかる比較部を有することによって、浮動小数点用のNNアルゴリズム実行部の処理結果の精度と、固定小数点用のNNアルゴリズム実行部の処理結果の精度を比較することができる。したがって、NNのアルゴリズムが正しく計算できることが既に十分テストされた実行部の処理結果と、新規に作成するNative層の処理結果とを比較することができる。故に、新規に作成するNative層の実装がNNのアルゴリズムを正しく計算することが可能であることを保証することができる。
(Native I/F+Chainer実行部の構成3による作用;関数合成部を有する場合)
関数合成部は、Backwardの計算手順を入力し、「複数のアルゴリズムを同時に実行するNative I/F」が対応可能なFunctionクラスのインスタンスの組み合わせを、当該「複数のアルゴリズムを同時に実行するNative I/F」に1:1対応したFunctionクラスのインスタンスに置換する。尚、当該「複数のアルゴリズムを同時に実行するNative I/F」が存在しない場合、かかる関数合成部は、上記の置換を実行しない。
かかる関数合成部をChainerのPython層の構成に有することによって、「複数のアルゴリズムを同時に実行するNative I/F」の有無に関わらず、Backwardの計算手順が自動的に加工される。かかるBackwarodの計算手順の加工によって、「複数のアルゴリズムを同時に実行するNative I/F」が存在する場合は、当該Native I/Fが呼び出され、対応したFunctionクラスのインスタンスに置換される。これによって、高速なNNのアルゴリズム全体動作を常に実現することができる。
また、「複数のアルゴリズムを同時に実行するNative I/F」が存在しないような関数の組み合わせであっても、関数合成部がメリットを発揮する場合もある。具体的には、Forward処理に限定した場合のConvolution2D+BatchNormalizationの組み合わせや、Linear+BatchNormalizationの組み合わせである。
BatchNormalizationは、その入力となる多次元配列の一つ一つの要素に対して、NNの学習を通じた長期的な統計情報に基づいて、要素間の分散を揃え、平均をとり除く処理である。学習するのではなくForward処理のみを行う場合であれば、分散や平均を更新する必要はなく、例えばaとbを定数とすればy=ax+bのような変換を配列要素ごとに行う処理に過ぎない。Linear処理は行列積を行う処理である。また、Convolution2Dは畳み込みと行列積の組み合わせの計算を行う処理である。これらの処理は先に例示したy=ax+bのような変換を内包しているので、LinearやConvolution2Dの重みやバイアスを調整することで、これらのFunctionの出力結果をBatchNormalizationへ入力し処理するのと同じ結果を得ることができる。
関数合成部はこうした重みやバイアスの調整を行うことで、Convolution2D+BatchNormalizationを単独のConvolution2Dに変換することができる。Linear+BatchNormalizationから単独のLinearへの変換も同様である。
(Forward処理実行に特化した最適化装置の構成による作用)
Forward処理における重みの情報量、あるいは入力データのデータメモリ量を削減してForward処理を実行することによって、メモリを削減することができる。また、重みの要素数を削減したり0の重みを計算しないでFoward処理を実行することによって、計算量を削減することができる。
(Forward処理実行を特化させた最適化装置1による作用;重みの最適化処理手段を有する場合)
Forward処理実行に特化した重みの最適化処理手段を、ChainerのFunctionクラスに有することによって、学習済みのネットワークの構成に含まれる任意のFunctionクラスのインスタンスに対して、重みの最適化処理を実行することができる。このように、重みの最適化処理を実行することができることで、Forward処理の際のメモリや計算量を削減することができる。これによって、NNのアルゴリズム全体動作を高速に実行することができる。
(Forward処理実行を特化させた最適化装置2による作用;データメモリ領域の再利用手段を有する場合)
Forward処理のみを実行するフラグを、Forward処理の実行部(Chainer、又は、仮想マシン)に引数として与えることによって、Forward処理の際のメモリを削減することができる。これによって、NNのアルゴリズム全体動作を高速に実行することができる。
実施形態に係る実装手法は、第1の手法及び第2の手法を含む。
5-1.第1の手法について
図24は、本発明の一実施形態に係る実装手法(第1の手法)に用いられる実装装置の構成例を示す模式図である。図24に示すように、一実施形態に係る実装装置は、主に、評価ボード(マザーボード)100と、評価ボード100に着脱自在に搭載された組み込み系チップ(組み込み系半導体集積回路)200と、を含む。
アクセラレータ202は、評価ボード100(の通信I/F103)から通信I/F204を介して受信したソースコード(例えばC言語やアセンブラ等)で記述されたソースコード)をメインメモリ203にロードし、ロードしたソースコードに含まれる各コードを実行する。メインメモリ203は、CPU201及びアクセラレータ202が実行するソースコードを格納するために用いられ、例えば、DRAMによって構成される。
まず、ステップ301において、第1のプログラミング言語(例えばPython等)で記述されたソースコードをパーソナルコンピュータ等において実行させる。開発者等は、当該実行結果に基づいて、当該ソースコードがパーソナルコンピュータ等において動作するか否かを確認する。ここでいうパーソナルコンピュータ等とは、豊富な計算資源を有する計算機をいい、例えば、上記第1部において説明した実施形態に係る学習装置を含むものである。このステップ301においてソースコードがパーソナルコンピュータ等において動作する状態とは、上記「4-1」において説明したステップIと同一の状態である。
次に、上記ステップ302~307では、関数の呼出し側は、依然としてPython等により記述されており、被呼出し側は、Python等により記述されたものとC言語等により記述されたものとが混在した状態となっている。すなわち、ステップ307が完了した状態では、組み込み系チップ200は、Python等及びC言語等の2つのソースコードによって動作する状態にある。
図27は、本発明の一実施形態に係る実装手法(第2の手法)に用いられる実装装置の構成例を示す模式図である。第2の手法において用いられる実装装置(図27)が、第1の手法において用いられる実装装置(図24)と異なるのは、組み込み系チップ200がCPUを備えない点である。第2の手法では、第1の手法で組み込み系チップ200のCPU201が担っていた動作は、外部に設けられた図示しない計算機(パーソナルコンピュータ等)に設けられたCPUによりなされる。例えば、ここでいう計算機(パーソナルコンピュータ等)は、上記第1部において説明した学習装置(図11に例示したパーソナルコンピュータ等)であってもよい。
次に、上述した実施形態に係る実装装置100が上記「5」において説明した手法を実現するために必要な構成について説明する。
(クラスとモジュールの違い)
モジュールは特定の目的を実現するために定義・実装された手続きとデータの集合 (特定のプログラミング言語による支援の有無とは無関係の概念)
クラスはPythonなどのオブジェクト指向言語の支援を用いて定義・実装されたモジュール
Native層とは、Native I/Fとそこから呼び出される実装(ソフト及びハード)の階層をいう。Python層とは、Python言語上で実行されることが想定されるソフトウェア階層をいう。現状ChainerはPython言語で記述されているが、将来Chainerが別のプログラミング言語に移植されることも考えられる。ここでPython層として説明する機能は必ずしもPython言語に特化することを意味するわけではない。Python層及びNative層の役割分担として、Python層はよりアルゴリズム設計に適した抽象化レベルの高い開発環境を想定し、Native層はよりハードウェア構成を具体的に意識する抽象化レベルの低い開発環境を想定する。
図52は、本発明の一実施形態に係る既存実行部との連携例を示す図である。
実行部とはニューラルネットのアルゴリズムを実際に計算するためのFunction/Optimizerクラスのメソッドである。
既存実行部とは汎用計算機実行部もしくはGPU実行部もしくはその両方である。汎用計算機実行部は、汎用計算機を用いてNNのアルゴリズムを計算する。GPU実行部はGPUを用いてNNのアルゴリズムを計算する。
Native実行部は、Native層の実装を用いてNNのアルゴリズムを計算する。Native層は計算機の種類毎に実装するので、全ての計算機の種別(汎用計算機、GPU、アクセラレータ)についてNativeI/Fを通じて動作可能である。
図28は、本発明の一実施形態に係る実装装置が有する機能を概念的に示す模式図である。図28に示すように、実装部400は、主に、駆動部401と、Functionクラス/Optimizerクラス402と、汎用計算機実行部403と、GPU実行部404と、Native層実行部405と、汎用計算機用多次元配列406と、GPU用多次元配列407と、Native用多次元配列408と、Variableクラス409と、を含む。
次に、上述したNative層実行部405の構成について説明する。図29は、本発明の一実施形態に係る実装装置に含まれるNative層実行部の構成例を示す模式図である。
図29に示すように、Native層実行部405は、Python層において、主に、NativeDeviceクラス501と、NativeArrayクラス502と、Functionクラス/Optimizerクラス503と、バイトコード生成部504と、を含む。なお、図29に記載されたFunctionクラス/Optimizerクラス503と図28に記載されたFunctionクラス/Optimizerクラス402とは同一の構成要素であり、図29に記載されたNativeArrayクラス502と図28に記載されたNative用多次元配列408とは同一の構成要素である。
さらに、Native層実行部405は、Native層において、主に、デバイス管理モジュール505と、データ変換モジュール506と、多次元配列モジュール507と、Functionモジュール/Optimizerモジュール508と、仮想マシンモジュール509と、メモリプールモジュール510と、を含む。
バイトコード生成部は、バイトコードを生成する。
なお、図29に例示した各構成要件の詳細については後述する。
ディープラーニングは研究開発が盛んな発展途上の技術であるので、組み込み系チップ向けの開発期間中に従来よりも優れた性能を持つ新規のレイヤーアルゴリズムが発明され、こうした新規のアルゴリズムを開発中のソフトウェア、あるいはハードウェア実装に取り込む需要が発生することが想定される。
新規のレイヤーアルゴリズムを含むニューラルネットワークの構成を組み込み環境で製品レベルの仕様を満たした上で動作する状態を実現するためには以下のような開発ステップを踏む必要がある。
1.GPUなど潤沢な計算資源を得られる環境でアルゴリズムの実装と検証を行う。
2.1で実装検証したアルゴリズムを組み込みチップで既に最適化実装が終わったニューラルネットワークのモジュールと結合し動作検証を行う。その結果に応じて該当チップ向けに特化した最適化を1で実装検証したアルゴリズムに適応する。
3.2の作業完了後、該当チップ向けに最適化されたニューラルネットの実装のみを用いて、これ以外のモジュール(センサーやモータの制御系など)とも結合した上で製品レベルの仕様を満たしているか否かを様々な試験項目により検証する。
前段落で説明したステップ1、2間で1のステップで作成したアルゴリズム実装コードを2のために流用でき、ステップ1、2間の動作結果の違いも容易に比較検討できる。さらに、ステップ2、3間では、ステップ2のために作成した最適化実装をステップ3のために流用でき、逆にステップ3で見つかった最適化実装に関する不具合修正もステップ2のために流用することができる。その結果、新規のレイヤーアルゴリズムを含むニューラルネットの構成を組み込み環境で製品レベルの仕様を満たした上で動作する状態を最小の開発コストで実現できる。
本発明の実施形態を詳細説明する上で以下の用語を定義する。
「全体動作」とは、フォワード処理単独、又は、フォワード処理、バックワード処理及び重みの更新処理を繰り返して実行するような処理単位を表す。この全体動作は、典型的なニューラルネットワークの学習及び識別の実施形態として想定されるものである。
次に、図29に例示した実施形態に係る実装装置のNative層に関する構成について説明する。
8-1.デバイス管理モジュール
デバイス管理モジュール505は、デバイス(最適化実装に依存するソフトウェア及びハードウェア状態)の初期化と解放処理を行う。具体的には、デバイス管理モジュール505内で行う処理は、デバイスの形態次第で異なるが、典型的な処理内容として例えば後述するメモリプールの確保や解放を行う。デバイスは、Chainer及びPythonを実行する汎用計算機と同一チップや、同一基板上に存在する必要はない。別基板にあるデバイスと通信し初期化・解放するような最適化実装も可能である。
(例1)Device* chnr_init_device(void)
これによりデバイスを初期化することができる。
(例2)void chnr_release_device(Device* device)
これによりデバイスを解放することができる。
Functionモジュール508は、ニューラルネットワークのレイヤーごとの計算を行う関数群であり、レイヤーの種類別に以下の関数を定義する。
chnr_forward_xxxx(…)
-フォワード処理(浮動小数点版)を実装
chnr_backward_xxxx(…)
-バクワード処理(浮動小数点版)を実装
chnr_forward_xxxx_fx(…)
-フォワード処理(固定小数点版)を実装
chnr_backward_xxxx_fx(…)
-バックワード処理(固定小数点版)を実装
ここで、xxxxはレイヤーの種類別に付与される名称を表す。
各関数での具体的な処理内容は、上記第1部の上記「2-6」~「2-12」において例示したものを含む。
多次元配列モジュール507は、Native層のFunctionの間で入出力される多次元配列を管理する。多次元配列モジュール507は、任意のサイズ・次元数を管理できる。また、多次元配列モジュール507は、後述するように、Numpy(Chainerが依存しているpython層の多次元配列クラス)やGPU向け多次元配列ライブラリとの相互変換の仕組みを有する。
さらにまた、この多次元配列モジュール507は、浮動小数点型だけではなく固定小数点型も保持できる。これにより、FPU(浮動小数点演算ユニット)を持たないハードウェアでもニューラルネットの計算を容易に実現できる。また、この多次元配列モジュール507は、浮動小数点の多次元配列との相互変換の関数を有する。
本発明の一実施形態に係る実装装置の多次元配列モジュールの構造体定義例が図30に示されている。
次に、関数定義例は以下のとおりである。
(例1)MDArray chnr_create_md_array(dimensions[], numaxis, type)
これにより、多次元配列を生成・初期化することができる。
(例2)void chnr_delete_md_array(MDArray* mdrray)
これにより、多次元配列を削除することができる。
(例3)void chnr_md_array_add(MDArray* dst, MDArray* a, MDArray* b)
これにより、多次元配列の要素同士の加算を行うことができる。
多次元配列の実体を格納するメモリ領域の管理(生成・破棄)はNative層で実現する。組み込み環境の場合、Linux(登録商標) OSなどが標準提供するメモリ管理機構(malloc/free)では管理できないようなメモリ構成を有する環境も考えらえる。Python層では、アルゴリズム開発、Native層では、ハードウェアを強く意識する開発というソフトウェア階層の役割分担を考えると、こうしたハードウェア環境の特徴に対して責任を持つ管理機構はNative層で実装することが適切である。後述する仮想マシンを利用する場合(Python層への依存を取り除いた場合)も、このメモリ管理機構を使い回すことができる。
Python層でNative層の多次元配列をラップするクラスを用意し、メモリ領域の生成・解放タイミングはこのPythonクラスのインスタンス生存期間に一致させる。Python上のコードで多次元配列を自然に扱うために、こうした仕組みが必要となる。「Define-by-Run」の機能もPythonのメモリ管理機構に依存している。
メモリプールモジュール510は、一旦確保したメモリ領域を使い回すことで、コスト(処理サイクル数など)が高いメモリ管理機構のコール回数を削減するための仕組みである。
関数定義例は以下のとおりである。
(例1)void chnr_momory_pool_init(MemoryPool* momory_pool)
これにより、メモリプールを初期化することができる。
(例2)void chnr_momory_pool_release(MemoryPool* momory_pool)
これにより、メモリプールを破棄することができる。
(例3)void* chnr_momory_pool_alloc_buffer(MemoryPool* momory_pool, int byte_size, void* old_addr)
これにより、メモリを確保することができる。
(例4)void chnr_momory_pool_free_buffer(MemoryPool* momory_pool, void*addr) これにより、メモリを解放することができる。
Chainerの「Define-by-Run」はPythonが持つ動的メモリ管理の仕組みに依存している。その例(Linear Functionのフォワード処理)を図32に示す。この例では、3行目のWx = x.dot(self.W.T)の記述でWxのインスタンス(中身は多次元配列)が新たに生成されている。Wxはどの変数からも参照されなくなった時点でPythonのメモリ管理機構により自動破棄される。
Functionが出力するデータ(上記の例ではWx)のサイズは入力データサイズやパラメータに依存して動的に変更可能であって、その実体(メモリ領域)の確保もフォワード処理やバックワード処理のコードフロー内で実行される。「Define-by-Run」(ネットワーク構成の実行時に定義)を実現するためには、こうした必要なタイミングで必要なサイズだけメモリを確保する仕組みが必要である。
Python層でNative層の多次元配列をラップするクラスを用意し、Native層の多次元配列の生存期間をPython層と一致させる工夫をすることで、「Define-by-Run」の柔軟性を享受しながらNative層の実装を利用することができる。
しかしながら、通常Functionは高い頻度でコールされるため、その度にNative層のmallocやfreeなどコストの高いメモリ管理機構をコールしてしまうと、処理速度の低下を招く可能性がある。このため、一旦確保したメモリ領域を使い回す機能(メモリプール)を用意する必要が生じる。
構造体定義例を図33に示す。
メモリ確保時の処理フローは次のとおりである。
1.Buffer_sizeの配列の中から、解放済みフラグが1でかつ前回確保したときのサイズが今回確保したいサイズと一致しているインデックスを検索し、見つかれば、解放済みフラグを0にセット後、同じインデックスのbuffer_addrの値(メモリバッファのアドレス)を返す。ここで、解放済みフラグは例えばbuffer_size配列要素の符号ビットで管理する。前回確保したときのサイズとアドレスの組み合わせにより配列要素を検索することで、アドレスの入れ替わりを少なくすることもできる。
2.上記一致しているインデックスが見つからなければ、実際にメモリを確保(mallocなどをコール)して、そのアドレスとサイズを配列に加えた後、アドレスを返す。
メモリ解放時の処理として、buffer_addrの配列の中から解放すべきアドレスを検索し、そのアドレスが見つかれば、解放済みフラグを1にセットする。
メモリプール解放時の処理として、buffer_addrの配列の中からアドレスが設定されている要素に対してメモリの解放(free関数のコールなど)を行う。
大半のニューラルネットワークにおいては、メモリサイズの組み合わせは、学習のイテレーション毎に変化することはなく固定的なので、上述のようなメモリプールの実装例を用いることで、mallocなどの呼び出しを最初のイテレーション時だけにとどめることができる。
Optimizerモジュール508は、ニューラルネットワークの重みを有するレイヤーごとに重み更新を行う関数群である。Optimizerモジュール508は、重みの更新アルゴリズム別に以下の関数を定義する。
(例1)chnr_op_init_state_xxxx(…)
これにより、重み更新アルゴリズムの内部状態初期化処理を実装(浮動小数点版)することができる。
(例2)chnr_op_update_one_xxxx(…)
これにより、重み更新処理を実装(浮動小数点版)することができる。
(例3)chnr_op_init_state_xxxx_fx (…)
これにより、重み更新アルゴリズムの内部状態初期化処理を実装(固定小数点版)することができる。
(例4)chnr_op_update_one_xxxx_fx (…)
これにより、重み更新処理を実装(固定小数点版)することができる。
ここで、xxxxは重みの更新アルゴリズム別に付与される名称を表す。
なお、重みの更新アルゴリズムは、上記第1部の上記「2-13」において説明したものを含むことができる。
データ変換モジュール506は、データ形式の変換を行う関数群である。
関数定義例は以下のとおりである。
(例1)chnr_float_to_fixed(MDArray* dst, MDArray* src, int Q)
これにより、浮動小数点型から固定小数点型へ変換することができる。
(例2)chnr_fixed_to_float(MDArray* dst, MDArray* src)
これにより、固定小数点型から浮動小数点型へ変換することができる。
(例3)chnr_host_to_device(MDArray* dst, float* src_data, int src_dimensions[], int src_num_axis, int Q, int async, …)
これにより、デバイス非依存データ表現(後述)からデバイス依存データ表現(後述)へ変換することができる。
(例4)chnr_device_to_host(float* dst_data, int dst_dimensions[], int*dst_num_axis, MDArray* src, int async, …)
これにより、デバイス依存データ表現からデバイス非依存データ表現へ変換することができる。
組み込み向け半導体チップには、FPU(浮動小数点演算ユニット)を省いたり、少なくとも大規模並列計算に関してFPUを用いない回路設計とすることで、計算量に対するハードウェア資源(トランジスタ数や消費電力)削減を狙ったものが多く見られる。FPUを用いないでニューラルネットワークなど数値計算のアルゴリズムを実行する場合、整数演算器とシフト演算器を利用して小数点以下の情報を含む数値を表現する固定小数点型と呼ばれるデータ型がよく用いられる。浮動小数点型は、実数値をより直感的に扱えるようにするという意味で、アルゴリズム設計に適したデータ型であり、固定小数点型はハードウェア資源の有効活用に適したデータ型といえる。ニューラルネットワークを設計実行するフレームワーク内にこのようなデータ型間の変換関数を用意しておくことで、ニューラルネットのアルゴリズム開発を、統一された環境下で数理面からハードウェアを意識した実装面へ、型変換の影響度をFunction単位で確認しながら段階的に進めることができる。
デバイス依存データ表現とは、特定の計算機に特化した最適化実装に適したデータ表現をいう。
これら2つのデータ表現を相互変換する関数を用意することで、ハードウェアを強く意識した最適化実装と、アルゴリズムを意識した実装(例えばPythonで記述された数式に近い構造の読みやすいコードなど)を連携して全体動作を実行できる。
(1)メモリ構成
共有メモリに配置するのか?ハードウェア特有のメモリ領域に配置するのか?
(2)メモリアライメント
先頭アドレス、各次元ごとの先頭アドレス、パディング
(3)バイトオーダ
リトルエンディアン、ビッグエンディアン
(4)データ型
固定小数点(Q値)/浮動小数点,バイト幅(32bit, 16bit, 8bit, …)
(5)マルチコア実行におけるデータ入出力のスケジューリング
(6)データ通信
最適化実装を持つデバイスが別チップや別基板などにある場合の通信処理
これまでに説明したNative層の関数群(Native I/F)の実装を以下のような変更を適応することで、別チップや別基板などにあるデバイスと通信しながら全体動作を高速に実行できる
(1)RPC(remote procedure call)
(2)命令キュー
(3)多次元配列のデータ通信量の削減
(4)転送と計算の非同期処理
これらの変更方針について解説するために以下の用語を定義する
「ホストデバイス」:全体動作を実行するデバイス(通常の実装ではPython上でChainerのコードが実行されるデバイス)
「遠隔デバイス」:別チップや別基板などにあるなどの理由で通信処理が必要なデバイス
Native I/Fで定義された関数を呼び出したとき、その処理要件(メモリ確保や演算の実)を直接実行するのではなく、処理要求を表す情報(関数の種類や引数)を生成し、遠隔デバイスへ送信し、遠隔デバイスではその指示に基づいた処理を実行した後、その処理結果をホストデバイスが受信する仕組みを設ける。
命令キュー
RPCによる処理要求の通信は、Native I/Fで定義された関数を呼び出す都度実行するのではなく、処理要求を表す情報を一旦キュー(FIFOバッファ)に蓄えることで通信のスケジュールを効率化する。
多次元配列のデータ通信量の削減
多次元配列は膨大なデータサイズを持つため、その通信量を削減することは全体動作の速度を向上させる上で重要な課題である。通信量を削減するためには大きく以下の2つの方策がある。
(1)多次元配列の転送回数を削減する
(2)個々の多次元配列のデータ通信量を削減する
中間層(ニューラルネットの入力層と出力層以外)のレイヤー間で入出力するデータ及び重みの勾配は、遠隔デバイスのみに存在すればよくデバイス間の通信は不要である。また「重み」についても、ネットワーク構造を定義する最初の段階で遠隔デバイスへ転送し、学習終了時にホストデバイスへ転送すればよい。
データ変換(Converter)モジュール506について説明したデバイス非依存データ表現及びデバイス依存データ表現の変換関数は、このような転送タイミングのマネージを行うのに最適である。具体的には各関数で以下の処理を行う。
デバイス非依存データ表現からデバイス依存データ表現へ変換する際に、ホストデバイスから遠隔デバイスへのデータ転送を行う。
デバイス依存データ表現からデバイス非依存データ表現へ変換する際に、遠隔デバイスからホストデバイスへのデータ転送を行う。
様々なデータ圧縮のためのアルゴリズムが知られている。
(1)可逆圧縮(ハフマン符号化、ランレングス圧縮、etc)
(2)不可逆圧縮(DCT, スカラー量子化、ベクトル量子化, etc)
データ通信を依頼する関数(デバイス非依存データ表現とデバイス依存データ表現の変換関数を想定)の引数にて、これらの圧縮アルゴリズムの種別とパラメータを指定することで、データの性質や精度要件の考慮に基づいた最適なデータ圧縮手段を用いて通信量を削減できる。
多くの組み込み系チップでは、データ通信及び演算処理を別々のハードウェアが非同期に実行する構成を持つ。データ通信を依頼する関数(デバイス非依存データ表現とデバイス依存データ表現の変換関数を想定)に非同期実行(non-blocking)するものを用意すれば、こうしたハードウェア構成を意識したコーディング(一般にパイプライン化と呼ばれる手法)により、アリゴリズム全体の高速化を実現できる。
疑似コードによるパイプライン化のコーディングを図34に示す
仮想マシンモジュール509は、バイトコードを解釈しニューラルネットの学習/識別処理(フォワード処理、バックワード処理及び重みの更新)を実行する機能を実現する関数群である。バイトコードは、後述するPython層のバイトコード出力器によって生成されるものを前提とするが、他のソフトウェアで生成されたバイトコードであっても形式が正しければ仮想マシンモジュールで解釈実行できる。
関数定義例は以下のとおりである。
(例1)void chnr_init_with_bytecode(VMState* state, char* byte_code)
これにより、バイトコードを構文解析し仮想マシンの内部状態を初期化することができる。
(例2)void chnr_forward(VMState* state)
これにより、フォワード処理を実行することができる。
(例3)void chnr_backward(VMState* state)
これにより、バックワード処理を実行することができる。
(例4)void chnr_update_weight(VMState* state)
これにより、重みの更新処理を実行することができる。
以下のような情報をバイナリーフォーマットにて格納する。
(1)入出力データ情報
{配列次元数・サイズ, データ型(float32, FixedPoint)}*Variable数
(2)重み情報
{配列次元数・サイズ, データ型(float32, FixedPoint), 実現値}*重み個数
(3)バックワード処理時Function呼び出し情報
{Functionの種別,入出力データのindex, 重み情報のindex, Functionの種別毎に固有のパラメータ}*Function数
(4)重み更新の種別及びパラメータ
さらにバイトコードには、ニューラルネット全体処理の入出力となる多次元配列のindexを加えてもよい。このindexをバイトコードに格納しておくことにより、仮想マシンを利用するユーザコードではニューラルネット全体処理の入力となる多次元配列と、出力となる多次元配列を関数呼び出しに関して適切に紐付けることができる。例えば、以下のようなフローにより、この紐付けを行うことができる。
(ステップ1)ユーザコードは仮想マシンの構成に用意された関数を呼び出すことにより、全体処理の入力多次元配列を取得する。
(ステップ2)ユーザコードは前記ステップ1で取得した多次元配列に入力データをコピーする。
(ステップ3)ユーザコードは仮想マシンの構成に用意された全体動作を実行する関数を呼び出す。
(ステップ4)ユーザコードは仮想マシンの構成に用意された関数を呼び出すことにより、全体処理の出力多次元配列を取得する(この多次元配列は前記ステップ3で実行される全体動作の処理結果が格納された状態となっている。前記ステップ3とステップ4の関数は必ずしも分離する必要はなく一体の関数であってもよい。)。
(ステップ5)ユーザコードは前記ステップ4で取得した多次元配列から出力データの中身を取得する。
(1)バイトコード内の「入出力データ情報」を解釈して、Functionで入出力する多次元配列のリストを生成する。
(2)バイトコード内の「重み情報」を解釈して重みと重みの勾配(何れも多次元配列)のリストを生成する。
(3)バイトコード内の「Backward時Function呼び出し情報」を解釈して以下の情報を持つ構造体(FunctionState)のリストをForward用とBackward用にそれぞれ生成する(フォワード処理/バックワード処理を実行する関数の識別ID, 入出力データのアドレス, 重みのアドレス, 重みの勾配のアドレス, Functionの種別毎に固有のパラメータ)。
(4)バイトコード内の「重み更新の種別とパラメータ」を解釈して、重み更新アルゴリズムの内部状態の多次元配列と、以下の情報を持つ構造体(OptimizerState)を初期化する(重みの更新を実行する関数のアドレス,重みのアドレス,重みの勾配のアドレス,重み更新アルゴリズムの内部状態, 重みの更新種別毎に固有のパラメータ)。
仮想マシンモジュールは、図37に示す擬似コードのような処理を実行する。
全体動作を実行する際、学習(重みの更新)を行わず識別処理のみを実行するのであればフォワード処理のみを実行すれば良い。この場合、以下のデータは不要となる。
(1)レイヤー間で入出力されるデータのうち現在実行中のFunctionがアクセスしないもの
(2)重みの勾配
(3)重み更新アルゴリズムの内部状態
仮想マシンの内部状態初期化の際、重みの勾配及び重み更新アルゴリズムの内部状態は確保の必要がない。レイヤー間で入出力されるデータについても例えば次段落に記載するような手順でメモリ確保量を抑えることができる。
仮想マシンモジュールの内部状態初期化時の手順例
(1)Functionごとに入出力するデータサイズ(メモリサイズ)の和を計算し、最大サイズのものを選ぶ。
(2)多次元配列をハンドルする構造体(MDArray)を初期化する際に1で確保したメモリ領域を使い回すようにアドレスを設定する。
レイヤー毎にメモリ領域の左端と右端を入出力として交互に切り替えて使うようなアドレス設定を行うことで、配列データのコピーが発生しないようにする。ループのある入出力を行うFunctionが含まれている場合には、次イテレーションに持ち越す出力データに関しては、この手順で示した再利用の対象外とし個別にメモリ領域を確保する。
Functionが入出力するデータのアドレス設定例を図38に示す。
これまでの説明では「バックワード処理時Function呼び出し情報」に格納された情報を単純に昇順あるいは降順に実装する例を示した。しかしながら、複数の実行順序をバイトコードに格納しておいたり、繰り返し、分岐の指示をバイトコードに格納しておくことで、仮想マシン実行時に入力データの性質に応じてニューラルネットの構成を動的に変更するといった、より高度な処理を実行することも可能である。メモリプールモジュールに関して上述したメモリ管理機構はこうした動的なメカニズム実現のために利用することができる。
「仮想マシンの内部状態初期化処理」にてFunction間で入出力するデータのリストが作成されるが、仮想マシンの関数をコールする外部のコードが、このリストの要素に直接アクセスするのが最も簡易な方法である。バイトコード生成時にPythonのVariableインスタンスの変数名を「入出力データ情報」に格納しておけば、この名前を使って入出力をひも付けることもできる。
次に、図29に例示した実施形態に係る実装装置のPython層に関する構成について説明する。
9-1.NativeArrayクラス
NativeArrayクラス502は、Python層でNative層の多次元配列をラップするクラスである。NativeArrayクラス502は、Native層の多次元配列と1:1対応するインスタンスとして生成する。また、NativeArrayクラス502は、Pythonオブジェクトとしての基本機能として参照カウントによる生存期間管理機能を持つ。さらにまた、NativeArrayクラス502は、生存期間が終了した時点でNative層の多次元配列の解放を依頼する機能を持つ。
また、NativeArrayクラス502は、Native層の多次元配列の型情報のコピーを持ち、Python層の他のオブジェクトへ伝える機能を持つ。
さらにまた、NativeArrayクラス502は、データコピーや配列要素ごとの加算などの機能を持ち、その実行をNative層へ依頼する機能を持つ。
加えて、NativeArrayクラス502は、その他、Chainerが依存するNumpyやGPUArrayといったPython層の多次元配列ライブラリとコンパチブルに動作する機能を持つ。
NativeDeviceクラス501は、Native層の最適化実装及び参照実装を抽象化するクラスである。NativeDeviceクラス501は、以下のような処理をPython層の他のオブジェクトからの依頼に応じてNative層へ依頼する機能を持つ。
(1)デバイスの初期化と解放
(2)多次元配列の生成とコピー(これをラップしたPython層のNativeArrayインスタンスを生成する)
(3)デバイス非依存データ表現とデバイス依存データ表現間の変換(浮動小数点と固定小数点間の変換も指示できる)
(4)FunctionやOptimizerの処理実行(Native層の個々の関数を呼び分ける)
Functionクラス503は、フォワード処理とバックワード処理とをペアにして定義したクラスである。Functionクラス503は、Chainerに存在するクラスだが、フォワード処理とバックワード処理をNative層へ依頼する機能を追加する。
メソッド実装例は以下のとおりである。
(例1)forward_native(…)
これにより、フォワード処理をNative層に依頼することができる。
(例2)backward_native(…)
これにより、バックワード処理をNative層に依頼することができる。
(1)入力データサイズやFunctionインスタンス初期化時のパラメータから、出力データサイズを計算する。
(2)(1)で求めた出力データサイズと、入力データのインスタンス(NativeArray)、Functionの区分(Linear, ReLU, …)をNativeDeviceインスタンスに渡してNative層の関数呼び出しを依頼する。
(3)NativeDeviceインスタンスはこの呼び出しに応じて以下の処理を実行する。
(A)Native層に出力データの多次元配列生成を依頼する。入力データを上書きするFunctionであればこの処理は行わない。
(B)入力データの型(浮動小数点、固定小数点)とFunctionの区分より実際にコールするNative層の関数を決定し呼び出す(Native層の関数はAで確保した多次元配列に処理結果を書き込む)
(C)上記(A)で確保した多次元配列をラップするNativeArrayインスタンスを生成する。
(4)上記(C)で生成したNativeArrayインスタンスをFunctionの戻り値として返す。
Optimizerクラス503は、重みの更新を行うクラスである。Optimizerクラス503は、Chainerに存在するクラスであるが、状態初期化及び重み更新処理をNative層へ依頼する機能を追加する。
メソッド実装例は以下のとおりである。
(例1)init_state_native(…)
これにより、重み更新アルゴリズムの内部状態初期化処理をNative層に依頼することができる。
(例2)update_one_native(…)
これにより、重み更新処理をNative層に依頼することができる。
これらのメソッド呼び出し時の処理フローは上記「Functionクラス」で説明済みのものと同等である。
具体例を図39に例示する。
バイトコードし生成器504は、「Define-by-Run」で定義したニューラルネットワークのネットワーク構成をバイトコード(解釈実行可能なデータ形式)に変換し出力する仕組みである。バイトコードの形式は例えば「仮想マシンモジュール」に関して上述したものが考えられる。しかしながら、このような形式以外にも、例えば以下のような形式への出力を考えることができる。
(1)Caffeのニューラルネット定義フォーマット
Caffeで実行できる(Caffeはニューラルネット設計実行のための代表的なフレームワークの一つ)。
(2)C言語やJava(登録商標)などのプログラミング言語
全体動作を実行するソフトウェアを生成できる。
(3)HDLやVerilogといったハードウェア記述言語
全体動作を実行するハードウェアを合成できる。
関数名:write_network_difinition(output_node, path, format)
関数仕様:output_nodeから入力側に向かってつながるネットワーク構成をformatに指定された形式でpathで指定したファイルに出力する。output_nodeはリストで指定可能である(複数のノードを起点にできる)。
上記第1部において説明したとおり、Chainerは自然なフォワード処理の計算の記述に従ってバックワード処理のための参照構造を生成する機能を持つ。フォワード処理はバックワード処理のための参照構造を逆順にたどれば計算できるので、この参照構造からバイトコードを生成すれば、フォワード処理及びバックワード処理双方の処理が実行可能となる。
この手順は大きく以下のステップに分けられる。
(1)バイトコード作成のための要素情報生成
入出力データ情報生成
重み情報生成
バックワード処理時Function呼び出し情報生成
(2)要素情報のバイトコードへの変換
-「バックワード処理のための参照構造」をwrite_network_difinitionに渡されたoutput_nodeを起点にたどって以下の処理を実行する。
(1)現在のノードがVariableの場合には、その多次元配列の情報(サイズ・次元数,浮動小数点/固定小数点(Q値))を「入出力データ情報」のリストに加える。
(2)現在のノードがFunctionの場合には以下の処理を行う。
(i)重みの多次元配列の情報(サイズ・次元数, 浮動小数点/固定小数点(Q値), 重みの実現値)を「重み情報」のリストに重複を許さないように加える(複数のFunctionインスタンスが同一の重みを共有し得るため)。
(ii)Functionの種別, 入出力データのindex, 重みのindex, Functionの種別毎に固有のパラメータを「Backward時Function呼び出し情報」のリストに加える。
output_nodeに複数の起点ノードが渡された場合、次段落の手順で同じノードが重複登録されることを避ける。
(1)「バックワード処理時Function呼び出し情報」のリスト(空)を作成する。
(2)output_node内の起点ノードごと以下の手順を行う。
(A)起点ノード固有の「バックワード処理時Function呼び出し情報」のリストを作成する。
(B)前段落で説明した登録手順を上記(A)で作成したリストに対して行う。このとき、上記(1)で作成したリストに既に登録されているノードについては登録手順を実行しないようにして重複登録を避ける。
(C)上記(1)で作成したリストの前方に上記(A)で作成したリストを連結する。
要素情報のバイトコードへの変換
「バイトコード作成のための要素情報生成」の手順で作成した以下の情報を、write_network_difinitionのformat引数で指定されたフォーマットへ変換する。
(1)入出力データ情報生成
(2)重み情報生成
(3)バックワード処理時Function呼び出し情報生成
フォーマットとしては「バイトコード生成部」について先に例示したものが挙げられる。
「バイトコード生成部」について上述したwrite_network_difinition関数は、引数pathで渡されたファイルに直接ネットワークの構成を書き出す仕様となっているが、このpath引数に複数のネットワークの構成をバイトコードに書き出すためのオブジェクトを渡すこともできる。ここでネットワーク構成とは「Python層:バイトコード出力器(6)要素情報のバイトコードへの変換」で解説した(1)、(2)、(3)の構成要素を示す。
この「複数のネットワークの構成をバイトコードに書き出すためのオブジェクト」は、「複数のネットワーク構成」の間で同一の「(2)重み情報」を共有化し、バイトコードに書き出す重み情報を削減する。「(1)入出力データ情報生成」と「(3)バックワード処理時Function呼び出し情報生成」は、部分的な情報に重複が見られる場合も、上述のステップにより独立に生成する。このオブジェクトを利用する場合のコード例を図40に示す。このコード例では6行目では、nodeAからバックワード処理のための参照構造をたどりネットワークの構成を出力し、さらに7行目では、nodeBからバックワード処理のための参照構造をたどりネットワークの構成を出力する。8行目においてこれら2つのネットワーク構成が1つのファイル(./bytecode.bin)に出力される。
Chainerは、上記第1部において説明したとおり、特定のVariableインスタンスを起点にそこから入力層側へ向かうBackwardのための参照構造を打ち切る機能(unchain_backwardメソッド)を持っている。このunchain_backwardメソッドと前段落で説明した「複数のネットワーク構成の出力」を組み合わせることで同一ネットワークにおけるフォワード処理とバックワード処理の計算に対して異なるFunction呼び出し順序を指定することもできる。
図41に示すコード例では、#1の呼び出しでAからDまでの全ての処理を実行するネットワーク定義が出力されるのに対して、#2の呼び出しではBからDまでの処理のみが実行されるネットワーク定義が出力される。仮想マシンによるバイトコード実行時に#1で出力されるネットワーク構成に対してForward処理を行い、#2のものに対してBackward処理を実行するなどといった使い分けが可能となる。
10-1.複数のNNアルゴリズムを融合したアルゴリズム実行部
一般のニューラルネットの構成には頻出するFunctionの組み合わせが見られる
(例1)Linear→ReLU, Linear→ReLU→Linear→ReLU
(例2)Convolution2D→ReLU, Convolution2D→ReLU→Convolution2D→ReLU
こうした頻出するFunctionの組み合わせを1つのFunctionとして定義し、Python層及びNative層双方でその計算に特化した実装を行うことで、アルゴリズム設計においてもハードウェア実行効率においても以下のようなメリットを享受できる
(1)Functionを呼び出すためのオーバーヘッド(関数呼び出しや通信)を削減できる。
(2)複数のFunctionにまたがるデータの依存関係や並列性を考慮した実装により、高い実行効率を得られる(キャッシュメモリを有効活用しメインメモリに直接アクセスするデータ量を削減するなど)。
(3)アルゴリズム設計時により抽象化したFunctionを用いることで複雑なネットワーク構成を理解・定義しやすくなる。
・Convolution2D→ReLU
・Convolution2D→ReLU→Convolution2D→ReLU
Convolution2Dは、入出力するデータサイズに対して計算量が大きいので、キャッシュメモリなどの仕組みを有効活用し計算コアの性能を発揮できるチャンスが大きい。これに対してReLUは、入出力するデータサイズに対して計算量が小さいので、このチャンスは小さい。
Convolution2DとReLUを個別のFunctionとして実行する場合、Convolution2Dの処理結果のデータを全てメインメモリに書き出した後、その内容を再び演算コア周辺に転送しReLUの計算を行う必要がある。その理由はConvolution2Dの処理が終わった後にその結果を直ぐにReLUが用いるか否かが分からないためである。
Convolution2D→ReLU→Convolution2D→ReLUのようにさらに多くのFunctionを一体のFunctionとして実行できれば、処理効率向上のチャンスはさらに増える。キャッシュメモリのサイズや、Functionの組み合わせの中でのデータの依存関係を勘案し、さらに積極的にメインメモリへのアクセス量を削減できるからである。
ニューラルネットワークのレイヤーアルゴリズムの中には、バックワード処理を行わずフォワード処理のみを実行する場合に特化した重みの最適化を行うことで計算量やメモリ使用量を削減できるものが存在する。このような最適化が可能な理由は以下による。
確率的勾配降下法を用いてニューラルネットを学習するには重みのベクトルに高い数値精度と高い値域の自由度が必要である。なぜなら、学習時に小さな値の更新を積み重ねていく必要がある上、事前に重みのベクトルが変化する値域を十分に想定できないためである。これに対して、Forward処理だけを実行するのであればこのような精度と自由度の両立は必要なく重みの情報量を削減した上でForward処理を実行するようにすればメモリや計算量を削減することができる。計算量を削減できるのは重みの要素数を削減したり0の重みを計算しないなどの対応がとれるからである。例えば、Linear(レイヤー間の内積)の処理では、重みの情報(入力ノード数*出力ノード数の行列)を特異値分解し、対角成分が小さくなる要素を削除することで、重みのデータサイズを圧縮し、計算サイズを削減するテクニックが知られている。
(J. Xue, J. Li, and Y. Gong. Restructuring of deep neural network acoustic models with singular value decomposition. In Interspeech, 2013)
ChainerのFunctionクラスにこうしたForwardに特化した重みの最適化処理を実行するメソッドを加えることで、既に学習済みの重みを用いてForward処理のみを実行する場合の計算資源を削減することができる。このメソッドはFunctionクラスに既存のForwardメソッドやBackwardメソッドと同様に、Functionが保持する重みの多次元配列の型に依存してハードウェア実装(汎用計算機、GPU、Native)の違いを隠蔽する(再初期化の実装を呼び分ける)機能を持つ。
これまでPython層、Native層の関数やクラスに特定の機能を従属されることを例示して実施形態の詳細を説明してきた。しかしながら、これらのソフトウェア階層、クラス、関数の役割分担は、本発明の実施形態に係る機能の構成を具体的に説明するための一例を示したものに過ぎず、以下の例に示すように本発明の実施形態に係る個々の機能がこれまでの説明とは別のクラスや、階層、あるいはハードウェアに実装されることも考えられる。(1)「Forward処理実行を特化させた最適化装置の構成2;データメモリ領域の再利用手段を有する場合」で説明した処理内容は仮想マシンモジュールではなくバイトコード出力器であらかじめ実行できる。
(2)「複数のFunctionを組み合わせたFunction」で説明したFunctionはソフトウェアレベルの最適化ではなく特化したハードウェア(FPGA, ASIC)で実装できる。
よって、本発明の実施形態に係る構成はPython層、Native層の関数やクラス、あるいはソフトウェアを前提とした実装に直接依存するものではない。
100 評価ボード
110 取得部
120 記憶部
130 実行部
200 組み込み系チップ(組み込み系半導体集積回路)
401 駆動部
402 Functionクラス/Optimizerクラス
405 Native層実行部
408 Native用多次元配列
409 Variableクラス
504 バイトコード生成部
505 デバイス管理モジュール
506 データ変換モジュール
507 多次元配列モジュール
508 Functionモジュール/Optimizerモジュール
509 仮想マシンモジュール
510 メモリプールモジュール
Claims (1)
- ニューラルネットワークを構成する各層のフォワード処理を定義したコードを含むソースコードを取得する取得手段と、
前記ソースコードに含まれた各コードを順次実行する実行手段であって、各コードを実行した時点において、該コードにより定義されたフォワード処理の出力値を入力値に基づいて計算し、かつ、該コードに対応する層におけるバックワード処理のための参照構造を生成する、ように構成された実行手段と、
を具備することを特徴とする情報処理装置。
Priority Applications (1)
Application Number | Priority Date | Filing Date | Title |
---|---|---|---|
JP2024000874A JP2024029193A (ja) | 2015-10-29 | 2024-01-05 | バイナリーデータ生成方法、プログラム、バイナリーデータ生成装置及び半導体集積回路 |
Applications Claiming Priority (3)
Application Number | Priority Date | Filing Date | Title |
---|---|---|---|
JP2015213293 | 2015-10-29 | ||
JP2015213293 | 2015-10-29 | ||
JP2020118714A JP7121074B2 (ja) | 2015-10-29 | 2020-07-09 | 情報処理装置及び情報処理方法 |
Related Parent Applications (1)
Application Number | Title | Priority Date | Filing Date |
---|---|---|---|
JP2020118714A Division JP7121074B2 (ja) | 2015-10-29 | 2020-07-09 | 情報処理装置及び情報処理方法 |
Related Child Applications (1)
Application Number | Title | Priority Date | Filing Date |
---|---|---|---|
JP2024000874A Division JP2024029193A (ja) | 2015-10-29 | 2024-01-05 | バイナリーデータ生成方法、プログラム、バイナリーデータ生成装置及び半導体集積回路 |
Publications (3)
Publication Number | Publication Date |
---|---|
JP2022153634A true JP2022153634A (ja) | 2022-10-12 |
JP2022153634A5 JP2022153634A5 (ja) | 2023-05-18 |
JP7418511B2 JP7418511B2 (ja) | 2024-01-19 |
Family
ID=58630135
Family Applications (4)
Application Number | Title | Priority Date | Filing Date |
---|---|---|---|
JP2017547348A Active JP6745019B2 (ja) | 2015-10-29 | 2016-09-02 | 情報処理装置及び情報処理方法 |
JP2020118714A Active JP7121074B2 (ja) | 2015-10-29 | 2020-07-09 | 情報処理装置及び情報処理方法 |
JP2022124392A Active JP7418511B2 (ja) | 2015-10-29 | 2022-08-03 | 情報処理装置及び情報処理方法 |
JP2024000874A Pending JP2024029193A (ja) | 2015-10-29 | 2024-01-05 | バイナリーデータ生成方法、プログラム、バイナリーデータ生成装置及び半導体集積回路 |
Family Applications Before (2)
Application Number | Title | Priority Date | Filing Date |
---|---|---|---|
JP2017547348A Active JP6745019B2 (ja) | 2015-10-29 | 2016-09-02 | 情報処理装置及び情報処理方法 |
JP2020118714A Active JP7121074B2 (ja) | 2015-10-29 | 2020-07-09 | 情報処理装置及び情報処理方法 |
Family Applications After (1)
Application Number | Title | Priority Date | Filing Date |
---|---|---|---|
JP2024000874A Pending JP2024029193A (ja) | 2015-10-29 | 2024-01-05 | バイナリーデータ生成方法、プログラム、バイナリーデータ生成装置及び半導体集積回路 |
Country Status (3)
Country | Link |
---|---|
US (4) | US11521070B2 (ja) |
JP (4) | JP6745019B2 (ja) |
WO (1) | WO2017073000A1 (ja) |
Families Citing this family (27)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
WO2017073000A1 (ja) | 2015-10-29 | 2017-05-04 | 株式会社Preferred Networks | 情報処理装置及び情報処理方法 |
US10650303B2 (en) * | 2017-02-14 | 2020-05-12 | Google Llc | Implementing neural networks in fixed point arithmetic computing systems |
US10902312B2 (en) * | 2017-03-28 | 2021-01-26 | Qualcomm Incorporated | Tracking axes during model conversion |
US11037330B2 (en) * | 2017-04-08 | 2021-06-15 | Intel Corporation | Low rank matrix compression |
US11410024B2 (en) * | 2017-04-28 | 2022-08-09 | Intel Corporation | Tool for facilitating efficiency in machine learning |
AU2018269941A1 (en) | 2017-05-14 | 2019-12-05 | Digital Reasoning Systems, Inc. | Systems and methods for rapidly building, managing, and sharing machine learning models |
JP6891626B2 (ja) * | 2017-05-15 | 2021-06-18 | 富士通株式会社 | 情報処理装置、情報処理システム、情報処理プログラムおよび情報処理方法 |
JP6953229B2 (ja) * | 2017-08-10 | 2021-10-27 | 株式会社半導体エネルギー研究所 | 半導体装置 |
KR102563752B1 (ko) * | 2017-09-29 | 2023-08-04 | 삼성전자주식회사 | 뉴럴 네트워크를 위한 트레이닝 방법, 뉴럴 네트워크를 이용한 인식 방법 및 그 장치들 |
KR102589303B1 (ko) * | 2017-11-02 | 2023-10-24 | 삼성전자주식회사 | 고정 소수점 타입의 뉴럴 네트워크를 생성하는 방법 및 장치 |
US11468312B2 (en) * | 2018-02-02 | 2022-10-11 | Samsung Electronics Co., Ltd. | Memory management for machine learning training on GPU |
CN110197265B (zh) * | 2018-02-27 | 2021-01-05 | 安徽寒武纪信息科技有限公司 | 集成电路芯片装置及相关产品 |
JP7287388B2 (ja) * | 2018-05-14 | 2023-06-06 | ソニーグループ株式会社 | 情報処理装置および情報処理方法 |
JP6985977B2 (ja) * | 2018-05-14 | 2021-12-22 | ヤフー株式会社 | 出力装置、出力方法、出力プログラム及び出力システム |
JP6528884B1 (ja) * | 2018-06-04 | 2019-06-12 | 富士通株式会社 | 学習プログラム、学習方法、及び情報処理装置 |
KR102219904B1 (ko) * | 2018-12-13 | 2021-02-24 | 한동대학교 산학협력단 | 딥러닝 프레임워크를 활용한 뉴럴 네트워크 구조 확장 방법 |
JP7379821B2 (ja) * | 2019-01-09 | 2023-11-15 | 日本電信電話株式会社 | 推論処理装置および推論処理方法 |
CN111626401B (zh) * | 2019-02-28 | 2022-11-01 | 上海寒武纪信息科技有限公司 | 运算方法及装置 |
KR102644380B1 (ko) * | 2019-03-28 | 2024-03-07 | 현대자동차주식회사 | 볼트 축력 예측 방법 |
US10552121B1 (en) * | 2019-05-07 | 2020-02-04 | Capital One Services, Llc | System and method for dynamic process flow control based on real-time events |
CN112580914A (zh) * | 2019-09-30 | 2021-03-30 | 北京国双科技有限公司 | 汇集多源数据的企业级数据中台系统的实现方法及装置 |
US20210192314A1 (en) * | 2019-12-18 | 2021-06-24 | Nvidia Corporation | Api for recurrent neural networks |
US20210235407A1 (en) * | 2020-01-23 | 2021-07-29 | Qualcomm Incorporated | Timing advance command implementations for preconfigured uplink resource transmissions |
US11610128B2 (en) * | 2020-03-31 | 2023-03-21 | Amazon Technologies, Inc. | Neural network training under memory restraint |
US20230169352A1 (en) * | 2020-06-12 | 2023-06-01 | Haijun Zhao | Generate source code to build secure machine learning engine for edge devices and existing toolchains |
CN111651207B (zh) * | 2020-08-06 | 2020-11-17 | 腾讯科技(深圳)有限公司 | 一种神经网络模型运算芯片、方法、装置、设备及介质 |
US11952880B2 (en) * | 2021-03-26 | 2024-04-09 | Saudi Arabian Oil Company | Method and system for rate of penetration optimization using artificial intelligence techniques |
Citations (2)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
US6018727A (en) * | 1994-10-13 | 2000-01-25 | Thaler; Stephen L. | Device for the autonomous generation of useful information |
JP2008533615A (ja) * | 2005-03-14 | 2008-08-21 | エル ターラー、ステフエン | ニューラルネットワーク開発およびデータ解析ツール |
Family Cites Families (50)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
US5581662A (en) | 1989-12-29 | 1996-12-03 | Ricoh Company, Ltd. | Signal processing apparatus including plural aggregates |
JPH03237557A (ja) | 1990-02-14 | 1991-10-23 | Oki Electric Ind Co Ltd | ニューラルネットワークシミュレータ及び計算機システム |
JPH0689171A (ja) | 1992-03-26 | 1994-03-29 | Nec Ic Microcomput Syst Ltd | プログラムの検査方法 |
US5621862A (en) | 1993-07-29 | 1997-04-15 | Matsushita Electric Industrial Co., Ltd. | Information processing apparatus for implementing neural network |
JPH0744515A (ja) | 1993-07-29 | 1995-02-14 | Matsushita Electric Ind Co Ltd | ニューラルネットワーク回路 |
JPH07114524A (ja) | 1993-10-14 | 1995-05-02 | Ricoh Co Ltd | 信号処理装置 |
US5983210A (en) | 1995-12-27 | 1999-11-09 | Kabushiki Kaisha Toshiba | Data processing system, system-build system, and system-build method |
US6735334B2 (en) | 1999-10-29 | 2004-05-11 | Canon Kabushiki Kaisha | Optimizing processing gamuts for color conversion chains |
US7313550B2 (en) * | 2002-03-27 | 2007-12-25 | Council Of Scientific & Industrial Research | Performance of artificial neural network models in the presence of instrumental noise and measurement errors |
US8552835B2 (en) | 2005-10-28 | 2013-10-08 | Mojix, Inc. | RFID system with low complexity implementation and pallet coding error correction |
US20090113049A1 (en) * | 2006-04-12 | 2009-04-30 | Edsa Micro Corporation | Systems and methods for real-time forecasting and predicting of electrical peaks and managing the energy, health, reliability, and performance of electrical power systems based on an artificial adaptive neural network |
JP2007265345A (ja) * | 2006-03-30 | 2007-10-11 | Sony Corp | 情報処理装置および方法、学習装置および方法、並びにプログラム |
US8103606B2 (en) * | 2006-12-08 | 2012-01-24 | Medhat Moussa | Architecture, system and method for artificial neural network implementation |
GB0809631D0 (en) | 2008-05-28 | 2008-07-02 | Mirriad Ltd | Zonesense |
JP2010047388A (ja) * | 2008-08-25 | 2010-03-04 | Mitsubishi Electric Corp | エレベータの運転管理装置 |
JP5534524B2 (ja) | 2008-10-24 | 2014-07-02 | 独立行政法人情報通信研究機構 | 計算処理システム、プログラム作成方法、コンピュータ読取可能な記録媒体、および、プログラム作成プログラム |
US8756047B2 (en) * | 2010-09-27 | 2014-06-17 | Sureshchandra B Patel | Method of artificial nueral network loadflow computation for electrical power system |
US9542662B2 (en) | 2010-12-30 | 2017-01-10 | Sap Se | Lineage information for streaming event data and event lineage graph structures for visualization |
JP2012208843A (ja) | 2011-03-30 | 2012-10-25 | Keihin Corp | 開発支援装置 |
US10082583B2 (en) | 2011-06-09 | 2018-09-25 | Invensense, Inc. | Method and apparatus for real-time positioning and navigation of a moving platform |
US9117176B2 (en) | 2011-09-21 | 2015-08-25 | Qualcomm Technologies Inc. | Round-trip engineering apparatus and methods for neural networks |
US9215598B2 (en) | 2011-11-10 | 2015-12-15 | Toyota Jidosha Kabushiki Kaisha | Optimizing dynamic spectrum access |
US9477925B2 (en) * | 2012-11-20 | 2016-10-25 | Microsoft Technology Licensing, Llc | Deep neural networks training for speech and pattern recognition |
US9177550B2 (en) * | 2013-03-06 | 2015-11-03 | Microsoft Technology Licensing, Llc | Conservatively adapting a deep neural network in a recognition system |
US9892238B2 (en) * | 2013-06-07 | 2018-02-13 | Scientific Design Company, Inc. | System and method for monitoring a process |
US20150324690A1 (en) * | 2014-05-08 | 2015-11-12 | Microsoft Corporation | Deep Learning Training System |
JP6582416B2 (ja) | 2014-05-15 | 2019-10-02 | 株式会社リコー | 画像処理装置、画像処理方法及びプログラム |
US9627532B2 (en) | 2014-06-18 | 2017-04-18 | Nuance Communications, Inc. | Methods and apparatus for training an artificial neural network for use in speech recognition |
CN104035751B (zh) * | 2014-06-20 | 2016-10-12 | 深圳市腾讯计算机系统有限公司 | 基于多图形处理器的数据并行处理方法及装置 |
US10221671B1 (en) * | 2014-07-25 | 2019-03-05 | U.S. Department Of Energy | MSE based drilling optimization using neural network simulaton |
US9880549B2 (en) | 2014-11-14 | 2018-01-30 | International Business Machines Corporation | Dynamic batch size and internal transportation |
US9633306B2 (en) * | 2015-05-07 | 2017-04-25 | Siemens Healthcare Gmbh | Method and system for approximating deep neural networks for anatomical object detection |
US10540588B2 (en) * | 2015-06-29 | 2020-01-21 | Microsoft Technology Licensing, Llc | Deep neural network processing on hardware accelerators with stacked memory |
US10748064B2 (en) * | 2015-08-27 | 2020-08-18 | International Business Machines Corporation | Deep neural network training with native devices |
WO2017038104A1 (ja) | 2015-09-03 | 2017-03-09 | 株式会社Preferred Networks | 実装装置および実装方法 |
JP2018173672A (ja) | 2015-09-03 | 2018-11-08 | 株式会社Preferred Networks | 実装装置 |
US10248907B2 (en) * | 2015-10-20 | 2019-04-02 | International Business Machines Corporation | Resistive processing unit |
WO2017073000A1 (ja) | 2015-10-29 | 2017-05-04 | 株式会社Preferred Networks | 情報処理装置及び情報処理方法 |
US10126134B2 (en) | 2015-12-21 | 2018-11-13 | Invensense, Inc. | Method and system for estimating uncertainty for offline map information aided enhanced portable navigation |
US10018474B2 (en) | 2015-12-21 | 2018-07-10 | Invensense, Inc. | Method and system for using offline map information aided enhanced portable navigation |
US11162791B2 (en) | 2015-12-22 | 2021-11-02 | Invensense, Inc. | Method and system for point of sale ordering |
US10206646B2 (en) | 2016-03-10 | 2019-02-19 | Siemens Healthcare Gmbh | Method and system for extracting centerline representation of vascular structures in medical images via optimal paths in computational flow fields |
US10115039B2 (en) | 2016-03-10 | 2018-10-30 | Siemens Healthcare Gmbh | Method and system for machine learning based classification of vascular branches |
US11263516B2 (en) * | 2016-08-02 | 2022-03-01 | International Business Machines Corporation | Neural network based acoustic models for speech recognition by grouping context-dependent targets |
US10635970B2 (en) * | 2016-08-04 | 2020-04-28 | International Business Machines Corporation | Racetrack synapse for neuromorphic applications |
US10528864B2 (en) * | 2016-08-11 | 2020-01-07 | Nvidia Corporation | Sparse convolutional neural network accelerator |
JP6786948B2 (ja) | 2016-08-12 | 2020-11-18 | 富士通株式会社 | 演算処理装置及び演算処理装置の制御方法 |
US10547976B2 (en) | 2016-09-07 | 2020-01-28 | Invensense, Inc. | Method and system for assigning point of sale information |
US11288575B2 (en) | 2017-05-18 | 2022-03-29 | Microsoft Technology Licensing, Llc | Asynchronous neural network training |
US11301315B2 (en) | 2017-06-30 | 2022-04-12 | Kyndryl, Inc. | Automated hardware failure prediction framework |
-
2016
- 2016-09-02 WO PCT/JP2016/004027 patent/WO2017073000A1/ja active Application Filing
- 2016-09-02 US US15/771,979 patent/US11521070B2/en active Active
- 2016-09-02 JP JP2017547348A patent/JP6745019B2/ja active Active
-
2019
- 2019-08-26 US US16/551,435 patent/US12026620B2/en active Active
-
2020
- 2020-07-09 JP JP2020118714A patent/JP7121074B2/ja active Active
-
2022
- 2022-08-03 JP JP2022124392A patent/JP7418511B2/ja active Active
- 2022-11-11 US US17/985,398 patent/US11915146B2/en active Active
-
2023
- 2023-10-16 US US18/487,217 patent/US12079729B2/en active Active
-
2024
- 2024-01-05 JP JP2024000874A patent/JP2024029193A/ja active Pending
Patent Citations (2)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
US6018727A (en) * | 1994-10-13 | 2000-01-25 | Thaler; Stephen L. | Device for the autonomous generation of useful information |
JP2008533615A (ja) * | 2005-03-14 | 2008-08-21 | エル ターラー、ステフエン | ニューラルネットワーク開発およびデータ解析ツール |
Also Published As
Publication number | Publication date |
---|---|
US20240046104A1 (en) | 2024-02-08 |
JP7418511B2 (ja) | 2024-01-19 |
US12026620B2 (en) | 2024-07-02 |
WO2017073000A1 (ja) | 2017-05-04 |
US12079729B2 (en) | 2024-09-03 |
JP6745019B2 (ja) | 2020-08-26 |
JP2020170551A (ja) | 2020-10-15 |
JP2024029193A (ja) | 2024-03-05 |
US11521070B2 (en) | 2022-12-06 |
JPWO2017073000A1 (ja) | 2018-11-08 |
US20230111538A1 (en) | 2023-04-13 |
US20180349772A1 (en) | 2018-12-06 |
JP7121074B2 (ja) | 2022-08-17 |
US11915146B2 (en) | 2024-02-27 |
US20190378018A1 (en) | 2019-12-12 |
Similar Documents
Publication | Publication Date | Title |
---|---|---|
JP7121074B2 (ja) | 情報処理装置及び情報処理方法 | |
US20210081258A1 (en) | Synthesis Path For Transforming Concurrent Programs Into Hardware Deployable on FPGA-Based Cloud Infrastructures | |
WO2017038104A1 (ja) | 実装装置および実装方法 | |
Görlach et al. | Conventional workflow technology for scientific simulation | |
TWI806550B (zh) | 處理器操作方法、相關電腦系統、及非暫時性電腦可存取儲存媒體 | |
JP2018173672A (ja) | 実装装置 | |
US10782935B2 (en) | Method and system to provide a generalized framework for dynamic creation of module analytic applications | |
US20170068751A1 (en) | Manifold system and synthesis of a manifold system from input models | |
US20230004365A1 (en) | Multistage compiler architecture | |
US11861331B1 (en) | Scaling high-level statistical languages to large, distributed datasets | |
Janßen et al. | Designing applications for heterogeneous many-core architectures with the FlexTiles Platform | |
Zaki et al. | Integration of dataflow-based heterogeneous multiprocessor scheduling techniques in gnu radio | |
Schornbaum | Block-structured adaptive mesh refinement for simulations on extreme-scale supercomputers | |
US11573777B2 (en) | Method and apparatus for enabling autonomous acceleration of dataflow AI applications | |
Jones et al. | Interoperable Application Programming Interfaces for Computer Aided Engineering Applications | |
US20240069511A1 (en) | Instruction generation and programming model for a data processing array and microcontroller | |
Cong | Hardware accelerated simulation and automatic design of heterogeneous architecture | |
Thomas et al. | Framework for development and distribution of hardware acceleration | |
US20240338265A1 (en) | Development platform for image processing pipelines that use machine learning | |
Korte et al. | Transparent Model-Driven Provisioning of Computing Resources for Numerically Intensive Simulations | |
Chang et al. | Deep neural networks compiler for a trace-based accelerator (short WIP paper) | |
Campeanu et al. | Component-based development of embedded systems with GPUs | |
KHALILI MAYBODI | A Data-Flow Threads Co-processor for MPSoC FPGA Clusters | |
Valerevic | Empirical study of sparse data processing using distillation and specialized hardware | |
Mokrani et al. | Assisting refinement in system-on-chip design |
Legal Events
Date | Code | Title | Description |
---|---|---|---|
A621 | Written request for application examination |
Free format text: JAPANESE INTERMEDIATE CODE: A621 Effective date: 20220902 |
|
A521 | Request for written amendment filed |
Free format text: JAPANESE INTERMEDIATE CODE: A523 Effective date: 20230510 |
|
A131 | Notification of reasons for refusal |
Free format text: JAPANESE INTERMEDIATE CODE: A131 Effective date: 20230905 |
|
A521 | Request for written amendment filed |
Free format text: JAPANESE INTERMEDIATE CODE: A523 Effective date: 20231030 |
|
TRDD | Decision of grant or rejection written | ||
A01 | Written decision to grant a patent or to grant a registration (utility model) |
Free format text: JAPANESE INTERMEDIATE CODE: A01 Effective date: 20231208 |
|
A61 | First payment of annual fees (during grant procedure) |
Free format text: JAPANESE INTERMEDIATE CODE: A61 Effective date: 20240109 |
|
R150 | Certificate of patent or registration of utility model |
Ref document number: 7418511 Country of ref document: JP Free format text: JAPANESE INTERMEDIATE CODE: R150 |