(57)【要約】【課題】  機械学習における学習及び推論処理の省電力化と回路規模削減を実現することである。【解決手段】  学習器と、データ抽出部と、データ処理部から構成される機械学習システムである。学習器は、内部状態と内部パラメタから構成される。データ抽出部は、入力された入力データから、データ処理部で算出される評価値に影響を与えない部分を取り除くことで加工入力データを作成する。データ処理部は、加工入力データと学習器を基に評価値を算出する。入力データは離散的な値から構成され、内部状態は、入力データが変わることによって変化する。【選択図】  図１
2020035000.tif 000002
【特許請求の範囲】
【請求項１】
学習器と、データ抽出部と、データ処理部から構成される機械学習システムであって、
前記学習器は、内部状態と内部パラメタから構成され、
前記データ抽出部は、入力された入力データから、前記データ処理部で算出される評価値に影響を与えない部分を取り除くことで加工入力データを作成し、
前記データ処理部は、前記加工入力データと前記学習器を基に前記評価値を算出し、
前記入力データは離散的な値から構成され、
前記内部状態は、前記入力データが変わることによって変化することを特徴とする機械学習システム。
【請求項２】
前記学習器は、ボルツマンマシンから構成され、
前記内部状態は２値の離散的な値から構成されることを特徴とする、
請求項１に記載の機械学習システム。
【請求項３】
前記学習器は、ボルツマンマシンから構成され、
前記入力データは、２値の離散的な値から構成され、
前記データ抽出部は、前記２値のうち一方の値に基づいて前記加工入力データを作成する、
請求項１に記載の機械学習システム。
【請求項４】
前記２値のうち他方の値は、前記内部パラメタとの積が０になる値である、
請求項３に記載の機械学習システム。
【請求項５】
前記内部パラメタは、ボルツマンマシンの結合係数である、
請求項４に記載の機械学習システム。
【請求項６】
前記入力データは、ボルツマンマシンの可視スピンである、
請求項４に記載の機械学習システム。
【請求項７】
前記可視スピンは、第１の可視スピンと第２の可視スピンを含み、
前記加工入力データは、前記第１の可視スピンに含まれる前記一方の値の数と位置を特定する情報を含む、
請求項６に記載の機械学習システム。
【請求項８】
前記データ処理部が前記評価値を算出する際に、前記加工入力データと前記内部状態の一部のみと前記内部パラメタの一部のみを用いることを特徴とする、
請求項１に記載の機械学習システム。
【請求項９】
内部パラメタ更新部をさらに備え、
前記内部パラメタ更新部は、前記データ処理部によって算出された前記評価値を用いて、前記内部パラメタを更新することを特徴とする、
請求項１記載の機械学習システム。
【請求項１０】
ボルツマンマシンのエネルギー関数を情報処理装置により計算する計算方法であって、
２値をもつ可視スピンを、ボルツマンマシンの入力データとして準備する第１のステップ、
前記２値のうち一方の値をもつ可視スピンの情報のみから、加工入力データを作成する第２のステップ、
前記加工入力データとボルツマンマシンの結合係数に基づいて、前記エネルギー関数を計算する第３のステップ、
を備えるボルツマンマシンの計算方法。
【請求項１１】
前記２値は“１”と“０”であって、前記第２のステップでは“１”をもつ可視スピンの情報のみから、加工入力データを作成する、
請求項１０記載のボルツマンマシンの計算方法。
【請求項１２】
前記第２のステップにおいて、前記加工入力データに、前記一方の値をもつ可視スピンの個数を示す情報を付加する、
請求項１０記載のボルツマンマシンの計算方法。
【請求項１３】
前記第１のステップにおいて、前記可視スピンは第１の可視スピンと第２の可視スピンを含み、
前記第２のステップにおいて、前記加工入力データに、前記第１の可視スピンの前記一方の値をもつ可視スピンの個数と位置を示す情報を付加する、
請求項１２記載のボルツマンマシンの計算方法。
【請求項１４】
前記第３のステップで計算したエネルギー関数に基づいて前記結合係数を更新する、第４のステップを備える、
請求項１０記載のボルツマンマシンの計算方法。
【請求項１５】
前記第２のステップにおいて、前記２値のうち一方の値をもつ可視スピンの情報のみから、加工入力データを作成する際に、前記２値のうち他方の値をもつ可視スピンは、前記第３のステップのエネルギー計算における積和演算で計算結果に影響しない可視スピンである、
請求項１０記載のボルツマンマシンの計算方法。
【発明の詳細な説明】
【技術分野】
【０００１】
本発明は機械学習における学習及び推論処理の省電力化と回路規模削減を実現する機械学習システムに関するものである。
【背景技術】
【０００２】
近年、深層学習などに代表される機械学習アルゴリズムの進展により、計算機による画像や音声などの認識精度が向上した。これにより、自動運転や機械翻訳など、機械学習の応用例が急速に拡大している。
【０００３】
複雑な問題に機械学習を適用する際の課題の一つは、学習完了までに必要なモデルパラメタの更新回数が増大してしまうことである。モデルパラメタとは、例えばニューラルネットワークではニューロン間の結合係数に相当する。更新回数が増大すると、比例して演算回数が増え、学習時間が増大する。そのため、最近、モデルパラメタの更新回数が少なくても学習可能なアルゴリズムの研究が盛んである。ボルツマンマシンを用いた機械学習もその一つである。ボルツマンマシンを用いると、ニューラルネットワークを利用した場合と比較して、学習に必要なモデルパラメタの更新回数を減らせる場合があることがわかっている。これにより、複雑な問題でも短時間で学習することが可能となる。
【０００４】
特許文献1には、量子効果を用いた強化学習システムに関する技術が開示されており、特許文献２には、フィードバックやパラメタの共有を行うことで、必要メモリ容量を削減する技術が開示されている。
【先行技術文献】
【特許文献】
【０００５】
【特許文献１】米国公開特許US 2017/0323195 A1
【特許文献２】再公表特許WO2016/194248
【発明の概要】
【発明が解決しようとする課題】
【０００６】
上記のように、ボルツマンマシンを用いた機械学習によって、ニューラルネットワークを用いた機械学習と比較して、モデルパラメタの更新回数を減らすことができるが、モデルの規模（パラメタの数や並列演算数）が大きくなるケースが多い。そのため、モデルパラメタの１回更新あたりの消費電力や、実装回路規模が増大してしまう。したがって、消費電力の増大や実装回路規模を削減する技術が求められている。
【０００７】
特許文献１には、ボルツマンマシン（イジングモデル）のスピン（上向きもしくは下向きの２値）に対して、スピンの向きとは直交する横向きの磁場を加えて、スピンの向きを収束させるアルゴリズムや、それらを用いた強化学習システムに関する技術が記載されている。これにより、スピンの向きを高速に収束させることができるが、前述の課題である、モデルの規模の増大による消費電力や実装回路規模の増大は避けることができない。特に、学習対象となるデータのサイズが大きい問題やデータの複雑度が高い問題の場合、これらの増大によるデメリットは大きい。
【０００８】
また、特許文献２には、ニューラルネットワークにおけるネットワークのフィードバックやパラメタの共有を行うことで、機械学習で必要となる計算量やメモリ容量を削減する技術が記載されている。ただし、ボルツマンマシンを学習器に利用した場合のモデル規模の増大を防ぐことはできず、消費電力や実装回路規模は増大する。
【０００９】
本発明の目的は、機械学習における学習及び推論処理の省電力化と回路規模削減を実現することである。
【課題を解決するための手段】
【００１０】
本発明の好ましい一側面は、学習器と、データ抽出部と、データ処理部から構成される機械学習システムである。学習器は、内部状態と内部パラメタから構成される。データ抽出部は、入力された入力データから、データ処理部で算出される評価値に影響を与えない部分を取り除くことで加工入力データを作成する。データ処理部は、加工入力データと学習器を基に評価値を算出する。入力データは離散的な値から構成され、内部状態は、入力データが変わることによって変化する。
【００１１】
本発明の他の好ましい一側面は、ボルツマンマシンのエネルギー関数を情報処理装置により計算する計算方法である。この方法では、２値をもつ可視スピンを、ボルツマンマシンの入力データとして準備する第１のステップ、２値のうち一方の値をもつ可視スピンの情報のみから、加工入力データを作成する第２のステップ、加工入力データとボルツマンマシンの結合係数に基づいて、エネルギー関数を計算する第３のステップ、を備える。
【発明の効果】
【００１２】
機械学習における学習及び推論処理の省電力化と回路規模削減を実現することができる。
【図面の簡単な説明】
【００１３】
【図１】機械学習システムの第一の実施例を示す構成図である。
【図２】ボルツマンマシンの構成の一例を示す説明図である。
【図３】ボルツマンマシンのスピン間の結合係数の一例を示す説明図である。
【図４】ボルツマンマシンのスピン間の結合係数のデータフォーマットの一例を示す説明図である。
【図５】ハイパパラメタの一例を示すテーブルである。
【図６】第一の実施例における、データ抽出部によるデータ加工処理の一例を示す説明図である。
【図７】本願適用による演算回路削減の効果を示す説明図である。
【図８】第一の実施例における、演算部の構成の一例を示す構成図である。
【図９】機械学習システムの第二の実施例を示す構成図である。
【図１０】第二の実施例の機械学習システムの動作フローの一例を示すフローチャートである。
【図１１】第二の実施例における、データ抽出部によるデータ加工処理の一例を示す説明図である。
【図１２】機械学習システムの第三の実施例を示す構成図である。
【図１３】第三の実施例の機械学習システムの動作フローの一例を示すフローチャートである。
【図１４】第三の実施例における、データ抽出部によるデータ加工処理の一例を示す説明図である。
【図１５】第三の実施例における、演算部の構成の一例を示す構成図である。
【図１６】更新部の構成の一例を示す構成図である。
【発明を実施するための形態】
【００１４】
実施の形態について、図面を用いて詳細に説明する。ただし、本発明は以下に示す実施の形態の記載内容に限定して解釈されるものではない。本発明の思想ないし趣旨から逸脱しない範囲で、その具体的構成を変更し得ることは当業者であれば容易に理解される。
【００１５】
以下に説明する発明の構成において、同一部分又は同様な機能を有する部分には同一の符号を異なる図面間で共通して用い、重複する説明は省略することがある。
【００１６】
同一あるいは同様な機能を有する要素が複数ある場合には、同一の符号に異なる添字を付して説明する場合がある。ただし、複数の要素を区別する必要がない場合には、添字を省略して説明する場合がある。
【００１７】
本明細書等における「第１」、「第２」、「第３」などの表記は、構成要素を識別するために付するものであり、必ずしも、数、順序、もしくはその内容を限定するものではない。また、構成要素の識別のための番号は文脈毎に用いられ、一つの文脈で用いた番号が、他の文脈で必ずしも同一の構成を示すとは限らない。また、ある番号で識別された構成要素が、他の番号で識別された構成要素の機能を兼ねることを妨げるものではない。
【００１８】
図面等において示す各構成の位置、大きさ、形状、範囲などは、発明の理解を容易にするため、実際の位置、大きさ、形状、範囲などを表していない場合がある。このため、本発明は、必ずしも、図面等に開示された位置、大きさ、形状、範囲などに限定されない。
【００１９】
以下の実施例で説明されるもののうち単純な例は、データ抽出部とデータ処理部と学習器から構成される機械学習システムである。このシステムは、ソフトウェアあるいはハードウェアもしくはこれらの組み合わせから構成することができる。
【００２０】
学習器（例えばボルツマンマシン）は、内部状態（例えば隠れスピン）と内部パラメタ（例えば結合係数）から構成される。データ抽出部は、機械学習システムに入力された入力データ（例えば可視スピン）から、データ処理部で算出される評価値（例えばエネルギー関数）に影響を与えない部分を取り除くことで加工入力データを作成する。評価値に影響を与えない部分とは、例えば内部パラメタとの積が０になる部分である。入力データが可視スピンであれば、可視スピンの値が０である部分は、内部パラメタの値に関わらず内部パラメタとの積が０になるため、評価値に影響を与えずに取り除くことができる。データ処理部は、加工入力データと学習器に基づいて評価値を算出する。入力データは離散的な値から構成され、内部状態は、入力データが変わることによって変化する。
【００２１】
このような構成を用いることで、例えばボルツマンマシンでは可視スピンの０の値を持つノードに接続されるエッジは省略することができる。よって、機械学習における学習及び推論処理の省電力化と回路規模削減を実現でき、例えば、電力や回路規模の制限の厳しい条件での学習及び推論処理が可能となる。
【００２２】
以下では、本発明にかかわる機械学習システムの幾つかの実施例を順に説明する。第一の実施例は、ある入力データに対応する計算値を出力する例であり、第二の実施例は、データの一部を入力した場合に、対応する複数の計算値を出力する例であり、第三の実施例は、入力データに基づいてモデルパラメタを更新する場合の例である。
【００２３】
＜Ａ．機械学習システムの第一の実施例＞
機械学習システムの第一の実施例を説明する。
図１に機械学習システムの構成を示す。機械学習システム100は、機械学習における処理を統括及び実行する機械学習フレームワーク(FW)110と、機械学習において定型化された処理を高速に実行する機械学習モジュール(ML m)120から構成される。機械学習フレームワーク110の例としては、TensorFlow（商標）、Keras、Caffe、Chainer（商標）、Theanoなどのソフトウェア・ライブラリ群でもよいし、独自の機械学習用ソフトウェアでもよいし、各社ITベンダーが提供している機械学習用プラットフォームなどでもよい。
【００２４】
機械学習モジュール120は、機械学習フレームワーク110とデータをやり取りするデータインターフェース部(I/O)121と、機械学習フレームワーク110から送付されたデータを格納するバッファ(Buf)122と、バッファ内のデータを抽出及び加工するデータ抽出部(Ex)123と、データ抽出部123から送られたデータを基に計算処理を実行する演算部(Cal)124と、データを記憶するメモリ(Mem)125から構成される。
【００２５】
メモリ125には、機械学習モジュール120から機械学習フレームワーク110に返答する結果(R)126と、ボルツマンマシンにおけるスピン間の結合係数(W)127と機械学習におけるハイパパラメタ(P)128が格納されている。機械学習モジュール120の全体がハードウェアとして実装されていても良いし、一部もしくは全体がソフトウェアとして実装されていてもよい。図１に記載された矢印は、データやコマンドの流れを表す。各矢印に対応するデータやコマンドの詳細は、後述する。
【００２６】
図２に機械学習システムに用いるボルツマンマシンの例を示す。ボルツマンマシンは、可視スピン(Visible spins 1及びVisible spins 2)201-1,201-2と隠れスピン(Hidden spins)202から構成される。また、スピン203とスピン間の結合係数204が示されている。可視スピン（「可視変数」ともいう）は、観測データ点に対応している変数であり、隠れスピン（「隠れ変数」ともいう）は、観測データ点に直接対応していない変数である。
【００２７】
可視スピン201が２つに分かれているのは、意味合いの異なる２種類のスピンを入力するためである。例えば、画像認識・分類に代表されるような教師付き学習では、可視スピン201-1は学習対象の画像データとなり、可視スピン201-2は可視スピン201-1に入力された画像データの分類(猫なのか犬なのか)に関する情報となる。また、強化学習の場合、可視スピン201-1は環境からAgentに返される状態に対応し、可視スピン201-2はAgentから環境に返答する行動に対応する。
【００２８】
隠れスピン202は、１つ以上の層(図中H[0]などのスピン１列分)から構成され、隠れスピンが１層の場合は制限ボルツマンマシン、２層以上の場合はディープボルツマンマシンと呼ばれる。図２中の例では、隣り合う層に属するスピン間は全対全で結合しているが、結合の仕方はこの例に限らず、部分的に接続されていてもよい。本実施例では隠れスピンとして２値をとるが、３値以上の値をとることも可能である。
【００２９】
図３と図4で、機械学習モジュール120内のメモリ125に格納されるボルツマンマシンのスピン間の結合係数127のデータフォーマットの一例を説明する。
【００３０】
図３は、ボルツマンマシンの層と結合係数の概念を示す概念図である。隠れスピンが２層の場合の例を示しており、可視スピンを含めて層を順にL[0]〜L[3]とする。隣り合う層に属するスピン間の結合係数を、層ごとにW[0]〜W[2]とする。
【００３１】
図４は、スピン間の結合係数127のデータフォーマットの一例を表す。ここでは図３の結合係数W[0]を示している。この例では、図３で左側の層(L[0])のスピン数分の行数と、右側の層(L[1])のスピン数分の列数をもつテーブル形式(２次元配列形式)でメモリ125に格納されている。これはあくまで一例であり、メモリ容量の制限や、演算の順序、メモリアクセスの速度などを考慮して、最適なデータフォーマットが選択される。
【００３２】
図５に、機械学習モジュール120内のメモリ125に格納されるハイパパラメタ128の一例を示す。ハイパパラメタは、後述するボルツマンマシンのエネルギー計算などに必要な初期温度128-1や、最終温度128-2や、隠れスピンのサンプリング数128-3などが含まれる。
【００３３】
次に機械学習システムの動作の流れの一例を、順次実行される4つのStepで説明する。また、各Stepでやり取りされるデータなどが図１のどの矢印に対応するかも合わせて示す。
【００３４】
まず、Step 1では、機械学習フレームワーク110から機械学習モジュール120へ、特定の計算命令コマンドと機械学習モジュール120が計算するための入力データが送られる(図１ IN)。
【００３５】
コマンドは大きく分類すると、（１）ある入力データに対応する計算値を出力するように指令するコマンド、（２）データの一部を入力した場合に、対応する複数の計算値を出力するように指令するコマンド、（３）入力データに基づいてモデルパラメタを更新するように指令するコマンドに分類される。第一の実施例では、（１）の場合を説明する。（２）,（３）はそれぞれ第二、第三の実施例中で説明する。計算命令コマンドと入力データは、データインターフェース部121が受領し、バッファ122に格納される(図１ A)。
【００３６】
つづいてStep 2では、データ抽出部123がバッファ122に格納された計算命令コマンドと入力データを用いて(図１ B)、加工データを作成する。加工データは演算部124に送付される(図１ C)。
【００３７】
次にStep 3では、演算部124はメモリ125からスピン間の結合係数127とハイパパラメタ128を読み出し(図１ D及びE)、データ抽出部123から送付された加工データを基に、演算を実行する。演算内容は、入力データとして与えられた可視スピンに対応するボルツマンマシンの自由エネルギーや内部エネルギー（エネルギー関数）の計算であり、求められたエネルギーが計算値として出力され、メモリ125内の結果126に保存される(図１ F)。また、演算部124は上記演算の終了後、演算のエラー終了フラグもしくは正常終了フラグをデータインターフェース部121に送付する(図１ G)。
【００３８】
最後にStep 4では、データインターフェース部121が正常終了フラグを受領した場合、演算部124が計算したエネルギーの値をメモリ125内の結果126から取得し(図１ H)、機械学習フレームワーク110へ送付する(図１ OUT)。エラー終了フラグを受領した場合は、機械学習フレームワーク110へエラー内容などを送付する(図１ OUT)。
【００３９】
図６に、データ抽出部123が行うデータ加工処理の一例を示す。データ加工処理では、まずデータ抽出部123がバッファ122に格納された計算命令コマンドと入力データを取得する(図１ B)。
【００４０】
第一の実施例では、計算命令コマンドが、”ある入力データに対応する計算値を出力するように指令するコマンド”である場合を説明する。この場合、入力データには可視スピン全て(例えば図７の可視スピン701-1と可視スピン701-2)の向きが含まれている。ここでスピンの向きは”1”が上向き、”0”が下向きとする。入力データには、全可視スピンの向きが直接記載されているが、データ抽出部123は、入力データのうち、スピンが上向き、つまり”1”のデータをもつスピンの位置のみを抽出し、上向きスピン位置情報に変換する。
【００４１】
図６に示すように、可視スピン701-1と可視スピン701-2のそれぞれに位置を表すアドレスが割り当てられている。データ抽出部123は、出力データの先頭に可視スピン701-1の上向きスピンの個数である”2”を書く。その後ろに、可視スピン701-1の上向きスピンのアドレス”0”と”3”を記載し、最後に可視スピン701-2の上向きスピンのアドレス”0”を書いて出力データ”2030”とする。スピンの個数の情報は、計算の処理において、意味合いの異なる２種類のスピンである可視スピン701-1と可視スピン701-2を識別するために利用することができる。
【００４２】
前述したように、可視スピン701-2は、教師付き学習であればデータの分類に関する情報として、強化学習であれば、行動を表す情報として用いられるため、いずれの場合も上向きスピンの数は1つである。そのため、可視スピン701-2の上向きスピンの個数に関する情報は記載しない。もちろん、実施例の適用範囲は上記例に限られないため、必要であれば、可視スピン701-2の上向きスピンの個数に関する情報も付記してよい。このようにして、データ抽出部123によって作成された出力データは、演算部124に送付される(図１ C)。
【００４３】
図７に、加工処理による、演算回路規模の削減の効果を示す。図６で説明したように、データ抽出部123によってデータ加工処理が施される前は、可視スピン全て(可視スピン701-1と可視スピン701-2)の向きが、スピン毎”0”もしくは”1”で表現されている。後述するエネルギー演算処理では、スピン間の結合係数とスピン値(”0”もしくは”1”)の積和演算が実行される。例えば、図７(a)の可視スピン701-1の層(L[0])と隠れスピン702の１層目(L[1])の間では、L[1]の各スピンに対する局所エネルギー(local energy)として、
【００４４】
【数１】
2020035000.tif 000003
【００４５】
というように、結合係数とスピン値の積和が実行される。このような局所エネルギーの計算が隠れスピン数分だけ(右方向と左方向)実行されるため、図７(a)に示した例では、4×5+5×5×2+3×5=85回の積演算が行われることになる。
【００４６】
これらの演算は同時並列的に行われる必要が有るため、基本的には積演算の回数分の積演算回路を実装する必要がある。しかし、例えばL[0][j]=0となるj=1, 2などでは、積演算を行うまでもなく、積の結果は0であり、本質的に無駄な演算が含まれてしまう。
【００４７】
一方、データ抽出部123によってデータ加工処理が施された後は、上向きの可視スピン(可視スピン701-1と可視スピン701-2)の位置だけが演算部124に伝達されるため、図７(b)に示すように、積演算の結果が0でない上向きスピンに関わる演算のみ実行することができる。これにより、以下に示す条件をみたす場合、実装する積演算回路の数を削減し、回路実装面積の低減及び演算に依る消費電力の削減を実現できる。条件は、
・上向き可視スピンの数の最大値が全可視スピンの数より小さい。
・上向き可視スピンの数の最大値が予めわかっている。
となる。
【００４８】
実際に、ボルツマンマシンによる機械学習でポピュラーに用いられる自由エネルギーの計算では、上記条件が満たされるケースが多いことが知られている。また、隠れスピンは全てのスピンが演算中に”0”と”1”の両者を取る可能性があるため、隠れスピン部分に関しては、上記のような積演算回路数の削減は難しい。
【００４９】
図７では、可視スピンの数が隠れスピンの数よりも少ないが、例えば画像データを学習に用いる場合、画像の各ピクセルは256階調であれば8bit値なので、単純には1ピクセルを8 つのスピンに変換する必要がある。その他連続値を持つデータを学習する場合も、スピンの数は元の連続値の数よりも増えてしまう。そのため、可視スピンの数は隠れスピン1層のスピン数よりも増えてしまうケースも多い。そのようなケースでは、図７(b)で示した実装回路数の削減による効果はより顕著となる。
【００５０】
公知であるが、ボルツマンマシンでは、各スピンについて局所エネルギーを計算し、局所エネルギーに基づいて当該スピンの向きを決める処理を行なうことができる。このような計算により内部エネルギーが最小になるスピンの状態を求めることができる。また、局所解に陥ることを防ぐために、スピンのフリップ確率(スピンの向きが変わる確率)を調整して計算を繰り返す、アニーリングという処理を行なうことができる。
【００５１】
図８で、演算部124で行われる演算処理の一例を説明する。図８は自由エネルギーを計算するための演算部124の内部を機能ブロック図で表現したものである。まず、演算部124は抽出部123から加工データ801を受領する。受領した加工データ801はレジスタ(Re)802に保存される。
【００５２】
次に積和演算ユニット(Ac)803は、レジスタ802から読み出した加工データ(図８ A)と、メモリ125から読み出したスピン間の結合係数127(図８ B)と、必要に応じて隠れスピンの値(図８ C)を用いて、図７を用いて説明した積和演算を実行する。積和演算ユニット803は、その結果を局所エネルギーユニット(LE)804に送付する(図８ D)。
【００５３】
局所エネルギーユニット804はその結果とメモリ125から読み出したハイパパラメタ128(図８ E)を基に、スピンのフリップ確率を計算し、スピンフリップ制御ユニット(Sf)805に送付する(図８ F)。スピンフリップ制御ユニット805は、スピンのフリップ確率を基に、各スピンをフリップするか否かを決めて、その結果を隠れスピン管理ユニット(HM)806に送付する(図８ H)。
【００５４】
各スピンをフリップするか否かの結果を受領した隠れスピン管理ユニット806は、フリップ対象の隠れスピンをフリップする。また、スピンフリップ制御ユニット805は、メモリ125から読み出したハイパパラメタ 128(図８ G)を基に、アニーリングが終了したか否かを判定し、終了していなければ、スピンフリップサイクルを１つ増やし、隠れスピン管理ユニット806に送付する。そののち、前述の積和演算ユニット803による処理から繰り返される。
【００５５】
スピンフリップサイクルは、上記で述べた処理中のデータのやり取りを通して、積和演算ユニット803と局所エネルギーユニット804とスピンフリップ制御ユニット805の間で共有される。
【００５６】
スピンフリップ制御ユニット805がアニーリング終了か否かを判定し、終了していた場合は、全サイクルが終了したかどうかを判定する。その結果全サイクルが終了していなければ、スピンフリップ制御ユニット805は、隠れスピンのスナップショットを取る命令を隠れスピン管理ユニット806に送付する。命令を受けた隠れスピン管理ユニット806は、現在の隠れスピンの値(各スピン”0”か”1”)を隠れスピンレジスタ(Re.h)807に保存し(図８ I)、隠れスピンの値を初期化する。そののち、前述の積和演算ユニット803による処理から繰り返される。
【００５７】
また、全サイクルが終了していると判定された場合、スピンフリップ制御ユニット805は、自由エネルギーの計算実行命令を隠れスピン管理ユニット806に送付する。命令を受けた隠れスピン管理ユニット806は、隠れスピンレジスタ807から、これまで保存した隠れスピンの値を取得し(図８ J)、その平均値を計算する(この平均値は、各スピン0から1までの連続値となる)。
【００５８】
次に隠れスピン管理ユニット806は、その平均値を隠れスピンの値として、積和演算ユニット803に送付する。積和演算ユニット803は、前述の処理と同様にして、レジスタ802から読み出した加工データ(図８ A)と、メモリ125から読み出したスピン間の結合係数 127(図８ B)と、受領した隠れスピンの平均値(図８ C)を用いて、積和演算を実行し、その結果を局所エネルギーユニット804に送付する(図８ D)。
【００５９】
局所エネルギーユニット804は、その局所エネルギーを足し合わせ(厳密には、更に隠れスピンの右方向と左方向のダブルカウント部分を差し引いて)、足し合わされた値と、ハイパパラメタ128に含まれる温度を、統合部(Syn)808に送付する(図８ K)。
【００６０】
また上記処理と並列して、統合部808は隠れスピンレジスタ807から、これまで保存した隠れスピンの値を取得し(図8 L)、エントロピーを計算する。そして、統合部808は、エントロピーと足し合わされた局所エネルギーと温度を用いて、自由エネルギーを計算する。次に、統合部808は、計算された自由エネルギーをメモリ125の結果126として保存し(図８ 結果#0)、演算のエラー終了フラグもしくは正常終了フラグをデータインターフェース部(I/O)に送付する(図８ 結果#1)。
【００６１】
かくして、実施例１ではボルツマンマシンにより、ハイパパラメタや結合係数は変えず、与えられた可視スピンの値に対して自由エネルギーの計算を行なう。この処理では、例えばボルツマンマシンがある問題と解に対して設定されている場合、問題と解である可視スピン701-1と可視スピン701-2の入力に対して、解の確からしさ（あるいは設定の確からしさ）を自由エネルギーで評価することができる。実施例１では、そのための計算量を従来に比べ減少することができる。
【００６２】
＜Ｂ．機械学習システムの第二の実施例＞
機械学習システムの第二の実施例を説明する。この実施例は、上記「（２）データの一部を入力した場合に、対応する複数の計算値を出力するように指令するコマンド」に対応するものである。例えば、可視スピンの一方のみ（例えば701-1）を入力し、可視スピンの他方（例えば701-2）の組み合わせを自動生成して、計算を行なう。
【００６３】
図９に機械学習システム100bの構成を示す。機械学習システム100bの各機能ブロックの名称は第一の実施例と同じであるため、第一の実施例と異なる点を、図１０の動作フローチャートの一例と併せて説明する。なお、用いるボルツマンマシンの形状や、スピン間の結合係数(W)127のデータフォーマット、ハイパパラメタ(P)128は、第一の実施例と同様である。
【００６４】
図１０のStep 1では、機械学習フレームワーク110から機械学習モジュール120へ、特定の計算命令コマンドと機械学習モジュール120が計算するための入力データが送られる(図９ IN)。ここでは、入力データは図１１で示す可視スピン111-1を含むものとする。コマンドは”データの一部を入力した場合に、対応する複数の計算値を出力するように指令するコマンド“であり、のちほどデータ抽出部123が使用する可視スピン111-2の数(Nv2)を含む。計算命令コマンドと入力データは、データインターフェース部121が受領し、バッファ122に格納される(図９ A)。
【００６５】
つづいて、データ抽出部123は、バッファ122に格納された計算命令コマンドと入力データを読み出し(図９ B)、繰り返しを示すカウンタを0にセットする(図１０ i=0)。
【００６６】
次に、データ抽出部123は、カウンタの値を読み出し、値が可視スピン111-2の数(Nv2)と一致するか判定する(図１０ i=Nv2?)。一致しなかった場合、Step 2に進み(図１０ N)、一致した場合はStep 4に進む(図１０ Y)。
【００６７】
まずStep 2を説明する。Step 2では、データ抽出部123は、計算命令コマンドと入力データを用いて、加工データの一部を作成し、演算部124に送付する(図９ C)。加工データの一部を送付したのち、データ抽出部123は、カウンタの値を１つ増やす(図１０ i++)。加工データの一部のデータフォーマットは、第一の実施例の加工データと同様である。
【００６８】
次にStep 3で、演算部124は、メモリ125からスピン間の結合係数127とハイパパラメタ128を読み出し(図９ D及びE)、データ抽出部123から送付された加工データの一部を基に、演算を実行する。演算内容は、第一の実施例と同様に、加工データの一部として与えられた可視スピンに対応するボルツマンマシンの自由エネルギーや内部エネルギーの計算であり、求められたエネルギーが計算値として出力され、メモリ125内の結果126に保存される(図９ F)。
【００６９】
演算部124は上記演算の終了後、演算のエラー終了フラグもしくは正常終了フラグをデータ抽出部123に送付する(図９ G)。そののち、データ抽出部123は、カウンタの値を読み出し、値が可視スピン111-2の数(Nv2)と一致するか判定する(図１０ i=Nv2?)。
【００７０】
次にStep 4に進んだ場合を説明する。Step 4で、データ抽出部123は、全演算のエラー終了フラグもしくは正常終了フラグをデータインターフェース部121に送付する(図９ H)。
【００７１】
最後にStep 5では、データインターフェース部121が正常終了フラグを受領した場合、演算部124が計算したエネルギーの値(複数存在する)をメモリ125内の結果126から取得し(図９ I)、機械学習フレームワーク110へ送付する(図９ OUT)。エラー終了フラグを受領した場合は、機械学習フレームワーク110へエラー内容などを送付する(図９ OUT)。
【００７２】
図１１に、データ抽出部123が行うデータ加工処理の一例を示す。データ加工処理では、まずデータ抽出部123がバッファ122に格納された計算命令コマンドと入力データを取得する。第二の実施例では、計算命令コマンドが、”データの一部を入力した場合に、対応する複数の計算値を出力するように指令するコマンド“である場合を説明する。
【００７３】
この場合、入力データには可視スピンの一部(可視スピン111-1のみ)の向きが含まれている。ここでスピンの向きは”1”が上向き、”0”が下向きとする。入力データには、可視スピンの一部(可視スピン111-1のみ)の向きが直接記載されているが、データ抽出部123は、入力データのうち、スピンが上向き、つまり”1”のデータをもつスピンの位置を抽出し、上向きスピン位置情報に変換する。変換の仕方は第一の実施例の場合と同じである。
【００７４】
また、その際、前段落で述べたカウンタの値に応じて、データの末尾に数字を付加する。図１１の例では、例えばカウンタの値が０の場合は、加工データの一部(出力#0)のように末尾に0が付加される。これは、第一の実施例で可視スピン(可視スピン201-2)が”100”であった場合に相当する。カウンタ(0からNv2-1)の値に応じてデータの末尾の数字を変更するのは、言い換えると、全ての可視スピン(可視スピン111-2)のパタンに対する加工データを作成していることと同義である。このようにして、カウンタの値１つに対して、対応する加工データの一部が１つずつ、データ抽出部123から演算部124に送付される。
【００７５】
図１１の例では、入力データの可視スピン111-1”0100100”に対して、カウンタが更新されるごとに出力#0,#1,#2が順次出力される。出力#0は、可視スピン111-1の”1”の数”2”、”1”のアドレスである”1”と”4”、そして、カウンダの値”0”を並べ”2140”となる。
【００７６】
実施例２では、データ抽出部123からの出力#0,#1,#2のそれぞれに対して、Step 2の処理が実行されるが、その内容は実施例１と同様である。実施例１が可視スピン201-2を予め定めて入力するのに対して、実施例２では可視スピン111-2の可能性のある組み合わせを自動的に生成して入力する点が異なる。
【００７７】
加工処理による演算回路規模の削減の効果は、第一の実施例で述べたものと同様のものが期待できる。また、演算部124で行われる演算処理に関しても、第一の実施例で述べたものと同様となる。
【００７８】
＜Ｃ．機械学習システムの第三の実施例＞
機械学習システムの第三の実施例を説明する。この実施例は、上記「（３）入力データに基づいてモデルパラメタを更新するように指令するコマンド」に対応するものである。この実施例は結合係数を学習する際に用いることができ、実質的なモデルの学習を行なうことができる。
【００７９】
図１２に機械学習システム100cの構成を示す。機械学習システムの機能ブロックの構成は第一の実施例及び第二の実施例とほぼ同じだが、機械学習モジュール120の構成要素の一つとして、スピン間の結合係数127を更新する更新部(Upd)1201が新たに追加されている。なお、用いるボルツマンマシンの形状や、スピン間の結合係数127のデータフォーマットは、第一の実施例及び第二の実施例と同様である。また、第三の実施例では、機械学習モジュール120内の更新部1201でスピン間の結合係数127の更新を行うため、ハイパパラメタ128には、第一の実施例及び第二の実施例で述べた温度などに加えて、学習係数(Learning coefficient)や、更新のアルゴリズム(Stochastic Gradient Descent（SGD）、Adaptive Moment Estimation(ADAM）など)に関する情報や、強化学習であれば、割引率(discount rate)なども含まれる。これらの一般的な学習に関する概念は公知であるので、詳細説明は省略する。
【００８０】
図１３にまた、機械学習の一例として、強化学習における動作フローチャートの例を示す。図１２に記した矢印は、データやコマンドのフローを表し、図１３と合わせて説明する。
【００８１】
図１３のStep 1では、機械学習フレームワーク110から機械学習モジュール120へ、特定の計算命令コマンドと機械学習モジュール120が計算するための入力データが送られる(図１２ IN)。コマンドは”入力データに基づいてモデルパラメタを更新するように指令するコマンド“であり、のちほどデータ抽出部123が使用するミニバッチ数(Nminibatch)と、行動数(Naction)を含む。
【００８２】
ミニバッチ数は可視スピン1で表される入力データの数、例えば画像の枚数に対応する。行動数は可視スピン2で表される入力データの数、例えば画像の分類数に対応する。図１３の学習処理の目的は、可視スピン1と可視スピン2の組み合わせが所望の関係にあるときに、エネルギーが最小になるような結合係数を探索することにある。
【００８３】
計算命令コマンドと入力データは、データインターフェース部121が受領し、バッファ122に格納される(図１２ A)。つづいて、データ抽出部123は、バッファ122に格納された計算命令コマンドを読み出し(図１２ B)、ミニバッチ数カウンタ(i)と、行動数カウンタ(j)を共に0にセットする(図１３ i=0, j=0)。
【００８４】
次に、データ抽出部123は、ミニバッチ数カウンタ(i)の値を読み出し、値がミニバッチ数(Nminibatch)と一致するか判定する(図１３ i=Nminibatch?)。一致しなかった場合、Step 2に進み(図１３ N1)、一致した場合はStep 7に進む(図１３ Y1)。
【００８５】
まず、Step 2から先のフローを説明する。Step 2では、データ抽出部123は、バッファ122に格納された入力データの一部を読み出し(図１２ B)、読み出したデータの一部を加工する。次に、データ抽出部123は、ミニバッチ数カウンタ(i)の値を一つ増やす(図１３ i++)。その後、データ抽出部123は、行動数カウンタ(j)の値を読み出し、値が行動数(Naction)と一致するか判定する(図１３ j=Naction?)。一致しなかった場合、Step 3に進み(図１３ N2)、一致した場合はStep 5に進む(図１３ Y2)。
【００８６】
まず、Step 3から先のフローを説明する。Step 3では、データ抽出部123は、Step 2で読み出したデータの残りの部分を加工する。そして、加工したデータを演算部124に送付する(図１２ C)。次に、データ抽出部123は、行動数カウンタ(j)の値を１つ増やす(図１３ j++)。その後、演算部124は、メモリ125からスピン間の結合係数127とハイパパラメタ128を読み出し(図１２ D及びE)、データ抽出部123から受領した加工データを基にして、演算を実行する。
【００８７】
演算部124は、演算結果を更新部1201に送付する(図１２ F)。更新部1201は、演算結果を受領したことを、データ抽出部123に伝える(図１２ H)。すると再び、データ抽出部123は、行動数カウンタ(j)の値を読み出し、値が行動数(Naction)と一致するか判定する(図１３ j=Naction?)。
【００８８】
次に、Step 5から先のフローを説明する。Step 5では、Step 2で加工したデータを演算部124に送付する(図１２ C)。演算部124は、メモリ125からスピン間の結合係数127とハイパパラメタ128を読み出し(図１２ D及びE)、データ抽出部123から受領した加工データを基にして、演算を実行する。
【００８９】
演算部124は、演算結果を更新部1201に送付する(図１２ F)。次にStep 6では、更新部1201は、メモリ125からハイパパラメタ128を読み出し(図１２ G)、これまでに受領した演算結果を基にして、結合係数127の更新量を計算する。また、更新量の計算が完了したことを、データ抽出部123に伝える(図１２ H)。
【００９０】
その後、再び、データ抽出部123は、ミニバッチ数カウンタ(i)の値を読み出し、値がミニバッチ数(Nminibatch)と一致するか判定する(図１３ i=Nminibatch?)。
【００９１】
次に、Step 7から先のフローを説明する。Step 7では、データ抽出部123は、更新部1201にミニバッチ数終了通知を送る(図１２ I)。
【００９２】
Step 8では、ミニバッチ数終了通知を受領した更新部1201は、これまで計算した結合係数127の更新量を基に、最終的な更新量の値を計算し、それをメモリ125に格納されたスピン間の結合係数127に反映させる(図１２ J)。また、更新部1201は、スピン間の結合係数127の更新がエラーなく終了したか否か、またエラーが発生した場合はエラー内容もメモリ125内の結果126に格納する(図１２ K)。
【００９３】
次に、更新部1201は、終了フラグをデータインターフェース部121に送付する(図１２ L)。Step 9では、終了フラグを受領したデータインターフェース部121は、メモリ125内の結果126から、スピン間の結合係数127の更新がエラーなく終了したか否か、またエラーが発生した場合はエラー内容も読み出し(図１２ M)、機械学習フレームワーク110へ送付する(図１２ OUT)。
【００９４】
図１４にて、データ抽出部123が行うデータ加工処理の一例を、強化学習を例に挙げて示す。データ加工処理では、まずデータ抽出部123がバッファ122に格納された計算命令コマンドを取得する。第三の実施例では、計算命令コマンドが、” 入力データに基づいてモデルパラメタを更新するように指令するコマンド“である場合を説明する。バッファ122に格納された入力データの例を図１４(a)に示す。
【００９５】
入力データは、indexが0からミニバッチ数(Nminibatch)-1までのデータ部分で構成され、各データ部分は、現在の状態(State(j))、現在の状態のもとで実行する行動(Action(j))、報酬(Reward(j))、次の状態(State(j+1))から構成される。入力データの見方は、第一の実施例及び第二の実施例の場合と同様、”1”が上向きスピン、”0”が下向きスピンを表わす。また、現在の状態(State(j))や次の状態(State(j+1))は可視スピン１（Visible spins 1）に対応し、現在の状態のもとで実行する行動(Action(j))は可視スピン２（Visible spins 2）に対応する。
【００９６】
データ抽出部123は、バッファ122からミニバッチ数カウンタ(i)の値に対応するデータ部分を読み出し、データ部分１つずつ順に加工処理を行う。また、データ部分は、一度に全て加工処理が実行されるわけではなく、行動数カウンタ(j)の値に応じて部分的に加工処理が行われる。行動数カウンタ(j)の値が0から行動数(Naction)-1のときは、データ部分のうち、次の状態(State(j+1))と次の状態のもとで実行する行動(Action(j+1))が加工され(Output of Extraction 0-3)、演算部(Calculation)に送付される。これは図１３のStep 3に対応する加工処理となる。
【００９７】
一方、行動数カウンタ(j)の値が行動数(Naction)の場合は、現在の状態(State(j))と現在の状態のもとで実行する行動(Action(j))が加工され(Output of Extraction 4)、報酬の値とともに演算部124に送付される。これは図１３のStep 5に対応する加工処理となる。なお、加工処理による演算回路規模の削減の効果は、第一の実施例で述べたものと同様のものが期待できる。
【００９８】
図１５で、演算部124で行われる演算処理の一例を説明する。図１５は自由エネルギーを計算するための演算部124の内部を機能ブロック図で表現したものである。まず、演算部124は抽出部123から加工データを受領する(Input of Calculation)。加工データは２つに分類でき、１つ目は可視スピン(Visible spins 1及びVisible spins 2、例えば図７の可視スピン701-1と可視スピン701-2)の向きの情報のみが含まれているもの(図１４のOutput of Extraction 0から3に相当)で、２つめは可視スピンの向きの情報に加えて、報酬が付加されたもの(図１４のOutput of Extraction 4に相当)である。
【００９９】
以下は、まず加工データに可視スピンの向きの情報のみが含まれている場合を説明する。この場合の演算部124の動作フローは＜Ａ＞で述べた内容とほぼ同じであり、演算部124が受領した加工データは、まずレジスタ802に保存される。
【０１００】
次に積和演算ユニット803は、レジスタから読み出した加工データ(図１５ A)と、メモリ125から読み出したスピン間の結合係数127(図１５ B)と、必要に応じて隠れスピンの値(図１５ C)を用いて、図７を用いて説明した積和演算を実行する。積和演算ユニット803は、その結果を局所エネルギーユニット804に送付する(図１５ D)。
【０１０１】
局所エネルギーユニット804はその結果とメモリ125から読み出したハイパパラメタ128(図１５ E)を基に、スピンのフリップ確率(スピンの向きが変わる確率)を計算し、スピンフリップ制御ユニット805に送付する(図１５ F)。スピンフリップ制御ユニット805は、スピンのフリップ確率を基に、各スピンをフリップするか否かを決めて、その結果を隠れスピン管理ユニット806に送付する(図１５ H)。
【０１０２】
各スピンをフリップするか否かの結果を受領した隠れスピン管理ユニット806は、フリップ対象の隠れスピンをフリップする。また、スピンフリップ制御ユニット805は、メモリ125から読み出したハイパパラメタ128(図１５ G)を基に、アニーリングが終了したか否かを判定し、終了していなければ、スピンフリップサイクルを１つ増やし、隠れスピン管理ユニット806に送付する。
【０１０３】
そののち、前述の積和演算ユニット803による処理から繰り返される。スピンフリップサイクルは、上記で述べた処理中のデータのやり取りを通して、積和演算ユニット803と局所エネルギーユニット804とスピンフリップ制御ユニット805の間で共有される。
【０１０４】
スピンフリップ制御ユニット805がアニーリング終了か否かを判定し、終了していた場合は、全サイクルが終了したかどうかを判定する。その結果全サイクルが終了していなければ、スピンフリップ制御ユニット805は、隠れスピンのスナップショットを取る命令を隠れスピン管理ユニット806に送付する。
【０１０５】
命令を受けた隠れスピン管理ユニット806は、現在の隠れスピンの値(各スピン”0”か”1”)を隠れスピンレジスタ807に保存し(図１５ I)、隠れスピンの値を初期化する。そののち、前述の積和演算ユニット803による処理から繰り返される。
【０１０６】
また、全サイクルが終了していると判定された場合、スピンフリップ制御ユニット805は、自由エネルギーの計算実行命令を隠れスピン管理ユニット806に送付する。命令を受けた隠れスピン管理ユニット806は、隠れスピンレジスタ807から、これまで保存した隠れスピンの値を取得し(図１５ J)、その平均値を計算する(この平均値は、各スピン0から1までの連続値となる)。
【０１０７】
次に隠れスピン管理ユニット806は、その平均値を隠れスピンの値として、積和演算ユニット803に送付する。積和演算ユニット803は、前述の処理と同様にして、レジスタから読み出した加工データ(図１５ A)と、メモリ125から読み出したスピン間の結合係数127(図１５ B)と、受領した隠れスピンの平均値(図１５ C)を用いて、積和演算を実行し、その結果を局所エネルギーユニット804に送付する(図１５ D)。
【０１０８】
局所エネルギーユニット804は、その局所エネルギーを足し合わせ(厳密には、更に隠れスピンの右方向と左方向のダブルカウント部分を差し引いて)、足し合わされた値と、ハイパパラメタ128に含まれる温度を、統合部808に送付する(図１５ K)。また上記処理と並列して、統合部808は隠れスピンレジスタ807から、これまで保存した隠れスピンの値を取得し(図１５ L)、エントロピーを計算する。
【０１０９】
そして、統合部808は、エントロピーと足し合わされた局所エネルギーと温度を用いて、自由エネルギーを計算する。次に、統合部808は、計算された自由エネルギーを更新部1201に送付する(図１５ Output of Calculation 1)。
【０１１０】
次に、加工データに可視スピンの向きの情報に加えて報酬が含まれている場合を説明する。この場合の演算部124の動作フローは、１つ目の例と共通する部分もあるため、差分を説明する。まず、演算部124は、加工データを受領後、更新部1201に加工データを送付する(図１５ Output of Calculation 0)。また、１つ目の例と同様のフローで計算された自由エネルギーを、更新部1201に送付する(図１５ Output of Calculation 1)。その後、演算部124は、隠れスピン管理ユニット806に保存された隠れスピンの平均値を更新部1201に送付する(図１５ Output of Calculation 2)。
【０１１１】
図１６で、更新部1201で行われるスピン間の結合係数127の更新処理の一例を説明する。図１６は更新処理のための更新部1201の内部を機能ブロック図で表現したものである。更新部1201は更新処理部(Update Processor)1202と更新バッファ(Update Buffer)1203から構成される。
【０１１２】
まず、演算部124から更新処理部1202に、データが送付される(図１６ IN0と図１２ F)。このデータには２種類あり、自由エネルギーのみの場合と、自由エネルギーに加えて抽出部123が加工した加工データと、隠れスピンの平均値が含まれる場合がある。前者の場合、更新処理部1202は、演算部124から送付された自由エネルギーを更新バッファ1203に格納し(図１６ A)、自由エネルギー受領通知を抽出部123に送付する(図１６ OUT0と図１２ H)。後者の場合、これまで受領した自由エネルギーと、加工データ及び隠れスピンの平均値を用いて、スピン間の結合係数127の更新量を計算し、更新量を更新バッファ1203に格納する(図１６ A)。
【０１１３】
更新量の計算にあたっては、例えば、教師付き学習であれば、正解に対応する自由エネルギーの値を、他の不正解のラベルに対応する自由エネルギーの値と比べて相対的に選ばれやすくするように（一般的には減少させるように）結合係数127を変更し、強化学習であれば、行動に対応する将来報酬値の総和を負の自由エネルギー（自由エネルギーの正負を反転させたもの）と一致させるように、結合係数127を変更する。
【０１１４】
その後、スピン間の結合係数127の更新量の計算完了通知を抽出部123に送付する(図１６ OUT0と図１２ H)。また、抽出部123からミニバッチ数終了通知を受領した場合(図１６ IN1と図１２ I)、更新処理部1202は更新バッファ1203から、これまでに保存したスピン間の結合係数127の更新量を読み出し(図１６ B)、それらから、例えば平均をとるなどして、最終的なスピン間の結合係数の更新量を計算して、メモリ125内に保存されているスピン間の結合係数127の値に反映させる(図１６ OUT1と図１２ J)。
【０１１５】
その後、更新処理部1202は、更新バッファ1203にこれまでに保存されているスピン間の結合係数127の更新量を消去する。次に、更新処理部1202は、スピン間の結合係数127の更新がエラーなく終了したか否か、またエラーが発生した場合はエラー内容もメモリ125内の結果126に格納する(図１６ OUT2と図１２ K)。格納後、更新処理部1202は、終了フラグをデータインターフェース部121に送付する(図１６ OUT3と図１２ L)。
【０１１６】
第三の実施例では、機械学習のうち、強化学習の例を重点的に説明したが、実施例の範囲は強化学習に限定されず、教師付き学習に適用してもよい。その場合は、第一の実施例及び第二の実施例で説明したように、状態(State)は可視スピン1(Visible spins 1)に対応し、行動(Action)は可視スピン2(Visible spins 2)に対応する。
【０１１７】
上記の３つの実施例＜Ａ＞＜Ｂ＞＜Ｃ＞では、演算部124でボルツマンマシンの自由エネルギーを計算する例を挙げたが、評価関数を表現するのは自由エネルギーに限らず、例えば内部エネルギー(自由エネルギーからエントロピーの項を除いたもの)で表現してもよい。ここで、評価関数とは、強化学習では行動価値関数や状態価値関数などに対応し、教師付き学習では入力データが各分類に属する確率などに対応する。
【０１１８】
第一の実施例でも述べたように、機械学習フレームワーク110はソフトウェアでもプラットフォームでもよく、機械学習モジュール120と連帯した(もしくは一体型の)ハードウェアでもよい。一方、機械学習モジュール120もハードウェアに限らず、一部もしくは全体がソフトウェアとして実装されていてもよい。また、上記の３つの実施例＜Ａ＞＜Ｂ＞＜Ｃ＞では、機械学習システムが機械学習フレームワーク110と機械学習モジュール120から構成される例を挙げたが、機械学習フレームワークの機能(ユーザによる機械学習コマンドの入出力や学習用データの入出力など含む)も機械学習モジュール120に持たせて、機械学習モジュール単独で構成してもよい。
【０１１９】
＜Ｄ．実施例の効果のまとめ＞
以上説明した実施例によって得られる主な効果は以下の通りである。
第一の実施例を適用することにより、機械学習において評価値を算出する際、入力するデータから評価値の算出に影響を与えない部分を取り除く(データを加工する)ことで、評価値の算出に必要な演算回路規模を削減し、回路面積の低減や演算時の消費電力の削減をすることができる。第二の実施例を適用することにより、入力するデータから複数の評価値を算出することができる。これにより、第一の実施例を適用した際の効果に加え、一つの評価値を算出する際のデータの入力回数を減らすことができ、より高速な評価値の算出が可能となる。第三の実施例を適用することにより、入力するデータから評価値の算出に影響を与えない部分を取り除き(データを加工)、その評価値を基に、評価値を求めるためのモデルのパラメタを更新する(学習する)ことができる。これにより、機械学習における学習プロセスに必要な演算回路規模を削減し、回路面積の低減や学習時の消費電力の削減をすることができる。
【０１２０】
以上の実施例における説明では、機械学習フレームワーク、データインターフェース部、データ抽出部、演算部、更新部など、機能ごとに分かれたブロック図として、機械学習システムを例示していたが、上記の機能分割に限らず、データを加工する機能、評価値を算出する機能、モデルのパラメタを更新する機能が含まれていれば良い。実装形態も、ASICのような専用回路として実装してもよいし、FPGAのようにプログラマブルなロジックとして実装してもよいし、組み込みのマイコンに実装してもよいし、CPUやGPU上で動作するソフトウェアとして実装してもよい。もしくは、機能ごとに上記の組み合わせで実装してもよい。
【０１２１】
詳細に説明したように、上記実施例の技術を採用することにより、機械学習において、ボルツマンマシンを学習器に利用した場合の（ニューラルネットワークと比較した場合の）モデル規模増大による消費電力や実装回路規模の増大を防ぎつつ、学習に必要なモデルパラメタの更新回数を減らし、学習時間や消費電力の削減を可能にすることが可能となる。
【０１２２】
以上、添付図面を参照して具体的に説明したが、好ましい実施の形態は以上の説明に限定されるものではなく、その要旨を逸脱しない範囲で種々変更可能であることはいうまでもない。
【符号の説明】
【０１２３】
110・・・機械学習フレームワーク
120・・・機械学習モジュール
121・・・データインターフェース部
122・・・バッファ
125・・・メモリ
126・・・結果
127・・・スピン間の結合係数
128・・・ハイパパラメタ
123・・・データ抽出部
124・・・演算部
【図１】
2020035000.tif 000004
【図２】
2020035000.tif 000005
【図３】
2020035000.tif 000006
【図４】
2020035000.tif 000007
【図５】
2020035000.tif 000008
【図６】
2020035000.tif 000009
【図７】
2020035000.tif 000010
【図８】
2020035000.tif 000011
【図９】
2020035000.tif 000012
【図１０】
2020035000.tif 000013
【図１１】
2020035000.tif 000014
【図１２】
2020035000.tif 000015
【図１３】
2020035000.tif 000016
【図１４】
2020035000.tif 000017
【図１５】
2020035000.tif 000018
【図１６】
2020035000.tif 000019