Upgrade to Pro
— share decks privately, control downloads, hide ads and more …
Speaker Deck
Features
Speaker Deck
PRO
Sign in
Sign up for free
Search
Search
モンテカルロ法(1) マルコフ連鎖モンテカルロ法 / Simulation 02
Search
kaityo256
PRO
April 17, 2023
Education
0
770
モンテカルロ法(1) マルコフ連鎖モンテカルロ法 / Simulation 02
シミュレーション工学
kaityo256
PRO
April 17, 2023
Tweet
Share
More Decks by kaityo256
See All by kaityo256
デバッグの話 / Debugging for Beginners
kaityo256
PRO
9
920
ビット演算の話 / Let's play with bit operations
kaityo256
PRO
4
240
GNU Makeの使い方 / How to use GNU Make
kaityo256
PRO
15
4.9k
制限ボルツマンマシンの話 / Introduction of RBM
kaityo256
PRO
3
830
論文の読み方 / How to survey
kaityo256
PRO
220
160k
リンゴゲームと貧富の差 / Origin of the disparity of wealth
kaityo256
PRO
14
14k
渡辺研Slackの使い方 / Slack Local Rule
kaityo256
PRO
9
8.5k
時間の矢について / Time's arrow
kaityo256
PRO
12
17k
t-SNEをざっくりと理解 / Overview of t-SNE
kaityo256
PRO
2
1.3k
Other Decks in Education
See All in Education
Ch2_-_Partie_2.pdf
bernhardsvt
0
110
1113
cbtlibrary
0
260
CompTIA Security+ SY0-601 Resumo
mariliarochas
2
2.6k
HCI Research Methods - Lecture 7 - Human-Computer Interaction (1023841ANR)
signer
PRO
0
710
week15@tcue2024
nonxxxizm
0
570
ACT FAST 20240830
japanstrokeassociation
0
320
HCL Domino 14.0 AutoUpdate を試してみた
harunakano
0
1.7k
子どものためのプログラミング道場『CoderDojo』〜法人提携例〜 / Partnership with CoderDojo Japan
coderdojojapan
4
14k
Web Application Frameworks - Lecture 4 - Web Technologies (1019888BNR)
signer
PRO
0
2.6k
Zoom-ohjeet
matleenalaakso
7
7.2k
RSJ2024学術ランチョンセミナー「若手・中堅による国際化リーダーシップに向けて」資料 (河原塚)
haraduka
0
220
LLMs for Social Simulation: Progress, Opportunities and Challenges
wingnus
1
100
Featured
See All Featured
Cheating the UX When There Is Nothing More to Optimize - PixelPioneers
stephaniewalter
280
13k
What's new in Ruby 2.0
geeforr
343
31k
Done Done
chrislema
181
16k
How GitHub (no longer) Works
holman
310
140k
Mobile First: as difficult as doing things right
swwweet
222
8.9k
Gamification - CAS2011
davidbonilla
80
5k
Performance Is Good for Brains [We Love Speed 2024]
tammyeverts
6
410
Building an army of robots
kneath
302
43k
Large-scale JavaScript Application Architecture
addyosmani
510
110k
GraphQLの誤解/rethinking-graphql
sonatard
67
10k
The Power of CSS Pseudo Elements
geoffreycrofte
73
5.3k
Designing for Performance
lara
604
68k
Transcript
1 56 モンテカルロ法(1) 基礎的な話題 シミュレーション工学 慶應義塾大学大学院理工学研究科基礎理工学専攻物理情報専修 渡辺宙志
2 56 モンテカルロ法とは 乱数を使った数値計算手法の総称 多くの場合「マルコフ連鎖モンテカルロ法」のこと 実装は比較的容易だが、原理の理解は難しい 本講義の目的 モンテカルロ法の用語の意味を理解する → 特に「重み」について学ぶ
マルコフ連鎖モンテカルロ法の手続きについて理解する →「なぜマルコフ連鎖モンテカルロ法が必要か」を理解する
3 56 ランダムな数のこと 例えばサイコロを振った時に出る目は乱数 直感的な理解 真面目な定義 過去の数列𝑥1 , 𝑥2 ,
⋯ , 𝑥𝑛 から、次の数𝑥𝑛+1 が予想でき ない数列を乱数列と呼び、その要素を乱数と呼ぶ
4 56 疑似乱数(Pseudo Random Number)とは、履歴か ら決定論的に次の数字が決められている乱数 疑似乱数を生成するアルゴリズムと履歴がわかれ ば、原理的には「次の数」を予想可能 計算機で用いられる乱数は、ほぼ疑似乱数
5 56 線形合同法 「一つ前」しか見ない 簡単・高速だが、乱数の性質は悪い メルセンヌ・ツイスタ法 乱数の性質が非常に良い 多くの乱数ライブラリのデファクト・スタンダード Xorshift法 x
^= (x << 13 & 0xFFFFFFFF) x ^= (x >> 17 & 0xFFFFFFFF) x ^= (x << 5 & 0xFFFFFFFF) 乱数の性質が比較的良い 非常に高速
6 56 真乱数 • 過去の履歴から次の数が原理的に予測不可能 • 熱雑音や放射性物質の崩壊など、物理現象を利用して 真乱数を生成する装置を物理乱数生成器という ※ サイコロも物理乱数生成器の一種
疑似乱数 • 原理的に予測可能 • 十分な履歴があれば、次の数が予想可能 • 同じ乱数の種から必ず同じ乱数列を得る • 数値計算では以下の性質が重要 • 十分に周期が長い(無相関性) • 出現する数に偏りがない(一様性) • 数値計算では予測可能性は重視されない
7 56 import random for _ in range(5): print(random.random()) $
python3 rand.py 0.7183142085184294 0.625356371754038 0.8206028825940407 0.5122008096362916 0.7253633754087734 $ python3 rand.py 0.3618195051209263 0.7496549080606681 0.3396919019733251 0.9722928645993307 0.3532634875426808 実行するたびに異なる乱数列を得る Pythonでは、種を指定しないと 種として「現在時刻」が用いられる
8 56 import random random.seed(1) for _ in range(5): print(random.random())
乱数の「種」を指定 $ python3 rand.py 0.13436424411240122 0.8474337369372327 0.763774618976614 0.2550690257394217 0.49543508709194095 $ pyton3 rand.py 0.13436424411240122 0.8474337369372327 0.763774618976614 0.2550690257394217 0.49543508709194095 毎回同じ乱数列が得られる
9 56 #include <iostream> #include <random> int main() { std::mt19937
mt; std::uniform_real_distribution<> ud(0.0, 1.0); for (int i = 0; i < 5; i++) { std::cout << ud(mt) << std::endl; } } $ g++ rand.cpp $ ./a.out 0.135477 0.835009 0.968868 0.221034 0.308167 毎回同じ結果を得る C++では、種を指定しないと デフォルトの「種」が指定される
10 56 • 乱数列とは、履歴から次の数が予測不可能な数列 • 疑似乱数とは、履歴から次の数が生成されている数列 →本質的には予測可能 疑似乱数と乱数の種 真乱数と疑似乱数 •
疑似乱数は同じ履歴から同じ数列を得る • 乱数には「種」を与えることができる • 同じ「種」から同じ乱数列を得る • 分布が一様であり、相関が十分に小さければ、 予測可能性は重視されない ※ むしろ、同じ種から同じ乱数列を得るのはデバッグで重要
11 56 モンテカルロ法(Monte Carlo Method)とは 乱数を用いるシミュレーション手法 ※ カジノで有名なモナコのモンテカルロに由来する 数値計算では、期待値や積分を近似的に求めるのに使われる ことが多い
12 56 import random trial = 100000 n = 0
for _ in range(trial): x = random.random() y = random.random() if x**2 + y**2 < 1.0: n += 1 print(n/trial*4.0) 円周率を求めるプログラム 一辺1の正方形の領域に点をランダムにばらまく を満たす確率は
13 56 0 1 න 0 1 Θ 1
− 𝑥2 − 𝑦2 ⅆ𝑥 ⅆ𝑦 = 𝜋 4 Θ x = ቊ 1 𝑥 > 0 0 𝑥 < 0 先ほどのコードは以下の積分を実行していることに対応 • モンテカルロ法は「式は書けるが厳密な評価は難 しい和や積分」のサンプリング評価に使われる • 和や積分に表れる引数を一様にサンプリングする ことを単純サンプリングと呼ぶ
14 56 これから「当たり前」の議論が延々続きますが、 後で必要になるのでちゃんとついてきてください
15 56 公平なサイコロの目の期待値は? 状態kの値を𝑌𝑘 とする 状態kが出現する確率を𝑝𝑘 とする 状態は全部で6個 𝑌1 =
1, 𝑌2 = 2, 𝑌3 = 3, 𝑌4 = 4, 𝑌5 = 5, 𝑌6 = 6 期待値を ത 𝑋とすると ത 𝑋 = 𝑘=1 6 𝑌𝑘 𝑝𝑘 = 𝑘=1 6 𝑘𝑝𝑘 公平なサイコロなら𝑝𝑘 = 1/6だから ത 𝑋 = 𝑘=1 6 𝑘 6 = 3.5
16 56 もし𝑝𝑘 を事前に知らなかったら?→ 多数回の試行により𝑝𝑘 を推定する サイコロを𝑁回振って、𝑘が出た回数を𝑤𝑘 とする 𝑁 =
𝑘 𝑤𝑘 𝑘が出る確率𝑝𝑘 は𝑤𝑘 に比例するので 𝑝𝑘 ∼ 𝑤𝑘 𝑁 サイコロの目の期待値は ത 𝑋 = 𝑘=1 6 𝑘𝑝𝑘 ∼ 𝑘=1 6 𝑘 𝑤𝑘 𝑁 𝑤𝑘 を状態kの重みと呼ぶ
17 56 サイコロを何度も振り、i番目に出た目を 𝑋𝑖 とする 𝑤𝑘 = 𝑖=1
𝑁 𝛿 𝑋𝑖,𝑘 𝛿𝑥,𝑦 = ቊ 1 (𝑥 = 𝑦) 0 (𝑥 ≠ 𝑦) クロネッカーのデルタ kが出た回数 ത 𝑋 = 𝑘=1 6 𝑘𝑝𝑘 ∼ 𝑘=1 6 𝑘 𝑤𝑘 𝑁 = 1 𝑁 𝑘=1 6 𝑘 𝑖 𝑁 𝛿 𝑋𝑖,𝑘 代入 𝑘𝛿 𝑋𝑖,𝑘 = ൝ 𝑘 ( 𝑋𝑘 = 𝑘) 0 ( 𝑋𝑘 ≠ 𝑘) であるから和を入れ替えてkについて先に和をとると ത 𝑋 ∼ 1 𝑁 𝑖 𝑁 𝑋𝑖 ←サイコロを何度も振って算術平均をとる
18 56 数値計算では重み𝑤𝑘 は既知だが、確率𝑝𝑘 が未知である ことが多いが、その状態で期待値を推定したい ത 𝑋 =
𝑘=1 6 𝑘𝑝𝑘 期待値を推定したい 𝑝𝑘 = 𝑤𝑘 𝑍 𝑍 = 𝑘 𝑤𝑘 重みの総和を𝑍とすると 確率は これが計算できないから これがわからない
19 56 𝑍 = 𝑘 𝑤𝑘 重みの総和が厳密に計算できない → サンプリングにより評価する
𝑤 𝑘 𝑤(𝑘) 𝑘max 𝑘min ここの面積を知りたい ※和のままでも議論できるが、積分の方がわかりやすいのでそちらで
20 56 𝑤 𝑘 𝑤( 𝑋𝑖 ) 𝑘max 𝑘min
Δ𝑘 𝑤(𝑘) 𝑘min < 𝑋𝑖 < 𝑘max を満たす一様乱数を𝑁個生成 Δ𝑘 = 𝑘max− 𝑘min 𝑁 短冊の幅 𝑍 = 𝑘 𝑤𝑘 ∼ 𝑖 𝑤 𝑋𝑖 Δk
21 56 ത 𝑋 = 𝑘=1 6 𝑘𝑝𝑘 =
σ𝑘 𝑘𝑤𝑘 σ 𝑘 𝑤𝑘 ∼ σ𝑖 𝑋𝑖 𝑤 𝑋𝑖 σ 𝑖 𝑤 𝑋𝑖 𝑘 𝑘𝑤𝑘 ∼ 𝑖 𝑋𝑖 𝑤 𝑋𝑖 Δk 同様に 以上から 以上のように、重みに関係なく状態候補をランダムに選び、 選んだあとに重みをかけて平均をとる手法を単純サンプリングと呼ぶ サイコロの場合、重みが等しいので𝑤𝑘 = 1とすると ത 𝑋 = σ𝑖 𝑋𝑖 𝑤 𝑋𝑖 σ 𝑖 𝑤 𝑋𝑖 ∼ 1 𝑁 𝑖=1 𝑁 𝑋𝑖
22 56 • 状態の重みとは出現確率に比例するもの • 状態の重みは既知だが、重みの総和が求まらないため、 状態の出現確率が未知であることが多い • 何かを調べたいとき、すべてを調べるのではなく、一部 の標本を抜き出して調べることをサンプリングと呼ぶ
• 何かの期待値を乱数を使って評価する手法をモンテカル ロ法と呼ぶ • 出現可能な状態から(重みと無関係に)一様に状態を選び、 重みをかけてから期待値を推定する方法を単純サンプリ ングと呼ぶ • 単純サンプリングはモンテカルロ法の最も簡単な例
23 56 普通のサイコロ 重複サイコロ 𝑌1 = 1, 𝑌2 = 2,
𝑌3 = 3, 𝑌4 = 4, 𝑌5 = 5, 𝑌6 = 6 𝑌1 = 1, 𝑌2 = 2, 𝑌3 = 2, 𝑌4 = 3, 𝑌5 = 3, 𝑌6 = 3 ത 𝑋 = 𝑍−1 𝑘=1 6 𝑌𝑘 𝑤𝑘 期待値 𝑍 = 𝑘 𝑤𝑘
24 56 重複サイコロ 𝑌1 = 1, 𝑌2 = 2, 𝑌3
= 2, 𝑌4 = 3, 𝑌5 = 3, 𝑌6 = 3 状態は6つあるが、値は3種類しかない →同じ値をとる状態をまとめる 値𝑗をとる状態数を𝑔𝑗 とすると ത 𝑋 = 𝑍−1 𝑘=1 6 𝑌𝑘 𝑤𝑘 𝑍 = 𝑘=1 6 𝑤𝑘 ത 𝑋 = 𝑍−1 𝑗=1 3 𝑗𝑔𝑗 𝑤𝑗 状態に関する和を 値に関する和に とりなおす 𝑍 = 𝑗=1 3 𝑤𝑗
25 56 重複サイコロは値に重複があるが、重みは全て等しい → 𝑤𝑗 ′ = 𝑔𝑗 𝑤𝑗 という新たな重みを考える
→ 値により重みが異なる「不公平なサイコロ」になる 状態𝑗 値𝑌 𝑗 重み𝑤𝑗 𝑗 = 1 𝑌1 = 1 𝑤′1 = 1 𝑗 = 2 𝑌2 = 2 𝑤′2 = 2 𝑗 = 3 𝑌3 = 3 𝑤′3 = 3 𝑗 = 1 𝑌1 = 1 𝑤1 = 1 𝑗 = 2 𝑌2 = 2 𝑤2 = 1 𝑗 = 3 𝑌3 = 2 𝑤3 = 1 𝑗 = 4 𝑌4 = 3 𝑤4 = 1 𝑗 = 5 𝑌5 = 3 𝑤5 = 1 𝑗 = 6 𝑌6 = 3 𝑤6 = 1 重複のある公平なサイコロ 重複のない 不公平なサイコロ
26 56 ത 𝑋 = 𝑍−1 𝑘=1 3 𝑘𝑤′𝑘
重複のない不公平なサイコロの期待値 c.f. 重複のある公平なサイコロの期待値 ത 𝑋 = 𝑍−1 𝑗=1 3 𝑗𝑔𝑗 𝑤𝑗 期待値を単純サンプリングで求める手続き 1. 1,2,3のいずれかの値を一様に取る確率変数 𝑋𝑖 を𝑁個生成 2. 出現した値に対応する重み𝑤( 𝑋𝑖 )をかけて和をとる(分子の推定) 3. 出現した値に対応する重みの和をとる(分母の推定) 4. 十分な和がとれたら、それらの比をとる(期待値の推定) ത 𝑋 = σ𝑘 𝑘𝑤′𝑘 σ 𝑘 𝑤′𝑘 ∼ σ𝑖 𝑋𝑖 𝑤′ 𝑋𝑖 σ 𝑖 𝑤′ 𝑋𝑖 ※ 式は公平なサイコロと同じだが、重みが一様でない例になっている
27 56 用語の整理 • 値𝑗を持つ状態の重みが𝑤𝑗 • 値𝑗を持つ状態の状態数が𝑔𝑗 である時、 • 重みの総和を𝑍
= σ𝑗 𝑔𝑗 𝑤𝑗 として • 値の期待値は ത 𝑋 = 𝑍−1 σ𝑗 𝑔𝑗 𝑤𝑗 単純サンプリングの手続き 1. 状態候補 𝑋𝑖 を無作為に(重みに無関係に一様に)多数生成 2. 出現した値に対応する重み𝑤( 𝑋𝑖 )をかけて和をとる(分子の推定) 3. 出現した値に対応する重みの和をとる(分母の推定) 4. 十分な和がとれたら、それらの比をとる(期待値の推定) ത 𝑋 = σ𝑘 𝑘𝑤′𝑘 σ 𝑘 𝑤′𝑘 ∼ σ𝑖 𝑋𝑖 𝑤′ 𝑋𝑖 σ 𝑖 𝑤′ 𝑋𝑖
28 56 Markov Chain Monte Carlo (MCMC) method • 非常に効率が良い
• バイアスがない • 数値計算における「モンテカルロ法」といえばこれ • コードは簡単だが、原理の理解は難しい(※個人の感想) • マルコフ連鎖モンテカルロ法とは何か? • なぜマルコフ連鎖が必要なのか? • 詳細釣り合い条件とは何か? • そもそも何を計算しているのか? 疑問点 これらの疑問への回答を試みる
29 56 箱の中に原子を入れてしばらく放っておく 低温なら偏る (エネルギー重視) 高温ならばらける (エントロピー重視) この相転移の様子を調べたい
30 56 原子の相互作用をモデル化 近距離で斥力 (排除体積効果) 中近距離で引力 (ファンデルワールス力) 遠距離で相互作用なし
31 56 ひとつのセルに 2つの原子は入れない 近距離で斥力 中距離で引力 遠距離で 相互作用無し -ε 隣り合うとエネルギーが
εだけ下がる 隣接していないと 相互作用なし さらに空間を離散化したモデル
32 56 ある状態のエネルギーをE、温度をTとすると、 その状態の出現確率は以下に比例する 𝑘𝐵 exp(−𝛽𝐸) ボルツマン定数 -ε exp(𝛽𝜖) 𝛽
= 1/𝑘𝐵 𝑇 逆温度 液相(左)が出現する確率は気相(右)が出現する確率の 倍 液相の出現確率の方が大きい
33 56 気相 液相 一つ一つの出現確率は高いが、 総数が少ない →エネルギー重視 →低温で支配的であろう 一つ一つの出現確率は低いが、 総数が多い
→エントロピー重視 →高温で支配的であろう エネルギーの温度依存性𝑈(𝑇)を知りたい まずは2原子系で考える
34 56 温度 エネルギー -ε 0 低温ではエネルギーの期待値は-εであろう 高温ではエネルギーの期待値は0であろう 中間の温度ではどうなっているのか? ?
35 56 状態𝑖におけるエネルギー 𝑈 𝑇 = 𝑖 𝐸𝑖 𝑝𝑖
温度𝑇におけるエネルギーの期待値 𝐸𝑖 𝑤𝑖 = exp(− 𝐸𝑖 𝑘𝑇 ) 状態𝑖が出現する重み 𝑝𝑖 = 𝑤𝑖 σ 𝑖 𝑤𝑖 状態𝑖をとる確率 これを様々な温度で計算したい
36 56 𝑈 𝑇 = 𝑖 𝐸𝑖 𝑝𝑖 「状態の和」になっていると扱いが難しい
𝑈 𝑇 = 𝐸 𝐸𝑔 𝐸 𝑝(𝐸) 「エネルギーに関する和」に取り直した • 同じエネルギーを持つ状態が多数ある • 出現確率はエネルギーにのみ依存する → 同じエネルギーを持つ状態について和をまとめる
37 56 𝑈 𝑇 = 𝐸 𝐸𝑔 𝐸 𝑝(𝐸)
エネルギーに関する和 𝑔 𝐸 エネルギー𝐸をとる状態の数(Density of State, DoE) 𝑝 𝐸 = 𝑊 𝐸 𝑍 エネルギーが𝐸である(ひとつの)状態が出現する確率 𝑊 𝐸 = exp − 𝐸 𝑘𝑇 ボルツマン重み 𝑍 = 𝑖 𝑤𝑖 = 𝐸 𝑔 𝐸 𝑊 𝐸 全ての重みの和(分配関数)
38 56 気相 液相 通り 通り 周期境界条件 V=L x Lの格子を考える
2𝑉 𝑉 𝑉 − 1 2 − 2𝑉 𝑔 −𝜖 = 2𝑉 𝑔 0 = 𝑉 𝑉 − 1 2 − 2𝑉
39 56 𝑈 𝑇 = 𝐸 𝐸𝑔 𝐸 𝑝(𝐸)
= −𝜖𝑔 −𝜖 𝑤 −𝜖 + 0𝑔 0 𝑤(0) 𝑔 −𝜖 𝑤 −𝜖 + 𝑔 0 𝑤(0) 𝑔 −𝜖 = 2𝑉 𝑔 0 = 𝑉 𝑉 − 1 2 − 2𝑉 𝑤 −𝜖 = exp 𝜖 𝑘𝑇 𝑤 0 = 1 必要なものが全てそろったので厳密に計算できる 分配関数 2原子が隣接する状態数 それ以外の状態数 2原子が隣接する状態の重み それ以外の重み
40 56 𝑤 −𝜖 = exp 𝜖 𝑘𝑇 温度はここにしか出てこない エネルギーと温度は必ずセットで出てくる
𝐾 = 𝜖 𝑘𝑇 無次元化された逆温度を導入する 高温、弱相互作用→Kが小きい 低温、強相互作用→Kが大さい 𝑈(𝐾) = −𝜖𝑉𝑒𝐾 −𝜖𝑉𝑒𝐾 + 𝑉(𝑉 − 5)/2 エネルギーの(逆)温度依存性が厳密に求まった
41 56 10x10マスに2原子の場合 液相 気相 サイズが大きくなるほど、原子が増えるほど、 「確率の入れ替わり」が急峻に→相転移 温度が低い 温度が高い 𝐾
𝐾 = 𝜖 𝑘𝑇 𝑈/𝜖
42 56 3原子の場合、取り得るエネルギーは3種類になる -2ε -ε 0 3原子ならなんとかなるが、一般のN原子系では絶望的
43 56 𝑈 𝑇 = 𝑖 𝐸𝑖 𝑝𝑖 𝑝𝑖
= 𝑤𝑖 σ 𝑖 𝑤𝑖 確率を知るには、重みの総和が必要 𝑖 𝑤𝑖 = 𝐸 𝑔 𝐸 𝑊 𝐸 ≡ 𝑍 重みの総和(分配関数)を求めるには 状態数𝑔(𝐸)が必要 • 状態𝑗からエネルギー𝐸𝑗 や重み𝑤𝑗 は計算できる • エネルギー𝐸から、そのエネルギーを持つ状態数𝑔(𝐸)はわからない • 状態数がわからないので、状態𝑖が出現する確率𝑝𝑖 もわからない • 状態の出現確率𝑝𝑖 がわからない状態で、以下の量を推定したい サンプリングによる推定
44 56 𝑈 𝑇 = 𝑘 𝐸𝑘 𝑝𝑘 ∼
σ𝑖 𝐸𝑖 𝑤𝑖 σ 𝑖 𝑤𝑖 1. V個のサイトから無作為にN個選び、そこに原子を置 いた状態をiとする 2. 状態𝑖のエネルギー𝐸𝑖 を計算する 3. エネルギーから重み𝑤𝑖 を計算する 4. 以上を繰り返しσ𝑖 𝐸𝑖 𝑤𝑖 と σ𝑖 𝑤𝑖 の比を計算する 全ての状態についての和 (厳密) ランダムに生成した状態についての和 (サンプリング)
45 56 𝐾 𝑈/𝜖 厳密解 低温で値がおかしい 10x10マスに2原子の場合 単純サンプリングの数値計算例 各温度で状態を50回生成する手続きを100サンプル平均
46 56 何が起きた? • 状態をランダムに生成すると、エネルギーが低い状態が選 ばれる確率が極めて低くなる • 温度が低い場合、ほとんどの寄与はエネルギーが低い状態 からくる •
極めて低確率で出現する状態が、極めて大きな重みを持つ → 収束に非常に多数の試行数が必要となる 状態数が少ないが 重みが大きい 状態数が多いが 重みが小さい 液相 気相 例:宝くじの期待値
47 56 単純サンプリングは、重みを無視して状態を生成していたのが問題 →重みに比例して状態を生成したい もし状態𝑖を、重み𝑤𝑖 に比例して生成できたら? 𝑝𝑖 = 𝑤𝑖 σ
𝑖 𝑤𝑖 状態𝑗の出現確率 𝑈(𝑇) ∼ 1 𝑀 𝑗 𝑀 𝐸𝑗 M回状態を生成して エネルギーを平均するだけ しかし、重みの総和は計算できない 重みの総和を計算しないまま、重みに比例して状態を生成したい マルコフ連鎖モンテカルロ法
48 56 • 単純サンプリングでは全ての状態候補の中から無作為に選んでいた • 重みの高い状態を優先的に選びたい • 重みの総和がわからないため、「全ての状態候補」から標本を選ぶ ことはできない 選ぶ状態候補を限定しよう
• 「現在の状態」から遷移できる状態を限定する • その中から「遷移先候補」を選ぶ • 「現在の状態」と「遷移先候補」の重みから、遷移確率を計算する • 遷移確率から遷移させるかどうか決める • こうして次々と状態を連鎖的に生成する 現在の状態 遷移先候補 ・・・
49 56 B 二つの状態A,Bを考える それぞれ重み𝑤 𝐴 , 𝑤(𝐵) を持っている 平衡状態における分布𝜋(𝐴)と𝜋(𝐵)が重みに比例するように遷移確率を決めたい
A 𝑃(𝐴 → 𝐵) 𝑃(𝐵 → 𝐴) 平衡状態では 𝜋 𝐴 𝑃 𝐴 → 𝐵 = 𝜋(𝐵)𝑃 𝐵 → 𝐴 Aの人口 AからBに行く割合 AからBに行く人口 BからAに行く人口 𝑤(𝐴) 𝑤(𝐵) 𝑃(𝐵 → 𝐵) 𝑃(𝐴 → 𝐴)
50 56 目的 𝜋 𝐴 ∝ 𝑤(𝐴), 𝜋 𝐵 ∝
𝑤(𝐵) となるよう に 𝑃 𝐴 → 𝐵 , 𝑃(𝐵 → 𝐴)を決める 𝜋 𝐴 𝑃 𝐴 → 𝐵 = 𝜋(𝐵)𝑃 𝐵 → 𝐴 より 𝑃 𝐴 → 𝐵 𝑃 𝐵 → 𝐴 = 𝜋 𝐵 𝜋(𝐴) = 𝑤(𝐵) 𝑤(𝐴) を満たすように決めればよい この条件が全ての遷移可能な状態間で満たされることを 詳細釣り合い条件(Detailed Balance Condition)と呼ぶ B A 𝑃(𝐴 → 𝐵) 𝑃(𝐵 → 𝐴) 𝑤𝐴 𝑤𝐵
51 56 を満たす遷移確率の決め方は一意に決まらない →適当に決める 熱浴法(heat-bath method) 𝑃 𝐴 → 𝐵
= 𝑤(𝐵) 𝑤(𝐴) + 𝑤(𝐵) , 𝑃 𝐵 → 𝐴 = 𝑤(𝐴) 𝑤(𝐴) + 𝑤(𝐵) 素直に遷移確率も重みに比例させる メトロポリス法(Metropolis method) 重みが大きい場合は必ず遷移、そうでない場合は確率的に遷移させる 𝑃 𝐴 → 𝐵 = 1, 𝑃 𝐵 → 𝐴 = 𝑤(𝐴) 𝑤(𝐵) 𝑤(𝐴) < 𝑤(𝐵) 𝑃 𝐴 → 𝐵 𝑃 𝐵 → 𝐴 = 𝜋 𝐵 𝜋(𝐴) = 𝑤(𝐵) 𝑤(𝐴) B A 𝑃(𝐴 → 𝐵) 𝑃(𝐵 → 𝐴) 𝑤𝐴 𝑤𝐵
52 56 • 適当な状態𝑥0 を決める • そこから遷移可能な状態𝑥′を適当に決める • 重み𝑤(𝑥0 )と𝑤(𝑥′)から、遷移確率を決める
• 遷移した場合は状態を更新、遷移しなかった場合は • 現在の状態のままとし、それを𝑥1 とする • 同様に𝑥𝑡 から𝑥𝑡+1 を生成する(連鎖) 十分に緩和した場合、状態𝑥の出現確率は重み𝑤 𝑥 に比例する(※) 状態𝑥から遷移可能な状態𝑦の間には、詳細釣り合いが満たされている → 状態𝑦の出現確率も𝑤 𝑦 に比例する 𝑥0 𝑥1 𝑥2 𝑥𝑡 … ※厳密に証明可能だが、今回は詳細に触れない
53 56 現在の状態𝑥𝑡 適当な原子を一つ選ぶ 適当に動かす 提案状態𝑥′ エネルギーを計算し、エネルギーから重み𝑤(𝑥′)を計算する 現在の重み𝑤 𝑥𝑡 と、提案状態の重み𝑤(𝑥′)から、遷移させるかどうか決める
遷移してもしなくても、それを次の状態𝑥𝑡+1 とする 温度が低い場合は、エネルギーの高い場合に遷移しづらくなる →エネルギーの低い状態にとどまり続ける →エネルギーの低い状態が提案される確率が高くなる →重みに比例して状態をサンプリングできる
54 56 𝐾 𝑈/𝜖 厳密解 10x10マスに2原子の場合 マルコフ連鎖モンテカルロ法の数値計算例 各温度で状態を50回生成する手続きを100サンプル平均 単純サンプリング 低温で正しく
計算できている
55 56 遷移確率が現在の状態にのみ依存し、履歴に依存しないこと t-1 t t-2 過去にどのような 履歴をたどっていても 現在の状態が 同じなら
現在の状態𝑥𝑡 提案状態𝑥′ 𝑃 𝑥 → 𝑥′ 同じ提案状態への 遷移確率は等しい
56 56 マルコフ連鎖モンテカルロ法とは何か? 重みに比例するように提案状態を生成することで 効率よくサンプリングする手法 なぜマルコフ連鎖モンテカルロ法が必要か? 状態が与えられたらエネルギーの計算は容易だが、 逆にエネルギーが与えられた時の状態数の計算が 困難だから -ε
状態からエネルギーを 求めるのは簡単 -ε ・・・ エネルギーから状態数を 求めるのは困難