(19)【発行国】日本国特許庁(JP)
(12)【公報種別】特許公報(B2)
(11)【特許番号】
(24)【登録日】2022-11-07
(45)【発行日】2022-11-15
(54)【発明の名称】機械学習システム
(51)【国際特許分類】
G06N 20/00 20190101AFI20221108BHJP
G06N 10/00 20220101ALI20221108BHJP
G06N 3/04 20060101ALI20221108BHJP
【FI】
G06N20/00
G06N10/00
G06N3/04 145
(21)【出願番号】P 2019127431
(22)【出願日】2019-07-09
【審査請求日】2021-12-16
(73)【特許権者】
【識別番号】000005108
【氏名又は名称】株式会社日立製作所
(74)【代理人】
【識別番号】110001689
【氏名又は名称】青稜弁理士法人
(72)【発明者】
【氏名】内垣内 洋
【審査官】関口 明紀
(56)【参考文献】
【文献】特開平1-229360(JP,A)
【文献】特開2019-74947(JP,A)
【文献】特開2018-195231(JP,A)
【文献】特開2017-97392(JP,A)
【文献】特開2019-70950(JP,A)
(58)【調査した分野】(Int.Cl.,DB名)
G06N3/00-99/00
(57)【特許請求の範囲】
【請求項1】
学習部と、メモリを含む演算部とを有する機械学習システムであって、
前記演算部は、
前記メモリに、要求精度と学習器の内部状態と重み値を保持し、
前記機械学習システムに入力された入力データと、前記メモリに保持された前記重み値とを用いて計算処理を実行することにより、前記メモリに保持された前記内部状態を更新し、
前記計算処理の結果から前記内部状態の精度を算出し、
前記算出された精度が前記要求精度より高い場合、前記機械学習システムに入力された前記入力データと、前記メモリに保持された前記重み値と、前記メモリに保持された更新された前記内部状態を用いて、評価値を計算し、
前記評価値を前記学習部に送付し、
前記学習部は、
前記評価値を用いて、前記メモリに保持された前記重み値を更新し、前記重み値の更新回数を前記演算部に通知することを特徴とする機械学習システム。
【請求項2】
請求項1に記載の機械学習システムにおいて、
前記演算部は、
前記算出された精度が前記要求精度より低い場合、前記内部状態を更新して前記計算処理を繰り返すことを特徴とする機械学習システム。
【請求項3】
請求項2に記載の機械学習システムにおいて、
前記算出された精度は、前記演算部が前記内部状態の更新を繰り返し実行した際に、前記内部状態が収束する状態と現在の前記内部状態との差分値、または、現在の前記内部状態の分散値となることを特徴とする機械学習システム。
【請求項4】
請求項2に記載の機械学習システムにおいて、
前記要求精度は、前記機械学習システムの外部から前記メモリに設定されることを特徴とする機械学習システム。
【請求項5】
請求項4に記載の機械学習システムにおいて、
前記演算部は、前記内部状態の精度と前記要求精度とを比較することを特徴とする機械学習システム。
【請求項6】
請求項5に記載の機械学習システムにおいて、
前記演算部は、前記比較の結果、前記内部状態の精度が前記要求精度の閾値を満たしていなければ、前記評価値を計算する前に、前記計算処理及び前記内部状態の更新を追加で実行することを特徴とする機械学習システム。
【請求項7】
請求項5に記載の機械学習システムにおいて、
前記演算部は、前記比較を実行する前に、前記機械学習システムの外部より初期設定される初期計算処理回数の数だけ、前記計算処理及び前記内部状態の更新を実行することを特徴とする機械学習システム。
【請求項8】
請求項7に記載の機械学習システムにおいて、
前記初期計算処理回数は、前記メモリに設定することを特徴とする機械学習システム。
【請求項9】
請求項5に記載の機械学習システムにおいて、
前記演算部は、前記比較の結果にかかわらず、前記計算処理及び前記内部状態の更新の回数が最大計算処理回数以上であれば、前記評価値を計算し、前記学習部に送付することを特徴とする機械学習システム。
【請求項10】
請求項1に記載の機械学習システムにおいて、
前記演算部は、ボルツマンマシンから構成される計算部を有し、
前記内部状態は2値の離散的な値をもつことを特徴とする機械学習システム。
【請求項11】
請求項1に記載の機械学習システムにおいて、
前記演算部の前記内部状態が3値以上の離散的な値から構成されることを特徴とする機械学習システム。
【請求項12】
学習部と、メモリを含む演算部とを有する機械学習システムにおける方法であって、
前記演算部は、
前記メモリに、要求精度と学習器の内部状態と重み値を保持し、
前記機械学習システムに入力された入力データと、前記メモリに保持された前記重み値とを用いて計算処理を実行することにより、前記メモリに保持された前記内部状態を更新し、
前記計算処理の結果から前記内部状態の精度を算出し、
前記算出された精度が前記要求精度より高い場合、前記機械学習システムに入力された前記入力データと、前記メモリに保持された前記重み値と、前記メモリに保持された更新された前記内部状態を用いて評価値を計算し、
前記評価値を前記学習部に送付し、
前記学習部は、
前記評価値を用いて、前記メモリに保持された前記重み値を更新し、前記重み値の更新回数を前記演算部に通知することを特徴とする機械学習システムの学習方法。
【発明の詳細な説明】
【技術分野】
【0001】
本発明は機械学習における学習及び推論処理の省電力化と高速化を実現する機械学習システムに関するものである。
【背景技術】
【0002】
近年、深層学習などに代表される機械学習アルゴリズムの進展により、計算機による画像や音声などの認識精度が向上した。これにより、自動運転や機械翻訳など、機械学習の応用例が急速に拡大している。
【0003】
複雑な問題に機械学習を適用する際の課題の一つは、学習完了までに必要なモデルパラメタの更新回数が増大してしまうことである。モデルパラメタとは、例えばニューラルネットワークではニューロン間の接続係数に相当する。更新回数が増大すると、比例して演算回数が増え、学習時間が増大する。そのため、最近、モデルパラメタの更新回数が少なくても学習可能なアルゴリズムの研究が盛んである。ボルツマンマシンを用いた機械学習もその一つである。ボルツマンマシンを用いると、ニューラルネットワークを利用した場合と比較して、学習に必要なモデルパラメタの更新回数を減らせる場合があることがわかっている。これにより、複雑な問題でも短時間で学習することが可能となる。
【0004】
特許文献1には、量子効果を用いた物理シミュレーションに関する技術が開示されており、特許文献2には、量子アニーリングを実現するためのハードウェア及びプログラミング技術が開示されている。
【先行技術文献】
【特許文献】
【0005】
【文献】特開2018-67200号公報
【文献】特表2017-507439号公報
【発明の概要】
【発明が解決しようとする課題】
【0006】
背景記述に記したように、ボルツマンマシンを用いた機械学習は、ニューラルネットワークを用いた機械学習と比較して、モデルパラメタの更新回数を減らすことができる。ただし、モデルパラメタを1回更新するために必要な積和演算回数は、ニューラルネットワークを用いた場合と比較して増えてしまう。そのため、モデルパラメタを更新するために必要な積和演算回数を削減する技術が求められている。
【0007】
特許文献1には、2値を取りうる複数のスピンからなる系(ボルツマンマシンやイジングモデルを含む)の物理量を算出する際、一時相転移を回避しつつ負符号問題を解決する技術が記載されている。これにより、これまで、負符号問題により物理量を算出することができなかった系においても、物理量を求めることができ、量子効果を用いて高速に物理量を算出することができる。ただし、学習に適用した際、モデルパラメタを更新するために必要な積和演算回数を削減することはできない。
【0008】
また、特許文献2には、複数の量子スピンからなる系(ボルツマンマシンやイジングモデルを含む)を実装したハードウェアに関する技術が記載されている。これにより、量子スピン系の基底状態探索を高速に実行する事はできるが、学習に適用した際、モデルパラメタを更新するために必要な積和演算回数を削減することはできない。
【0009】
本発明の目的は、ボルツマンマシンを機械学習に利用した場合、モデルパラメタを更新するために必要な積和演算回数を削減し、学習時間を短縮可能な技術を提供することである。
【課題を解決するための手段】
【0010】
上記目的を解決する、機械学習システムの一態様は、学習部と、メモリを含む演算部とを有する機械学習システムであって、演算部は、メモリに、要求精度と学習器の内部状態と重み値を保持し、機械学習システムに入力された入力データと、メモリに保持された重み値とを用いて計算処理を実行することにより、メモリに保持された内部状態を更新し、計算処理の結果から内部状態の精度を算出し、算出された精度が要求精度より高い場合、機械学習システムに入力された入力データと、メモリに保持された重み値と、メモリに保持された更新された内部状態を用いて、評価値を計算し、評価値を学習部に送付し、学習部は、評価値を用いて、メモリに保持された重み値を更新し、重み値の更新回数を演算部に通知する。
【発明の効果】
【0011】
本発明を用いることで、機械学習における学習及び推論処理の省電力化と高速化を実現でき、例えば、電力や回路規模の制限の厳しいエッジでの学習及び推論処理が可能となる。
【図面の簡単な説明】
【0012】
【
図1】機械学習システムの実施例を示す構成図である。
【
図2】機械学習システムの実施例の別の構成の例を示す構成図である。
【
図4】演算制御部の構成の一例を示す構成図である。
【
図6】ボルツマンマシンの構成の一例を示す説明図である。
【
図7】初期設定における、設定値の一例を示す表である。
【
図8】学習部が実行する学習の全体処理の一例を示すフローチャートである。
【
図9】学習部が実行する推論処理の一例を示すフローチャートである。
【
図10】演算部に入力する画像データの変換の一例を示す説明図である。
【
図11】演算部に入力する連続値データの変換の一例を示す説明図である。
【
図12】学習部が実行する重み更新処理の一例を示すフローチャートである。
【
図13】演算部が実行する演算の全体処理の一例を示すフローチャートである。
【
図14】演算部が実行する演算追加実行判定処理の一例を示すフローチャートである。
【
図15】演算の繰り返し回数と演算の精度の関係性の一例を示すグラフである。
【
図16】異なる学習ステップ数における、演算の繰り返し回数と演算の精度の関係性の違いの一例を示すグラフである。
【
図17】異なる要求精度における、学習ステップ数と要求精度を満たす演算の繰り返し回数の最小値の関係性の違いの一例を示すグラフである。
【発明を実施するための形態】
【実施例】
【0013】
以下、本発明である機械学習システムの実施例を説明する。
【0014】
機械学習システムの構成を
図1及び
図2に示す。機械学習システム100は、機械学習を統括する上位システム(ホストシステム)や機械学習の指示を出すユーザ101と、学習で用いるデータを供給する環境、学習で用いるデータを保存するストレージやメモリ102と、学習を実行する学習部103と、学習に必要な演算を実行する演算部104により構成される。学習部103と接続されているのは、ホストシステムとユーザのいずれか一方だけでも、両方と接続されていても良い。
【0015】
また、
図1に示すように、環境、ストレージ、メモリ102のうち、いずれか1つのみが学習部103に接続されていても、2つ以上が接続されていてもよい。もしくは、
図2に示すように、環境、ストレージ、メモリ102は、学習部103ではなくホストシステムもしくはユーザ101と接続されていてもよい。その場合、学習で用いるデータは、ホストシステムもしくはユーザ101を経由して学習部103に送られる。
【0016】
ホストシステム101の例としては、学習部103を実行するオペレーティングシステムや仮想マシン、Dockerなどに代表されるコンテナや、それらを管理するソフトウェア及びそれらを実装するハードウェアなどが挙げられる。その場合、学習部103の例としては、TensorFlow、Keras、Caffe、PyTorch、Chainerなどの機械学習フレームワークが挙げられ、演算部104の例としては、重み値を有するニューラルネットワークやボルツマンマシンの演算を実装した専用ハードウェア(ASICやFPGA)や、それらの演算を記述したソフトウェアとCPUやGPUなどの汎用ハードウェアが挙げられる。
【0017】
また、別の例として、ホストシステムがTensorFlow、Keras、Caffe、PyTorch、Chainerなどの機械学習フレームワークに対応する場合が挙げられる。その場合、学習部103及び演算部104は、より低レイヤの学習や演算を実行するソフトウェア、ハードウェア、もしくはそれらの組み合わせに対応する。
図1及び
図2に記載された矢印は、データやコマンドの流れを表す。各矢印に対応するデータやコマンドの詳細は、後述する。本明細書においては、学習部103と演算器104によって処理されるデータの集合を学習器と呼ぶ。
【0018】
機械学習システム100内の演算部104の構成の一例を
図3に示す。演算部104は、データインターフェース部201と、メモリ204と、演算制御部203と、計算部202から構成される。データインターフェース部201は、学習部103とメモリ204間のデータ通信を行い、メモリ204は、データインターフェース部201と演算制御部203間のデータ通信を行い、演算制御部203は、メモリ204と計算部202間のデータ通信を行い、計算部202は、演算制御部203とデータ通信を行う。
図3に記載された矢印は、データやコマンドの流れを表す。各矢印に対応するデータやコマンドの詳細は、後述する。
【0019】
演算部104内の演算制御部203の構成の一例を
図4に示す。演算制御部203は、初期計算制御部401と、精度計算部402と、精度比較部404と、計算結果統合部403と、追加計算制御部405から構成される。
図4に記載された矢印は、データやコマンドの流れを表す。
図4の矢印のうち、G、H、I、Jは、
図3に示す計算部202とのデータ通信を表し、K、L、M、N、O、P、Q、R、Sは、
図3に示すメモリ204とのデータ通信を表す。各矢印に対応するデータやコマンドの詳細は、後述する。
【0020】
機械学習システム内の学習部103の構成の一例を
図5に示す。学習部103は、データインターフェース部501と、メモリ502と、初期重み処理部503、入力加工部504、学習ステップ管理部505、重み更新部506、結果加工部507から構成される。学習部103は、処理部であるCPU、メモリ、インタフェースを含む一般的な計算機で構成される。CPUが主記憶装置であるメモリに格納される初期重み処理プログラム、入力加工プログラム、学習ステップ管理プログラム、重み更新プログラム、結果加工プログラムを実行することで、
図5に示した各機能を実現する。尚、各プログラムを格納するメモリは、
図5に示したメモリ502と同じメモリであっても、異なるメモリで構成されていても良い。
【0021】
図5に記載された矢印は、データやコマンドの流れを表す。矢印A、Bは、データインターフェース部501と
図1及び
図2に記載されたホストシステム、ユーザ、環境、ストレージ、メモリ102、演算部104との間のデータ通信を表す。
【0022】
機械学習システム100の学習器に用いるボルツマンマシンの例を
図6に示す。
【0023】
ボルツマンマシンは、可視スピン601と隠れスピン602から構成される。各スピンは向きを有しており、上向きと下向きの2通り(2値)を取りうる。可視スピンが2つに分かれているのは、意味合いの異なる2種類のスピンを入力するためである。例えば、画像認識・分類に代表されるような教師付き学習では、可視スピン601aは学習対象の画像データとなり、可視スピン601bは可視スピン601aに入力された画像データの分類(例えば猫なのか犬なのか)に関する情報となる。
【0024】
また、強化学習の場合、可視スピン601aは環境からAgentに返される状態に対応し、可視スピン601bはAgentから環境に返答する行動(例えば右に向かうのか左に向かうのか)に対応する。
【0025】
隠れスピンは、1つ以上の層(図中H[0]などのスピン1列分)から構成され、隠れスピンが1層の場合は制限ボルツマンマシン、2層以上の場合はディープボルツマンマシンと呼ばれる。
図6中の例では、隣り合う層に属するスピン603間は全対全で結合しているが、結合の仕方はこの例に限らず、部分的に接続されていてもよい。結合の強さは、重み604と呼ばれ、数値で表現される。学習によって、この重みの値は更新される。
【0026】
学習前の初期設定時に設定されるパラメタの一例を
図7に示す。
【0027】
パラメタは、学習実行前に、
図1に記載されたホストシステムもしくはユーザ101から学習部103に送付される(
図1の矢印B)。または、ホストシステムもしくはユーザ101から学習部103に送付されるコマンド(
図1の矢印B)をトリガーとして、学習部103は、環境、ストレージ、もしくはメモリ102からパラメタを取得する(
図1の矢印D)。
【0028】
別の例では、
図2に示すように、学習実行前に、ホストシステムもしくはユーザ101は、環境、ストレージ、もしくはメモリ102からパラメタを読み出す(
図2の矢印C)。その後、ホストシステムもしくはユーザ101はパラメタを学習部103に送付する(
図2の矢印B)。このようにして学習部103に送付されたパラメタのうち、一部は
図5に記載された学習部103内のメモリ502に、データインターフェース部501経由で格納され(
図5の矢印B及びD)、残りは、学習部103から演算部104に送付される(
図1及び
図2の矢印F)。
【0029】
演算部104に送付された残りのパラメタは、
図3に記載された演算部104内のメモリ204に、データインターフェース部201経由で格納される(
図3の矢印B及びD)。
【0030】
図7(a)は、学習部103に保存されるパラメタの一例を示す。表の上から順に学習係数、ユニット(スピン)の数、層数、最適化手法、学習ステップの最大値、学習の完了条件の一例を示す。
【0031】
図7(b)は、演算部104に保存されるパラメタの一例を示す。表の上から順に要求精度、初期計算回数、追加計算回数、最大計算回数の一例を示す。
【0032】
学習部103の動作フローチャートの一例を
図8に示す。
【0033】
まず、ステップS81で、学習部103は、ホストシステムもしくはユーザ101から学習開始コマンドを受領する(
図1及び
図2の矢印B)。ステップS82で、学習コマンドを受領したことをトリガーとして、学習部103内の初期重み処理部503は、学習部103内のメモリ502からパラメタ(例えば
図7(a)初期設定1)を読み出し(
図5の矢印E)、初期の重み値を生成する。生成された初期の重み値はメモリ502に格納される(
図5の矢印F)。初期の重み値とは、例えば
図6に示すボルツマンマシンの重み値の初期値を意味する。
【0034】
次に、ステップS83で、メモリ502に格納された初期の重み値は、学習部103内のデータインターフェース部501経由で演算部104に送付される(
図5の矢印CおよびA)。演算部104に送付された初期の重み値は、演算部104内のデータインターフェース部201経由で演算部104内のメモリ204に格納される(
図3の矢印B及びD)。
【0035】
次に、ステップS84で、学習部103内部の学習ステップ管理部505は、学習ステップの値を0に初期化する。
【0036】
ステップS85で、学習処理を続けるか判定し、続けない場合(
図8のNO)は学習を終了する(S86)。例えば、学習処理の対象データが画像データであり、画像データに犬や猫の画像を含む場合に、犬か猫かの判定を一定精度で行うことができるようになると終了する。
【0037】
続ける場合(
図8のYES)は、次のステップS87に進む。続けるか否かの判定基準は、学習前の初期設定時に設定される。一例としては、
図7(a)に示すように、学習ステップの最大値に到達したか否か、学習の完了条件を満たしたか否かなどで判定される。現在の学習ステップの値は学習部103内部の学習ステップ管理部505が管理する。
【0038】
S87では推論処理を行う。ホストシステム101、環境、ストレージ、もしくはメモリ102(
図1及び
図2のメモリ102もしくは
図5の学習部内部のメモリ502)から学習部103に送られたデータに対する推論処理が実行される。推論処理の詳細は後述する。
【0039】
ステップS88で、学習部103は、重み値の更新処理を実行する。ステップS88の詳細は後述する。
【0040】
ステップS89で、学習部103内部の学習ステップ管理部505は、学習ステップの値を一つ増やす。その後動作はステップS85に戻る。上記の例では、ステップS85からステップS89までを学習ステップ(1ステップ分)と呼ぶ。学習部103の動作は、学習ステップの繰り返しから構成される。
【0041】
学習部103が実行する推論処理(S87)の動作フローチャートの一例を
図9に示す。
【0042】
ステップS91で、学習部103は、ホストシステム101、環境、ストレージ、もしくはメモリ102(
図1及び
図2のメモリ102もしくは
図5の学習部内部のメモリ502)から、推論対象となるデータを取得する。どこからデータを取得するかは、機械学習の種類や学習過程によって異なる。例えば教師付き学習であれば、
図1の矢印Dのように、ユーザなどが設定した単位(例えばミニバッチサイズ)でストレージ、もしくはメモリ102から取得する。もしくは
図2の矢印Bのように、ホストシステム101経由でストレージ、もしくはメモリ102から取得する。また、強化学習であれば、
図1の矢印Dや
図2の矢印Bのように、環境から(ホストシステム経由で)データを取得する場合もあるし、
図5の矢印Gのように、学習部内部のメモリ502から、過去に推論したデータをユーザなどが設定した単位(例えばミニバッチサイズ)で取得する場合もある(学習部内部のメモリ502がreplayメモリに相当)。
【0043】
ステップS92で、学習部内の入力加工部504は、ステップS91で取得したデータを加工する。データ加工の例を
図10、
図11に示す。
【0044】
図10は、画像データを加工した場合の一例を示す。この例では、簡単のため画像データは白黒とし、各ピクセルに0から127までの整数値が割り当てられているとする。
図6に示すように、ボルツマンマシンで推論処理を実行する場合、入力するデータを可視スピン1(可視スピン601a)のスピン配置、つまり上向き下向きの配置として表現する必要があるので、データを何らかの2値の配列に変換する必要がある。
図10に示す例では、各ピクセル値の整数を予め決めた変換規則に従って、2値(0or1)の配列に変換している。例えば、ピクセル1001を2値のデータ1002に変換する。
【0045】
図11は、複数の連続値からなるデータを加工した場合の一例を示す。例えば古典制御(力学的な問題)を扱う場合、物体の点の位置や加速度は連続値として表現される。
図11に示すように、それらを予め決めた変換規則に従って2値(0or1)の配列に変換し、可視スピン1(可視スピン601a)のスピン配列として学習器(ボルツマンマシン)に入力する。
【0046】
ステップ93で、学習部103は、加工されたデータを演算部104に送付する。具体的なデータの流れを、
図5を用いて説明する。まず入力加工部504は加工したデータをメモリ502に送る(
図5の矢印H)。次にデータインターフェース部501は加工済みデータをメモリ502から読み出し(
図5の矢印C)、演算部104に送付する(
図5の矢印A及び
図1と
図2の矢印F)。
【0047】
ステップS94で、学習部103は、演算部104からの演算結果を受領する。演算部104から出力された演算結果は、学習部内部のデータインターフェース部501を経由して、学習部内部のメモリ502に保存される(
図5の矢印B及びD)。演算部104で実行する演算処理の詳細は後述する。
【0048】
ステップS95で、学習部103は、演算部104から受領した演算結果を必要に応じて加工し、ホストシステム101や環境102へ送付する。演算結果の加工とは、教師付き学習においては、例えば、得られた各分類の出力値(演算結果)から最も出力値の高い分類番号を抽出する処理であり、強化学習においては、例えば、各行動に対する評価値(Q値や行動選択確率、演算結果として演算部104から受領)に対して、一つの行動を選択する処理である。
【0049】
学習部内部のメモリ502に保存された演算結果は、
図5に示す結果加工部507によって読み出され、加工され、再び学習部内部のメモリ502に保存される(
図5の矢印M及びN)。また、必要に応じて加工された演算結果は、メモリ502を経由して、データインターフェース部501によって、ホストシステム101や環境102へ送付される(
図5の矢印N、C、Aと
図1の矢印AやC及び
図2の矢印AやD)。以上で学習部103が実行する推論処理の動作は終了する(S96)。
【0050】
図8のステップS88の学習部103が実行する重み値の更新処理の動作フローチャートの一例を
図12に示す。
【0051】
ステップS121で、学習部内部の重み更新部506は、学習部内部のメモリ502に保存された演算結果もしくは加工された演算結果を読み出す(
図5の矢印K)。
【0052】
ステップS122で、学習部内部の重み更新部506は、読み出した演算結果もしくは加工された演算結果を基に、勾配値の計算を行う。ここで勾配値とは、学習における評価値と真値(もしくは真値に準ずる値)との誤差を、
図6に示した学習器(ボルツマンマシン)の重みで偏微分した際の勾配の値である。誤差とは、教師付き学習においては、例えば、データが各分類に属する確率と正解ラベル(例えば正解分類番号の値が1で残りが0)との誤差である。また、強化学習においては、例えばQ値と推定Q値との誤差などである。また、ミニバッチ学習を行う場合は、複数のデータに対する上述の誤差の平均値の勾配値が計算される。計算した勾配値は、学習部内部のメモリ502に保存される(
図5の矢印L)。
【0053】
ステップS123で、学習部内部の重み更新部506は、ステップS122で計算した勾配値を、学習部内部のメモリ502から読み出し(
図5の矢印K)、読み出した勾配値を基に、学習器(ボルツマンマシン)の重み(Weight)の更新量を計算する。重み(Weight)の更新量とは、今回の学習ステップで更新される(増減する)重みの値の量である。例えば、現在の重みの値が0.55で、重みの更新量が0.03であれば、更新後の重みは0.55+0.03=0.58となる。重みの更新量は、計算した勾配値のほかに、
図7(a)に示す学習係数や、最適化手法を基に計算される。
【0054】
計算した重みの更新量は、学習部内部のメモリ502に保存される(
図5の矢印L)。次に、重み更新部506は、重み値の読み出し命令をメモリ502経由でデータインターフェース部501に送付する(
図5の矢印L及びC)。データインターフェース部501は、重み値の読み出し命令を演算部104に送付する(
図5の矢印A及び
図3の矢印B)。
【0055】
命令を受けた演算部内部のデータインターフェース部201は、演算部内部のメモリ204)に格納された重み値を学習部103に送付する(
図3の矢印C、A及び
図5の矢印B)。重み値を受領した学習部内部のデータインターフェース部501は、受領した重み値を学習部内部のメモリ502に保存する(
図5の矢印D)。
【0056】
重み更新部506は、受領した重み値及び先ほど計算した重みの更新量をメモリ502から読み出し、足し合わせることで、重み値を更新する(
図5の矢印K)。更新された重み値は、再び学習部内部のメモリ502に保存される(
図5の矢印L)。
【0057】
ステップS124で、学習部内部の重み更新部506は、メモリ502内部のフラグなどを利用して、学習部内部のデータインターフェース部501に対して、ステップS123の完了を伝える。完了通知を受けて、データインターフェース部501はメモリ502に保存された更新済みの重みを、演算部104に送付する(
図5の矢印C及びA)。更新済みの重みを演算部104に送付後、学習部内部の重み更新部506は、重みの送付完了を学習ステップ管理部505に通知し(
図5の矢印O)、重み値の更新処理の動作を終了する。
【0058】
演算部104が実行する演算処理の動作フローチャートの一例を
図13に示す。
【0059】
ステップS131で、演算部104内部のデータインターフェース部201は、学習対象のデータとして学習部103から送付された加工済みデータを受領し、演算部内部のメモリ204に保存する(
図3の矢印B及びD)。これは、前述した推論処理内の処理(S93)で学習部103から演算部104に送られた加工済みデータに対応するものである。
【0060】
ステップS132で、演算制御部203の内部の初期計算制御部401は、今回の演算処理で実行された処理の回数(=Noperation)を0にリセットする。また、初期計算制御部401は、学習器の内部状態を初期化し、初期化した内部状態を演算部104内のメモリ204に保存する(
図4の矢印L)。学習器の一例は
図6に示すボルツマンマシンであり、例えば、学習器の内部状態は各隠れスピン602の向きや上向き確率に対応する。初期化では、学習器の内部状態がランダムもしくは設定された初期化アルゴリズムに従ってリセットされる。
【0061】
ステップS133で、演算制御部203の内部の初期計算制御部401もしくは追加計算制御部405は、加工済みデータと学習部の重み値と学習器の内部状態を演算部104内のメモリ204から読み出す(
図4の矢印KもしくはQ)。その後、読み出した加工済みデータと重み値と内部状態を計算部202に送付する(
図4の矢印GもしくはI)。
【0062】
計算部202は送付された加工済みデータと重み値と学習器の内部状態を基に計算処理を実行する。計算処理では、例えば、
図6に示すボルツマンマシンの各隠れスピン602の向きや上向き確率を計算する。内部状態とは、ボルツマンマシンで学習器が構成される場合、スピンの向きや上向き確率を言う。各隠れスピン602の向きを計算する方法としては、焼きなまし法がある。焼きなまし法では、隠れスピン602の向きを緩和させながら、十分高温から徐々に温度を決められた一定温度まで冷やす。この場合、加工済みデータ(2値化されている)は可視スピン(可視スピン601aや可視スピン601b)の向きとして設定され、その向きは固定されているとする。1回の計算処理で、各隠れスピン602の向きが1通り得られることとなる。
【0063】
計算処理では、必要に応じて、各隠れスピン602の向きに加えて、これら可視スピン(可視スピン601a及び可視スピン601b)と隠れスピン602の向きから全系のエネルギーも計算する。計算した各隠れスピン602の向きやエネルギーの値は、内部状態を示す計算処理の結果となる。
【0064】
また、上述のように、計算処理で各隠れスピン602の向きを1通りずつ計算し、それらの結果から期待値計算をすることによって、各隠れスピン602の上向き確率を求めてもよいが、平均場近似などを用いて、直接上向き確率を計算することもできる。平均場近似では、はじめ初期化した上向き確率の値からスタートして、計算処理ごとにその上向き確率の値を真値に収束させていく。そのため、前回の計算処理の結果得られた各隠れスピン602の上向き確率と、加工済みデータと重み値とを用いて計算処理を実行し、新しい各隠れスピン602の上向き確率を計算する。
【0065】
焼きなまし法の場合と同様に、計算処理では、必要に応じて、各隠れスピン602の上向き確率に加えて、これら可視スピン(可視スピン601a及び可視スピン601b)と隠れスピン602の上向き確率から全系のエネルギーも計算する。計算した各隠れスピン602の上向き確率やエネルギーの値は、計算処理の結果となる。
【0066】
計算部202で実行した計算処理の結果は、初期計算制御部401もしくは追加計算制御部405を経由して演算部104内のメモリ204に保存される(
図4の矢印H、LもしくはJ、R)。計算処理が今回の学習で初めて実行される場合、メモリ204には、
図8のステップS82の処理で学習部103から演算部104に送られた初期の重み値が格納されており、その初期の重み値を計算処理に用いる。
【0067】
計算処理の前に、重み値の更新処理(S123)が行われている場合は、ステップS124で学習部103から演算部104に送られた更新済みの重み値を計算処理に用いる。また、強化学習では、推定Q値を計算する際、現在の最新の重み値ではなく、少し前の学習ステップにおける重み値を用いて計算処理を実行する場合がある。どのくらい前の学習ステップの重み値を用いるかは、
図7に示したパラメタの一部として、学習前の初期設定時に設定される。
【0068】
ステップS134で、初期計算制御部401もしくは追加計算制御部405は、演算部104内のメモリ204から、ステップS133で実行した計算処理の結果と、学習器の内部状態と、必要に応じて学習器の重み値を読み出し、計算部202に送る(
図4の矢印KとGもしくはQとI)。
【0069】
計算部202は、それらを基に内部状態を更新し、更新した内部状態を初期計算制御部401もしくは追加計算制御部405経由で再び演算部104内のメモリ204に格納する。内部状態の更新は、例えば、内部状態が各隠れスピン602の向きに対応する場合は、今回の計算処理の結果を、前回までの結果に加えることや、必要に応じて平均値や分散値などを計算することに対応する。また、内部状態の更新は、内部状態が各隠れスピン602の上向き確率に対応する場合、今回の計算処理の結果を前回までの結果に加えることや、必要に応じてそれらから真値などを推定することに対応する。
【0070】
ステップS135で、初期計算制御部401は、処理回数(Noperation)を1だけ増やす。
【0071】
ステップS136で、演算制御部203は、ステップS133を追加で実行するか判断する。追加で実行すると判断された場合(
図13のYES)、再びステップS133の処理を実行し、追加実行不要と判断された場合(
図13のNO)、次のステップS137を実行する。ステップS136の動作の詳細は後述する。
【0072】
ステップS137で、演算制御部203内部の計算結果統合部403は、これまで何回か繰り返された計算処理の結果(内部状態である各隠れスピン602の向きや上向き確率)を、統合処理して評価値を算出する。統合処理を具体的に述べると、例えば、計算結果統合部403は、計算処理の繰り返し回数分だけメモリ204に格納された計算処理の結果を読み出し、それらの平均値を計算して再びメモリ204に格納する(
図4の矢印O及びP)。もしくは、メモリ204に格納された最新の計算処理の結果を統合された計算結果としてもよい。
【0073】
ステップS138で、演算部内部のデータインターフェース部201は、メモリ204に格納された統合された結果を読み出し、学習部103に送付する(
図3の矢印C及びA)。送付の後、演算処理の動作は終了する。後で詳述するように、学習部103は、統合された結果を、例えば教師付き学習であれば、得られた各分類の出力値として、また、強化学習であれば、各行動に対する評価値(Q値や行動選択確率)として利用する。
【0074】
演算制御部203が実行するステップS136の動作フローチャートの一例を
図14に示す。
【0075】
ステップS142で、初期計算制御部401は、演算部内部のメモリ204からNiniを読み出す(
図4の矢印K)。Niniは、
図7(b)に示す初期計算回数に対応する。学習前の初期設定時に設定され、演算部内部のメモリ204に保存されるパラメタの一つである。初期計算制御部401は、ステップS133の回数NoperationとNiniを比較し、NoperationがNini以上であれば(
図14のYES)、次のステップS143に進む。そうでなければ、ステップS146に進み、YESを返す(“RETURN YES”)。YESを返すことは、
図13の演算処理の動作フローチャートのステップS136のYESに対応し、ステップS133からの処理をもう一度実行することとなる。この場合は、NoperationがNini未満であるため、処理は初期計算制御部401が主導して実行する。
【0076】
ステップS143で、精度計算部402は、
図13に示す演算処理の動作フローチャート中のステップS133の「実行」でこれまでに実行した計算処理の結果をメモリ204から読み出す(
図4の矢印M)。精度計算部402は、読み出した結果から精度を計算し、計算した精度を精度比較部404に送付する(
図4の矢印D)ことで、精度を算定する。
【0077】
以上説明した通り、
図6のボルツマンマシンを用いた学習器は、スピンやその平均値等を示す内部状態やスピン間の重みを有する。スピン間の重みが学習部103で更新処理され、スピンやその平均値等の内部状態が演算部104で計算され、更新される。
【0078】
計算処理の結果から精度を計算する方法の一例を、
図15を用いて説明する。
図15は計算処理の回数(Noperation)と精度の関係性の一例を示すグラフである。この例では、計算処理の回数(Noperation)が増えるに従って、精度も向上している。このような関係性となるのは、例えば計算処理の結果の値が、同一の確率分布に従いつつも、値は試行ごとに確率的に変動する場合や、計算処理ごとに結果の値がある値に収束してくような場合が考えられる。前者の場合は変動する結果の値の確率分布を想定して、最尤推定法などを用いることにより、複数回試行した計算処理の結果の値の平均値の誤差などを、計算精度として求めることができる。後者の場合は、計算処理ごとの結果の値(の変動)を外挿することによって、収束先の真値や現在の結果の値との誤差を、計算精度として求めることができる。
【0079】
ステップS144で、精度計算部402で計算した精度を受領した精度比較部404は、演算部内部のメモリ204から、
図7(b)に示す要求精度を読み出す(
図4の矢印S)。前述の通り、要求精度は学習前の初期設定時に設定され、演算部内部のメモリ204に保存される。次に、精度比較部404は精度計算部402から受領した精度と、読み出した要求精度を比較する。その結果、もし受領した精度が要求精度よりも高ければ、ステップS145に進み、NOを返す(“RETURN NO”)。NOを返すことは、
図13の演算処理の動作フローチャートのステップS136のNOに対応し、次はステップS137を実行することとなる。
【0080】
また、比較の結果、もし受領した精度が要求精度よりも低ければ、ステップS146に進み、YESを返す(“RETURN YES”)。YESを返すことは、
図13の演算処理の動作フローチャートのステップS136のYESに対応し、ステップS133からもう一度実行することとなる。この場合、NoperationはNini以上であるため、初期計算は終了しているとみなされ、追加計算制御部405が主導でステップS133からの処理を実行する。追加計算制御部405は、
図7(b)に示す追加計算回数をメモリ204から読み出し(
図4の矢印Q)、追加で何回の計算処理を実行するか決定する。
【0081】
学習ステップに従って、計算処理の回数(Noperation)と精度の関係性が変化する例を、
図16及び
図17を用いて説明する。
【0082】
図16は、計算処理の回数(Noperation)と精度の関係性が、学習ステップが100ステップ(
図16の“100 ステップ”)の場合と10000ステップ(
図16の“10000 ステップ”)の場合で変化する一例を示す。
図16の横点線で示す要求精度を満たすには、学習ステップが100ステップの場合は、計算処理の回数をN2以上にすれば良く、学習ステップが10000ステップの場合は、N1以上にすればよい。
【0083】
この例では、N1<N2である。つまり、学習ステップが増えると(学習が進むと)、より少ない計算処理の回数(Noperation)で、精度が向上するようになる。前述の一例である、計算処理の結果の値が、同一の確率分布に従いつつも、値は試行ごとに確率的に変動する場合では、学習ステップが増えるに連れて、結果の値が従う確率分布の分散が減少していることに対応する。
【0084】
分散が減少すると、より少ない計算処理の回数(Noperation)で、結果の値の平均値の誤差が小さくなる。すなわち、精度が高いことになる。また、計算処理ごとに結果の値がある値に収束してくような場合では、学習ステップが増えるに連れて、収束する速度が向上していることに相当する。収束する速度が向上すれば、より少ない計算処理の回数(Noperation)で、収束先の真値に近い値が得られる。すなわち、精度が高いことになる。
【0085】
図17は、重み値の更新回数などの学習ステップと、要求精度を満たす計算処理の回数の最小値の関係性が、要求精度が0.95の場合(
図17の“要求精度0.95”)と、0.97の場合(
図17の“要求精度 0.97”)で変化する一例を示す。
【0086】
いずれの場合も、学習ステップが増大するに連れて、要求精度を満たす計算処理の回数の最小値は減少する。これは、
図16で示す例と同様に、より少ない計算処理の回数で、精度が向上するようになることに対応する。また、同一の学習ステップで、2つの場合を比較した場合、要求精度が高い0.97の場合の方が、要求精度を満たす計算処理の回数の最小値は多くなる。これは、
図15や
図16に示すように、計算処理の回数を増やすと、精度も単調に増えていることに対応する。
【0087】
上記の実施例でも述べたように、ホストシステムはその機能を実現するものであれば、ソフトウェアでもハードウェアでもそれらの組み合わせでもよく、学習部103や演算部104と連帯した(もしくは一体型の)ソフトウェアもしくはハードウェアでもよい。また、学習部103もハードウェアに限らず、一部もしくは全体がソフトウェアとして実装されていてもよく、演算部104と連帯した(もしくは一体型の)ソフトウェアもしくはハードウェアでもよい。また、上記の実施例では、機械学習システムがホストシステムと学習部103と演算部104から構成される例を挙げたが、ホストシステムと学習部103と演算部104の機能を持たせた単独のモジュールとして構成してもよい。
【0088】
以上の実施例における説明では、上位システム、環境、ストレージ、メモリ、学習部、演算部など、機能ごとに分かれたブロック図として、機械学習システムを例示していたが、上記の機能分割に限らず、機械学習を統括する機能、機械学習で用いるデータを保存・供給する機能、データから推論する機能、学習部の重みを更新する機能が含まれていれば良い。実装形態も、ASICのような専用回路として実装してもよいし、FPGAのようにプログラマブルなロジックとして実装してもよいし、組み込みのマイコンに実装してもよいし、CPUやGPU上で動作するソフトウェアとして実装してもよい。もしくは、機能ごとに上記の組み合わせで実装してもよい。
【0089】
以上、添付図面を参照して具体的に説明したが、好ましい実施の形態は以上の説明に限定されるものではなく、その要旨を逸脱しない範囲で種々変更可能であることはいうまでもない。
【0090】
以上説明した本実施例によって得られる主な効果は以下の通りである。
機械学習において、学習の進行度ごとにデータ推論時の精度を推定することにより、学習部の重み値を更新する際に必要な積和演算回数を削減することができ、これまでよりも学習時間を短縮することができる。
【0091】
また、学習時間の短縮により、より高速で省電力な機械学習システムを構築することができる。
【0092】
さらに、演算部は、重み値の更新回数の増加に応じて、評価値を計算するための計算処理及び学習器の内部状態の更新の繰り返し回数を減少させることができる。
【符号の説明】
【0093】
101:上位システム/ユーザ、
102:環境/ストレージ/メモリ、
103:学習部、
104:演算部、
201:データインターフェース部、
202:計算部、
203:演算制御部、
204:メモリ、
401:初期計算制御部、
402:精度計算部、
403:計算結果統合部、
404:精度比較部、
405:追加計算制御部、
501:データインターフェース部
502:メモリ、
503:初期重み処理部、
504:入力加工部、
505:学習ステップ管理部、
506:重み更新部、
507:結果加工部。