(57)【要約】      （修正有）【課題】消費電力を増加させずにプロセッサの電圧降下を防止する演算処理装置，プログラム及び演算処理装置の制御方法を提供する。【解決手段】演算処理システムにおいて、ホストマシンは、入力値を境界値と比較し、境界値を超過した入力値に対して入力値と等しい値を出力する第１出力部１１１１と、境界値以下である入力値に対して一定の出力値を出力する正規化線形関数の演算において、境界値以下の入力値に対して０よりも大きい微小値εの倍数を出力する第２出力部１１１２と、を備える。【選択図】図１８
2020119213.tif 000002
【特許請求の範囲】
【請求項１】
入力値を境界値と比較し、前記境界値を超過した前記入力値に対して前記入力値と等しい値を出力する第１出力部と、
前記境界値以下である前記入力値に対して一定の出力値を出力する正規化線形関数の演算において、前記境界値以下の前記入力値に対して０よりも大きい微小値εの倍数を出力する第２出力部と、
を備える、演算処理装置。
【請求項２】
前記第２出力部は、前記入力値と前記微小値εとの積を前記出力値として出力する、
請求項１に記載の演算処理装置。
【請求項３】
前記第２出力部は、前記入力値を乗数とすると共に前記微小値εを被乗数として乗算器に入力することにより、前記出力値を出力する、
請求項１又は２に記載の演算処理装置。
【請求項４】
前記第２出力部は、前記微小値εについて、−εと０と＋εとのうちいずれかの値を前記出力値として出力する、
請求項１に記載の演算処理装置。
【請求項５】
コンピュータに、
入力値を境界値と比較し、前記境界値を超過した前記入力値に対して前記入力値と等しい値を出力し、
前記境界値以下である前記入力値に対して一定の出力値を出力する正規化線形関数の演算において、前記境界値以下の前記入力値に対して０よりも大きい微小値εの倍数を出力する、
処理を実行させる、プログラム。
【請求項６】
入力値を境界値と比較し、前記境界値を超過した前記入力値に対して前記入力値と等しい値を出力し、
前記境界値以下である前記入力値に対して一定の出力値を出力する正規化線形関数の演算において、前記境界値以下の前記入力値に対して０よりも大きい微小値εの倍数を出力する、
演算処理装置の制御方法。
【発明の詳細な説明】
【技術分野】
【０００１】
本発明は、演算処理装置，プログラム及び演算処理装置の制御方法に関する。
【背景技術】
【０００２】
Deep Learning（ＤＬ）を高速に実行するプロセッサでは、大量の演算器が実装され、並列演算が実行される。並列演算では、全ての演算器が同じ演算を実行するため、実行する命令や種類やデータの内容によって大量の演算器全体の電力が急激に変化する場合がある。
【０００３】
プロセッサは同一電圧条件で作動するため、電力が増加すると電流が増加する。通常Direct Current（ＤＣ）−ＤＣコンバータが電流の増加に追従するが、変化が急激であると、電流の増加に追従できず、電圧が降下する。
【０００４】
プロセッサに供給される電圧が降下すると半導体のスイッチング速度が低下し、タイミング制約を満たせなくなることにより、プロセッサの誤動作が発生するおそれがある。
【先行技術文献】
【特許文献】
【０００５】
【特許文献１】国際公開２０１７／０３８１０４号
【特許文献２】特開平１１−２２４２４６号公報
【発明の概要】
【発明が解決しようとする課題】
【０００６】
電圧降下によるプロセッサの誤動作は常時電圧を高めに設定することにより解決できるが、常時電圧を高めに設定すると消費電力が増加してしまうという課題がある。
【０００７】
１つの側面では、消費電力を増加させずにプロセッサの電圧降下を防止することを目的とする。
【課題を解決するための手段】
【０００８】
演算処理装置は、入力値を境界値と比較し、前記境界値を超過した前記入力値に対して前記入力値と等しい値を出力する第１出力部と、前記境界値以下である前記入力値に対して一定の出力値を出力する正規化線形関数の演算において、前記境界値以下の前記入力値に対して０よりも大きい微小値εの倍数を出力する第２出力部と、を備える。
【発明の効果】
【０００９】
１つの側面では、消費電力を増加させずにプロセッサの電圧降下を防止することができる。
【図面の簡単な説明】
【００１０】
【図１】関連例における神経細胞のモデル化を説明する図である。
【図２】関連例における命令の種類による電力変動の第１の例を説明する図である。
【図３】関連例における命令の種類による電力変動の第２の例を説明する図である。
【図４】関連例における命令の種類による電力変動の第３の例を説明する図である。
【図５】関連例における命令の種類による電力変動の第３の例を説明する図である。
【図６】実施形態の一例における第１のRectified Linear Unit（ＲｅＬＵ）演算処理を説明する図である。
【図７】実施形態の一例におけるＲｅＬＵの第１の順伝播処理及び第１の逆伝播処理を説明する図である。
【図８】実施形態の一例における第２のＲｅＬＵ演算処理を説明する図である。
【図９】実施形態の一例におけるＲｅＬＵの第２の順伝播処理及び第２の逆伝播処理を説明する図である。
【図１０】実施形態の一例における第３のＲｅＬＵ演算処理を説明する図である。
【図１１】実施形態の一例におけるＲｅＬＵの第３の順伝播処理及び第３の逆伝播処理を説明する図である。
【図１２】実施形態の一例における乗算器の構成例を模式的に示すブロック図である。
【図１３】実施形態の一例における演算処理システムの構成例を模式的に示すブロック図である。
【図１４】図１３に示した演算処理システムにおけるＤＬ処理を説明するブロック図である。
【図１５】図１３に示したホストマシンにおけるＤＬ処理を説明するフローチャートである。
【図１６】図１３に示したホストマシンにおけるハードウェア構成例を模式的に示すブロック図である。
【図１７】図１３に示したＤＬ実行ハードウェアのハードウェア構成例を模式的に示すブロック図である。
【図１８】図１３に示したホストマシンにおける機能構成例を模式的に示すブロック図である。
【図１９】図１３に示したホストマシンにおけるプログラムの生成処理を説明するフローチャートである。
【図２０】図１３に示したホストマシンにおける順伝播及び逆伝播のプログラムの生成処理の詳細を説明するフローチャートである。
【図２１】図１３に示したホストマシンにおける第２のＲｅＬＵ演算の順伝播処理の詳細を説明するフローチャートである。
【図２２】図１３に示したホストマシンにおける第２のＲｅＬＵ演算の逆伝播処理の詳細を説明するフローチャートである。
【図２３】図１３に示したホストマシンにおける第３のＲｅＬＵ演算の順伝播処理の詳細を説明するフローチャートである。
【図２４】図１３に示したホストマシンにおける第３のＲｅＬＵ演算の逆伝播処理の詳細を説明するフローチャートである。
【発明を実施するための形態】
【００１１】
以下、図面を参照して一実施の形態を説明する。ただし、以下に示す実施形態はあくまでも例示に過ぎず、実施形態で明示しない種々の変形例や技術の適用を排除する意図はない。すなわち、本実施形態を、その趣旨を逸脱しない範囲で種々変形して実施することができる。
【００１２】
また、各図は、図中に示す構成要素のみを備えるという趣旨ではなく、他の機能等を含むことができる。
【００１３】
以下、図中において、同一の各符号は同様の部分を示しているので、その説明は省略する。
【００１４】
〔Ａ〕関連例
図１は、関連例における神経細胞のモデル化を説明する図である。
【００１５】
ニューラルネットワークを多層に拡張したDeep Neural Networkは、従来解決が困難であった問題に適用できることが判明し、様々な分野へ適用されることが予想される。
【００１６】
図１に示すように、脳の神経細胞（別言すれば、「ニューロン」）は、細胞体６１，シナプス６２，樹状突起６３及び軸索６４を含む。神経細胞が機械的にモデル化されることにより、ニューラルネットワークが生成される。
【００１７】
Deep Neural Networkの学習処理における演算は、内積演算等であり単純ではあるが、大量に実行される場合がある。そのため、これらの演算を高速に実行するプロセッサでは、大量の演算器を並列に作動させることにより性能の向上が図られる。
【００１８】
Deep Neural Networkの学習処理を実行する演算器では、実行する命令の種類やデータの内容によって全ての演算器における電力が急激に変化する場合がある。
【００１９】
例えば、整数加算命令（別言すれば、「ＡＤＤ演算命令」）は、浮動小数点積和命令（別言すれば、「Fused Multiply-Add（ＦＭＡ）演算命令」）よりも消費電力が小さい。これは、命令の種類によってプロセッサ内部で使用されるリソースが異なるためである。整数加算命令では１つの加算器に限って使用されるが、浮動小数点積和命令では乗算を実行するための複数の加算器やよりビット幅の広い加算器が使用される。
【００２０】
命令の種類による電力の変動は、事前にどのような命令を実行するかが分かっているため、対処が可能である。例えば、浮動小数点積和命令が支配的であるプログラムの一部区間で整数加算命令を実行する場合に、整数加算命令と浮動小数点積和命令とを交互に実行させる。これにより、全体としての電力の変動を抑えることができる。
【００２１】
図２は、関連例における命令の種類による電力変動の第１の例を説明する図である。
【００２２】
図２に示す例では、ＦＭＡ演算命令が１０命令実行された後、ＡＤＤ演算命令が１０命令実行される。このような命令列では、ＦＭＡ演算命令がＡＤＤ演算命令に切り替わると電力低下が発生する。
【００２３】
図３は、関連例における命令の種類による電力変動の第２の例を説明する図である。
【００２４】
図３に示す例では、ＦＭＡ演算命令が５命令実行された後、ＡＤＤ演算命令とＦＭＡ演算命令とが交互に実行される。このように、ＦＭＡ演算命令とＡＤＤ演算命令とが織り交ぜて実行されることで電力の急激な低下が抑えられる。
【００２５】
同じ浮動小数点積和命令が実行されても、データの内容としてゼロが入力され続けると電力が低下する。通常はある程度の割合で入力データが０又は１に変化するが、同じ値が入力され続けると論理素子の状態が固定され、電力が低下する。特にゼロ値は、乗算の場合には、もう一方のオペランドにどのような値が入力されても同じ結果である０が返されるため、スイッチング回数が削減される傾向が強い。
【００２６】
事前にどのようなデータが入力されるかが不明であるため、データの内容による電力の変動へ対処することは容易でない。
【００２７】
図４及び図５は、関連例における命令の種類による電力変動の第３の例を説明する図である。
【００２８】
図４の符号Ａ１に示すように、フラグレジスタの４０番（図示する例では「%fr40」）から４５番（図示する例では「%fr45」）までに、命令列としてゼロが格納されている。図５に示すように、ゼロを用いた演算が実行されると、その期間における電力が低下する。
【００２９】
このように、プロセッサの電力変動の原因は、命令の種類によるものと、命令が読み込むデータによるものとがある。例えば、整数加算命令は消費電力が低いが、浮動小数点積和命令は消費電力が高い。また、同じ浮動小数点積和命令でも、ゼロが入力されると消費電力が低くなる。
【００３０】
命令の種類の違いによる電力変動は、プログラム作成の際に実行する命令が既知となるため、命令の組み合わせによって回避することが可能である。
【００３１】
一方、命令のデータに起因する電力変動は、プログラム作成の際にオペランドの内容が不明であるため、対策が容易でない。特に、ゼロ値が連続して入力されると、演算器内の殆どの値がゼロに固定されるため、電力が急激に低下する。
【００３２】
〔Ｂ〕実施形態の一例
〔Ｂ−１〕システム構成例
ＤＬにおいては、Multiply-Add命令を実行し、内積を求める処理が大半を占める。この際に、入力にゼロが連続して現われるとMultiply-Add命令の実行の際の入力が急激に低下し、誤動作の原因となる。
【００３３】
図６は、第１のＲｅＬＵ演算の処理を説明する図である。
【００３４】
ＤＬの学習処理においてＲｅＬＵ演算と呼ばれる処理が明示的にゼロを生成する。ＲｅＬＵ演算は、１つの入力を受け取り、１つの出力を生成する。図６及び以下の数式１に示すように、与えられた入力値が正であれば入力値がそのまま出力され、入力値が０又は負であれば０が出力される。
【数１】
2020119213.tif 000003
【００３５】
図７は、実施形態の一例におけるＲｅＬＵの第１の順伝播処理及び第１の逆伝播処理を説明する図である。
【００３６】
図７に示すように、順伝播の際の入力ｘ（符号Ｂ１参照）は、変形ＲｅＬＵ順伝播処理（符号Ｂ２参照）によって、出力ｚ（符号Ｂ３参照）に変換される。ここで、入力ｘと出力ｚとの関係は、以下の数式２によって表わされる。
【数２】
2020119213.tif 000004
【００３７】
また、順伝播の際の入力ｘは、逆伝播の実行の際まで一時領域に格納される（符号Ｂ４参照）。
【００３８】
そして、逆伝播の際の入力ｄｚ（符号Ｂ５参照）は、一時領域の入力ｘを参照する変形ＲｅＬＵ逆伝播処理（符号Ｂ６参照）により、出力ｄｘ（符号Ｂ７参照）に変換される。ここで、入力ｄｚと出力ｄｘとの関係は、以下の数式３によって表わされる。
【数３】
2020119213.tif 000005
【００３９】
ただし、数式１で示したＲｅＬＵ（ｘ）では、入力ｘが負の値である場合には出力は常に０であるため、出力が０である可能性が高い。
【００４０】
そこで、本実施形態の一例においては、入力ｘが負の値である場合に、微小正数（ε）の傾きを有するネガティブスロープが設定されてよい。また、入力ｘが負の値である場合に、ランダムで微小負数（−ε），ゼロ値（０），微小正数（＋ε）のいずれかが出力されてもよい。
【００４１】
微小正数（ε）は絶対値が小さく、ある程度（例えば、半分以上の桁で）１のビットが立っていればよく、例えば、“0x00FFFFFF”及び“0x00CCCCCC”の２つを候補としてよい。“0x00FFFFFF”は、ゼロよりも大きい値FLT_MINに近く、仮数部が全て１になるような数である。“0x00CCCCCC”は、ゼロよりも大きい値FLT_MINに近く、仮数部に０と１とが交互に現れる数である。
【００４２】
ネガティブスロープを設定する方法でも、ランダムで値を出力する方法でも、ゼロの代わりにゼロでない値が使用される場合があるため、演算結果が図６に示した例とは異なる。しかしながら、ＤＬ処理においては順伝播処理（別言すれば、「フォワード処理」）と逆伝播処理（別言すれば、「バックワード処理」）との整合性が取れていれば、本来の計算と異なる処理が行なわれても学習は可能である。
【００４３】
図８は、実施形態の一例における第２のＲｅＬＵ演算処理を説明する図である。
【００４４】
図８に示すように、ネガティブスロープは、負の領域での傾きを示す。ネガティブスロープが０のときは、図６に示したＲｅＬＵ処理と同様となる。
【００４５】
図８に示す例においては、図６に示したＲｅＬＵ処理に対して、ネガティブの値がεに設定されることにより、連続するゼロの生成が抑止される。
【００４６】
図８に示すＲｅＬＵ処理は、Leaky ReLU処理と称されてもよい。
【００４７】
以下の数式４及び数式５に表わすように、入力ｘ値が正の領域では入力値がそのまま出力され、入力値ｘが負の領域では入力値にεを掛けた値が出力される。
【数４】
2020119213.tif 000006
【数５】
2020119213.tif 000007
【００４８】
図９は、実施形態の一例におけるＲｅＬＵの第２の順伝播処理及び第２の逆伝播処理を説明する図である。
【００４９】
図９に示す順伝播処理及び逆伝播処理は、図７に示した順伝播処理及び逆伝播処理と同様である。
【００５０】
ただし、図９に示す変形ＲｅＬＵ順伝播処理（符号Ｂ２１参照）は、以下の数式６を使用して行なわれる。
【数６】
2020119213.tif 000008
【００５１】
また、図９に示す変形ＲｅＬＵ逆伝播処理（符号Ｂ６１参照）は、以下の数式７を使用して行なわれる。
【数７】
2020119213.tif 000009
【００５２】
図１０は、実施形態の一例における第３のＲｅＬＵ演算処理を説明する図である。
【００５３】
図１０に示すＲｅＬＵ処理は、正領域では図６に示したＲｅＬＵ処理と同様だが、負領域では−ε，０，＋εの３つの値からランダムに出力値が選択される（図１０の網掛け部参照）。
【００５４】
すなわち、出力値は以下の数式８及び９によって表わされる。
【数８】
2020119213.tif 000010
【数９】
2020119213.tif 000011
【００５５】
図１１は、実施形態の一例におけるＲｅＬＵの第３の順伝播処理及び第３の逆伝播処理を説明する図である。
【００５６】
図１１に示す順伝播処理及び逆伝播処理は、図７に示した順伝播処理及び逆伝播処理と同様である。
【００５７】
ただし、図１１に示す変形ＲｅＬＵ順伝播処理（符号Ｂ２２参照）は、以下の数式１０を使用して行なわれる。
【数１０】
2020119213.tif 000012
【００５８】
また、図１１に示す変形ＲｅＬＵ逆伝播処理（符号Ｂ６２参照）は、以下の数式１１を使用して行なわれる。
【数１１】
2020119213.tif 000013
【００５９】
図１２は、実施形態の一例における乗算器１０００の構成例を模式的に示すブロック図である。
【００６０】
ＲｅＬＵ（１）の演算結果は様々な値を採り得るが、ＲｅＬＵ（２）の演算結果は−ε，０，＋εの３つの値しか採らない。そのため、実施形態の一例では、乗算器１０００への入力も考慮される。
【００６１】
デジタル計算機の乗算器１０００は、筆算の要領で被乗数と乗数のそれぞれのビットとの部分積を求め、それらの和を求める。
【００６２】
乗算器１０００は、乗数１０１及び被乗数１０２の２つの入力に対して、１つの出力１０５を生成する。また、乗算器１０００は、複数のセレクタ１０３及び加算器１０４を備える。セレクタ１０３は、０ビット列かシフタ側入力かを選択し、ＡＮＤゲートにより実装されてよい。
【００６３】
乗算の内容は、被乗数１０２のビット列が１ビットずつシフトされて加算器１０４に入力される。この際、乗数の各ビットの内容により、０のビット列が入力されるか被乗数１０２のビット列が入力されるかが決定される。そして、入力されたビット列の和が求められることにより、積が得られる。
【００６４】
ここで、微小正数及び微小負数は、乗算器１０００の被乗数１０２側に入力されてよい。これは、微小正数及び微小負数が特定の値（例えば、１のビット連続する形式）であり、乗算器１０００が特定の内部構造（例えば、ブースアルゴリズムを使用する乗算器１０００）である場合に、乗算器１０００内部で大量のゼロが発生し、電力が必要以上に低下するためである。
【００６５】
図１３は、実施形態の一例における演算処理システム１００の構成例を模式的に示すブロック図である。
【００６６】
演算処理システム１００は、ホストマシン１及びＤＬ実行ハードウェア２を備える。また、ホストマシン１及びＤＬ実行ハードウェア２は、利用者３によって操作される。
【００６７】
利用者３は、ホストマシン１に接続し、ＤＬ実行ハードウェア２を操作し、ＤＬ実行ハードウェア２において深層学習を実行させる。
【００６８】
ホストマシン１は、演算処理装置の一例であり、利用者３からの指示に従い、ＤＬ実行ハードウェア２が実行するプログラムを生成し、ＤＬ実行ハードウェア２に送信する。
【００６９】
ＤＬ実行ハードウェア２は、ホストマシン１から送信されたプログラムを実行し、実行結果のデータを生成する。
【００７０】
図１４は、図１３に示した演算処理システム１００におけるＤＬ処理を説明するブロック図である。
【００７１】
利用者３は、ホストマシン１におけるプログラム１１０に対して、ＤＬ設計情報を入力する。ホストマシン１は、ＤＬ設計情報が入力されたプログラム１１０をＤＬ実行プログラムとしてＤＬ実行ハードウェア２に入力する。利用者３は、ＤＬ実行ハードウェア２に対して、学習データを入力する。そして、ＤＬ実行ハードウェア２は、ＤＬ実行プログラムと学習データとに基づき、実行結果を利用者３に提示する。
【００７２】
図１５は、図１３に示したホストマシン１におけるＤＬ処理を説明するフローチャートである。
【００７３】
符号Ｃ１に示すように、アプリケーションにおいて、利用者３とのユーザインタフェースが実装される。アプリケーションは、利用者３からＤＬ設計情報の入力を受け付け、入力結果を表示させる。アプリケーションにおけるＤＬ実行の機能は、下位のレイヤにあるライブラリの機能を使って実装される。
【００７４】
符号Ｃ２に示すように、ライブラリにおいて、ホストマシン１におけるアプリケーションの実装が補佐される。ＤＬ実行に関する機能はライブラリで提供される。
【００７５】
符号Ｃ３に示すように、ユーザモードのドライバは、通常、ライブラリから呼び出される。なお、ユーザモードのドライバは、アプリケーションから直接に読み出されてもよい。ユーザモードのドライバは、ＤＬ実行ハードウェア２のためのプログラムコードを作成するコンパイラとして機能する。
【００７６】
符号Ｃ４に示すように、カーネルモードのドライバは、ユーザモードのドライバから呼び出され、ＤＬ実行ハードウェア２と通信する。ハードウェアと直接にアクセスするため、カーネルモードのドライバとして実装される。
【００７７】
図１６は、図１３に示したホストマシン１におけるハードウェア構成例を模式的に示すブロック図である。
【００７８】
ホストマシン１は、プロセッサ１１，Random Access Memory（ＲＡＭ）１２，Hard Disk Drive（ＨＤＤ）１３，内部バス１４，高速入出力インターフェース１５及び低速入出力インターフェース１６を備える。
【００７９】
ＲＡＭ１２は、プロセッサ１１が実行するプログラムやデータを記憶する。ＲＡＭ１２の形式としては、例えば、Double-Data-Rate4 Synchronous Dynamic Random Access Memory（ＤＤＲ４−ＳＤＲＡＭ）であってよい。
【００８０】
ＨＤＤ１３は、プロセッサ１１が実行するプログラムやデータを記憶する。ＨＤＤ１３は、Solid State Drive（ＳＳＤ）やStorage Class Memory（ＳＣＭ）等であってもよい。
【００８１】
内部バス１４は、プロセッサ１１と比較して低速な周辺機器とプロセッサ１１とを接続し、通信を中継する。
【００８２】
高速入出力インターフェース１５は、プロセッサ１１とホストマシン１の外部にあるＤＬ実行ハードウェア２とを接続する。高速入出力インターフェース１５は、例えば、Peripheral Component Interconnect Express（ＰＣＩ  Ｅｘｐｒｅｓｓ）であってよい。
【００８３】
低速入出力インターフェース１６は、利用者３によるホストマシン１への接続を実現する。低速入出力インターフェース１６は、例えば、キーボードやマウスと接続される。また、低速入出力インターフェース１６は、Ｅｔｈｅｒｎｅｔ（登録商標）によるネットワーク越しに利用者３に接続されてもよい。
【００８４】
プロセッサ１１は、例示的に、種々の制御や演算を行なう処理装置であり、ＲＡＭ１２に格納されたOperating System（ＯＳ）やプログラムを実行することにより、種々の機能を実現する。すなわち、プロセッサ１１は、図１８を用いて後述するように、ゼロ生成処理変形部１１１及びプログラム生成部１１２として機能してよい。
【００８５】
なお、これらのゼロ生成処理変形部１１１及びプログラム生成部１１２としての機能を実現するためのプログラムは、例えばフレキシブルディスク、ＣＤ（ＣＤ−ＲＯＭ、ＣＤ−Ｒ、ＣＤ−ＲＷ等）、ＤＶＤ（ＤＶＤ−ＲＯＭ、ＤＶＤ−ＲＡＭ、ＤＶＤ−Ｒ、ＤＶＤ＋Ｒ、ＤＶＤ−ＲＷ、ＤＶＤ＋ＲＷ、ＨＤ  ＤＶＤ等）、ブルーレイディスク、磁気ディスク、光ディスク、光磁気ディスク等の、コンピュータ読取可能な記録媒体に記録された形態で提供されてよい。そして、コンピュータ（本実施形態ではプロセッサ１１）は上述した記録媒体から図示しない読取装置を介してプログラムを読み取って内部記録装置または外部記録装置に転送し格納して用いてよい。また、プログラムを、例えば磁気ディスク，光ディスク，光磁気ディスク等の記憶装置（記録媒体）に記録しておき、記憶装置から通信経路を介してコンピュータに提供してもよい。
【００８６】
ゼロ生成処理変形部１１１及びプログラム生成部１１２としての機能を実現する際には、内部記憶装置（本実施形態ではＲＡＭ１２）に格納されたプログラムがコンピュータ（本実施形態ではプロセッサ１１）によって実行されてよい。また、記録媒体に記録されたプログラムをコンピュータが読み取って実行してもよい。
【００８７】
プロセッサ１１は、ホストマシン１全体の動作を制御する。プロセッサ１１は、マルチプロセッサであってもよい。プロセッサ１１は、例えばCentral Processing Unit（ＣＰＵ）やMicro Processing Unit（ＭＰＵ），Digital Signal Processor（ＤＳＰ），Application Specific Integrated Circuit（ＡＳＩＣ），Programmable Logic Device（ＰＬＤ），Field Programmable Gate Array（ＦＰＧＡ）のいずれか一つであってもよい。また、プロセッサ１１は、ＣＰＵ，ＭＰＵ，ＤＳＰ，ＡＳＩＣ，ＰＬＤ，ＦＰＧＡのうちの２種類以上の要素の組み合わせであってもよい。
【００８８】
図１７は、図１３に示したＤＬ実行ハードウェア２のハードウェア構成例を模式的に示すブロック図である。
【００８９】
ＤＬ実行ハードウェア２は、ＤＬ実行プロセッサ２１，制御部２２，メモリアクセスコントローラ２３，内部ＲＡＭ２４及び高速入出力インターフェース２５を備える。
【００９０】
制御部２２は、ホストマシン１からの指令に基づき、ＤＬ実行プロセッサ２１を駆動させたり、内部ＲＡＭ２４にプログラムやデータを転送させたりする。
【００９１】
メモリアクセスコントローラ２３は、ＤＬ実行プロセッサ２１や制御部２２からの信号を選択し、メモリアクセスのためのプログラムに従ってメモリアクセスを行なう。
【００９２】
内部ＲＡＭ２４は、ＤＬ実行プロセッサ２１が実行するプログラムや処理対象のデータ，処理結果のデータを記憶する。内部ＲＡＭ２４は、ＤＤＲ４−ＳＤＲＡＭであってもよいし、より高速なGraphics Double-Data-Rate5（ＧＤＤＲ５）やより広帯域なHigh Bandwidth Memory2（ＨＢＭ２）等であってもよい。
【００９３】
高速入出力インターフェース２５は、ＤＬ実行プロセッサ２１をホストマシン１と接続する。高速入出力インターフェース２５におけるプロトコルとしては、例えば、ＰＣＩ  Ｅｘｐｒｅｓｓであってよい。
【００９４】
ＤＬ実行プロセッサ２１は、ホストマシン１から与えられたプログラムやデータに基づき、深層学習の処理を実行する。
【００９５】
ＤＬ実行プロセッサ２１は、例示的に、種々の制御や演算を行なう処理装置であり、内部ＲＡＭ２４に格納されたＯＳやプログラムを実行することにより、種々の機能を実現する。
【００９６】
なお、種々の機能を実現するためのプログラムは、例えばフレキシブルディスク、ＣＤ（ＣＤ−ＲＯＭ、ＣＤ−Ｒ、ＣＤ−ＲＷ等）、ＤＶＤ（ＤＶＤ−ＲＯＭ、ＤＶＤ−ＲＡＭ、ＤＶＤ−Ｒ、ＤＶＤ＋Ｒ、ＤＶＤ−ＲＷ、ＤＶＤ＋ＲＷ、ＨＤ  ＤＶＤ等）、ブルーレイディスク、磁気ディスク、光ディスク、光磁気ディスク等の、コンピュータ読取可能な記録媒体に記録された形態で提供されてよい。そして、コンピュータ（本実施形態ではプロセッサ１１）は上述した記録媒体から図示しない読取装置を介してプログラムを読み取って内部記録装置または外部記録装置に転送し格納して用いてよい。また、プログラムを、例えば磁気ディスク，光ディスク，光磁気ディスク等の記憶装置（記録媒体）に記録しておき、記憶装置から通信経路を介してコンピュータに提供してもよい。
【００９７】
ＤＬ実行プロセッサ２１における種々の機能を実現する際には、内部記憶装置（本実施形態では内部ＲＡＭ２４）に格納されたプログラムがコンピュータ（本実施形態ではＤＬ実行プロセッサ２１）によって実行されてよい。また、記録媒体に記録されたプログラムをコンピュータが読み取って実行してもよい。
【００９８】
ＤＬ実行プロセッサ２１は、ＤＬ実行ハードウェア２全体の動作を制御する。ＤＬ実行プロセッサ２１は、マルチプロセッサであってもよい。ＤＬ実行プロセッサ２１は、例えばＣＰＵやＭＰＵ，ＤＳＰ，ＡＳＩＣ，ＰＬＤ，ＦＰＧＡのいずれか一つであってもよい。また、ＤＬ実行プロセッサ２１は、ＣＰＵ，ＭＰＵ，ＤＳＰ，ＡＳＩＣ，ＰＬＤ，ＦＰＧＡのうちの２種類以上の要素の組み合わせであってもよい。
【００９９】
図１８は、図１３に示したホストマシン１における機能構成例を模式的に示すブロック図である。
【０１００】
図１８に示すように、ホストマシン１のプロセッサ１１は、ゼロ生成処理変形部１１１及びプログラム生成部１１２として機能する。
【０１０１】
プログラム生成部１１２は、ニューラルネットワーク記述データ１０６とプログラム生成パラメータ１０７との入力に基づき、ＤＬ実行ハードウェア２において実行されるニューラルネットワーク実行プログラム１０８を生成する。
【０１０２】
ゼロ生成処理変形部１１１は、ニューラルネットワーク記述データ１０６の内容を変更することにより、ＲｅＬＵ演算の内容を変形する。図１８に示すように、ゼロ生成処理変形部１１１は、第１出力部１１１１及び第２出力部１１１２として機能する。
【０１０３】
第１出力部１１１１は、図８及び図１０等に示したように、入力値を境界値（例えば、０）と比較し、境界値を超過した入力値に対して入力値と等しい値を出力する。
【０１０４】
第２出力部１１１２は、図８及び図１０等に示したように、境界値以下である入力値に対して一定の出力値を出力する正規化線形関数の演算（別言すれば、「ＲｅＬＵ演算」）において、境界値以下の入力値に対して０よりも大きい微小値εの倍数を出力する。
【０１０５】
第２出力部１１１２は、図８等に示したように、入力値と微小値εとの積を出力値として出力してよい。また、第２出力部１１１２は、図１２等を用いて前述したように、入力値を乗数とすると共に微小値εを被乗数として乗算器１０００に入力することにより、出力値を出力してよい。
【０１０６】
第２出力部１１１２は、図１０等に示したように、微小値εについて、−εと０と＋εとのうちいずれかの値を出力値として出力してよい。
【０１０７】
〔Ｂ−２〕動作例
図１３に示したホストマシン１におけるプログラムの生成処理を、図１９に示すフローチャートを用いて説明する。
【０１０８】
プログラム生成部１１２は、ネットワーク中の各層の依存関係を整理する（ステップＳ１）。プログラム生成部１１２は、順伝播の順に各層を並び替え、Layer[0], Layer[1], …, Layer[L-1]として管理する。
【０１０９】
プログラム生成部１１２は、Layer[0], Layer[1], …, Layer[L-1]のそれぞれについて、順伝播及び逆伝播のプログラムを生成する（ステップＳ２）。ステップＳ２における処理の詳細は、図２０を用いて後述する。
【０１１０】
プログラム生成部１１２は、Layer[0], Layer[1], …, Layer[L-1]の順伝播及び逆伝播を呼び出すコードを生成する（ステップＳ３）。そして、プログラムの生成処理は終了する。
【０１１１】
次に、図１３に示したホストマシン１における順伝播及び逆伝播のプログラムの生成処理（図１９のステップＳ２）の詳細を、図２０に示すフローチャートを用いて説明する。
【０１１２】
プログラム生成部１１２は、生成するプログラムの種類がＲｅＬＵであるかを判定する（ステップＳ１１）。
【０１１３】
生成するプログラムの種類がＲｅＬＵである場合には（ステップＳ１１のＹｅｓルート参照）、プログラム生成部１１２は、ゼロ生成処理変形部１１１からの出力に基づき、変形ＲｅＬＵの処理を実行するプログラムを生成する（ステップＳ１２）。そして、順伝播及び逆伝播のプログラムの生成処理は終了する。なお、ゼロ生成処理変形部１１１からの出力は、図２１〜図２４のいずれかのフローチャートを用いて後述する処理によって実現されてよい。
【０１１４】
一方、生成するプログラムの種類がＲｅＬＵでない場合には（ステップＳ１１のＮｏルート参照）、プログラム生成部１１２は、通常の処理によってプログラムを生成する（ステップＳ１３）。そして、順伝播及び逆伝播のプログラムの生成処理は終了する。
【０１１５】
次に、図１３に示したホストマシン１における第２のＲｅＬＵ演算の順伝播処理（図２０のステップＳ１２）の詳細を、図２１に示すフローチャートを用いて説明する。
【０１１６】
ゼロ生成処理変形部１１１は、入力値ｘを一時領域に格納する（ステップＳ２１）。
【０１１７】
ゼロ生成処理変形部１１１は、入力値ｘが正数であるかを判定する（ステップＳ２２）。
【０１１８】
入力値ｘが正数である場合には（ステップＳ２２のＹｅｓルート参照）、ゼロ生成処理変形部１１１の第１出力部１１１１は、入力値ｘを出力値ｚとする（ステップＳ２３）。そして、処理はステップＳ２５へ進む。
【０１１９】
一方、入力値ｘが正数でない場合には（ステップＳ２２のＮｏルート参照）、ゼロ生成処理変形部１１１の第２出力部１１１２は、入力値ｘεを出力値ｚとする（ステップＳ２４）。
【０１２０】
ゼロ生成処理変形部１１１は、出力値ｚを出力する（ステップＳ２５）。そして、第２のＲｅＬＵ演算の順伝播処理は終了する。
【０１２１】
次に、図１３に示したホストマシン１における第２のＲｅＬＵ演算の逆伝播処理（図２０のステップＳ１２）の詳細を、図２２に示すフローチャートを用いて説明する。
【０１２２】
ゼロ生成処理変形部１１１は、順伝播の際の入力値ｘを一時領域から読み込む（ステップＳ３１）。
【０１２３】
ゼロ生成処理変形部１１１は、入力値ｘが正数であるかを判定する（ステップＳ３２）。
【０１２４】
入力値ｘが正数である場合には（ステップＳ３２のＹｅｓルート参照）、ゼロ生成処理変形部１１１の第１出力部１１１１は、１を微分係数Ｄとする（ステップＳ３３）。そして、処理はステップＳ３５へ進む。
【０１２５】
一方、入力値ｘが正数でない場合には（ステップＳ３２のＮｏルート参照）、ゼロ生成処理変形部１１１の第２出力部１１１２は、εを微分係数Ｄとする（ステップＳ３４）。
【０１２６】
ゼロ生成処理変形部１１１は、微分係数Ｄと入力値ｄｚとの積を出力する（ステップＳ３５）。そして、第２のＲｅＬＵ演算の逆伝播処理は終了する。
【０１２７】
次に、図１３に示したホストマシン１における第３のＲｅＬＵ演算の順伝播処理（図２０のステップＳ１２）の詳細を、図２３に示すフローチャートを用いて説明する。
【０１２８】
ゼロ生成処理変形部１１１は、入力値ｘを一時領域に格納する（ステップＳ４１）。
【０１２９】
ゼロ生成処理変形部１１１は、入力値ｘが正数であるかを判定する（ステップＳ４２）。
【０１３０】
入力値ｘが正数である場合には（ステップＳ４２のＹｅｓルート参照）、ゼロ生成処理変形部１１１の第１出力部１１１１は、入力値ｘを出力値ｚとする（ステップＳ４３）。そして、処理はステップＳ５０へ進む。
【０１３１】
入力値ｘが正数でない場合には（ステップＳ４２のＮｏルート参照）、ゼロ生成処理変形部１１１の第２出力部１１１２は、０，１，２，３の範囲で乱数ｒ１を生成する（ステップＳ４４）。
【０１３２】
第２出力部１１１２は、乱数ｒ１が０であるかを判定する（ステップＳ４５）。
【０１３３】
乱数ｒ１が０である場合には（ステップＳ４５のＹｅｓルート参照）、第２出力部１１１２は、εを出力値ｚとする（ステップＳ４６）。そして、処理はステップＳ５０へ進む。
【０１３４】
一方、乱数ｒ１が０でない場合には（ステップＳ４５のＮｏルート参照）、第２出力部１１１２は、乱数ｒ１が１であるかを判定する（ステップＳ４７）。
【０１３５】
乱数ｒ１が１である場合には（ステップＳ４７のＹｅｓルート参照）、第２出力部１１１２は、−εを出力値ｚとする（ステップＳ４８）。そして、処理はステップＳ５０へ進む。
【０１３６】
一方、乱数ｒ１が１でない場合には（ステップＳ４７のＮｏルート参照）、第２出力部１１１２は、０を出力値ｚとする（ステップＳ４９）。
【０１３７】
ゼロ生成処理変形部１１１は、出力値ｚを出力する（ステップＳ５０）。そして、第３のＲｅＬＵ演算の順伝播処理は終了する。
【０１３８】
次に、図１３に示したホストマシン１における第３のＲｅＬＵ演算の逆伝播処理（図２０のステップＳ１２）の詳細を、図２４に示すフローチャートを用いて説明する。
【０１３９】
ゼロ生成処理変形部１１１は、順伝播の際の入力値ｘを一時領域から読み込む（ステップＳ５１）。
【０１４０】
ゼロ生成処理変形部１１１は、入力値ｘが正数であるかを判定する（ステップＳ５２）。
【０１４１】
入力値ｘが正数である場合には（ステップＳ５２のＹｅｓルート参照）、ゼロ生成処理変形部１１１の第１出力部１１１１は、１を微分係数Ｄとする（ステップＳ５３）。そして、処理はステップＳ６０へ進む。
【０１４２】
入力値ｘが正数でない場合には（ステップＳ５２のＮｏルート参照）、ゼロ生成処理変形部１１１の第２出力部１１１２は、０，１，２，３の範囲で乱数ｒ２を生成する（ステップＳ５４）。
【０１４３】
第２出力部１１１２は、乱数ｒ２が０であるかを判定する（ステップＳ５５）。
【０１４４】
乱数ｒ２が０である場合には（ステップＳ５５のＹｅｓルート参照）、第２出力部１１１２は、εを微分係数Ｄとする（ステップＳ５６）。そして、処理はステップＳ６０へ進む。
【０１４５】
一方、乱数ｒ２が０でない場合には（ステップＳ５５のＮｏルート参照）、第２出力部１１１２は、乱数ｒ２が１であるかを判定する（ステップＳ５７）。
【０１４６】
乱数ｒ２が１である場合には（ステップＳ５７のＹｅｓルート参照）、第２出力部１１１２は、−εを微分係数Ｄとする（ステップＳ５８）。そして、処理はステップＳ６０へ進む。
【０１４７】
一方、乱数ｒ２が１でない場合には（ステップＳ５７のＮｏルート参照）、第２出力部１１１２は、０を微分係数Ｄとする（ステップＳ５９）。
【０１４８】
ゼロ生成処理変形部１１１は、微分係数Ｄと入力値ｄｚとの積を出力する（ステップＳ６０）。そして、第３のＲｅＬＵ演算の逆伝播処理は終了する。
【０１４９】
〔Ｂ−３〕効果
上述した実施形態の一例におけるホストマシン１によれば、例えば、以下の作用効果を奏することができる。
【０１５０】
第１出力部１１１１は、入力値を境界値と比較し、境界値を超過した入力値に対して入力値と等しい値を出力する。第２出力部１１１２は、境界値以下である入力値に対して一定の出力値を出力するＲｅＬＵ演算において、境界値以下の入力値に対して０よりも大きい微小値εの倍数を出力する。
【０１５１】
これにより、消費電力を増加させずにプロセッサ１１の電圧降下を防止することができる。具体的には、学習の品質を変えることなく、ゼロ値の生成を抑止し、電力の変動を防ぐことができる。また、ＲｅＬＵ演算及びその後の計算で電力が増加するものの、他の計算では基準電圧が低下するため、低電力でＤＬを実行できる。すなわち、電力変動を抑えて、高めの電圧設定を不要にできる。
【０１５２】
第２出力部１１１２は、入力値と微小値εとの積を出力値として出力する。
【０１５３】
これにより、ゼロ値の出力の可能性を低減できる。
【０１５４】
第２出力部１１１２は、入力値を乗数とすると共に微小値εを被乗数として乗算器１０００に入力することにより、出力値を出力する。
【０１５５】
これにより、乗算器１０００における電力低減を防止できる。
【０１５６】
第２出力部１１１２は、微小値εについて、−εと０と＋εとのうちいずれかの値を出力値として出力する。
【０１５７】
これにより、ＲｅＬＵ演算の出力値を限定できるため、ＤＬ実行プログラムの生成を効率的に実施できる。
【０１５８】
〔Ｃ〕その他
開示の技術は上述した実施形態に限定されるものではなく、本実施形態の趣旨を逸脱しない範囲で種々変形して実施することができる。本実施形態の各構成及び各処理は、必要に応じて取捨選択することができ、あるいは適宜組み合わせてもよい。
【０１５９】
〔Ｄ〕付記
以上の実施形態に関し、さらに以下の付記を開示する。
【０１６０】
（付記１）
入力値を境界値と比較し、前記境界値を超過した前記入力値に対して前記入力値と等しい値を出力する第１出力部と、
前記境界値以下である前記入力値に対して一定の出力値を出力する正規化線形関数の演算において、前記境界値以下の前記入力値に対して０よりも大きい微小値εの倍数を出力する第２出力部と、
を備える、演算処理装置。
【０１６１】
（付記２）
前記第２出力部は、前記入力値と前記微小値εとの積を前記出力値として出力する、
付記１に記載の演算処理装置。
【０１６２】
（付記３）
前記第２出力部は、前記入力値を乗数とすると共に前記微小値εを被乗数として乗算器に入力することにより、前記出力値を出力する、
付記１又は２に記載の演算処理装置。
【０１６３】
（付記４）
前記第２出力部は、前記微小値εについて、−εと０と＋εとのうちいずれかの値を前記出力値として出力する、
付記１に記載の演算処理装置。
【０１６４】
（付記５）
コンピュータに、
入力値を境界値と比較し、前記境界値を超過した前記入力値に対して前記入力値と等しい値を出力し、
前記境界値以下である前記入力値に対して一定の出力値を出力する正規化線形関数の演算において、前記境界値以下の前記入力値に対して０よりも大きい微小値εの倍数を出力する、
処理を実行させる、プログラム。
【０１６５】
（付記６）
前記入力値と前記微小値εとの積を前記出力値として出力する、
処理を前記コンピュータに実行させる、付記５に記載のプログラム。
【０１６６】
（付記７）
前記入力値を乗数とすると共に前記微小値εを被乗数として乗算器に入力することにより、前記出力値として出力する、
処理を前記コンピュータに実行させる、付記５又は６に記載のプログラム。
【０１６７】
（付記８）
前記微小値εについて、−εと０と＋εとのうちいずれかの値を前記出力値として出力する、
処理を前記コンピュータに実行させる、付記５に記載のプログラム。
【０１６８】
（付記９）
入力値を境界値と比較し、前記境界値を超過した前記入力値に対して前記入力値と等しい値を出力し、
前記境界値以下である前記入力値に対して一定の出力値を出力する正規化線形関数の演算において、前記境界値以下の前記入力値に対して０よりも大きい微小値εの倍数を出力する、
演算処理装置の制御方法。
【０１６９】
（付記１０）
前記入力値と前記微小値εとの積を前記出力値として出力する、
付記９に記載の演算処理装置の制御方法。
【０１７０】
（付記１１）
前記入力値を乗数とすると共に前記微小値εを被乗数として乗算器に入力することにより、前記出力値として出力する、
付記９又は１０に記載の演算処理装置の制御方法。
【０１７１】
（付記１２）
前記微小値εについて、−εと０と＋εとのうちいずれかの値を前記出力値として出力する、
付記９に記載の演算処理装置の制御方法。
【符号の説明】
【０１７２】
１００    ：演算処理システム
１０００  ：乗算器
１０１    ：乗数
１０２    ：被乗数
１０３    ：セレクタ
１０４    ：加算器
１０５    ：出力
１０６    ：ニューラルネットワーク記述データ
１０７    ：プログラム生成パラメータ
１０８    ：ニューラルネットワーク実行プログラム
１１０    ：プログラム
１        ：ホストマシン
１１      ：プロセッサ
１１１    ：ゼロ生成処理変形部
１１２    ：プログラム生成部
１１１１  ：第１出力部
１１１２  ：第２出力部
１２      ：ＲＡＭ
１３      ：ＨＤＤ
１４      ：内部バス
１５，２５：高速入出力インターフェース
１６      ：低速入出力インターフェース
２        ：ＤＬ実行ハードウェア
２１      ：ＤＬ実行プロセッサ
２２      ：制御部
２３      ：メモリアクセスコントローラ
２４      ：内部ＲＡＭ
３        ：利用者
６１      ：細胞体
６２      ：シナプス
６３      ：樹状突起
６４      ：軸索
【図１】
2020119213.tif 000014
【図２】
2020119213.tif 000015
【図３】
2020119213.tif 000016
【図４】
2020119213.tif 000017
【図５】
2020119213.tif 000018
【図６】
2020119213.tif 000019
【図７】
2020119213.tif 000020
【図８】
2020119213.tif 000021
【図９】
2020119213.tif 000022
【図１０】
2020119213.tif 000023
【図１１】
2020119213.tif 000024
【図１２】
2020119213.tif 000025
【図１３】
2020119213.tif 000026
【図１４】
2020119213.tif 000027
【図１５】
2020119213.tif 000028
【図１６】
2020119213.tif 000029
【図１７】
2020119213.tif 000030
【図１８】
2020119213.tif 000031
【図１９】
2020119213.tif 000032
【図２０】
2020119213.tif 000033
【図２１】
2020119213.tif 000034
【図２２】
2020119213.tif 000035
【図２３】
2020119213.tif 000036
【図２４】
2020119213.tif 000037