計算機実験 (講義 L6) 計算機実験 (講義 L6) 藤堂眞治 2015-06-17/24 1 最適化問題 2 乱択アルゴリズムとモンテカルロ積分 1 / 36 計算機実験 (講義 L6) 最適化問題 最適化問題 目的関数 f (x) の最小値 (あるいは最大値) とその場所を求め たい ▶ ▶ 連続最適化問題 離散最適化問題 ⇐ 難しい 真の (大局的な) 最小値 (最大値) を求めるのは難しい 一般的には極値を求めることしかできない 多次元では極小を囲い込むことができない 導関数を使う方法: 最急降下法、共役勾配法 使わない方法: 囲い込み法、Nelder-Mead の滑降シンプレッ クス法、アニーリング 2 / 36 計算機実験 (講義 L6) 最適化問題 囲い込み法 (一次元の最適化) f (a) > f (b) < f (c) を満たす 3 点の組 a < b < c の領域を狭 めていく [a, b]、[b, c] の広い方 (例えば後者) を b から見て 0.382 : 0.618 (黄金比) に内分する点を x とする ▶ ▶ f (b) > f (x) の場合: [b, c] を新しい領域にとる f (b) < f (x) の場合: [a, x] を新しい領域にとる もともとの b が [a, c] を 0.382 : 0.618 に内分する点だった場 合、新しい領域の幅は、どちらの場合も 0.618 最初の比率が黄金比からずれていたとしても、黄金比に収束 3 / 36 計算機実験 (講義 L6) 最適化問題 最初の囲い込み 1 点を選び、適当な ∆x を取る 左右に ∆x 動かしてみて、関数値が小さくなる方へ動く どちらに進んでも関数値が大きくなる場合には、囲い込み 完了 小さくなった場合、その方向へ再び増えるまで ∆x を倍々に 増やしながら進む 最後の 3 点で極小値を囲い込むことができる 4 / 36 計算機実験 (講義 L6) 最適化問題 極小値をとる x の精度 実数の有効桁数を 16 桁 (ϵ ≈ 10−16 ) とする (倍精度) 真の極小 (x0 ) のまわりでテイラー展開 1 f (x) ≈ f (x0 ) + f ′′ (x0 )(x − x0 )2 2 f ′′ (x0 )/f (x0 ) が O(1) だとすると √ |x − x0 | ∼ ϵ ∼ 10−8 以下になると、第二項の第一項に対する比が ϵ よりも小さく なる それ以上領域を狭めても、関数値は変化しない 5 / 36 計算機実験 (講義 L6) 最適化問題 最急降下法 (steepest-descent) 関数の微分の情報を使う 現在の点 x における勾配を計算 −∇f |i = − ∂f ∂xi 坂を下る方向にそって、一次元最適化 動いた先の勾配の方向でさらに最適化を繰り返す 関数値は単調減少 ⇒ 極小値に収束 6 / 36 計算機実験 (講義 L6) 最適化問題 308 細長い谷の場合 (a) (Press et al 1988) : 7 / 36 計算機実験 (講義 L6) 最適化問題 共役勾配法 (conjugate-gradient) 関数がある点のまわりで 1 f (x) ≈ c − bT x + xT Ax 2 と近似できるとする この時、x における勾配は、連立方程式 Ax = b の「残差」の 形で書ける −∇f = b − Ax 新しい勾配方向ではなく、それまでとは「共役な方向」に進 みたい 8 / 36 計算機実験 (講義 L6) 最適化問題 「共役な方向」とは あるベクトル p にそった一次元の最適化が完了したとする ▶ ▶ その点における p 方向の勾配は零。すなわち pT (∇f ) = 0 p 方向の勾配の値を変化させないようにしたい 次に、q にそって、x + ϵq と移動すると δ(∇f ) = A × (ϵq) ∼ Aq これが p に垂直であり続けるためには pT Aq = 0 この関係が成り立つ時、p と q は「互いに共役」という 9 / 36 計算機実験 (講義 L6) 最適化問題 共役勾配法 (Conjugate-gradient) 初期条件と漸化式 p0 = r0 = b − Ax0 xn+1 = xn + αn pn rn+1 = rn − αn Apn = b − Axn+1 pn+1 = rn+1 + βn pn αn = rnT rn pT n Apn βn = T r rn+1 n+1 rnT rn このように作ると、全ての i > j ≥ 1 について、自動的に T pT i Apj = 0 ri rj = 0 10 / 36 計算機実験 (講義 L6) 最適化問題 共役勾配法 (Conjugate-gradient) 残差は互いに直交 ⇒ N 回反復すると残差は零 (完全な二次 形式の場合) 残差は負の勾配で表される ⇒ A を知らなくても ri は計算可 実際には、数値誤差により、共役性・直交性がくずれる また、完全な二次形式ではない しかし、最急降下法と比較すると圧倒的に速く収束 11 / 36 計算機実験 (講義 L6) 最適化問題 逆反復法による固有ベクトルの計算 f (x) の極小解は、連立一次方程式 Ax = b の解 ▶ ▶ 連立方程式を解くのに共役勾配法を利用可 行列ベクトル積だけで計算できるので、A が疎行列の時、特 に有効 逆反復法 ▶ ▶ ▶ 近似固有値を µ とするとき、行列 (A − µI )−1 を考えると、固 有ベクトルは A と同じ、固有値は (λ − µ)−1 。 µ が十分に正確であれば、(λ − µ)−1 は絶対値最大の固有値。 行列 (A − µI )−1 を適当な初期ベクトルにかけ続けると λ に対 応する固有ベクトルに収束 (c.f. べき乗法) 実際には (A − µI )x′ = x という連立方程式を繰り返し解く 12 / 36 計算機実験 (講義 L6) 最適化問題 Nelder-Mead の滑降シンプレックス法 関数値のみ。導関数の情報を必要としない プログラミングが簡単 収束は遅いが、安定に極小値が求まる N + 1 個の頂点からなる N 次元の単体 (シンプレックス) を変 形しながら、極小値を探す ▶ ▶ 2 次元: 三角形 3 次元: 四面体 別名「アメーバ法」 13 / 36 計算機実験 (講義 L6) 最適化問題 Nelder-Mead の滑降シンプレックス法 N + 1 個の点 x0 , x1 , · · · , xN は f (x0 ) ≤ f (x1 ) ≤ · · · ≤ f (xN ) と 並べられているとする 最大値を取る点 xN を除く N 点の重心を xg とする Nelder-Mead 法では以下のステップを繰り返す ▶ ▶ ▶ ▶ xN の xg に関する対称な点と xN の関数値を比較し、小さい方 に移動 (反射) x0 の関数値よりも小さくなるようであればさらに先に進む (拡大) xN の関数値が xN−1 のものよりもまだ大きい場合には xN を xg に近づける (縮小) それでも xN の関数値が小さくならない場合、x0 以外の点を x0 に一様に近づける (収縮) 14 / 36 計算機実験 (講義 L6) 最適化問題 Nelder-Mead の滑降シンプレックス法 http://www.kniaz.net/software/RosNM.aspx 15 / 36 計算機実験 (講義 L6) 乱択アルゴリズムとモンテカルロ積分 乱択アルゴリズム (randomized algorithm) 実行中に乱数を参照してその値によって振る舞いをかえるア ルゴリズム ラスベガスアルゴリズム ▶ ▶ 乱数の出方によらず常に正しい結果を与える乱択アルゴリ ズム 平均化効果を利用するアルゴリズム:クイックソート、最小 包含円問題 モンテカルロアルゴリズム ▶ ▶ ▶ ▶ 乱数の出方によっては誤った結果を与えることがあるアルゴ リズム 標本を利用するアルゴリズム:最大カット問題 くじ引き型のアルゴリズム:素数性判定、関数の同一性、行 列積の検算 サンプリングアルゴリズム:マルコフ連鎖モンテカルロ 16 / 36 計算機実験 (講義 L6) 乱択アルゴリズムとモンテカルロ積分 乱択クイックソート 分割統治法に基づく再帰的なソートアルゴリズム ▶ ▶ 配列の中から要素を一つ選び、それより小さい要素からのみ なる集合と大きい要素のみからなる集合の 2 つに分ける それぞれの集合をソートし、結合する ほぼ同じ大きさの集合に分けることができる場合の実行ス テップ数 ∼ O(n log n) 最悪 (選んだ要素が常に最大 or 最小値) の場合のステップ数 ∼ O(n2 ) 分割に用いる要素を「ランダムに」選ぶ ⇒ 平均ステップ数 ∼ O(n log n) 17 / 36 計算機実験 (講義 L6) 乱択アルゴリズムとモンテカルロ積分 クイックソート 18 / 36 計算機実験 (講義 L6) 乱択アルゴリズムとモンテカルロ積分 最小カット問題 「最小カット (min-cut)」= 連結グラフを二つの部分に分け るために切らなければならない辺 (エッジ) の集合のうち、 もっとも小さいもの “Randomized Min-Cut Algorithm” ▶ ▶ ▶ ランダムに辺を一つ選ぶ 辺の両端の頂点を一つにつぶす (自己ループは取り除く) 残りの頂点が二つになるまで繰り返す 上の試行を何回も繰り返して、得られたうちで最小なカット を結果とする 頂点の数が n のグラフに関して、正解が得られる確率:少な 2 くとも n(n−1) 19 / 36 計算機実験 (講義 L6) 乱択アルゴリズムとモンテカルロ積分 最小カット問題 20 / 36 計算機実験 (講義 L6) 乱択アルゴリズムとモンテカルロ積分 モンテカルロ積分 円周率を与える公式 ∫ π = lim c→∞ 0 c f (x) dx 2 cosh x f (x) = スタンダードな数値積分法: 台形公式 (一次式補間), シンプ ソン公式 (二次式補間), etc カットオフ c の値 ▶ ▶ 誤差は c が大きくなると指数関数的に小さくなる 例えば c = 20 で誤差は 8.3 × 10−9 以下 21 / 36 計算機実験 (講義 L6) 乱択アルゴリズムとモンテカルロ積分 単純サンプリング [0, c] と [0, 2] の一様分布から二次元上の点 (x, y ) を M 組 生成 f (x) の下に入った数 N をカウント π ≃ 2c × 平均値 4.8 3.12 3.154 誤差 1.3 0.11 0.011 2 1.5 1 y M 100 10000 1000000 N M 0.5 0 0 1 2 3 4 5 6 x 22 / 36 計算機実験 (講義 L6) 乱択アルゴリズムとモンテカルロ積分 統計誤差の評価 このモンテカルロ積分が実際に評価している積分 { ∫ c∫ 2 1 if y < f (x) 1 θ(x, y ) dx dy θ(x, y ) = 2c 0 0 0 otherwise 統計誤差の評価 ▶ ▶ ▶ π 試行の成功確率 (success probability): q = 2c 一回の試行の平均値 (mean): µ = 2c × q = π 分散 (variance): s 2 = (2c)2 q + 02 (1 − q) − µ2 = 2cπ − π 2 = 4c 2 q(1 − q) ▶ c = 20 の時: q ≃ 0.0785 s 2 ≃ 116 23 / 36 計算機実験 (講義 L6) 乱択アルゴリズムとモンテカルロ積分 中心極限定理 (central limiting theorem) M 回の試行のうち N 回成功する確率 (π の見積もり値が m = 2cN/M となる確率) N M! p(m = 2c ) = q N (1 − q)M−N M N!(M − N)! 両辺の対数をとってスターリングの公式を使う M π 2c − π log p(m) ≃ (m log + (2c − m) log ) 2c m 2c − m m に関して平均値 π の周りで二次まで展開 M log p(m) ≃ − 2 (m − π)2 2s 分散 s 2 /M の正規分布 (中心極限定理) √ 統計誤差は M に反比例して減少 ⇒ 1 桁小さくするには 100 倍の計算が必要 24 / 36 計算機実験 (講義 L6) 乱択アルゴリズムとモンテカルロ積分 単純サンプリング (2) y に関してあらかじめ積分 [0, c] の一様乱数 x を用いて ∫ c f (x) 1 ∑ 1 p(x) dx ≃ cf (xi ) p(x) = M c 0 p(x) i 2 平均値 3.1 3.00 3.147 誤差 0.8 0.08 0.008 1.5 1 y M 100 10000 1000000 0.5 0 0 1 2 3 x 4 5 6 25 / 36 計算機実験 (講義 L6) 乱択アルゴリズムとモンテカルロ積分 誤差の評価 関数 f (x)/p(x) の分散 ∫ c( ∫ ∞ f (x) )2 2 2 s = p(x) dx − π = c f 2 (x) − π 2 = 4c − π 2 p(x) 0 0 c = 20 のとき s 2 ≃ 70.1 同じ試行回数 M の時, 誤差は √ 70.1/116 = 0.77 倍 もしくは M を 116/70.1 = 1.65 倍したのと同じ効果 積分次元は低ければ低いほど良い 26 / 36 計算機実験 (講義 L6) 乱択アルゴリズムとモンテカルロ積分 次元の呪い (curse of dimensionality) n 次元超立方体 (1 辺の長さ 2, 体積 2n) に対する n 次元単位 球の体積の割合 q= π n/2 /Γ( n2 + 1) ∼ (π/n)n/2 2n n = 10 で 0.2%, n = 20 で 10−8 , n = 100 で 10−70 モンテカルロ積分で球の体積を計算しようとすると, 標準偏 差に対する平均値の割合は指数関数的に小さい √ q √ ∼ q q(1 − q) 次元が高くなるにつれて指数関数的に大きな M が必要と なる c.f. 通常の数値積分 (台形公式等) でも同様 27 / 36 計算機実験 (講義 L6) 乱択アルゴリズムとモンテカルロ積分 重点的サンプリング (平均値が同じなら) 被積分関数の分散が小さければ小さいほ ど良い (= 統計誤差が小さい) サンプリングの分布 p(x) の形が f (x) に近い程良い f (x) の値が大きい所はより頻繁にサンプリング 重点的サンプリング (importance sampling) 28 / 36 計算機実験 (講義 L6) 乱択アルゴリズムとモンテカルロ積分 重点的サンプリング 積分への寄与が大きな箇所をより重点的にサンプリング p(x) = e −x 2 平均値 3.06 3.142 3.1412 誤差 0.06 0.006 0.0006 1.5 1 y M 100 10000 1000000 0.5 0 0 1 2 3 x 4 5 6 29 / 36 計算機実験 (講義 L6) 乱択アルゴリズムとモンテカルロ積分 誤差のサンプル数依存性 関数 f (x)/p(x) の分散 ∫ c( f (x) )2 2 s = p(x) dx − π 2 ≃ 2(2 + π) − π 2 = 0.414 p(x) 0 10 同じ試行回数 M の時, 誤差は √ 0.414/116 = 0.06 倍 random sampling (1) random sampling (2) importance sampling 1 もしくは M を 280 倍したのと同じ error 0.1 0.01 0.001 0.0001 1e-05 102 103 104 105 106 107 108 109 M 10 30 / 36 計算機実験 (講義 L6) 乱択アルゴリズムとモンテカルロ積分 理想的な重点的サンプリング? 理想的には p(x) を f (x) に比例するように取れば良い このとき f (x)/p(x) は定数 (分散 0) → 1 回のサンプリング で厳密な結果が得られる??? 実際には p(x) が確率密度となるように規格化条件から定数 c を決めておく必要あり ∫ ∫ p(x) dx = c f (x) dx = 1 c は今欲しい答そのもの! 31 / 36 計算機実験 (講義 L6) 乱択アルゴリズムとモンテカルロ積分 乱数 自然乱数 (ハードウェア乱数) ▶ さいころ, コイン, ルーレット, 核分裂反応, 熱雑音, ショット 雑音 ... モンテカルロシミュレーションにおける必要条件 ▶ ▶ ▶ ▶ 多数の乱数が必要 ポータビリティ 生成速度 再現性 擬似乱数 (pseudo random number) ▶ ▶ 計算機でプログラムに従って生成 分布の一様性, 相関, 周期に注意する必要あり 32 / 36 計算機実験 (講義 L6) 乱択アルゴリズムとモンテカルロ積分 擬似乱数発生器 最も簡単な乱数発生器:線形合同法 (linear congruential method) xn+1 = (axn + c) mod m 例) a = 65539, c = 0, m = 2147483648 (周期 m − 1) 少しだけ異なる初期値 (x0 = 1, 2, 3) から始めた場合 1 1 0.9 0.9 0.8 0.8 0.7 0.7 0.6 0.6 0.5 0.5 0.4 0.4 0.3 0.3 0.2 0.2 0.1 0.1 0 0 20 40 60 80 100 0 99900 99920 99940 99960 99980 100000 数十ステップ進むとバラバラな振舞い ⇒ カオス的 33 / 36 計算機実験 (講義 L6) 乱択アルゴリズムとモンテカルロ積分 擬似乱数生成器における相関 合同乗算法で多次元超立方体中に「ランダムに」点を打つ と、それらの点は全て比較的小数の等間隔に並んだ超平面の 上にのってしまう (多次元疎結晶構造) 1 0.9 0.8 0.7 0.6 0.5 0.4 0.3 0.2 0.1 0 0 0.1 0.2 0.3 0.4 0.5 0.6 0.7 0.8 0.9 1 計算式に従って生成するため、必ず何らかの相関は残る できる限り相関が少なく周期の長い、理想的な乱数の開発が 続けられている ▶ ▶ 現時点で最も品質が高いと考えられている乱数発生器:メル センヌ・ツイスター 周期 219937 − 1、高速、日本製! 34 / 36 計算機実験 (講義 L6) 乱択アルゴリズムとモンテカルロ積分 乱数発生器の選び方 万能乱数発生器は存在しない 生成された乱数のもつ性質について, 様々な数学的に厳密な 証明, 多くのテスト結果がすでに存在するが, 特定のシミュ レーションに使った場合の結果については何も保証してくれ ない 自分で乱数発生器を「発明」してはいけない 自分で乱数発生器をプログラムしてはいけない (既存のライ ブラリを使う) 初期化 (種の設定) を正しく行う 実際にそれらしい乱数が生成されているか, 目でみて確認 する 二種類以上の乱数発生器を使ってみて, 互いに一致する結果 が出るかどうか確認する 35 / 36 計算機実験 (講義 L6) 乱択アルゴリズムとモンテカルロ積分 実習・講義予定 実習 EX5 ▶ ▶ ▶ 特異値分解による行列の近似 最小二乗法によるフィッティング 特異な連立一次方程式 講義 L7 ▶ ▶ ▶ マルコフ連鎖モンテカルロ法 モンテカルロ法による最適化 スパコンと計算物理 実習 EX6 ▶ ▶ ▶ 最適化問題 モンテカルロ法 レポート No.3 小グループ単位での面談スケジュール ▶ 6/17 or 18 に ITC-LMS にアップロード予定 (必ず確認のこと) 36 / 36
© Copyright 2024 ExpyDoc