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