(19)【発行国】日本国特許庁(JP)
(12)【公報種別】公開特許公報(A)
(11)【公開番号】P2023149806
(43)【公開日】2023-10-16
(54)【発明の名称】情報処理装置、情報処理方法およびプログラム
(51)【国際特許分類】
G06N 99/00 20190101AFI20231005BHJP
【FI】
G06N99/00 180
【審査請求】未請求
【請求項の数】12
【出願形態】OL
(21)【出願番号】P 2022058570
(22)【出願日】2022-03-31
(71)【出願人】
【識別番号】000005223
【氏名又は名称】富士通株式会社
(74)【代理人】
【識別番号】110002918
【氏名又は名称】弁理士法人扶桑国際特許事務所
(72)【発明者】
【氏名】チェン シゲン
(72)【発明者】
【氏名】ローゼンタール ジェフリー セス
(72)【発明者】
【氏名】シェイクホレスラミ アリ
(72)【発明者】
【氏名】田村 泰孝
(72)【発明者】
【氏名】松原 聡
(57)【要約】
【課題】大規模な問題に対する求解を高速化する。
【解決手段】記憶部11は、記憶装置20に記憶される複数の結合係数のうちの一部を記憶する。処理部12は、複数の状態変数のうちの複数の第1状態変数を含む部分を試行対象部分とする。処理部12は、試行対象部分に属する第1状態変数の複数の第1ペアに対する複数の第1結合係数を記憶装置20から記憶部11に読み込み、複数の第1結合係数を用いて、試行対象部分に属する何れかの第1状態変数の値の更新を行うか否かの試行を複数回実行する、処理を行う。処理部12は、試行対象部分の変更および当該処理を繰り返し行うことで、複数の状態変数の全体を試行の対象とする。
【選択図】
図1
【特許請求の範囲】
【請求項1】
複数の状態変数と、前記複数の状態変数における前記状態変数の複数のペアに対応する複数の結合係数とを含む、イジングモデルのエネルギー関数に基づいて組合せ最適化問題の解を探索する情報処理装置であって、
第1記憶部と、
処理部と
を有し、
前記第1記憶部は、前記複数の結合係数のうちの一部を記憶し、
前記処理部は、前記複数の状態変数のうち、値の更新を行うか否かの試行の対象とする複数の第1状態変数を含む部分である試行対象部分について、前記試行対象部分における第1状態変数の複数の第1ペアに対応する複数の第1結合係数を、前記複数の結合係数を記憶する記憶装置から読み出して前記第1記憶部に格納し、
前記第1記憶部に記憶された前記複数の第1結合係数を用いて、前記試行対象部分に属する何れかの前記第1状態変数の値の更新を行うか否かの前記試行を複数回実行する、
処理を行い、
前記試行対象部分の変更および前記処理を繰り返し行うことで、前記複数の状態変数の全体を前記試行の対象とする
ことを特徴とする情報処理装置。
【請求項2】
前記複数の状態変数の値と、前記状態変数の値の変化に応じた前記エネルギー関数の値の変化量の計算に用いられる、前記複数の状態変数に対応する複数の局所場とを記憶する第2記憶部を更に有し、
前記処理部は、
前記複数の第1状態変数それぞれと前記試行対象部分に属さない複数の第2状態変数それぞれとの複数の第2ペアに対応する複数の第2結合係数を、前記複数の第1結合係数とともに前記記憶装置から読み出して前記第1記憶部に格納し、
前記試行では、前記複数の局所場のうち、前記第1状態変数に対応する局所場に基づいて、前記第1状態変数の値が変化した場合の前記エネルギー関数の値の変化量を計算し、前記変化量に応じて前記第1状態変数の値を更新し、前記第1状態変数の値を更新すると、更新した前記第1状態変数に対応する前記第1結合係数に基づいて、前記複数の局所場のうち、前記複数の第1状態変数に対応する複数の第1局所場を更新し、更新した前記第1状態変数に対応する前記第2結合係数に基づいて、前記複数の局所場のうち、前記複数の第2状態変数に対応する複数の第2局所場を更新する、
請求項1記載の情報処理装置。
【請求項3】
前記複数の第1状態変数の値と前記第1状態変数の値の変化に応じた前記エネルギー関数の値の変化量の計算に用いられる、前記複数の第1状態変数に対応する複数の第1局所場とを記憶する第3記憶部を更に有し、
前記処理部は、
前記複数の状態変数の値と前記複数の状態変数に対応する複数の第2局所場とを記憶する第4記憶部にアクセス可能であり、
前記試行対象部分の変更では、
前記複数の状態変数のうち、前回の前記試行対象部分に含まれるが今回の前記試行対象部分に含まれない第1差分の状態変数と複数の他の状態変数それぞれとの複数の第2ペアに対応する複数の第2結合係数を、前記複数の第1結合係数とともに前記記憶装置から読み出して前記第1記憶部に格納し、
前記第3記憶部に記憶される前記第1差分の状態変数の第1の値により、前記第4記憶部に記憶される前記第1差分の状態変数の第2の値を更新し、前記第2の値の更新前後の値の差と前記複数の第2結合係数とに基づいて、前記第4記憶部に記憶される前記複数の第2局所場を更新し、
前記複数の状態変数のうち、前回の前記試行対象部分に含まれないが今回の前記試行対象部分に含まれる第2差分の状態変数の第3の値を前記第4記憶部から取得して前記第3記憶部に格納し、前記第3記憶部に記憶される、前記複数の第1状態変数それぞれの第4の値と、前記第4記憶部に記憶される、前記複数の第1状態変数それぞれに対応する第5の値との差と、前記第4記憶部に記憶される、前記第2差分の状態変数の第2局所場と、前記第1記憶部に記憶される前記複数の第1結合係数とに基づいて、前記第2差分の状態変数に対する局所場を計算して前記第3記憶部に格納し、
前記試行では、前記第3記憶部に記憶される前記複数の第1局所場のうち、今回の前記試行対象部分に属する前記第1状態変数に対応する第1局所場に基づいて、前記第1状態変数の値が変化したときの前記エネルギー関数の値の変化量を計算し、前記変化量に応じて前記第3記憶部に記憶される前記第1状態変数の値を更新し、前記第1状態変数の値を更新すると、更新した前記第1状態変数に対応する前記第1結合係数に基づいて、前記第3記憶部に記憶される前記複数の第1局所場を更新する、
請求項1記載の情報処理装置。
【請求項4】
前記処理部は、前記第4記憶部に記憶される前記複数の第2局所場の更新と、今回の前記試行対象部分に対する前記試行とを並列に実行する、
請求項3記載の情報処理装置。
【請求項5】
前記処理部は、前記記憶装置からの前記複数の第2結合係数の読み出しの際、前記第1差分の状態変数と前記第1差分の状態変数が前記試行対象部分に追加されたときに前記試行対象部分に属していた他の状態変数とのペアに対応する結合係数を読み出しの対象から除外する、
請求項3または4記載の情報処理装置。
【請求項6】
前記処理部は、前回の前記試行対象部分と今回の前記試行対象部分との差分の状態変数に対応する結合係数を前記記憶装置から読み出し、前回の前記試行対象部分と今回の前記試行対象部分との重複する状態変数に対応する結合係数の前記記憶装置からの読み出しを省略する、
請求項1~5の何れか1項に記載の情報処理装置。
【請求項7】
前記処理部は、今回の前記試行対象部分に対する前記試行を行っている間に、次回の前記試行対象部分の前記状態変数に対応する結合係数を前記記憶装置から先読みする、
請求項1~6の何れか1項に記載の情報処理装置。
【請求項8】
前記試行対象部分に属する前記複数の第1状態変数のインデックスは連続または不連続である、
請求項1~7の何れか1項に記載の情報処理装置。
【請求項9】
前回の前記試行対象部分と今回の前記試行対象部分との差分の前記状態変数の数は複数である、
請求項1~8の何れか1項に記載の情報処理装置。
【請求項10】
前記処理部は、前記試行では、
前記複数の第1状態変数の中から何れかの前記第1状態変数をランダムまたは所定の順序で選択し、選択した前記第1状態変数の値を更新するか否かを前記エネルギー関数に基づき判定し、更新すると判定した前記第1状態変数の値を更新する、
または、前記複数の第1状態変数の全て、あるいは、前記複数の第1状態変数から選択される所定数の第1状態変数を対象として値の更新が許容されるか否かを前記エネルギー関数に基づき並列に判定し、値の更新が許容される何れかの前記第1状態変数の値を更新する、
請求項1~9の何れか1項に記載の情報処理装置。
【請求項11】
複数の状態変数と、前記複数の状態変数における状態変数の複数のペアに対応する複数の結合係数とを含む、イジングモデルのエネルギー関数に基づいて組合せ最適化問題の解を探索する情報処理方法であって、情報処理装置が、
前記複数の状態変数のうち、値の更新を行うか否かの試行の対象とする複数の第1状態変数を含む部分である試行対象部分における第1状態変数の複数の第1ペアに対応する複数の第1結合係数を、前記複数の結合係数を記憶する記憶装置から読み出して、前記複数の結合係数のうちの一部を記憶する第1記憶部に格納し、
前記第1記憶部に記憶された前記複数の第1結合係数を用いて、前記試行対象部分に属する何れかの前記第1状態変数の値の更新を行うか否かの前記試行を複数回実行する、
処理を行い、
前記試行対象部分の変更および前記処理を繰り返し行うことで、前記複数の状態変数の全体を前記試行の対象とする、
情報処理方法。
【請求項12】
複数の状態変数と、前記複数の状態変数における状態変数の複数のペアに対応する複数の結合係数とを含む、イジングモデルのエネルギー関数に基づいて組合せ最適化問題の解を探索するプログラムであって、コンピュータに、
前記複数の状態変数のうち、値の更新を行うか否かの試行の対象とする複数の第1状態変数を含む部分である試行対象部分における第1状態変数の複数の第1ペアに対応する複数の第1結合係数を、前記複数の結合係数を記憶する記憶装置から読み出して、前記複数の結合係数のうちの一部を記憶する第1記憶部に格納し、
前記第1記憶部に記憶された前記複数の第1結合係数を用いて、前記試行対象部分に属する何れかの前記第1状態変数の値の更新を行うか否かの前記試行を複数回実行する、
処理を行い、
前記試行対象部分の変更および前記処理を繰り返し行うことで、前記複数の状態変数の全体を前記試行の対象とする、
処理を実行させるプログラム。
【発明の詳細な説明】
【技術分野】
【0001】
本発明は情報処理装置、情報処理方法およびプログラムに関する。
【背景技術】
【0002】
組合せ最適化問題の求解に情報処理装置が用いられることがある。組合せ最適化問題は、磁性体のスピンの振る舞いを表すモデルであるイジングモデルのエネルギー関数に変換される。エネルギー関数は、評価関数や目的関数と言われることもある。情報処理装置は、例えばエネルギー関数に含まれる状態変数の値の組合せのうち、エネルギー関数の値を最小化する組合せを探索する。この場合、エネルギー関数の値を最小化する状態変数の値の組合せは、状態変数の組により表される基底状態または最適解に相当する。実用的な時間で組合せ最適化問題の近似解を得る手法には、マルコフ連鎖モンテカルロ(MCMC:Markov-Chain Monte Carlo)法に基づく、シミュレーテッドアニーリング(SA:Simulated Annealing)法やレプリカ交換法などがある。
【0003】
例えば、イジングモデルの基底状態探索を実行する1または複数の半導体チップを備え、当該半導体チップを用いて問題の解をイジングモデルの基底状態を探索するようにして求める情報処理システムの提案がある。
【0004】
また、複数のニューロン群を有する最適化装置を含む最適化システムの提案がある。この提案では、最適化装置は、選択されたニューロン群に属する第1のニューロンの値が変化したときのエネルギーの変化のうち、当該ニューロン群に属する他のニューロンの影響による第1の変化分を算出する。一方、当該ニューロン群に属さない第2のニューロンの影響による第2の変化分の計算を、最適化装置とは異なる演算処理装置が実行する。最適化装置は、第1の変化分と第2の変化分との和に基づいて、確率的探索により第1のニューロンの値の更新の可否を判定し、更新の可否についての判定結果に基づいて第1のニューロンの値を更新または維持する更新処理を繰り返す。
【0005】
更に、所定の順序で選択される変化候補の状態変数に対応する局所場を基にエネルギー関数の値の変化値を計算し、当該変化値に応じて変化候補の状態変数の値を変化させる複数の更新回路を有するサンプリング装置の提案もある。提案のサンプリング装置は、2つの状態変数の全ての組に対する結合係数を記憶するメモリから、変化候補の1つの状態変数と他の状態変数との間の結合係数を、変化候補の1つの状態変数が選択されるたびに読み出し、複数の更新回路それぞれの記憶部に格納する。更新回路は、変化候補の1つの状態変数の値を変化させる場合、当該結合係数を用いて他の状態変数の局所場を更新する。
【先行技術文献】
【特許文献】
【0006】
【特許文献1】特開2016-51350号公報
【特許文献2】特開2019-139323号公報
【特許文献3】特開2020-204929号公報
【発明の概要】
【発明が解決しようとする課題】
【0007】
上記のように、情報処理装置は、組合せ最適化問題の解の探索に、状態変数のペアごとの結合係数を用いる。このとき、状態変数の値の更新を行う演算器により比較的高速にアクセス可能な、キャッシュとして用いられる記憶部に結合係数を保持することで、求解を高速化し得る。
【0008】
ところが、記憶部の容量が比較的小さく、結合係数全体を記憶部に格納できないことがある。この場合、結合係数全体は、演算器からのアクセス速度は当該記憶部に比べて低速だが比較的容量の大きな記憶装置に保持され得る。このとき、例えば上記提案のように、次の変化候補の1つの状態変数が選択されるたびに、演算器が記憶装置から該当の状態変数に係る結合係数を読み出して記憶部に格納し、当該状態変数の値の更新に用いる方法が考えられる。しかし、この方法では、結合係数全体を保持する記憶装置からの読み出しの頻度が高くなり、求解の処理速度が制限され得る。
【0009】
1つの側面では、本発明は、大規模な問題に対する求解を高速化することを目的とする。
【課題を解決するための手段】
【0010】
1つの態様では、複数の状態変数と、複数の状態変数における状態変数の複数のペアに対応する複数の結合係数とを含む、イジングモデルのエネルギー関数に基づいて組合せ最適化問題の解を探索する情報処理装置が提供される。情報処理装置は、第1記憶部と処理部とを有する。第1記憶部は、複数の結合係数のうちの一部を記憶する。処理部は、複数の状態変数のうち、値の更新を行うか否かの試行の対象とする複数の第1状態変数を含む部分である試行対象部分における第1状態変数の複数の第1ペアに対応する複数の第1結合係数を、複数の結合係数を記憶する記憶装置から読み出して第1記憶部に格納し、第1記憶部に記憶された複数の第1結合係数を用いて、試行対象部分に属する何れかの第1状態変数の値の更新を行うか否かの試行を複数回実行する、処理を行う。処理部は、試行対象部分の変更および当該処理を繰り返し行うことで、複数の状態変数の全体を試行の対象とする。
【0011】
また、1つの態様では、情報処理方法が提供される。また、1つの態様では、プログラムが提供される。
【発明の効果】
【0012】
1つの側面では、大規模な問題に対する求解を高速化できる。
【図面の簡単な説明】
【0013】
【
図1】第1の実施の形態の情報処理装置を説明する図である。
【
図2】第2の実施の形態のデータ処理装置のハードウェア例を示す図である。
【
図3】アクセラレータカードのハードウェア例を示す図である。
【
図7】演算装置の処理例を示すフローチャートである。
【
図9】PNS RF法を用いる選択部の例を示す図である。
【
図10】第3の実施の形態の結合係数の読み出し例を示す図である。
【
図12】内部変数とグローバル変数との間の関係の例を示す図である。
【
図14】係数データストリーム発生例を示す図である。
【
図15】係数データストリームの第1の例を示す図である。
【
図16】係数データストリームの第2の例を示す図である。
【
図21】複数行更新の例を示すフローチャートである。
【発明を実施するための形態】
【0014】
以下、本実施の形態について図面を参照して説明する。
[第1の実施の形態]
第1の実施の形態を説明する。
【0015】
図1は、第1の実施の形態の情報処理装置を説明する図である。
情報処理装置10は、組合せ最適化問題に対する解を、MCMC法を用いて探索し、探索した解を出力する。例えば、情報処理装置10は、MCMC法を基にしたSA法やレプリカ交換法などを解の探索に用いる。情報処理装置10は記憶部11および処理部12を有する。
【0016】
記憶部11は、例えばSRAM(Static Random Access Memory)である。処理部12は、CPU(Central Processing Unit)、DSP(Digital Signal Processor)、ASIC(Application Specific Integrated Circuit)、FPGA(Field Programmable Gate Array)、GPU(Graphics Processing Unit)などの電子回路でもよい。処理部12はプログラムを実行するプロセッサでもよい。「プロセッサ」は、複数のプロセッサの集合(マルチプロセッサ)を含み得る。
【0017】
情報処理装置10は、記憶装置20に接続される。記憶装置20の記憶容量は、記憶部11の記憶容量よりも大きい。記憶装置20は、例えばDRAM(Dynamic Random Access Memory)である。処理部12は、記憶装置20に対するアクセスよりも記憶部11に対するアクセスを高速に行える。なお、記憶部11は、処理部12に内蔵されてもよい。また、記憶装置20は、情報処理装置10に含まれてもよい。
【0018】
ここで、組合せ最適化問題は、イジング型のエネルギー関数により定式化され、例えばエネルギー関数の値を最小化する問題に置き換えられる。エネルギー関数は、目的関数や評価関数などと言われてもよい。エネルギー関数は、複数の状態変数を含む。状態変数は、0または1の値を取るバイナリ変数である。状態変数はビットと言われてもよい。複数の状態変数の値はイジングモデルの状態を示す。組合せ最適化問題の解は、複数の状態変数の値により表される。エネルギー関数の値を最小化する解は、イジングモデルの基底状態を表し、組合せ最適化問題の最適解に対応する。エネルギー関数の値は、エネルギーと言われる。
【0019】
イジング型のエネルギー関数は、式(1)で表される。
【0020】
【0021】
状態ベクトルxは、複数の状態変数を要素とし、イジングモデルの状態を表す。式(1)は、QUBO(Quadratic Unconstrained Binary Optimization)形式で定式化されたエネルギー関数である。なお、エネルギーを最大化する問題の場合には、エネルギー関数の符号を逆にすればよい。
【0022】
式(1)の右辺第1項は、全状態変数から選択可能な2つの状態変数の全組合せについて、漏れと重複なく、2つの状態変数の値と結合係数との積を積算したものである。添え字i,jは状態変数のインデックスである。xiは、i番目の状態変数である。xjは、j番目の状態変数である。Wijは、i番目の状態変数とj番目の状態変数との間の重み、または、結合の強さを示す結合係数である。Wij=Wjiであり、Wii=0である。
【0023】
式(1)の右辺第2項は、全状態変数の各々のバイアスと状態変数の値との積の総和を求めたものである。biは、i番目の状態変数に対するバイアスを示している。式(1)において、状態変数xiの値が変化して1-xiとなると、xiの増加分は、Δxi=(1-xi)-xi=1-2xiと表せる。xiの変化に伴うエネルギーの変化量ΔEiは、式(2)で表される。
【0024】
【0025】
hiは局所場と呼ばれ、式(3)で表される。局所場は、ローカルフィールド(LF:Local Field)と言われることもある。
【0026】
【0027】
状態変数xjが変化したときの局所場hiの変化分Δhi
(j)は、式(4)で表される。
【0028】
【0029】
状態変数x
jの値が変化したときに変化分Δh
i
(j)をh
iに加算することで、x
jの値の変化後の状態に対応するh
iが得られる。複数の状態変数それぞれの値や複数の状態変数に対応する複数の局所場は、情報処理装置10が備える変数記憶部に保持される。
図1では、変数記憶部の図示を省略している。変数記憶部は、処理部12の内部のレジスタでもよい。
【0030】
基底状態の探索において、エネルギー変化がΔEiとなる状態遷移、すなわち、状態変数xiの値の変化を許容するか否かを決定するためにメトロポリス法やギブス法が用いられる。すなわち、ある状態から当該状態よりもエネルギーの低い他の状態への遷移を探索する近傍探索において、エネルギーが下がる状態だけでなく、エネルギーが上がる状態への遷移が確率的に許容される。例えば、エネルギー変化ΔEiの状態変数の値の変化を受け入れる確率Aiは、式(5)で表される。
【0031】
【0032】
βは温度値T(T>0)の逆数(β=1/T)であり、逆温度と呼ばれる。min演算子は、引数のうちの最小値を取ることを示す。式(5)の右辺上側はメトロポリス法に相当する。式(5)の右辺下側はギブス法に相当する。処理部12は、0<u<1である一様乱数uとAiとを比較し、u<Aiであれば状態変数xiの値の変化を受入れ、状態変数xiの値を変化させる。処理部12は、u<Aiでなければ状態変数xiの値の変化を受入れず、状態変数xiの値を変化させない。式(5)によれば、ΔEiが大きい値であるほど、Aiは小さくなる。また、βが小さい、すなわち、Tが大きいほど、ΔEiが大きい状態遷移も許容され易くなる。このように、処理部12は、式(5)に基づいて何れかの状態変数を変化させるか否かの試行を繰り返し行うことで、イジングモデルの状態を遷移させ、解の探索を行う。
【0033】
例えば、処理部12は、値の変化候補の状態変数を順番またはランダムに1つずつ選択して、式(5)に基づく判定を行い、判定により変化候補の状態変数の値の変化が許容される場合に当該状態変数の値を更新することで解の探索を行ってもよい。あるいは、処理部12は、複数の状態変数に対して式(5)に基づく判定を並列に行い、並列に判定した結果を基に何れかの状態変数の値を更新することで解の探索を行ってもよい。
【0034】
ここで、エネルギー関数に含まれる結合係数の全体、すなわち、複数の状態変数における状態変数の全ペアに対応する複数の結合係数は、記憶装置20に記憶される。一方、記憶部11の容量は、比較的小さく結合係数全体を保持できない。このため、処理部12は、記憶装置20に記憶される結合係数のうちの一部を読み出して記憶部11に格納し、エネルギー関数で表される問題の求解に用いる。
【0035】
すなわち、処理部12は、複数の状態変数のうち、値の更新を行うか否かの試行の対象とする複数の第1状態変数を含む部分である試行対象部分に属する第1状態変数の複数の第1ペアに対応する複数の第1結合係数を、記憶装置20から読み出して記憶部11に格納する。処理部12は、記憶部11に記憶された複数の第1結合係数を用いて、試行対象部分に属する何れかの第1状態変数の値の更新を行うか否かの試行を複数回実行する。ここで、ある試行対象部分に対し、複数の第1結合係数を記憶装置20から読み出して記憶部11に格納し、当該第1結合係数を用いて試行対象部分に属する何れかの状態変数の値の更新を行うか否かの試行を複数回実行する処理を、1つの処理単位とする。処理部12は、試行対象部分を変更して当該処理を繰り返し行うことで、複数の状態変数の全体を試行の対象とする。
【0036】
例えば、記憶装置20に記憶される結合係数の全体は、結合係数行列21に相当する。一例として、試行対象部分に属する状態変数の数をm個とする。mは2以上の整数である。全状態変数の数はN個である。Nはmより大きい整数である。状態変数のインデックスの範囲は1~Nである。このとき、結合係数行列21は、N行N列の行列である。
【0037】
例えば、ある時点における試行対象部分が状態変数xk~xk+m-1であるとする。この場合、記憶部11に保持される複数の第1結合係数は、結合係数行列21のうちの部分21aに相当する。部分21aに属する第1結合係数の行インデックスおよび列インデックスの範囲は、何れもk~k+m-1である。処理部12は、部分21aに属する複数の第1結合係数を用いて、xk~xk+m-1のうちの何れかの状態変数の値の更新を行うか否かの試行を複数回実行する。
【0038】
すると、処理部12は、試行対象部分を変更する。一例では、処理部12は、試行対象部分を状態変数xk+1~xk+mに変更する。当該変更後において、記憶部11に保持される複数の第1結合係数は、結合係数行列21のうちの部分21bに相当する。部分21bに属する第1結合係数の行インデックスおよび列インデックスの範囲は、何れもk+1~k+mである。このとき、処理部12は、部分21bのうち、既に記憶部11に読み込み済の部分21aと重複する部分の結合係数を記憶装置20から読み出さなくてよい。また、前述のようにWij=Wjiである。このため、処理部12は、行インデックスk+mかつ列インデックスk+1~k+mの結合係数を記憶装置20から読み出すことで、部分21bに属する複数の第1結合係数を得られる。そして、処理部12は、部分21bに属する複数の第1結合係数を用いて、xk+1~xk+mに属する何れかの状態変数の値の更新を行うか否かの試行を複数回実行する。
【0039】
なお、試行対象部分の状態変数のインデックスを連続とする例を示したが、当該インデックスは不連続でもよい。また、試行対象部分の1回の変更において試行対象部分に追加される状態変数の数を1つとする例を示したが、試行対象部分に追加される状態変数の数は複数でもよい。
【0040】
ところで、状態変数の値の更新には、上記のように他の状態変数の局所場の更新を伴う。処理部12は、以下の第1の方法または第2の方法により、状態変数の値および当該状態変数に対応する局所場の更新を行ってもよい。
【0041】
(第1の方法)
第1の方法では、処理部12は、試行対象部分に属する複数の第1状態変数それぞれと試行対象部分に属さない複数の第2状態変数それぞれとの複数のペアに対応する複数の第2結合係数を、複数の第1結合係数とともに記憶装置20から読み出す。処理部12は、複数の第1結合係数と複数の第2結合係数とを記憶部11に格納する。例えば、試行対象部分が状態変数xk+1~xk+mの場合、複数の第2結合係数は、結合係数行列21のうちの部分21c,21dに相当する。部分21cに属する第2結合係数の行インデックスの範囲はk+1~k+mであり、列インデックスの範囲は1~kである。部分21dに属する第2結合係数の行インデックスの範囲はk+1~k+mであり、列インデックスの範囲はk+m+1~Nである。なお、試行対象部分の状態変数のインデックスを、結合係数行列21の行インデックスに対応付ける例を示しているが、結合係数行列21の列インデックスに対応付けてもよい。
【0042】
そして、処理部12は、試行対象部分に属する何れかの状態変数の値を更新するか否かの試行を次のように行う。すなわち、処理部12は、試行対象部分に属する第1状態変数に対応する局所場に基づいて、第1状態変数の値が変化した場合のエネルギーの変化量を計算し、当該変化量に応じて式(5)に基づき第1状態変数の値を更新する。処理部12は、第1状態変数の値を更新すると、更新した第1状態変数に対応する第1結合係数に基づいて、試行対象部分に属する複数の第1状態変数それぞれに対応する局所場を更新する。また、処理部12は、更新した第1状態変数に対応する第2結合係数に基づいて、試行対象部分に属さない複数の第2状態変数それぞれに対応する局所場を更新する。
【0043】
例えば、処理部12は、状態変数xk+1~xk+mのうちのインデックスjに対応する第1状態変数xjの値を更新する。すると、処理部12は、部分21bのうち、行インデックスjの行に含まれる第1結合係数に基づいて、状態変数xk+1~xk+mそれぞれに対応する局所場を更新する。また、処理部12は、部分21c,21dのうち、行インデックスjの行に含まれる第2結合係数に基づいて、状態変数x1~xk,xk+m+1~xNそれぞれに対応する局所場を更新する。
【0044】
このように、処理部12は、例えば、結合係数行列21のうちの部分21bとともに、部分21c,21dを記憶装置20から読み込んで記憶部11に格納し、試行対象部分に属する状態変数の値の更新に応じて、他の全ての状態変数の局所場を更新してもよい。なお、記憶部11は、第1記憶部と言われてもよい。また、第1の方法において、複数の状態変数の値と、複数の状態変数に対応する複数の局所場とを記憶する変数記憶部は、第2記憶部と言われてもよい。第1の方法の説明は以上となる。
【0045】
(第2の方法)
第2の方法では、情報処理装置10は、前述の変数記憶部として、内部変数記憶部とグローバル変数記憶部とを有する。内部変数記憶部は、複数の状態変数x1~xNのうちの試行対象部分に属する複数の第1状態変数の値と複数の第1状態変数に対応する複数の第1局所場とを記憶する。グローバル変数記憶部は、複数の状態変数x1~xNの値と当該複数の状態変数に対応する複数の第2局所場とを記憶する。
【0046】
そして、処理部12は、次のようにして試行対象部分を変更する。処理部12は、前回の試行対象部分に含まれるが今回の試行対象部分に含まれない第1差分の状態変数と複数の他の状態変数それぞれとの複数のペアに対応する複数の第3結合係数を、複数の第1結合係数とともに記憶装置20から読み出して記憶部11に格納する。例えば、前回の試行対象部分が状態変数xk~xk+m-1で今回の試行対象部分が状態変数xk+1~xk+mであるとする。この場合、状態変数xkは、第1差分の状態変数に相当する。一例では、処理部12が記憶装置20から読み出す複数の第3結合係数は、結合係数行列21のうちの部分21e,21fに相当する。部分21eに属する第3結合係数の行インデックスはkであり、列インデックスの範囲は1~k-1である。部分21fに属する第3結合係数の行インデックスはkであり、列インデックスの範囲はk+m~Nである。この場合、処理部12は、前回の試行対象部分に対して記憶部11に保持していた部分21aにおける行インデックスkかつ列インデックスk~k+m-1の結合係数を、第3結合係数として流用し得る。
【0047】
処理部12は、内部変数記憶部に記憶される第1差分の状態変数の第1の値により、グローバル変数記憶部に記憶される第1差分の状態変数の第2の値を更新する。処理部12は、第2の値の更新前後の値の差と複数の第3結合係数とに基づいて、グローバル変数記憶部に記憶される複数の第2局所場を更新する。
【0048】
例えば、第1差分の状態変数がxkの場合、処理部12は、内部変数記憶部に記憶される状態変数xkの第1の値によりグローバル変数記憶部に記憶される状態変数xkの第2の値を更新する。処理部12は、グローバル変数記憶部における状態変数xkの更新前後の値の差と行インデックスkの行に相当する第3結合係数とに基づいて、グローバル変数記憶部に記憶される全ての状態変数の第2局所場を更新する。これにより、状態変数xkが内部変数記憶部に保持されていた間における当該状態変数xkの値の変化が、グローバル変数記憶部に保持される全ての第2局所場に反映される。
【0049】
また、処理部12は、複数の状態変数のうち、前回の試行対象部分に含まれないが今回の試行対象部分に含まれる第2差分の状態変数の第3の値をグローバル変数記憶部から取得して内部変数記憶部に格納する。例えば、前回の試行対象部分が状態変数xk~xk+m-1で今回の試行対象部分が状態変数xk+1~xk+mである場合、状態変数xk+mは、第2差分の状態変数に相当する。
【0050】
更に、処理部12は、内部変数記憶部に新たに追加した第2差分の状態変数に対する第1局所場を計算し、内部変数記憶部に格納する。処理部12は、内部変数記憶部に記憶される複数の第1状態変数それぞれの第4の値とグローバル変数記憶部に記憶される当該複数の第1状態変数それぞれの第5の値との差を求める。処理部12は、求めた各第1状態変数の値の差と、グローバル変数記憶部に記憶される第2差分の状態変数の第2局所場と記憶部11に記憶される複数の第1結合係数とに基づいて、第2差分の状態変数に対する第1局所場の計算を行う。これにより、処理部12は、内部変数記憶部に新たに追加した第2差分の状態変数の局所場を、内部変数記憶部に保持される状態変数の値に整合させることができる。
【0051】
こうして処理部12は複数の状態変数における試行対象部分を変更すると、変更後の試行対象部分に属する何れかの第1状態変数の値を更新するか否かの試行を次のように行う。すなわち、処理部12は、試行対象部分に属する第1状態変数に対応する第1局所場に基づいて、第1状態変数の値が変化した場合のエネルギーの変化量を計算し、当該変化量に応じて式(5)に基づき第1状態変数の値を更新する。処理部12は、第1状態変数の値を更新すると、記憶部11に記憶される、更新した第1状態変数に対応する第1結合係数に基づいて、内部変数記憶部に記憶される、複数の第1状態変数に対応する複数の第1局所場を更新する。
【0052】
このように、処理部12は、結合係数行列21のうちの部分21bとともに、部分21e,21fを記憶装置20から読み込んで記憶部11に格納してもよい。そして、処理部12は、部分21e,21fを基に、グローバル変数記憶部における、今回の試行対象部分以外の状態変数に対応する第2局所場を更新してもよい。処理部12は、グローバル変数記憶部における第2局所場の更新を、内部変数記憶部に格納された情報に基づく試行と並列に行ってもよい。
【0053】
なお、上記のように処理部12は、記憶装置20から第3結合係数を読み出す際、第1差分の状態変数と第1差分の状態変数が試行対象部分に追加されたときに試行対象部分に属していた他の状態変数とのペアに対応する結合係数を読み出し対象から除外してもよい。これにより、例えば、第1差分の状態変数に係る行インデックスkの行全体を記憶装置20から読み出すよりも、記憶装置20からの読み出し用のメモリバンド幅を削減できる。ただし、処理部12は、行インデックスkの行全体を第3結合係数として記憶装置20から読み出してもよい。このようにすると、処理部12により、結合係数行列21の行インデックスkの行を単に読み出して記憶部11に格納すればよい。このため、記憶装置20からの読み出し用のメモリバンド幅は増えるものの、処理部12は、読み出し時に当該行のデータに対する加工を行わずに済み、第3結合係数の読み出しを高速化し得る。
【0054】
また、グローバル変数記憶部は、情報処理装置10の外部に設けられてもよい。例えば、グローバル変数記憶部は、記憶装置20に含まれてもよい。このようにすると、情報処理装置10において、グローバル変数記憶部に相当する記憶領域を設けずに済む。
【0055】
また、第2の方法における第3結合係数は、第1の方法における第2結合係数と区別するための便宜的な名称である。区別不要の場合、第2の方法における第3結合係数は「第2結合係数」と記載されてもよい。なお、記憶部11は、第1記憶部と言われてもよい。また、内部変数記憶部は、第3記憶部と言われてもよい。グローバル変数記憶部は、第4記憶部と言われてもよい。第2の方法の説明は以上となる。
【0056】
以上説明したように情報処理装置10によれば、複数の状態変数のうち、試行対象部分に属する第1状態変数の複数のペアに対応する複数の第1結合係数を、結合係数全体を記憶する記憶装置20から読み出して記憶部11に格納し、記憶部11に記憶された複数の第1結合係数を用いて、試行対象部分に属する何れかの第1状態変数の値の更新を行うか否かの試行を複数回実行する、処理が行われる。試行対象部分の変更および当該処理が繰り返し行われることで、複数の状態変数の全体が試行の対象とされる。
【0057】
このように、情報処理装置10は、記憶部11に記憶された第1結合係数を複数回の試行に利用することで、記憶装置20に対するアクセス頻度を低減でき、記憶装置20へのアクセスに起因する処理速度の低下を抑えられる。その結果、結合係数全体のサイズが比較的大きい大規模問題に対する求解を高速化できる。
【0058】
また、第1の方法で例示したように、情報処理装置10は、試行対象部分に属する状態変数と試行対象部分に属さない他の状態変数とのペアごとの第2結合係数を、第1結合係数とともに記憶装置20から読み出して記憶部11に格納してもよい。この場合、情報処理装置10は、第2結合係数に基づき、試行対象部分に属さない他の状態変数の局所場を適切に更新できる。
【0059】
更に、第2の方法で例示したように、情報処理装置10は、内部変数記憶部およびグローバル変数記憶部により状態変数と局所場とを保持してもよい。情報処理装置10は、第1差分の状態変数と他の状態変数とのペアごとの第3結合係数を、第1結合係数とともに記憶装置20から読み出して記憶部11に格納してもよい。この場合、情報処理装置10は、第1差分の状態変数が内部変数記憶部に保持されていた間における当該第1差分の状態変数の値の変化を、第3結合係数に基づいてグローバル変数記憶部に保持される局所場に適切に反映できる。このため、グローバル変数記憶部に保持される状態変数が内部変数記憶部に追加されて試行対象となる場合に、情報処理装置10は、グローバル変数記憶部に保持される情報と内部変数記憶部に保持される情報とを基に、当該状態変数の局所場を適切に計算できる。すなわち、情報処理装置10は、内部変数記憶部に新たに追加した状態変数の局所場を、内部変数記憶部に保持される他の状態変数の値に適切に整合させることができる。
【0060】
また、第2の方法では、第1の方法に比べて、試行対象部分に属さない状態変数の局所場の更新頻度が下がり、当該更新に伴うオーバーヘッドを低減できる。更に、第2の方法では、第1の方法に比べて、記憶部11に読み込む結合係数のサイズを小さくできる。
【0061】
処理部12は、複数の状態変数のうち試行対象部分を変更しながら、上記処理を繰り返すことで、複数の状態変数の全体を試行の対象とする。例えばSA法を用いる場合、処理部12は、複数の状態変数の全体を試行の対象とする一巡の探索が複数回繰り返されると、式(5)に用いる逆温度βを大きく、すなわち、温度値Tを小さくして探索を継続する。処理部12は、逆温度βまたは温度値Tが最終値に達したら、それまでに得られた最低エネルギーに対応する状態を解として出力する。
【0062】
また、例えばレプリカ交換法を用いる場合、処理部12と同様にして互いに異なる温度値で探索を行う複数の処理部が情報処理装置10に設けられる。この場合、処理部12は、複数の状態変数の全体を試行の対象とする一巡の探索が複数回繰り返されると、他の処理部との間で、所定の交換確率で温度値または複数の状態変数の値を交換して探索を継続する。そして、所定時間が経過すると、情報処理装置10は、複数の処理部で得られた状態のうち、最低エネルギーの状態を解として出力する。
【0063】
[第2の実施の形態]
次に、第2の実施の形態を説明する。
図2は、第2の実施の形態のデータ処理装置のハードウェア例を示す図である。
【0064】
データ処理装置100は、組合せ最適化問題に対する解を、MCMC法を用いて探索し、探索した解を出力する。組合せ最適化問題は、式(1)のイジング型のエネルギー関数によって表される。データ処理装置100は、CPU101、RAM102、HDD103、GPU(Graphics Processing Unit)104、入力インタフェース105、媒体リーダ106、NIC(Network Interface Card)107およびアクセラレータカード200を有する。
【0065】
CPU101は、プログラムの命令を実行するプロセッサである。CPU101は、HDD103に記憶されたプログラムやデータの少なくとも一部をRAM102にロードし、プログラムを実行する。なお、CPU101は複数のプロセッサコアを含んでもよい。また、データ処理装置100は複数のプロセッサを有してもよい。また、複数のプロセッサの集合を「マルチプロセッサ」または単に「プロセッサ」と言うことがある。
【0066】
RAM102は、CPU101が実行するプログラムやCPU101が演算に用いるデータを一時的に記憶する揮発性の半導体メモリである。なお、データ処理装置100は、RAM以外の種類のメモリを備えてもよく、複数個のメモリを備えてもよい。
【0067】
HDD103は、OS(Operating System)やミドルウェアやアプリケーションソフトウェアなどのソフトウェアのプログラム、および、データを記憶する不揮発性の記憶装置である。なお、データ処理装置100は、フラッシュメモリやSSD(Solid State Drive)などの他の種類の記憶装置を備えてもよく、複数の不揮発性の記憶装置を備えてもよい。
【0068】
GPU104は、CPU101からの命令に従って、データ処理装置100に接続されたディスプレイ111に画像を出力する。ディスプレイ111としては、CRT(Cathode Ray Tube)ディスプレイ、液晶ディスプレイ(LCD:Liquid Crystal Display)、プラズマディスプレイ、有機EL(OEL:Organic Electro-Luminescence)ディスプレイなど、任意の種類のディスプレイを用いることができる。
【0069】
入力インタフェース105は、データ処理装置100に接続された入力デバイス112から入力信号を取得し、CPU101に出力する。入力デバイス112としては、マウス、タッチパネル、タッチパッド、トラックボールなどのポインティングデバイス、キーボード、リモートコントローラ、ボタンスイッチなどを用いることができる。また、データ処理装置100に、複数の種類の入力デバイスが接続されていてもよい。
【0070】
媒体リーダ106は、記録媒体113に記録されたプログラムやデータを読み取る読み取り装置である。記録媒体113として、例えば、磁気ディスク、光ディスク、光磁気ディスク(MO:Magneto-Optical disk)、半導体メモリなどを使用できる。磁気ディスクには、フレキシブルディスク(FD:Flexible Disk)やHDDが含まれる。光ディスクには、CD(Compact Disc)やDVD(Digital Versatile Disc)が含まれる。
【0071】
媒体リーダ106は、例えば、記録媒体113から読み取ったプログラムやデータを、RAM102やHDD103などの他の記録媒体にコピーする。読み取られたプログラムは、例えば、CPU101によって実行される。なお、記録媒体113は可搬型記録媒体であってもよく、プログラムやデータの配布に用いられることがある。また、記録媒体113やHDD103を、コンピュータ読み取り可能な記録媒体と言うことがある。
【0072】
NIC107は、ネットワーク114に接続され、ネットワーク114を介して他のコンピュータと通信を行うインタフェースである。NIC107は、例えば、スイッチやルータなどの通信装置とケーブルで接続される。NIC107は、無線通信インタフェースでもよい。
【0073】
アクセラレータカード200は、式(1)のイジング型のエネルギー関数で表される問題、すなわち、イジング問題の解を、MCMC法を用いて探索するハードウェアアクセラレータである。アクセラレータカード200は、一定温度のMCMC法または複数温度間でイジングモデルの状態を交換するレプリカ交換法を行うことで、該当温度におけるボルツマン分布に従う状態をサンプリングするサンプラーとして用いることができる。アクセラレータカード200は、イジング問題の求解のためには、レプリカ交換法や温度値を徐々に下げるSA法などのアニーリングの処理を実行する。例えば、アクセラレータカード200は、CPU101からの命令に応じて求解を実行し、求めた解を出力する。
【0074】
SA法は、各温度値におけるボルツマン分布に従う状態をサンプリングし、サンプリングに用いる温度値を最高温度値から最低温度値に徐々に下げることで、最適解を効率的に発見する手法である。例えば、SA法を用いる場合、アクセラレータカード200は、一定の温度値での状態遷移の試行を一定回数繰り返した後に温度値を下げる、という動作を繰り返す。状態遷移の試行には、例えば、エネルギー関数に含まれる複数の状態変数それぞれを、例えばインデックス順などの所定の順番に選択して値を変化させるか否かの試行を行うシリアル選択MCMC法が用いられてもよい。あるいは、状態遷移の試行には、複数の状態変数に対する試行を並列に行う並列試行が用いられてもよい。
【0075】
例えば、並列試行では、複数の状態変数に対して式(5)に基づく判定を並列に行い、並列に判定した結果を基に何れかの状態変数の値を更新することで解の探索が行われる。その場合、アクセラレータカード200は、ある状態に対するハミング距離1の全ての近傍の状態に対して式(6)の確率で排他的に必ず1個を選んで遷移させるRejection-Free MCMC法を用いてもよい。
【0076】
【0077】
式(6)の確率による選択は、[0,1]の一様乱数riを発生させて、riを基に発生した乱数key:max(0,ΔEi)+Tlog(-log(ri))の最小値を求めることと等価である。なお、logの底はネイピア数eである。すなわち、Rejection-Free MCMC法では、式(7)のkで示されるインデックスが遷移対象として選択されてもよい。
【0078】
【0079】
また、並列試行において、解の探索効率を低下させないため、同じ状態変数が連続して試行される確率を所定の値に制御するPNS(Partial Neighbor Search)法が用いられてもよい。
【0080】
レプリカ交換法は、複数の温度値を用いて独立してMCMC法を実行し、各温度値で得られた状態に対して、適宜、温度値を交換する手法である。低温でのMCMCによって状態空間の狭い範囲を探索し、高温でのMCMCによって状態空間の広い範囲を探索することで、効率的に良い解を発見することができる。例えば、レプリカ交換法を用いる場合、アクセラレータカード200は、複数の温度値の各々での状態遷移の試行を並列して行い、一定回数の試行を行うごとに、各温度値で得られた状態に対して、所定の交換確率で温度値を交換する、という動作を繰り返す。
【0081】
具体的には、逆温度βkとβk+1にあるレプリカをそれぞれxk、xk+1とする。レプリカに対してMCMC更新演算を決められた回数行った後のエネルギーHをそれぞれHk、Hk+1とする。このとき、レプリカxkとxk+1との間の温度交換を受け入れる確率、すなわち、交換確率Aは以下の式(8)で表される。
【0082】
【0083】
アクセラレータカード200は、DRAM210および演算装置220を有する。DRAM210は、演算装置220での探索に用いられる問題情報などのデータを保持する。DRAM210は、エネルギー関数に含まれる複数の状態変数の全てのペアに対する結合係数、すなわち、結合係数全体を保持する。状態変数の数をNとする。結合係数全体は、N行N列の行列、すなわち、結合係数行列で表される。演算装置220は、アクセラレータカード200におけるMCMC法による解探索機能を実現する演算器である。演算装置220は、例えばFPGA、GPU、ASICなどにより実現される。
【0084】
アクセラレータカード200または演算装置220のようにイジング問題の解を探索するハードウェアは、イジングマシンやボルツマンマシンなどと呼ばれることがある。
図3は、アクセラレータカードのハードウェア例を示す図である。
【0085】
アクセラレータカード200は、前述のDRAM210および演算装置220に加えて、HBM2(High Band Width Memory)IF(InterFace)210aを有する。HBM2IF210aは、DRAM210と演算装置220とを接続するインタフェースである。
【0086】
演算装置220は、内部メモリ部221、探索部222および制御部223を有する。内部メモリ部221は、DRAM210から読み出された結合係数の一部を記憶するオンチップの記憶領域である。内部メモリ部221は、探索部222の処理に用いるデータを保持するキャッシュとして用いられる。内部メモリ部221には、例えば演算装置220が備えるSRAMの記憶領域が用いられる。内部メモリ部221の記憶容量は、DRAM210に比べて小さい。演算装置220は、内部メモリ部221に保持されるデータに対して、DRAM210よりも高速にアクセス可能である。例えば、演算装置220によるDRAM210のアクセス時間は、オンチップRAMである内部メモリ部221に比べて2桁程度大きい。また、内部メモリ部221に結合係数全体が入り切る問題規模は限られており、状態変数の数、すなわち、ビット数が比較的大きい問題規模では内部メモリ部221に結合係数全体を一度に格納することは困難になる。
【0087】
探索部222は、MCMC法に基づく解探索の実行エンジンである。探索部222は、内部メモリ部221に記憶された結合係数を用いて解探索を行う。
制御部223は、複数の状態変数のうち、探索部222による試行対象とする2以上の状態変数が属する部分、すなわち、試行対象部分の状態変数のインデックスを決定し、探索部222に通知する。試行対象部分に属する状態変数の数をm個とする。mはNより小さい2以上の整数である。制御部223は、当該インデックスに応じて内部メモリ部221に読み込む結合係数の行インデックスや列インデックスを決定し、DRAM210から内部メモリ部221への結合係数の読み込みを制御する。
【0088】
なお、DRAM210は、内部メモリ部221に対して、外部メモリまたは外部記憶装置と言われてもよい。
ここで、DRAM210は、第1の実施の形態の記憶装置20の一例である。演算装置220は、第1の実施の形態の処理部12の一例である。内部メモリ部221は、第1の実施の形態の記憶部11の一例である。アクセラレータカード200は、第1の実施の形態の情報処理装置10の一例である。
【0089】
なお、演算装置220における探索部222および制御部223を含むFPGAやGPUなどの電子回路は第1の実施の形態の処理部12の一例でもよい。また、演算装置220は、第1の実施の形態の情報処理装置10の一例でもよい。更に、データ処理装置100は、第1の実施の形態の情報処理装置10の一例でもよい。
【0090】
図4は、演算装置の機能例を示す図である。
DRAM210は、N行N列の結合係数W={W
ij}の全体を記憶する。W
ij=W
jiである。W
ii=0である。
【0091】
内部メモリ部221は、結合係数Wの全体のうち、今回の試行対象部分の状態変数のインデックスに応じた部分を記憶する。例えば、今回の試行対象部分の状態変数のインデックスがk+1~k+mであると仮定する。この場合、本例では、内部メモリ部221は、結合係数Wの全体のうち、行インデックスk+1~k+mかつ列インデックス1~Nの各係数行を記憶する。係数行は、結合係数行列に含まれるある行インデックスの行を示す。
【0092】
探索部222は、N個の状態変数x1~xNの値および状態変数x1~xNそれぞれの局所場h1~hNを保持する。例えば、状態変数x1~xNの値および局所場h1~hNを示す情報は、探索部222の変数記憶部222rに保持される。変数記憶部222rは、例えばレジスタである。ここで、一例では、状態変数xi,xjのペアに対する結合係数Wijは16ビットで設定可能である。式(1)のバイアスbiは例えば28ビットで設定可能である。局所場hiは例えば29ビットで設定可能である。
【0093】
探索部222は、内部メモリ部221に記憶された結合係数を用いて、今回の試行対象部分に属する何れかの状態変数の値を更新するか否かの試行を行う。具体的には、探索部222は、ある状態変数の値を更新する場合のエネルギーの変化量を、式(2)に基づいて計算する。そして、探索部222は、式(5)に基づいて当該状態変数の値の変化が許容されるか否かを判定し、許容される場合に当該状態変数の値を更新する。探索部222は、状態変数の値を更新する場合、内部メモリ部221に記憶された当該状態変数に対応する結合係数を用いて、式(4)に基づき他の状態変数の局所場を更新する。
【0094】
探索部222は、何れかの状態変数の値を更新するか否かの試行には、前述のシリアル選択MCMC法を用いてもよいし、試行対象部分に属するm個の状態変数に対する並列試行を用いてもよい。
【0095】
制御部223は、内部メモリ部221に記憶された結合係数を反復利用して、探索部222によりr回の試行が行われると、試行対象部分を変更する。rは2以上の整数である。例えば、シリアル選択MCMC法の場合にr=mでもよいし、r>mでもよい。試行対象部分の変更では、制御部223は、試行対象部分に含める状態変数のインデックスを変更する。
【0096】
また、演算装置220は、エネルギー計算部224を更に有する。エネルギー計算部224は、値の更新が行われる状態変数に対して計算されるエネルギーの変化量を、初期状態のエネルギーに積算することで、現在のN個の状態変数の値に対応するエネルギーを計算する。
【0097】
ここで、試行対象部分のインデックスの集合は、ウィンドウと言われてもよい。ウィンドウに属するインデックスは連続でもよいし、不連続でもよい。
図5は、結合係数行列の例を示す図である。
【0098】
結合係数行列30は、結合係数Wの全体に相当する。本例では、内部メモリ部221は、結合係数行列30のうち、ウィンドウに属するインデックスを行インデックスとする係数行を記憶する。例えば、ウィンドウに属するインデックスがk~k+m-1の場合、内部メモリ部221は、結合係数行列30のうち、行インデックスがk~k+m-1のm行、すなわち、m個の係数行を記憶する。探索部222は、当該m行のうち、行インデックスk~k+m-1、かつ、列インデックスk~k+m-1の部分31を、試行対象部分に属する状態変数の局所場の更新に用いる。探索部222は、当該m行のうち、部分31以外の部分を、試行対象部分に属さない状態変数の局所場の更新に用いる。
【0099】
図6は、結合係数の読み出し例を示す図である。
制御部223は、試行対象部分に属する状態変数のインデックスを変化させながら、探索部222による探索を繰り返すことで、N個の状態変数の全体を探索部222による試行の対象とする。例えば、制御部223は、試行対象部分に属する状態変数のインデックス1~mを初期値として、各インデックスを1つずつ増やすように更新する。この場合、制御部223は、前回までに内部メモリ部221に保持されている行インデックスが最小の係数行を消去して、今回新たにDRAM210から読み出した行インデックスの係数行を内部メモリ部221に格納する。
【0100】
試行対象部分に属する状態変数のインデックスの更新に応じて、結合係数行列30のうち、試行対象部分に属する状態変数の局所場の更新に用いられる部分は、部分32,33,34,…,35と変化する。こうして、全ての状態変数を試行対象として一巡の探索が完了すると、制御部223は、当該一巡の探索を再び最初から実行する。
【0101】
なお、DRAM210から新たに読み込む係数行を1行ずつ行インデックスが連続するように選択する例を示したが、制御部223は、新たに読み込む係数行の数を2以上としてもよいし、当該係数行を行インデックスが不連続になるように選択してもよい。
【0102】
例えば、制御部223は、SA法を実行する場合、ある温度値を用いた一巡の探索を複数回行うと、温度値を更新して次の温度値での探索に移る。次に、SA法を実行する演算装置220の処理手順の例を説明する。
【0103】
図7は、演算装置の処理例を示すフローチャートである。
(S10)制御部223は、内部メモリ部221および探索部222の初期化を行う。例えば、制御部223は、初期逆温度β
start、最終逆温度β
stop、温度係数s、試行対象部分とする状態変数の数m、繰り返し回数r、初期状態、初期状態のエネルギーEおよび温度変更間隔kを設定する。温度係数sは1より大きい値である。また、制御部223は、DRAM210から内部メモリ部221へ最初のm行の係数行を読み込む。
【0104】
(S11)探索部222は、内部メモリ部221に記憶された結合係数に基づいて内部変数の更新の試行をr回、すなわち、複数回行う。ここで、内部変数は、試行対象部分の状態変数および当該状態変数に対応する局所場を示す。
【0105】
(S12)制御部223は、ステップS11の実行とともに、次回の試行対象部分の状態変数に対応する結合係数の係数行を、DRAM210から先読みする。
そして、ステップS11,S12の両方が完了すると、ステップS13に処理が進む。例えば、ステップS11,S12の何れか一方が先に完了した場合、他方が完了するまで待機してからステップS13に処理が進む。
【0106】
(S13)制御部223は、ステップS12で先読みした係数行により、内部メモリ部221に保持される係数行を更新する。また、制御部223は、探索部222における試行対象部分のインデックス、すなわち、内部変数のインデックスを更新する。
【0107】
(S14)制御部223は、内部変数のインデックスを全て巡回した巡回数がk以上であるか否かを判定する。内部変数のインデックスの巡回数がk以上の場合、ステップS15に処理が進む。内部変数のインデックスの巡回数がk未満の場合、ステップS11,S12に処理が進む。
【0108】
(S15)制御部223は、探索部222で用いられる逆温度βをsβに更新する。
(S16)制御部223は、β>βstopであるか否かを判定する。β>βstopの場合、ステップS17に処理が進む。β≦βstopの場合、ステップS11,S12に処理が進む。
【0109】
(S17)制御部223は、探索部222の探索で得られた最低エネルギーの状態を出力する。
なお、演算装置220は、探索部222を含む複数の探索部を備えてもよく、当該複数の探索部によりレプリカ交換法を実行してもよい。その場合、ステップS15の温度更新は、探索部222と他の探索部との、所定の交換確率に応じた逆温度の交換により行われてもよい。また、レプリカ交換法が用いられる場合、ステップS16の判定は、例えば、ステップS10の初期化から一定時間が経過したか否かにより行われてもよい。
【0110】
また、ステップS11では、探索部222は、試行対象部分の状態変数をランダム選択またはインデックス順に選択するシリアル選択MCMC法による試行を行ってもよい。あるいは、探索部222は、試行対象部分のm個の状態変数を対象とする、Rejection-Free MCMC法による並列試行を行ってもよい。Rejection-Free MCMC法によれば、並列試行の1回の実行により、m個の状態変数の何れか1つの値が更新される。また、探索部222は、当該並列試行において、PNS法を用いてもよい。並列試行を行う場合、制御部223は、ステップS14の判定を、m個の状態変数に対する並列試行をk回行ったか否かにより判定してもよい。ここで、探索部222における並列試行のための機能例を説明する。
【0111】
図8は、並列試行実行部の例を示す図である。
探索部222は、並列試行実行部300を有してもよい。並列試行実行部300は、試行対象部分のm個の状態変数に対する並列試行を行う。並列試行実行部300は、局所場保持部310、ΔE計算部320、選択部330および状態変数保持部340を有する。局所場保持部310は、m個の状態変数に対応するm個の局所場を保持する。ただし、局所場保持部310は、N個の状態変数に対応するN個の局所場を保持してもよい。ΔE計算部320は、現在の状態に対して、m個の状態変数それぞれの値が変化する場合のエネルギーの変化量を、局所場保持部310に保持されるm個の局所場を用いて、並列に計算する。ΔE計算部320は、m個の状態変数に対して計算したm個のエネルギーの変化量を選択部330に出力する。選択部330は、式(7)に基づいて、m個の状態変数のインデックスのうち、値の更新対象のインデックスを選択し、状態変数保持部340および内部メモリ部221に出力する。
【0112】
状態変数保持部340は、全てのインデックスに対応する状態変数を保持する。状態変数保持部340は、選択部330より出力されたインデックスに対応する状態変数の値を更新する。
【0113】
また、内部メモリ部221は、選択部330より出力されたインデックスと試行対象部分の他のインデックスとの各ペアに対する結合係数を、局所場保持部310に出力する。例えば、内部メモリ部221から局所場保持部310へのインデックスに基づく結合係数の読み出しは、アドレスデコーダにより行われてもよい。局所場保持部310は、当該結合係数を用いて、式(4)に基づき、試行対象部分の他の状態変数の局所場を更新する。
【0114】
なお、局所場保持部310がN個の状態変数に対応するN個の局所場を保持する場合、内部メモリ部221は、選択部330より出力されたインデックスと他の全てのインデックスとの各ペアに対する結合係数を、局所場保持部310に出力してもよい。この場合、局所場保持部310は、当該結合係数を用いて、式(4)に基づき、他の全ての状態変数の局所場を更新してもよい。局所場保持部310が試行対象部分に属する状態変数の局所場のみを更新する場合、それ以外の状態変数の局所場の更新は探索部222が備える所定の計算部によって行われる。
【0115】
また、探索部222は、式(7)に基づくRejection-Free MCMC法において、PNS法を用いてもよい。Rejection-Free MCMC法にPNS法を適用する手法は、PNS RF(Rejection-Free)法と言われる。
【0116】
図9は、PNS RF法を用いる選択部の例を示す図である。
ここでは、一例として、選択部330に対し、m個のエネルギーの変化量ΔE
1~ΔE
mが入力されると仮定する。選択部330は、インデックス生成部331、m-to-pセレクタ332およびリダクションツリー333を有する。インデックス生成部331は、p個のインデックスi
1,i
2,…,i
pを生成し、m-to-pセレクタ332に出力する。pは2≦p<mの整数である。例えば、インデックス生成部331は、m個の各インデックスにつき一様乱数[0,1]を発生させ、大きい順にp個選択することで、p個のインデックスを生成してもよい。
【0117】
m-to-pセレクタ332は、インデックス生成部331より入力されるp個のインデックスに対応するエネルギーの変化量を、入力されるm個のΔE1~ΔEmから選択し、リダクションツリー333に出力する。
【0118】
リダクションツリー333は、m-to-pセレクタ332より入力されるp個のエネルギーの変化量を式(7)に適用して、インデックスkを出力する。例えば、リダクションツリー333は、2入力1出力のセレクタを多段にツリー状に組合せたセレクタツリーにより実現される。
【0119】
このように、探索部222は、各試行において、現在の状態に対するハミング距離1の全近傍から割合q=p/mで遷移先を選択して、選択した中でRejection-Freeによる遷移先の選択を行ってもよい。割合qは、探索部222に予め設定される。例えば、q=0.5である。なお、探索部222は、PNS法による遷移先の選択方法として、一定数を重複無く選ぶ方法を用いてもよいし、重複を許して選ぶ方法を用いてもよい。こうして、探索部222は、PNS RF法を実行することで、同じ状態変数が連続して試行される確率を制御し、解の探索効率を向上させることができる。
【0120】
以上で説明したように、演算装置220は、DRAM210から読み出されて内部メモリ部221に記憶された結合係数を複数回の試行に利用する。これにより、演算装置220は、DRAM210に対するアクセス頻度を低減できる。このため、DRAM210へのアクセスに起因する処理速度の低下を抑えられる。その結果、結合係数全体のサイズが比較的大きい大規模問題に対する求解の高速化を図れる。また、第2の実施の形態の例では、結合係数全体のサイズN2に対して、内部メモリ部221に要求されるメモリ容量をN*mに削減できる。メモリ容量の削減率はm/Nである。
【0121】
[第3の実施の形態]
次に、第3の実施の形態を説明する。前述の第2の実施の形態と相違する事項を主に説明し、共通する事項の説明を省略する。第3の実施の形態のデータ処理装置100は、第2の実施の形態と同様のハードウェアにより実現される。
【0122】
前述の第2の実施の形態では、状態変数の全体に対して試行対象部分の変更を行うたびに、全ての状態変数の局所場の更新を行う例を示した。
これに対し、第3の実施の形態では、試行対象部分における状態変数xjの値の更新を行うたびに、試行対象部分に属する状態変数の局所場の更新が行われる。それ以外の状態変数の局所場に対する状態変数xjの値への更新の影響については、状態変数xjが試行対象部分から除外されるときに反映される。
【0123】
第3の実施の形態では、
図5で示される結合係数行列30のうち、今回の試行対象部分に属する状態変数のペアごとの結合係数、例えば
図5の部分31に属する結合係数を、内部メモリ部221に保持する点は第2の実施の形態と同じである。一方、第3の実施の形態では、今回の試行対象部分に属する状態変数と当該試行対象部分に属さない他の状態変数とのペアごとの結合係数をDRAM210から内部メモリ部221に読み込まない点が第2の実施の形態と異なる。
【0124】
図10は、第3の実施の形態の結合係数の読み出し例を示す図である。
例えば、試行対象部分の状態変数をx
k~x
k+m-1から、x
k+1~x
k+mに変更する場合、結合係数行列30における行インデックスk+mの行のうちの列インデックスk+1~k+mの部分36がDRAM210から読み出される。それとともに、例えば結合係数行列30における行インデックスkの行のうちの列インデックス1~k-1の部分37および列インデックスk+m~Nの部分38がDRAM210から読み出される。この場合、行インデックスkの行のうちの列インデックスk~k+m-1の部分は、例えば制御部223により、前回まで内部メモリ部221に保持される情報で補完される。
【0125】
図11は、探索部の例を示す図である。
探索部222は、内部変数処理部222aおよびグローバル変数処理部222bを有する。内部変数処理部222aは、内部変数の更新を行う。内部変数は、試行対象部分の状態変数および当該状態変数に対応する局所場を示す。内部変数に属する状態変数は、試行対象部分の状態変数に相当する。内部変数は、例えば内部変数処理部222aが備える内部変数記憶部222a1に保持される。内部変数記憶部222a1は、例えばレジスタである。内部変数のインデックスの数はm個である。
【0126】
ここで、時間ステップtにおいて内部変数に属する状態変数のインデックスの集合をR(t)とする。時間ステップtを計る時間の単位は、試行対象部分を変更した直後のタイミングから次に試行対象部分を変更するタイミングまでの時間である。また、内部変数に属する状態変数および局所場には右上にアスタリスク記号「*」が付される。時間ステップtにおける内部変数は、(xi∈R(t)
*,hi∈R(t)
*)と表される。
【0127】
グローバル変数処理部222bは、グローバル変数の更新を行う。グローバル変数は、内部変数とは別個に保持される、N個の状態変数の全体(x1~xN)とN個の状態変数それぞれに対応する局所場(h1~hN)を示す。すなわち、グローバル変数は、内部変数を含む全ての状態変数と局所場である。グローバル変数は、例えばグローバル変数処理部222bが備えるグローバル変数記憶部222b1に保持される。グローバル変数記憶部222b1は、例えばレジスタである。
【0128】
ここで、グローバル変数は、ある状態変数xiと局所場hiとが内部変数に追加された時点での、状態変数xi
(0)の値を保持する。状態変数xiが内部変数から除外される場合、その時のxi
*とxi
(0)との差分でグローバル変数における状態変数xiと局所場h1~hNが更新される。
【0129】
図12は、内部変数とグローバル変数との間の関係の例を示す図である。
内部変数集合Y1は、内部変数の全体集合である。グローバル変数集合Y2は、グローバル変数の全体集合である。試行対象部分のインデックス、すなわち、内部変数のインデックスの変更により、内部変数集合Y1に含まれていた内部変数が内部変数集合Y1から除去される。このとき、グローバル変数処理部222bは、該当の内部変数の値により、グローバル変数の値を更新する。
【0130】
例えば、内部変数から状態変数x2
*が除去されるとき、グローバル変数処理部222bは、x2
*の値をx2に設定する。また、グローバル変数処理部222bは、このときのx2
*とx2との差分により、グローバル変数における他の局所場h1~hNを式(4)に基づいて更新する。このとき、グローバル変数処理部222bは、DRAM210から読み出された行インデックス2の行の結合係数を用いる。
【0131】
また、内部変数のインデックスの変更により、内部変数集合Y1に新たな内部変数が追加される。このとき、内部変数処理部222aは、追加する内部変数に対応するグローバル変数の値と他の内部変数における状態変数の値と追加する内部変数に対応する結合係数とに基づいて、追加する内部変数の値を生成する。
【0132】
例えば、内部変数のインデックスを連続とする場合に、追加する内部変数のインデックスをk+mと仮定する。この場合、内部変数処理部222aは、xk+m
*=xk+mとする。また、内部変数処理部222aは、式(9)により局所場hk+m
*を求める。
【0133】
【0134】
ここで、Δxj
*は、xk+m
*の追加時におけるxjとxj
*との差分である。
また、内部変数のインデックスを不連続とする場合に、追加する内部変数のインデックスをiと仮定する。この場合、内部変数処理部222aは、xi
*=xiとする。また、内部変数処理部222aは、式(10)により局所場hi
*を求める。
【0135】
【0136】
ここで、Δx
j
*は、x
i
*の追加時におけるx
jとx
j
*との差分である。
図13は、演算装置の機能例を示す図である。
演算装置220は、内部メモリ部221,226、内部変数処理部222a、グローバル変数処理部222b、制御部223、エネルギー計算部224および係数データストリーム発生部225を有する。内部メモリ部221,226には、演算装置220が備えるSRAMの記憶領域が用いられる。内部変数処理部222aおよびグローバル変数処理部222bは、
図11で例示したように探索部222の機能が細分化されたものである。
【0137】
係数データストリーム発生部225は、DRAM210から結合係数を読み出し、内部メモリ部221,226に供給する。係数データストリーム発生部225により内部メモリ部221,226に供給される結合係数のデータストリームは、係数データストリームと言われる。係数データストリーム発生部225は、内部変数処理部222aに用いられる結合係数を内部メモリ部221に供給する。係数データストリーム発生部225は、グローバル変数処理部222bに用いられる結合係数を内部メモリ部226に供給する。
【0138】
内部変数処理部222aは、内部メモリ部221に記憶された結合係数を用いて、内部変数に属する何れかの状態変数の値を更新するか否かの試行を行う。具体的には、内部変数処理部222aは、ある状態変数の値を更新する場合のエネルギーの変化量を、式(2)に基づいて計算する。そして、内部変数処理部222aは、式(5)に基づいて当該状態変数の値の変化が許容されるか否かを判定し、許容される場合に当該状態変数の値を更新する。内部変数処理部222aは、状態変数の値を更新する場合、内部メモリ部221に記憶された当該状態変数に対応する結合係数を用いて、式(4)に基づき他の内部変数における局所場を更新する。
【0139】
グローバル変数処理部222bは、内部メモリ部226に記憶された結合係数を用いて、
図12の方法によりグローバル変数を更新する。グローバル変数処理部222bによるグローバル変数の更新は、内部変数処理部222aによる試行と並列に行われ得る。
【0140】
ここで、
図13では、内部メモリ部221,226および内部変数処理部222aにおいて時間ステップt+mの時点で保持される情報が例示されている。インデックスi(t)は、時間ステップtにおいて内部変数に追加された状態変数のインデックスを示す。
【0141】
制御部223は、内部変数処理部222a、グローバル変数処理部222bおよび係数データストリーム発生部225における処理対象のインデックスを制御する。
エネルギー計算部224は、値の更新が行われる内部変数の状態変数に対して計算されるエネルギーの変化量を、初期状態のエネルギーに積算することで、現在のN個の状態変数の値に対応するエネルギーを計算する。
【0142】
図14は、係数データストリーム発生例を示す図である。
係数データストリーム発生部225は、DRAM210から結合係数を読み取り、係数データストリームD10を発生させる。係数データストリームD10は、係数データD11および係数データD12を有する。係数データD11は、内部変数に今回追加されたインデックスに対応する結合係数のデータである。係数データD11は、内部メモリ部221に格納される。係数データD12は、内部変数から今回除去されたインデックスに対応する結合係数のデータである。係数データD12は、内部メモリ部226に格納される。
【0143】
例えば、時間ステップt+mにおいて、係数データD11は、W
i∈R(t+m),j∈R(t+m)と表される。また、時間ステップt+mにおいて、係数データD12は、W
i∈R(t),j∈(¬R(t))と表される。ここで、「¬R(t)」はR(t)の補集合を示す。係数データD12の当該表記例は、
図14中の係数データD12の表記例と等価である。また、Wの添え字の左側のインデックスは、該当の時間ステップにおいて、内部変数に追加された状態変数のインデックスを示す。
【0144】
図15は、係数データストリームの第1の例を示す図である。
内部変数のインデックスを1つずつ連続して増やす場合、係数データストリーム発生部225は、例えば次のような係数データストリームD10を発生させる。
【0145】
ある時間ステップにおいて、係数データストリーム発生部225は、m個の結合係数Wk+m,k+1,…,Wk+m,k+mを内部メモリ部221に供給する。それとともに、係数データストリーム発生部225は、N-m個の結合係数Wk,1,…,Wk,k-1,Wk,k+m,…,Wk,Nを内部メモリ部226に供給する。このように、演算装置220は、今回の時間ステップの内部変数(今回の試行対象部分)から除外される状態変数xkと直前の時間ステップの内部変数(前回の試行対象部分)に属していたxk~xk+m-1それぞれとの複数のペアに対応する結合係数Wk,k~Wk,k+m-1を読み出し対象から除外してもよい。これにより、DRAM210からの読み出しのメモリバンド幅が削減される。
【0146】
次の時間ステップにおいて、係数データストリーム発生部225は、m個の結合係数Wk+m+1,k+2,…,Wk+m+1,k+m+1を内部メモリ部221に供給する。それとともに、係数データストリーム発生部225は、N-m個の結合係数Wk+1,1,…,Wk+1,k,Wk+1,k+m+1,…,Wk+1,Nを内部メモリ部226に供給する。
【0147】
図16は、係数データストリームの第2の例を示す図である。
内部変数のインデックスを1つずつ連続して増やす場合、係数データストリーム発生部225は、係数データストリームD10に代えて、例えば次のような係数データストリームD10aを発生させてもよい。
【0148】
ある時間ステップにおいて、係数データストリーム発生部225は、m個の結合係数Wk+m,k+1,…,Wk+m,k+mを内部メモリ部221に供給する。それとともに、係数データストリーム発生部225は、N個の結合係数Wk,1,…,Wk,Nを内部メモリ部226に供給する。
【0149】
次の時間ステップにおいて、係数データストリーム発生部225は、m個の結合係数Wk+m+1,k+2,…,Wk+m+1,k+m+1を内部メモリ部221に供給する。それとともに、係数データストリーム発生部225は、N個の結合係数Wk+1,1,…,Wk+1,Nを内部メモリ部226に供給する。
【0150】
係数データストリームD10を用いる場合、係数データストリームD10aに比べて、DRAM210からの読み出し用のメモリバンド幅を小さくできる。一方、係数データストリームD10aを用いる場合、係数データストリームD10に比べて、DRAM210への結合係数の読み出し時のデータ加工や、内部メモリ部226に結合係数を格納する際のデータ加工を省け、結合係数の読み出しを高速化し得る。
【0151】
次に、第3の実施の形態におけるエネルギー計算部224のエネルギー計算例を説明する。
図17は、エネルギー計算例を示す図である。
【0152】
エネルギー計算部224は、内部変数処理部222aの試行により、内部変数における状態変数xk
*の値が更新されるたびに、状態変数xk
*の値の変化量Δxk
*に基づいて、ΔE=-Δxk
*hk
*を積算することで、系のエネルギーEを計算する。系は、グローバル変数に内部変数を反映させたイジングモデルの状態を示す。エネルギーEは、式(11)で表される。
【0153】
【0154】
なお、第3の実施の形態における演算装置220によるSA法の処理手順は、
図7で例示したフローチャートと同様である。ただし、内部メモリ部221に読込まれる重み係数のサイズが異なる。また、内部メモリ部221の情報に基づく、内部変数における何れかの状態変数の値を更新するか否かの試行は、探索部222の内部変数処理部222aにより行われる。更に、演算装置220は、前述のように、SA法に代えて、レプリカ交換法を実行してもよい。
【0155】
次に、内部変数更新の例を説明する。
図18は、内部変数更新の第1の例を示す図である。
内部変数処理部222aは、内部メモリ部221に保持されている結合係数を用いて、内部変数に属する状態変数と当該状態変数に対応する局所場の更新とを行う。更新の方法は、内部変数の状態変数をランダム選択またはインデックス順に選択するシリアル選択MCMC法でもよい。グラフG10は、時間に対して内部メモリ部221に読み込まれる係数行の行インデックスの変化の一例を示す。グラフG10の横軸は時間である。グラフG10の縦軸は、行インデックスを示す。系列G11は、内部変数のインデックスを、シリアル選択MCMC法により順番に選択して試行を行う例を示す。例えば、制御部223は、内部変数処理部222aで内部変数の全てのインデックスを一回巡ると、内部変数のインデックスを更新し、次の係数行を内部メモリ部221に読み込む。内部変数処理部222aは、更新後の内部変数のインデックスの最初から順番にシリアル選択MCMC法による試行を行う。
【0156】
なお、系列G12は、全インデックス1~Nを対象とした通常のシリアル選択MCMC法を行う比較例である。系列G12は、時間変化と共に単純に1~Nのインデックスを順に巡ることを示す。
【0157】
また、内部変数処理部222aは、内部変数におけるm個の状態変数を対象とする、Rejection-Free MCMC法による並列試行を行ってもよい。Rejection-Free MCMC法によれば、並列試行の1回の実行により、m個の状態変数の何れか1つの値が更新される。また、内部変数処理部222aは、当該並列試行において、PNS RF法を用いてもよい。例えば、内部変数処理部222aは、
図8で例示した並列試行実行部300を有してもよい。
【0158】
図19は、内部変数更新の第2の例を示す図である。
グラフG20は、時間に対して内部メモリ部221に読み込まれる係数行の行インデックスの変化の一例を示す。グラフG20の横軸は時間である。グラフG20の縦軸は、行インデックスを示す。まず、制御部223は、最初のm行の係数行で内部メモリ部221を初期化してから内部変数処理部222aによる探索を開始させ、定期的に内部変数のインデックスをo個ずつ更新する。oは2以上の整数である。この場合、内部メモリ部221および内部メモリ部226の係数行はo行ずつ更新される。行インデックスは、Nによる剰余を取ることで巡回する。
【0159】
また、制御部223は、内部変数のインデックスの更新を、追加される次のo行分の結合係数の読み込みが完了してから行う。制御部223は、次のo行分の結合係数を先読みできる。例えば、制御部223は、内部変数処理部222aが、内部変数に属する状態変数に対して複数回の試行を行う時間が、DRAM210から内部メモリ部221への次のo行分の結合係数の読み込み時間よりも長い時間になるように制御する。
【0160】
系列G21は、内部変数のインデックスを、シリアル選択MCMC法により順番に選択して試行を行う例を示す。例えば、制御部223は、内部変数処理部222aで内部変数の全てのインデックスを複数回巡ってから、内部変数のインデックスを更新してもよい。
【0161】
図20は、内部変数更新の第3の例を示す図である。
グラフG30は、時間に対して内部メモリ部221に読み込まれる係数行の行インデックスの変化の一例を示す。グラフG30の横軸は時間である。グラフG30の縦軸は、行インデックスを示す。
【0162】
内部変数処理部222aは、初期化により内部メモリ部221を空にしておき、係数行の内部メモリ部221への読み込みに応じて内部メモリ部221に読み込まれた係数行に基づく試行を開始してもよい。この場合、最初は内部メモリ部221が空の状態で、内部変数にo個ずつ状態変数を追加して当該状態変数に対する試行を開始し、内部変数がm個になった段階で、内部変数のサイズと内部メモリ部221における結合係数のサイズが保たれる。内部変数における状態変数の数がmになるまで、内部変数の削除は行われない。
【0163】
このようにすると、
図19の例に比べて、内部メモリ部221へ最初のm行分の係数行が格納されるまでの待ち時間が省略され、求解が一層高速化される。なお、
図18~
図20の内部変数更新の例は、第3の実施の形態だけでなく、第2の実施の形態にも適用される。
【0164】
また、上記のように、制御部223は、内部変数のインデックスをo個ずつ、すなわち、複数個ずつ更新してもよい。この場合、内部メモリ部221の係数行もo行ずつ、すなわち、複数行ずつ更新される。そこで、複数行更新の処理手順を説明する。
【0165】
図21は、複数行更新の例を示すフローチャートである。
(S20)制御部223は、行数カウンタを初期化する。行数カウンタは、DRAM210から内部メモリ部221への係数行の読み込み回数をカウントするためのカウンタである。また、制御部223は、行数カウンタの最大値pを設定する。
【0166】
(S21)制御部223は、内部変数のインデックスを更新する際に、複数行対象処理を起動する。一例では、制御部223は、係数データストリーム発生部225を制御して、今回の更新後の内部変数のインデックスが1+o~m+oの場合に、次回の行インデックスm+o+1~m+2oのo行分の係数行をDRAM210から先読みする。当該先読みは、
図7のフローチャートのステップS12に相当する。また、グローバル変数処理部222bは、内部変数から除外するo個の状態変数に関して、グローバル変数におけるo個の状態変数の値および局所場と他の状態変数の局所場との更新を行う。更に、内部変数処理部222aは、内部変数に追加する状態変数に関して、当該状態変数の局所場の更新を行う。ステップS21におけるグローバル変数および内部変数の更新は、
図7のフローチャートのステップS13の係数行更新に含まれる。
【0167】
(S22)制御部223は、行数カウンタ値がpより大きいか否かを判定する。行数カウンタ値>pの場合、制御部223は、今回の全ての行インデックスに対する巡回を終了し、次の巡回に移る。行数カウンタ値≦pの場合、ステップS23に処理が進む。
【0168】
(S23)制御部223は、行数カウンタをインクリメントする。そして、ステップS21に処理が進む。
なお、行数oは、問題に対応する状態変数の数Nと内部メモリ部221の容量の関係で決まるため問題依存がある。このため、ステップS20では、制御部223は、必要メモリ量から最大値pを計算してもよいし、外部から入力される適切な値を最大値pに設定してもよい。
【0169】
図22は、タイミングチャートの例を示す図である。
タイミングチャート40は、第3の実施の形態の演算装置220のタイミングチャートの例である。タイミングチャート40の横軸は時間を示す。タイミングチャート40は、クロックCLK、内部メモリに保存する係数行、内部メモリから抜ける係数行、内部変数局所場調整、PNSおよびグローバル変数局所場更新の項目を含む。
【0170】
クロックCLKの項目は、演算装置220のクロック信号を示す。内部メモリに保存する係数行の項目は、内部メモリ部221に新たに保存される係数行を示す。内部メモリから抜ける係数行の項目は、内部メモリ部221から除去される係数行を示す。内部変数局所場調整の項目は、式(9)または式(10)に基づく局所場hi
*の調整を示す。PNSの項目は、内部変数処理部222aにより実行されるPNS RF法を示す。ただし、前述のように、内部変数処理部222aはシリアル選択MCMC法を実行してもよい。グローバル変数局所場更新の項目は、内部変数から抜けた状態変数xiに応じた局所場h1~hNの更新を示す。
【0171】
ここで、タイミングチャート40に示される時刻t1~t10について、t1からt10へ向かう方向が時間の正方向である。例えば、時刻t1に、演算装置220は、DRAM210から内部メモリ部221に新たな係数行を読み込む。新たな係数行を読み込むと、時刻t2に、演算装置220は、内部変数局所場調整を開始する。
【0172】
また、時刻t3に、演算装置220は、内部メモリ部221から係数行の除去を行う。係数行の除去を行うと、時刻t4に、演算装置220は、グローバル変数局所場更新を開始する。
【0173】
その後、内部変数局所場調整が完了すると、時刻t5に、演算装置220はPNSを開始する。演算装置220はPNSとグローバル変数局所場更新とを並列に実行する。例えば、演算装置220は、時刻t6にPNSとグローバル変数局所場更新とを完了する。ただし、PNSとグローバル変数局所場更新との完了タイミングは異なってもよい。
【0174】
PNSとグローバル変数局所場更新とが完了すると、時刻t7に、演算装置220は、DRAM210から内部メモリ部221に新たな係数行を読み込む。新たな係数行を読み込むと、時刻t8に、演算装置220は、内部変数局所場調整を開始する。
【0175】
また、時刻t9に、演算装置220は、内部メモリ部221から係数行の除去を行う。図示を省略しているが、係数行の除去を行うと、演算装置220は、グローバル変数局所場更新を開始する。更に、内部変数局所場調整が完了すると、時刻t10に、演算装置220はPNSを開始する。以降、演算装置220は同様の手順を繰り返し行う。
【0176】
なお、内部メモリ部221に対する次回のPNSで用いられる結合係数は、前述のように今回のPNSが行われている間にDRAM210から先読みされてもよい。
図23は、演算装置の変形例を示す図である。
【0177】
図11のグローバル変数記憶部222b1は、DRAM210に設けられてもよい。この場合、演算装置220は、グローバル変数処理部222bに代えて、グローバル変数更新部222cおよび読み取り部225aを有する。
【0178】
読み取り部225aは、係数データストリーム発生部225の機能に加えて、内部変数に追加される状態変数の値および局所場の値を内部変数処理部222aに供給する。それとともに、読み取り部225aは、内部変数から除去される状態変数xi
*に対応する状態変数xiの値をDRAM210から読み出してグローバル変数更新部222cに供給する。
【0179】
グローバル変数更新部222cは、内部変数から除去された状態変数xi
*とDRAM210から読み出された状態変数xiとの差Δxiに応じて、内部メモリ部226に保持される結合係数に基づき、DRAM210に保持される局所場h1~hNを更新する。また、グローバル変数更新部222cは、Δxiを基に、DRAM210に保持されるxiを更新する。
【0180】
このように、演算装置220は、グローバル変数をDRAM210に保持させてもよい。これにより、演算装置220において、グローバル変数を保持する記憶領域、すなわち、グローバル変数記憶部222b1を省略できる。
【0181】
以上で説明したように、演算装置220は、DRAM210から読み出されて内部メモリ部221に記憶された結合係数を複数回の試行に利用しつつ、試行対象部分を変更して複数の状態変数の全体を試行対象とする。これにより、演算装置220は、DRAM210に対するアクセス頻度を低減できる。このため、DRAM210へのアクセスに起因する処理速度の低下を抑えられる。その結果、結合係数全体のサイズが比較的大きい大規模問題に対する求解の高速化を図れる。また、第3の実施の形態の例では、結合係数全体のサイズN2に対して、内部メモリ部221に要求されるメモリ容量をm2に削減できる。メモリ容量の削減率はm2/N2である。第3の実施の形態では、第2の実施の形態よりも、内部メモリ部221のメモリ容量を削減できる。また、第3の実施の形態では、第2の実施の形態に比べて、内部変数以外の局所場更新のオーバーヘッドを1/rに削減できる。
【0182】
第2,第3の実施の形態で例示したように、演算装置220は、例えば次の機能を有する。演算装置220は、複数の状態変数と、複数の状態変数における状態変数の複数のペアに対応する複数の結合係数とを含む、イジングモデルのエネルギー関数に基づいて組合せ最適化問題の解を探索する。演算装置220は、内部メモリ部221と探索部222と制御部223とを有する。内部メモリ部221は、DRAM210に保持される結合係数の全体のうちの一部を記憶する。制御部223は、複数の状態変数のうち、試行対象とする複数の第1状態変数を含む部分である試行対象部分に属する第1状態変数の複数の第1ペアに対応する複数の第1結合係数を、DRAM210から読み出して内部メモリ部221に格納する。探索部222は、内部メモリ部221に記憶された複数の第1結合係数を用いて、試行対象部分に属する何れかの第1状態変数の値の更新を行うか否かの試行を複数回実行する。制御部223は、試行対象部分の変更と、DRAM210から内部メモリ部221への第1結合係数の読み込みおよび第1結合係数を用いた探索部222による複数回の試行を含む処理とを繰り返し行うことで、複数の状態変数の全体を試行の対象とする。
【0183】
これにより、演算装置220は、DRAM210に対するアクセス頻度を低減でき、大規模問題に対する求解の高速化を図れる。すなわち、演算装置220は、内部メモリ部221の複数の第1結合係数を複数回の試行に使用することで、試行頻度を内部メモリ部221への結合係数の読み込み頻度より高くし、大規模問題に対する求解の高速化を図れる。探索部222と制御部223とを含むFPGAやGPUなどの演算回路は、第1の実施の形態の処理部12の一例である。内部メモリ部221は、第1の実施の形態の記憶部11の一例である。
【0184】
また、処理部12は、例えばCPU101などの演算回路により実現されてもよい。例えば、記憶部11は、CPU101のキャッシュメモリにより実現されてもよい。この場合、RAM102は、記憶装置20の一例でもよい。このように、処理部12および演算装置220それぞれは、FPGAやGPUなどのコプロセッサにより実現されてもよいし、CPU101などのプロセッサにより実現されてもよい。
【0185】
なお、試行対象部分に属する複数の第1状態変数のインデックスは連続でもよいし、不連続でもよい。また、前回の試行対象部分と今回の試行対象部分との差分の状態変数の数は1つでもよいし、複数でもよい。例えば、前回の試行対象部分と今回の試行対象部分との差分の状態変数の数は4以上でもよい。例えば、前回の試行対象部分に含まれないが今回の試行対象部分に含まれる状態変数の数は2以上でもよい。
【0186】
第2の実施の形態で例示したように、演算装置220は、変数記憶部222rを更に有してもよい。変数記憶部222rは、複数の状態変数の値と、状態変数の値の変化に応じたエネルギー関数の値の変化量の計算に用いられる、複数の状態変数に対応する複数の局所場とを記憶する。制御部223は、試行対象部分に属する複数の第1状態変数それぞれと試行対象部分に属さない複数の第2状態変数それぞれとの複数の第2ペアに対応する複数の第2結合係数を、複数の第1結合係数とともにDRAM210から読み出して内部メモリ部221に格納する。また、探索部222は、上記試行では、試行対象部分に属する第1状態変数に対応する局所場に基づいて、第1状態変数の値が変化した場合のエネルギー関数の値の変化量を計算し、変化量に応じて第1状態変数の値を更新する。探索部222は、第1状態変数の値を更新すると、更新した第1状態変数に対応する第1結合係数に基づいて、変数記憶部222rに記憶される複数の局所場のうち、試行対象部分に属する2以上の状態変数に対応する複数の第1局所場を更新する。それとともに、探索部222は、更新した第1状態変数に対応する第2結合係数に基づいて、変数記憶部222rに記憶される複数の局所場のうち、試行対象部分に属さない複数の第2状態変数に対応する複数の第2局所場を更新する。
【0187】
これにより、演算装置220は、結合係数全体のサイズN2に対して、内部メモリ部221に要求されるメモリサイズをN*mに削減できる。
また、第3の実施の形態で例示したように、演算装置220は、内部変数記憶部222a1を更に有してもよい。内部変数記憶部222a1は、試行対象部分に属する複数の第1状態変数の値と第1状態変数の値の変化に応じたエネルギー関数の値の変化量の計算に用いられる、複数の第1状態変数に対応する複数の第1局所場とを記憶する。また、演算装置220は、グローバル変数記憶部222b1にアクセス可能である。グローバル変数記憶部222b1は、複数の状態変数の値と複数の状態変数に対応する複数の第2局所場とを記憶する。グローバル変数記憶部222b1は、演算装置220に内蔵されてもよいし、演算装置220の外部、例えば、DRAM210に設けられてもよい。
【0188】
この場合、制御部223は、試行対象部分の変更では、複数の状態変数のうち、前回の試行対象部分に含まれるが今回の試行対象部分に含まれない第1差分の状態変数を抽出する。制御部223は、第1差分の状態変数と複数の他の状態変数それぞれとの複数の第2ペアに対応する複数の第2結合係数を、複数の第1結合係数とともにDRAM210から読み出して内部メモリ部226に格納する。探索部222は、内部変数記憶部222a1に記憶される第1差分の状態変数の第1の値により、グローバル変数記憶部222b1に記憶される第1差分の状態変数の第2の値を更新する。それとともに、探索部222は、第2の値の更新前後の値の差と内部メモリ部226に記憶される複数の第2結合係数とに基づいて、グローバル変数記憶部222b1に記憶される複数の第2局所場を更新する。
【0189】
更に、探索部222は、複数の状態変数のうち、前回の試行対象部分に含まれないが今回の試行対象部分に含まれる第2差分の状態変数の第3の値をグローバル変数記憶部222b1から取得して内部変数記憶部222a1に格納する。探索部222は、内部変数記憶部222a1に記憶される複数の第1状態変数それぞれの第4の値とグローバル変数記憶部222b1に記憶される複数の第1状態変数それぞれに対応する第5の値との差を求める。探索部222は、求めた差と、グローバル変数記憶部222b1に記憶される第2差分の状態変数の第2局所場と内部メモリ部221に記憶される第1結合係数とに基づいて、第2差分の状態変数の局所場を計算して内部変数記憶部222a1に格納する。第2差分の状態変数の局所場の計算は、式(9)または式(10)に基づいて行われる。
【0190】
そして、探索部222は、上記試行では、今回の試行対象部分に属する第1状態変数に対応する、内部変数記憶部222a1に記憶される第1局所場に基づいて、第1状態変数の値が変化したときのエネルギー関数の値の変化量を計算する。探索部222は、当該変化量に応じて内部変数記憶部222a1に記憶される第1状態変数の値を更新する。探索部222は、第1状態変数の値を更新すると、更新した第1状態変数に対応する第1結合係数に基づいて、内部変数記憶部222a1に記憶される複数の第1局所場を更新する。
【0191】
これにより、演算装置220は、結合係数全体のサイズN2に対して、内部メモリ部221に要求されるメモリサイズをm2に削減できる。また、演算装置220は、内部変数以外の局所場更新のオーバーヘッドを低減できる。例えば、探索部222は、内部変数処理部222aとグローバル変数処理部222bとを含んでもよいし、内部変数処理部222aとグローバル変数更新部222cを含んでもよい。なお、内部メモリ部221,226は、第1の実施の形態の記憶部11の一例である。
【0192】
探索部222は、グローバル変数記憶部222b1に記憶される複数の第2局所場の更新と、今回の試行対象部分に対する試行とを並列に実行してもよい。例えば、探索部222は、第1差分の状態変数の値の差により、グローバル変数記憶部222b1に保持される、第2差分の状態変数に対応する第2局所場を更新する。すると、探索部222は、第2差分の状態変数の更新後の当該第2局所場と内部変数記憶部222a1の情報とを用いて、式(9)または式(10)により第2差分の状態変数の新たな局所場を生成して内部変数記憶部222a1に格納し、上記試行を開始し得る。探索部222は、当該試行と並列に、グローバル変数記憶部222b1に保持される他の第2局所場の更新を実行し得る。これにより、求解が高速化される。
【0193】
制御部223は、DRAM210からの複数の第2結合係数の読み出しの際、第1差分の状態変数と第1差分の状態変数が試行対象部分に追加されたときに試行対象部分に属していた他の状態変数とのペアに対応する結合係数を読み出しの対象から除外してもよい。これにより、DRAM210からの読み出しのためのメモリバンド幅が削減される。
【0194】
制御部223は、前回の試行対象部分と今回の試行対象部分との差分の状態変数に対応する結合係数をDRAM210から読み出してもよい。また、制御部223は、前回の試行対象部分と今回の試行対象部分との重複する状態変数に対応する結合係数、すなわち、前回までにDRAM210から読み出し済の結合係数のDRAM210からの読み出しを省略してもよい。これにより、DRAM210からの読み出しが効率化され、求解が高速化される。なお、前回の試行対象部分と今回の試行対象部分との差分の状態変数は、前回の試行対象部分には属さないが、今回の試行対象部分に属する状態変数を示す。
【0195】
制御部223は、今回の試行対象部分に対する試行を行っている間に、次回の試行対象部分の状態変数に対応する結合係数をDRAM210から先読みしてもよい。これにより、DRAM210からの読み出しが効率化され、求解が高速化される。
【0196】
探索部222は、上記試行ではシリアル選択MCMC法を行ってもよい。すなわち、探索部222は、試行対象部分に属する複数の第1状態変数の中から何れかの第1状態変数をランダムまたは所定の順序で選択し、選択した第1状態変数の値を更新するか否かをエネルギー関数に基づき判定し、更新すると判定した当該第1状態変数の値を更新してもよい。または、探索部222は、Rejection-Free MCMC法を行ってもよい。すなわち、探索部222は、試行対象部分に属する複数の第1状態変数の全てを対象として値の更新が許容されるか否かをエネルギー関数に基づき並列に判定し、値の更新が許容される何れかの第1状態変数の値を更新してもよい。あるいは、探索部222は、PNS RF法を行ってもよい。すなわち、探索部222は、複数の第1状態変数から選択される所定数の第1状態変数を対象として値の更新が許容されるか否かをエネルギー関数に基づき並列に判定し、値の更新が許容される何れかの第1状態変数の値を更新してもよい。これにより、求解が効率化される。特に、PNS RF法を用いることで、同じ状態変数が連続して試行される確率を所定の値に制御できる。
【0197】
なお、第1の実施の形態の情報処理は、処理部12にプログラムを実行させることで実現されてもよい。また、第2,第3の実施の形態の情報処理は、CPU101にプログラムを実行させることで実現されてもよい。プログラムは、コンピュータ読み取り可能な記録媒体113に記録できる。
【0198】
例えば、プログラムを記録した記録媒体113を配布することで、プログラムを流通させることができる。また、プログラムを他のコンピュータに格納しておき、ネットワーク経由でプログラムを配布してもよい。コンピュータは、例えば、記録媒体113に記録されたプログラムまたは他のコンピュータから受信したプログラムを、RAM102やHDD103などの記憶装置に格納し(インストールし)、当該記憶装置からプログラムを読み込んで実行してもよい。
【符号の説明】
【0199】
10 情報処理装置
11 記憶部
12 処理部
20 記憶装置
21 結合係数行列
21a,21b,21c,21d,21e,21f 部分