(19)【発行国】日本国特許庁(JP)
(12)【公報種別】特許公報(B2)
(11)【特許番号】
(24)【登録日】2023-02-13
(45)【発行日】2023-02-21
(54)【発明の名称】演算処理装置,プログラム及び演算処理装置の制御方法
(51)【国際特許分類】
G06F 7/544 20060101AFI20230214BHJP
G06F 17/10 20060101ALI20230214BHJP
G06N 3/063 20230101ALI20230214BHJP
G06G 7/60 20060101ALI20230214BHJP
【FI】
G06F7/544
G06F17/10 Z
G06N3/063
G06G7/60
(21)【出願番号】P 2019009395
(22)【出願日】2019-01-23
【審査請求日】2021-10-07
(73)【特許権者】
【識別番号】000005223
【氏名又は名称】富士通株式会社
(74)【代理人】
【識別番号】110003649
【氏名又は名称】弁理士法人真田特許事務所
(74)【代理人】
【識別番号】100092978
【氏名又は名称】真田 有
(72)【発明者】
【氏名】野津 隆弘
【審査官】豊田 真弓
(56)【参考文献】
【文献】国際公開第2017/038104(WO,A1)
【文献】米国特許出願公開第2019/0005603(US,A1)
【文献】特開2019-008383(JP,A)
(58)【調査した分野】(Int.Cl.,DB名)
G06F 7/544
G06F 17/10
G06N 3/063
G06G 7/60
(57)【特許請求の範囲】
【請求項1】
入力値を境界値と比較し、前記境界値を超過した前記入力値に対して前記入力値と等しい値を出力する第1出力部と、
前記入力値が境界値以下の場合に、前記入力値に対して-εと+εと0とのいずれかの値をランダムに出力する第2出力部と、
を備える、演算処理装置
。
【請求項2】
入力値を境界値と比較し、前記境界値を超過した前記入力値に対して前記入力値と等しい値を第1出力部が出力し、
前記入力値が境界値以下の場合に、第2出力部が、前記入力値に対して-εと+εと0とのいずれかの値をランダムに出力する、
処理をコンピュータに実行させる、プログラム。
【請求項3】
入力値を境界値と比較し、前記境界値を超過した前記入力値に対して前記入力値と等しい値を第1出力部が出力し、
前記入力値が境界値以下の場合に、第2出力部が、前記入力値に対して-εと+εと0とのいずれかの値をランダムに出力する、
処理を演算処理装置が実行する、制御方法。
【発明の詳細な説明】
【技術分野】
【0001】
本発明は、演算処理装置,プログラム及び演算処理装置の制御方法に関する。
【背景技術】
【0002】
Deep Learning(DL)を高速に実行するプロセッサでは、大量の演算器が実装され、並列演算が実行される。並列演算では、全ての演算器が同じ演算を実行するため、実行する命令や種類やデータの内容によって大量の演算器全体の電力が急激に変化する場合がある。
【0003】
プロセッサは同一電圧条件で作動するため、電力が増加すると電流が増加する。通常Direct Current(DC)-DCコンバータが電流の増加に追従するが、変化が急激であると、電流の増加に追従できず、電圧が降下する。
【0004】
プロセッサに供給される電圧が降下すると半導体のスイッチング速度が低下し、タイミング制約を満たせなくなることにより、プロセッサの誤動作が発生するおそれがある。
【先行技術文献】
【特許文献】
【0005】
【文献】国際公開2017/038104号
【文献】特開平11-224246号公報
【発明の概要】
【発明が解決しようとする課題】
【0006】
電圧降下によるプロセッサの誤動作は常時電圧を高めに設定することにより解決できるが、常時電圧を高めに設定すると消費電力が増加してしまうという課題がある。
【0007】
1つの側面では、消費電力を増加させずにプロセッサの電圧降下を防止することを目的とする。
【課題を解決するための手段】
【0008】
演算処理装置は、入力値を境界値と比較し、前記境界値を超過した前記入力値に対して前記入力値と等しい値を出力する第1出力部と、前記入力値が境界値以下の場合に、前記入力値に対して-εと+εと0とのいずれかの値を出力する第2出力部と、を備える。
【発明の効果】
【0009】
1つの側面では、消費電力を増加させずにプロセッサの電圧降下を防止することができる。
【図面の簡単な説明】
【0010】
【
図1】関連例における神経細胞のモデル化を説明する図である。
【
図2】関連例における命令の種類による電力変動の第1の例を説明する図である。
【
図3】関連例における命令の種類による電力変動の第2の例を説明する図である。
【
図4】関連例における命令の種類による電力変動の第3の例を説明する図である。
【
図5】関連例における命令の種類による電力変動の第3の例を説明する図である。
【
図6】実施形態の一例における第1のRectified Linear Unit(ReLU)演算処理を説明する図である。
【
図7】実施形態の一例におけるReLUの第1の順伝播処理及び第1の逆伝播処理を説明する図である。
【
図8】実施形態の一例における第2のReLU演算処理を説明する図である。
【
図9】実施形態の一例におけるReLUの第2の順伝播処理及び第2の逆伝播処理を説明する図である。
【
図10】実施形態の一例における第3のReLU演算処理を説明する図である。
【
図11】実施形態の一例におけるReLUの第3の順伝播処理及び第3の逆伝播処理を説明する図である。
【
図12】実施形態の一例における乗算器の構成例を模式的に示すブロック図である。
【
図13】実施形態の一例における演算処理システムの構成例を模式的に示すブロック図である。
【
図14】
図13に示した演算処理システムにおけるDL処理を説明するブロック図である。
【
図15】
図13に示したホストマシンにおけるDL処理を説明するフローチャートである。
【
図16】
図13に示したホストマシンにおけるハードウェア構成例を模式的に示すブロック図である。
【
図17】
図13に示したDL実行ハードウェアのハードウェア構成例を模式的に示すブロック図である。
【
図18】
図13に示したホストマシンにおける機能構成例を模式的に示すブロック図である。
【
図19】
図13に示したホストマシンにおけるプログラムの生成処理を説明するフローチャートである。
【
図20】
図13に示したホストマシンにおける順伝播及び逆伝播のプログラムの生成処理の詳細を説明するフローチャートである。
【
図21】
図13に示したホストマシンにおける第2のReLU演算の順伝播処理の詳細を説明するフローチャートである。
【
図22】
図13に示したホストマシンにおける第2のReLU演算の逆伝播処理の詳細を説明するフローチャートである。
【
図23】
図13に示したホストマシンにおける第3のReLU演算の順伝播処理の詳細を説明するフローチャートである。
【
図24】
図13に示したホストマシンにおける第3のReLU演算の逆伝播処理の詳細を説明するフローチャートである。
【発明を実施するための形態】
【0011】
以下、図面を参照して一実施の形態を説明する。ただし、以下に示す実施形態はあくまでも例示に過ぎず、実施形態で明示しない種々の変形例や技術の適用を排除する意図はない。すなわち、本実施形態を、その趣旨を逸脱しない範囲で種々変形して実施することができる。
【0012】
また、各図は、図中に示す構成要素のみを備えるという趣旨ではなく、他の機能等を含むことができる。
【0013】
以下、図中において、同一の各符号は同様の部分を示しているので、その説明は省略する。
【0014】
〔A〕関連例
図1は、関連例における神経細胞のモデル化を説明する図である。
【0015】
ニューラルネットワークを多層に拡張したDeep Neural Networkは、従来解決が困難であった問題に適用できることが判明し、様々な分野へ適用されることが予想される。
【0016】
図1に示すように、脳の神経細胞(別言すれば、「ニューロン」)は、細胞体61,シナプス62,樹状突起63及び軸索64を含む。神経細胞が機械的にモデル化されることにより、ニューラルネットワークが生成される。
【0017】
Deep Neural Networkの学習処理における演算は、内積演算等であり単純ではあるが、大量に実行される場合がある。そのため、これらの演算を高速に実行するプロセッサでは、大量の演算器を並列に作動させることにより性能の向上が図られる。
【0018】
Deep Neural Networkの学習処理を実行する演算器では、実行する命令の種類やデータの内容によって全ての演算器における電力が急激に変化する場合がある。
【0019】
例えば、整数加算命令(別言すれば、「ADD演算命令」)は、浮動小数点積和命令(別言すれば、「Fused Multiply-Add(FMA)演算命令」)よりも消費電力が小さい。これは、命令の種類によってプロセッサ内部で使用されるリソースが異なるためである。整数加算命令では1つの加算器に限って使用されるが、浮動小数点積和命令では乗算を実行するための複数の加算器やよりビット幅の広い加算器が使用される。
【0020】
命令の種類による電力の変動は、事前にどのような命令を実行するかが分かっているため、対処が可能である。例えば、浮動小数点積和命令が支配的であるプログラムの一部区間で整数加算命令を実行する場合に、整数加算命令と浮動小数点積和命令とを交互に実行させる。これにより、全体としての電力の変動を抑えることができる。
【0021】
図2は、関連例における命令の種類による電力変動の第1の例を説明する図である。
【0022】
図2に示す例では、FMA演算命令が10命令実行された後、ADD演算命令が10命令実行される。このような命令列では、FMA演算命令がADD演算命令に切り替わると電力低下が発生する。
【0023】
図3は、関連例における命令の種類による電力変動の第2の例を説明する図である。
【0024】
図3に示す例では、FMA演算命令が5命令実行された後、ADD演算命令とFMA演算命令とが交互に実行される。このように、FMA演算命令とADD演算命令とが織り交ぜて実行されることで電力の急激な低下が抑えられる。
【0025】
同じ浮動小数点積和命令が実行されても、データの内容としてゼロが入力され続けると電力が低下する。通常はある程度の割合で入力データが0又は1に変化するが、同じ値が入力され続けると論理素子の状態が固定され、電力が低下する。特にゼロ値は、乗算の場合には、もう一方のオペランドにどのような値が入力されても同じ結果である0が返されるため、スイッチング回数が削減される傾向が強い。
【0026】
事前にどのようなデータが入力されるかが不明であるため、データの内容による電力の変動へ対処することは容易でない。
【0027】
図4及び
図5は、関連例における命令の種類による電力変動の第3の例を説明する図である。
【0028】
図4の符号A1に示すように、フラグレジスタの40番(図示する例では「%fr40」)から45番(図示する例では「%fr45」)までに、命令列としてゼロが格納されている。
図5に示すように、ゼロを用いた演算が実行されると、その期間における電力が低下する。
【0029】
このように、プロセッサの電力変動の原因は、命令の種類によるものと、命令が読み込むデータによるものとがある。例えば、整数加算命令は消費電力が低いが、浮動小数点積和命令は消費電力が高い。また、同じ浮動小数点積和命令でも、ゼロが入力されると消費電力が低くなる。
【0030】
命令の種類の違いによる電力変動は、プログラム作成の際に実行する命令が既知となるため、命令の組み合わせによって回避することが可能である。
【0031】
一方、命令のデータに起因する電力変動は、プログラム作成の際にオペランドの内容が不明であるため、対策が容易でない。特に、ゼロ値が連続して入力されると、演算器内の殆どの値がゼロに固定されるため、電力が急激に低下する。
【0032】
〔B〕実施形態の一例
〔B-1〕システム構成例
DLにおいては、Multiply-Add命令を実行し、内積を求める処理が大半を占める。この際に、入力にゼロが連続して現われるとMultiply-Add命令の実行の際の入力が急激に低下し、誤動作の原因となる。
【0033】
図6は、第1のReLU演算の処理を説明する図である。
【0034】
DLの学習処理においてReLU演算と呼ばれる処理が明示的にゼロを生成する。ReLU演算は、1つの入力を受け取り、1つの出力を生成する。
図6及び以下の数式1に示すように、与えられた入力値が正であれば入力値がそのまま出力され、入力値が0又は負であれば0が出力される。
【数1】
【0035】
図7は、実施形態の一例におけるReLUの第1の順伝播処理及び第1の逆伝播処理を説明する図である。
【0036】
図7に示すように、順伝播の際の入力x(符号B1参照)は、変形ReLU順伝播処理(符号B2参照)によって、出力z(符号B3参照)に変換される。ここで、入力xと出力zとの関係は、以下の数式2によって表わされる。
【数2】
【0037】
また、順伝播の際の入力xは、逆伝播の実行の際まで一時領域に格納される(符号B4参照)。
【0038】
そして、逆伝播の際の入力dz(符号B5参照)は、一時領域の入力xを参照する変形ReLU逆伝播処理(符号B6参照)により、出力dx(符号B7参照)に変換される。ここで、入力dzと出力dxとの関係は、以下の数式3によって表わされる。
【数3】
【0039】
ただし、数式1で示したReLU(x)では、入力xが負の値である場合には出力は常に0であるため、出力が0である可能性が高い。
【0040】
そこで、本実施形態の一例においては、入力xが負の値である場合に、微小正数(ε)の傾きを有するネガティブスロープが設定されてよい。また、入力xが負の値である場合に、ランダムで微小負数(-ε),ゼロ値(0),微小正数(+ε)のいずれかが出力されてもよい。
【0041】
微小正数(ε)は絶対値が小さく、ある程度(例えば、半分以上の桁で)1のビットが立っていればよく、例えば、“0x00FFFFFF”及び“0x00CCCCCC”の2つを候補としてよい。“0x00FFFFFF”は、ゼロよりも大きい値FLT_MINに近く、仮数部が全て1になるような数である。“0x00CCCCCC”は、ゼロよりも大きい値FLT_MINに近く、仮数部に0と1とが交互に現れる数である。
【0042】
ネガティブスロープを設定する方法でも、ランダムで値を出力する方法でも、ゼロの代わりにゼロでない値が使用される場合があるため、演算結果が
図6に示した例とは異なる。しかしながら、DL処理においては順伝播処理(別言すれば、「フォワード処理」)と逆伝播処理(別言すれば、「バックワード処理」)との整合性が取れていれば、本来の計算と異なる処理が行なわれても学習は可能である。
【0043】
図8は、実施形態の一例における第2のReLU演算処理を説明する図である。
【0044】
図8に示すように、ネガティブスロープは、負の領域での傾きを示す。ネガティブスロープが0のときは、
図6に示したReLU処理と同様となる。
【0045】
図8に示す例においては、
図6に示したReLU処理に対して、ネガティブの値がεに設定されることにより、連続するゼロの生成が抑止される。
【0046】
図8に示すReLU処理は、Leaky ReLU処理と称されてもよい。
【0047】
以下の数式4及び数式5に表わすように、入力x値が正の領域では入力値がそのまま出力され、入力値xが負の領域では入力値にεを掛けた値が出力される。
【数4】
【数5】
【0048】
図9は、実施形態の一例におけるReLUの第2の順伝播処理及び第2の逆伝播処理を説明する図である。
【0049】
図9に示す順伝播処理及び逆伝播処理は、
図7に示した順伝播処理及び逆伝播処理と同様である。
【0050】
ただし、
図9に示す変形ReLU順伝播処理(符号B21参照)は、以下の数式6を使用して行なわれる。
【数6】
【0051】
また、
図9に示す変形ReLU逆伝播処理(符号B61参照)は、以下の数式7を使用して行なわれる。
【数7】
【0052】
図10は、実施形態の一例における第3のReLU演算処理を説明する図である。
【0053】
図10に示すReLU処理は、正領域では
図6に示したReLU処理と同様だが、負領域では-ε,0,+εの3つの値からランダムに出力値が選択される(
図10の網掛け部参照)。
【0054】
すなわち、出力値は以下の数式8及び9によって表わされる。
【数8】
【数9】
【0055】
図11は、実施形態の一例におけるReLUの第3の順伝播処理及び第3の逆伝播処理を説明する図である。
【0056】
図11に示す順伝播処理及び逆伝播処理は、
図7に示した順伝播処理及び逆伝播処理と同様である。
【0057】
ただし、
図11に示す変形ReLU順伝播処理(符号B22参照)は、以下の数式10を使用して行なわれる。
【数10】
【0058】
また、
図11に示す変形ReLU逆伝播処理(符号B62参照)は、以下の数式11を使用して行なわれる。
【数11】
【0059】
図12は、実施形態の一例における乗算器1000の構成例を模式的に示すブロック図である。
【0060】
ReLU(1)の演算結果は様々な値を採り得るが、ReLU(2)の演算結果は-ε,0,+εの3つの値しか採らない。そのため、実施形態の一例では、乗算器1000への入力も考慮される。
【0061】
デジタル計算機の乗算器1000は、筆算の要領で被乗数と乗数のそれぞれのビットとの部分積を求め、それらの和を求める。
【0062】
乗算器1000は、乗数101及び被乗数102の2つの入力に対して、1つの出力105を生成する。また、乗算器1000は、複数のセレクタ103及び加算器104を備える。セレクタ103は、0ビット列かシフタ側入力かを選択し、ANDゲートにより実装されてよい。
【0063】
乗算の内容は、被乗数102のビット列が1ビットずつシフトされて加算器104に入力される。この際、乗数の各ビットの内容により、0のビット列が入力されるか被乗数102のビット列が入力されるかが決定される。そして、入力されたビット列の和が求められることにより、積が得られる。
【0064】
ここで、微小正数及び微小負数は、乗算器1000の被乗数102側に入力されてよい。これは、微小正数及び微小負数が特定の値(例えば、1のビット連続する形式)であり、乗算器1000が特定の内部構造(例えば、ブースアルゴリズムを使用する乗算器1000)である場合に、乗算器1000内部で大量のゼロが発生し、電力が必要以上に低下するためである。
【0065】
図13は、実施形態の一例における演算処理システム100の構成例を模式的に示すブロック図である。
【0066】
演算処理システム100は、ホストマシン1及びDL実行ハードウェア2を備える。また、ホストマシン1及びDL実行ハードウェア2は、利用者3によって操作される。
【0067】
利用者3は、ホストマシン1に接続し、DL実行ハードウェア2を操作し、DL実行ハードウェア2において深層学習を実行させる。
【0068】
ホストマシン1は、演算処理装置の一例であり、利用者3からの指示に従い、DL実行ハードウェア2が実行するプログラムを生成し、DL実行ハードウェア2に送信する。
【0069】
DL実行ハードウェア2は、ホストマシン1から送信されたプログラムを実行し、実行結果のデータを生成する。
【0070】
図14は、
図13に示した演算処理システム100におけるDL処理を説明するブロック図である。
【0071】
利用者3は、ホストマシン1におけるプログラム110に対して、DL設計情報を入力する。ホストマシン1は、DL設計情報が入力されたプログラム110をDL実行プログラムとしてDL実行ハードウェア2に入力する。利用者3は、DL実行ハードウェア2に対して、学習データを入力する。そして、DL実行ハードウェア2は、DL実行プログラムと学習データとに基づき、実行結果を利用者3に提示する。
【0072】
図15は、
図13に示したホストマシン1におけるDL処理を説明するフローチャートである。
【0073】
符号C1に示すように、アプリケーションにおいて、利用者3とのユーザインタフェースが実装される。アプリケーションは、利用者3からDL設計情報の入力を受け付け、入力結果を表示させる。アプリケーションにおけるDL実行の機能は、下位のレイヤにあるライブラリの機能を使って実装される。
【0074】
符号C2に示すように、ライブラリにおいて、ホストマシン1におけるアプリケーションの実装が補佐される。DL実行に関する機能はライブラリで提供される。
【0075】
符号C3に示すように、ユーザモードのドライバは、通常、ライブラリから呼び出される。なお、ユーザモードのドライバは、アプリケーションから直接に読み出されてもよい。ユーザモードのドライバは、DL実行ハードウェア2のためのプログラムコードを作成するコンパイラとして機能する。
【0076】
符号C4に示すように、カーネルモードのドライバは、ユーザモードのドライバから呼び出され、DL実行ハードウェア2と通信する。ハードウェアと直接にアクセスするため、カーネルモードのドライバとして実装される。
【0077】
図16は、
図13に示したホストマシン1におけるハードウェア構成例を模式的に示すブロック図である。
【0078】
ホストマシン1は、プロセッサ11,Random Access Memory(RAM)12,Hard Disk Drive(HDD)13,内部バス14,高速入出力インターフェース15及び低速入出力インターフェース16を備える。
【0079】
RAM12は、プロセッサ11が実行するプログラムやデータを記憶する。RAM12の形式としては、例えば、Double-Data-Rate4 Synchronous Dynamic Random Access Memory(DDR4-SDRAM)であってよい。
【0080】
HDD13は、プロセッサ11が実行するプログラムやデータを記憶する。HDD13は、Solid State Drive(SSD)やStorage Class Memory(SCM)等であってもよい。
【0081】
内部バス14は、プロセッサ11と比較して低速な周辺機器とプロセッサ11とを接続し、通信を中継する。
【0082】
高速入出力インターフェース15は、プロセッサ11とホストマシン1の外部にあるDL実行ハードウェア2とを接続する。高速入出力インターフェース15は、例えば、Peripheral Component Interconnect Express(PCI Express)であってよい。
【0083】
低速入出力インターフェース16は、利用者3によるホストマシン1への接続を実現する。低速入出力インターフェース16は、例えば、キーボードやマウスと接続される。また、低速入出力インターフェース16は、Ethernet(登録商標)によるネットワーク越しに利用者3に接続されてもよい。
【0084】
プロセッサ11は、例示的に、種々の制御や演算を行なう処理装置であり、RAM12に格納されたOperating System(OS)やプログラムを実行することにより、種々の機能を実現する。すなわち、プロセッサ11は、
図18を用いて後述するように、ゼロ生成処理変形部111及びプログラム生成部112として機能してよい。
【0085】
なお、これらのゼロ生成処理変形部111及びプログラム生成部112としての機能を実現するためのプログラムは、例えばフレキシブルディスク、CD(CD-ROM、CD-R、CD-RW等)、DVD(DVD-ROM、DVD-RAM、DVD-R、DVD+R、DVD-RW、DVD+RW、HD DVD等)、ブルーレイディスク、磁気ディスク、光ディスク、光磁気ディスク等の、コンピュータ読取可能な記録媒体に記録された形態で提供されてよい。そして、コンピュータ(本実施形態ではプロセッサ11)は上述した記録媒体から図示しない読取装置を介してプログラムを読み取って内部記録装置または外部記録装置に転送し格納して用いてよい。また、プログラムを、例えば磁気ディスク,光ディスク,光磁気ディスク等の記憶装置(記録媒体)に記録しておき、記憶装置から通信経路を介してコンピュータに提供してもよい。
【0086】
ゼロ生成処理変形部111及びプログラム生成部112としての機能を実現する際には、内部記憶装置(本実施形態ではRAM12)に格納されたプログラムがコンピュータ(本実施形態ではプロセッサ11)によって実行されてよい。また、記録媒体に記録されたプログラムをコンピュータが読み取って実行してもよい。
【0087】
プロセッサ11は、ホストマシン1全体の動作を制御する。プロセッサ11は、マルチプロセッサであってもよい。プロセッサ11は、例えばCentral Processing Unit(CPU)やMicro Processing Unit(MPU),Digital Signal Processor(DSP),Application Specific Integrated Circuit(ASIC),Programmable Logic Device(PLD),Field Programmable Gate Array(FPGA)のいずれか一つであってもよい。また、プロセッサ11は、CPU,MPU,DSP,ASIC,PLD,FPGAのうちの2種類以上の要素の組み合わせであってもよい。
【0088】
図17は、
図13に示したDL実行ハードウェア2のハードウェア構成例を模式的に示すブロック図である。
【0089】
DL実行ハードウェア2は、DL実行プロセッサ21,制御部22,メモリアクセスコントローラ23,内部RAM24及び高速入出力インターフェース25を備える。
【0090】
制御部22は、ホストマシン1からの指令に基づき、DL実行プロセッサ21を駆動させたり、内部RAM24にプログラムやデータを転送させたりする。
【0091】
メモリアクセスコントローラ23は、DL実行プロセッサ21や制御部22からの信号を選択し、メモリアクセスのためのプログラムに従ってメモリアクセスを行なう。
【0092】
内部RAM24は、DL実行プロセッサ21が実行するプログラムや処理対象のデータ,処理結果のデータを記憶する。内部RAM24は、DDR4-SDRAMであってもよいし、より高速なGraphics Double-Data-Rate5(GDDR5)やより広帯域なHigh Bandwidth Memory2(HBM2)等であってもよい。
【0093】
高速入出力インターフェース25は、DL実行プロセッサ21をホストマシン1と接続する。高速入出力インターフェース25におけるプロトコルとしては、例えば、PCI Expressであってよい。
【0094】
DL実行プロセッサ21は、ホストマシン1から与えられたプログラムやデータに基づき、深層学習の処理を実行する。
【0095】
DL実行プロセッサ21は、例示的に、種々の制御や演算を行なう処理装置であり、内部RAM24に格納されたOSやプログラムを実行することにより、種々の機能を実現する。
【0096】
なお、種々の機能を実現するためのプログラムは、例えばフレキシブルディスク、CD(CD-ROM、CD-R、CD-RW等)、DVD(DVD-ROM、DVD-RAM、DVD-R、DVD+R、DVD-RW、DVD+RW、HD DVD等)、ブルーレイディスク、磁気ディスク、光ディスク、光磁気ディスク等の、コンピュータ読取可能な記録媒体に記録された形態で提供されてよい。そして、コンピュータ(本実施形態ではプロセッサ11)は上述した記録媒体から図示しない読取装置を介してプログラムを読み取って内部記録装置または外部記録装置に転送し格納して用いてよい。また、プログラムを、例えば磁気ディスク,光ディスク,光磁気ディスク等の記憶装置(記録媒体)に記録しておき、記憶装置から通信経路を介してコンピュータに提供してもよい。
【0097】
DL実行プロセッサ21における種々の機能を実現する際には、内部記憶装置(本実施形態では内部RAM24)に格納されたプログラムがコンピュータ(本実施形態ではDL実行プロセッサ21)によって実行されてよい。また、記録媒体に記録されたプログラムをコンピュータが読み取って実行してもよい。
【0098】
DL実行プロセッサ21は、DL実行ハードウェア2全体の動作を制御する。DL実行プロセッサ21は、マルチプロセッサであってもよい。DL実行プロセッサ21は、例えばCPUやMPU,DSP,ASIC,PLD,FPGAのいずれか一つであってもよい。また、DL実行プロセッサ21は、CPU,MPU,DSP,ASIC,PLD,FPGAのうちの2種類以上の要素の組み合わせであってもよい。
【0099】
図18は、
図13に示したホストマシン1における機能構成例を模式的に示すブロック図である。
【0100】
図18に示すように、ホストマシン1のプロセッサ11は、ゼロ生成処理変形部111及びプログラム生成部112として機能する。
【0101】
プログラム生成部112は、ニューラルネットワーク記述データ106とプログラム生成パラメータ107との入力に基づき、DL実行ハードウェア2において実行されるニューラルネットワーク実行プログラム108を生成する。
【0102】
ゼロ生成処理変形部111は、ニューラルネットワーク記述データ106の内容を変更することにより、ReLU演算の内容を変形する。
図18に示すように、ゼロ生成処理変形部111は、第1出力部1111及び第2出力部1112として機能する。
【0103】
第1出力部1111は、
図8及び
図10等に示したように、入力値を境界値(例えば、0)と比較し、境界値を超過した入力値に対して入力値と等しい値を出力する。
【0104】
第2出力部1112は、
図8及び
図10等に示したように、境界値以下である入力値に対して一定の出力値を出力する正規化線形関数の演算(別言すれば、「ReLU演算」)において、境界値以下の入力値に対して0よりも大きい微小値εの倍数を出力する。
【0105】
第2出力部1112は、
図8等に示したように、入力値と微小値εとの積を出力値として出力してよい。また、第2出力部1112は、
図12等を用いて前述したように、入力値を乗数とすると共に微小値εを被乗数として乗算器1000に入力することにより、出力値を出力してよい。
【0106】
第2出力部1112は、
図10等に示したように、微小値εについて、-εと0と+εとのうちいずれかの値を出力値として出力してよい。
【0107】
〔B-2〕動作例
図13に示したホストマシン1におけるプログラムの生成処理を、
図19に示すフローチャートを用いて説明する。
【0108】
プログラム生成部112は、ネットワーク中の各層の依存関係を整理する(ステップS1)。プログラム生成部112は、順伝播の順に各層を並び替え、Layer[0], Layer[1], …, Layer[L-1]として管理する。
【0109】
プログラム生成部112は、Layer[0], Layer[1], …, Layer[L-1]のそれぞれについて、順伝播及び逆伝播のプログラムを生成する(ステップS2)。ステップS2における処理の詳細は、
図20を用いて後述する。
【0110】
プログラム生成部112は、Layer[0], Layer[1], …, Layer[L-1]の順伝播及び逆伝播を呼び出すコードを生成する(ステップS3)。そして、プログラムの生成処理は終了する。
【0111】
次に、
図13に示したホストマシン1における順伝播及び逆伝播のプログラムの生成処理(
図19のステップS2)の詳細を、
図20に示すフローチャートを用いて説明する。
【0112】
プログラム生成部112は、生成するプログラムの種類がReLUであるかを判定する(ステップS11)。
【0113】
生成するプログラムの種類がReLUである場合には(ステップS11のYesルート参照)、プログラム生成部112は、ゼロ生成処理変形部111からの出力に基づき、変形ReLUの処理を実行するプログラムを生成する(ステップS12)。そして、順伝播及び逆伝播のプログラムの生成処理は終了する。なお、ゼロ生成処理変形部111からの出力は、
図21~
図24のいずれかのフローチャートを用いて後述する処理によって実現されてよい。
【0114】
一方、生成するプログラムの種類がReLUでない場合には(ステップS11のNoルート参照)、プログラム生成部112は、通常の処理によってプログラムを生成する(ステップS13)。そして、順伝播及び逆伝播のプログラムの生成処理は終了する。
【0115】
次に、
図13に示したホストマシン1における第2のReLU演算の順伝播処理(
図20のステップS12)の詳細を、
図21に示すフローチャートを用いて説明する。
【0116】
ゼロ生成処理変形部111は、入力値xを一時領域に格納する(ステップS21)。
【0117】
ゼロ生成処理変形部111は、入力値xが正数であるかを判定する(ステップS22)。
【0118】
入力値xが正数である場合には(ステップS22のYesルート参照)、ゼロ生成処理変形部111の第1出力部1111は、入力値xを出力値zとする(ステップS23)。そして、処理はステップS25へ進む。
【0119】
一方、入力値xが正数でない場合には(ステップS22のNoルート参照)、ゼロ生成処理変形部111の第2出力部1112は、入力値xεを出力値zとする(ステップS24)。
【0120】
ゼロ生成処理変形部111は、出力値zを出力する(ステップS25)。そして、第2のReLU演算の順伝播処理は終了する。
【0121】
次に、
図13に示したホストマシン1における第2のReLU演算の逆伝播処理(
図20のステップS12)の詳細を、
図22に示すフローチャートを用いて説明する。
【0122】
ゼロ生成処理変形部111は、順伝播の際の入力値xを一時領域から読み込む(ステップS31)。
【0123】
ゼロ生成処理変形部111は、入力値xが正数であるかを判定する(ステップS32)。
【0124】
入力値xが正数である場合には(ステップS32のYesルート参照)、ゼロ生成処理変形部111の第1出力部1111は、1を微分係数Dとする(ステップS33)。そして、処理はステップS35へ進む。
【0125】
一方、入力値xが正数でない場合には(ステップS32のNoルート参照)、ゼロ生成処理変形部111の第2出力部1112は、εを微分係数Dとする(ステップS34)。
【0126】
ゼロ生成処理変形部111は、微分係数Dと入力値dzとの積を出力する(ステップS35)。そして、第2のReLU演算の逆伝播処理は終了する。
【0127】
次に、
図13に示したホストマシン1における第3のReLU演算の順伝播処理(
図20のステップS12)の詳細を、
図23に示すフローチャートを用いて説明する。
【0128】
ゼロ生成処理変形部111は、入力値xを一時領域に格納する(ステップS41)。
【0129】
ゼロ生成処理変形部111は、入力値xが正数であるかを判定する(ステップS42)。
【0130】
入力値xが正数である場合には(ステップS42のYesルート参照)、ゼロ生成処理変形部111の第1出力部1111は、入力値xを出力値zとする(ステップS43)。そして、処理はステップS50へ進む。
【0131】
入力値xが正数でない場合には(ステップS42のNoルート参照)、ゼロ生成処理変形部111の第2出力部1112は、0,1,2,3の範囲で乱数r1を生成する(ステップS44)。
【0132】
第2出力部1112は、乱数r1が0であるかを判定する(ステップS45)。
【0133】
乱数r1が0である場合には(ステップS45のYesルート参照)、第2出力部1112は、εを出力値zとする(ステップS46)。そして、処理はステップS50へ進む。
【0134】
一方、乱数r1が0でない場合には(ステップS45のNoルート参照)、第2出力部1112は、乱数r1が1であるかを判定する(ステップS47)。
【0135】
乱数r1が1である場合には(ステップS47のYesルート参照)、第2出力部1112は、-εを出力値zとする(ステップS48)。そして、処理はステップS50へ進む。
【0136】
一方、乱数r1が1でない場合には(ステップS47のNoルート参照)、第2出力部1112は、0を出力値zとする(ステップS49)。
【0137】
ゼロ生成処理変形部111は、出力値zを出力する(ステップS50)。そして、第3のReLU演算の順伝播処理は終了する。
【0138】
次に、
図13に示したホストマシン1における第3のReLU演算の逆伝播処理(
図20のステップS12)の詳細を、
図24に示すフローチャートを用いて説明する。
【0139】
ゼロ生成処理変形部111は、順伝播の際の入力値xを一時領域から読み込む(ステップS51)。
【0140】
ゼロ生成処理変形部111は、入力値xが正数であるかを判定する(ステップS52)。
【0141】
入力値xが正数である場合には(ステップS52のYesルート参照)、ゼロ生成処理変形部111の第1出力部1111は、1を微分係数Dとする(ステップS53)。そして、処理はステップS60へ進む。
【0142】
入力値xが正数でない場合には(ステップS52のNoルート参照)、ゼロ生成処理変形部111の第2出力部1112は、0,1,2,3の範囲で乱数r2を生成する(ステップS54)。
【0143】
第2出力部1112は、乱数r2が0であるかを判定する(ステップS55)。
【0144】
乱数r2が0である場合には(ステップS55のYesルート参照)、第2出力部1112は、εを微分係数Dとする(ステップS56)。そして、処理はステップS60へ進む。
【0145】
一方、乱数r2が0でない場合には(ステップS55のNoルート参照)、第2出力部1112は、乱数r2が1であるかを判定する(ステップS57)。
【0146】
乱数r2が1である場合には(ステップS57のYesルート参照)、第2出力部1112は、-εを微分係数Dとする(ステップS58)。そして、処理はステップS60へ進む。
【0147】
一方、乱数r2が1でない場合には(ステップS57のNoルート参照)、第2出力部1112は、0を微分係数Dとする(ステップS59)。
【0148】
ゼロ生成処理変形部111は、微分係数Dと入力値dzとの積を出力する(ステップS60)。そして、第3のReLU演算の逆伝播処理は終了する。
【0149】
〔B-3〕効果
上述した実施形態の一例におけるホストマシン1によれば、例えば、以下の作用効果を奏することができる。
【0150】
第1出力部1111は、入力値を境界値と比較し、境界値を超過した入力値に対して入力値と等しい値を出力する。第2出力部1112は、境界値以下である入力値に対して一定の出力値を出力するReLU演算において、境界値以下の入力値に対して0よりも大きい微小値εの倍数を出力する。
【0151】
これにより、消費電力を増加させずにプロセッサ11の電圧降下を防止することができる。具体的には、学習の品質を変えることなく、ゼロ値の生成を抑止し、電力の変動を防ぐことができる。また、ReLU演算及びその後の計算で電力が増加するものの、他の計算では基準電圧が低下するため、低電力でDLを実行できる。すなわち、電力変動を抑えて、高めの電圧設定を不要にできる。
【0152】
第2出力部1112は、入力値と微小値εとの積を出力値として出力する。
【0153】
これにより、ゼロ値の出力の可能性を低減できる。
【0154】
第2出力部1112は、入力値を乗数とすると共に微小値εを被乗数として乗算器1000に入力することにより、出力値を出力する。
【0155】
これにより、乗算器1000における電力低減を防止できる。
【0156】
第2出力部1112は、微小値εについて、-εと0と+εとのうちいずれかの値を出力値として出力する。
【0157】
これにより、ReLU演算の出力値を限定できるため、DL実行プログラムの生成を効率的に実施できる。
【0158】
〔C〕その他
開示の技術は上述した実施形態に限定されるものではなく、本実施形態の趣旨を逸脱しない範囲で種々変形して実施することができる。本実施形態の各構成及び各処理は、必要に応じて取捨選択することができ、あるいは適宜組み合わせてもよい。
【0159】
〔D〕付記
以上の実施形態に関し、さらに以下の付記を開示する。
【0160】
(付記1)
入力値を境界値と比較し、前記境界値を超過した前記入力値に対して前記入力値と等しい値を出力する第1出力部と、
前記境界値以下である前記入力値に対して一定の出力値を出力する正規化線形関数の演算において、前記境界値以下の前記入力値に対して0よりも大きい微小値εの倍数を出力する第2出力部と、
を備える、演算処理装置。
【0161】
(付記2)
前記第2出力部は、前記入力値と前記微小値εとの積を前記出力値として出力する、
付記1に記載の演算処理装置。
【0162】
(付記3)
前記第2出力部は、前記入力値を乗数とすると共に前記微小値εを被乗数として乗算器に入力することにより、前記出力値を出力する、
付記1又は2に記載の演算処理装置。
【0163】
(付記4)
前記第2出力部は、前記微小値εについて、-εと0と+εとのうちいずれかの値を前記出力値として出力する、
付記1に記載の演算処理装置。
【0164】
(付記5)
コンピュータに、
入力値を境界値と比較し、前記境界値を超過した前記入力値に対して前記入力値と等しい値を出力し、
前記境界値以下である前記入力値に対して一定の出力値を出力する正規化線形関数の演算において、前記境界値以下の前記入力値に対して0よりも大きい微小値εの倍数を出力する、
処理を実行させる、プログラム。
【0165】
(付記6)
前記入力値と前記微小値εとの積を前記出力値として出力する、
処理を前記コンピュータに実行させる、付記5に記載のプログラム。
【0166】
(付記7)
前記入力値を乗数とすると共に前記微小値εを被乗数として乗算器に入力することにより、前記出力値として出力する、
処理を前記コンピュータに実行させる、付記5又は6に記載のプログラム。
【0167】
(付記8)
前記微小値εについて、-εと0と+εとのうちいずれかの値を前記出力値として出力する、
処理を前記コンピュータに実行させる、付記5に記載のプログラム。
【0168】
(付記9)
入力値を境界値と比較し、前記境界値を超過した前記入力値に対して前記入力値と等しい値を出力し、
前記境界値以下である前記入力値に対して一定の出力値を出力する正規化線形関数の演算において、前記境界値以下の前記入力値に対して0よりも大きい微小値εの倍数を出力する、
演算処理装置の制御方法。
【0169】
(付記10)
前記入力値と前記微小値εとの積を前記出力値として出力する、
付記9に記載の演算処理装置の制御方法。
【0170】
(付記11)
前記入力値を乗数とすると共に前記微小値εを被乗数として乗算器に入力することにより、前記出力値として出力する、
付記9又は10に記載の演算処理装置の制御方法。
【0171】
(付記12)
前記微小値εについて、-εと0と+εとのうちいずれかの値を前記出力値として出力する、
付記9に記載の演算処理装置の制御方法。
【符号の説明】
【0172】
100 :演算処理システム
1000 :乗算器
101 :乗数
102 :被乗数
103 :セレクタ
104 :加算器
105 :出力
106 :ニューラルネットワーク記述データ
107 :プログラム生成パラメータ
108 :ニューラルネットワーク実行プログラム
110 :プログラム
1 :ホストマシン
11 :プロセッサ
111 :ゼロ生成処理変形部
112 :プログラム生成部
1111 :第1出力部
1112 :第2出力部
12 :RAM
13 :HDD
14 :内部バス
15,25:高速入出力インターフェース
16 :低速入出力インターフェース
2 :DL実行ハードウェア
21 :DL実行プロセッサ
22 :制御部
23 :メモリアクセスコントローラ
24 :内部RAM
3 :利用者
61 :細胞体
62 :シナプス
63 :樹状突起
64 :軸索