O slideshow foi denunciado.
Utilizamos seu perfil e dados de atividades no LinkedIn para personalizar e exibir anúncios mais relevantes. Altere suas preferências de anúncios quando desejar.

CVIM#11 3. 最小化のための数値計算

35.597 visualizações

Publicada em

CVIM勉強会#11 1章バンドルアジャストメント 3. 最小化のための数値計算

Publicada em: Tecnologia
  • Login to see the comments

CVIM#11 3. 最小化のための数値計算

  1. 1. 第11回CV勉強会1章 バンドルアジャストメント3. 最小化のための数値計算 (勉強会後修正版) 2011-04-16 Yoshihiko Suhara @sleepy_yoshi
  2. 2. 目次• 3. 最小化のための数値計算 – 3.1 最小二乗のためのニュートン法 – 3.2 ニュートン法以外の方法 – 3.3 実装方法 – 3.4 数値計算ライブラリの利用 2
  3. 3. 3. 最小化のための数値計算 3
  4. 4. 誤差の数値最小化• 誤差関数の最小化 (最適化) – 観測データを用いて表現される誤差関数を最小化するパ ラメータを計算する• 今回の範囲では 2������������ 1 2 ������ ������ = ������������ 2 ������ – 誤差 • 二乗誤差 – パラメータ • カメラのパラメータ • 特徴点 4
  5. 5. 3.1. 最小二乗のためのニュートン法 5
  6. 6. 最小二乗法の計算• 線形最小二乗法 – 閉じた解で求まる (正規方程式)• 非線形最小二乗法 – 反復計算が必要 – ������(������+1) = ������(������) + ������������ 6
  7. 7. 3.1.1 ガウス・ニュートン法 7
  8. 8. 最急降下法• 一次微分 (一次近似) を利用する方法 ������ (������+1) = ������ ������ − ������������������(������ ������ )• 誤差関数のパラメータに関する微分がわかればよい – ただし,進む方向しかわからないので,学習率が必要 – 学習率が大きいと最適解を飛び越えてしまう可能性 E(x) 8 ������ (1) ������ (2) x
  9. 9. ニュートン法• 二次微分 (二次近似) を利用する方法 ������ (������+1) = ������ ������ − ������ −1 ������������ ������ ������ – 解の周辺での収束が早い• 二階微分の情報 (ヘッセ行列) が必要 – さらにヘッセ行列の逆行列計算も必要 E(x) 9 ������ (1) ������ (2) ������ (3) x
  10. 10. ニュートン法 (一変数の場合)• テイラー展開 (二次の項まで) 1 ′′ ������ ������ + ������������ = ������ ������ + ������ ′ ������ ������������ + ������ ������ ������������ 2 2 ′ 1 ′′ 2• ������ ������ + ������ ������ ������������ + ������ ������ ������������ 2• これを最小化する������������を求める – ������������で微分して0とおく ������ ′ ������ + ������ ′′ ������ ������������ = 0 ������ ′ ������ ������������ = − ′′ ������ ������ 10
  11. 11. ニュートン法 (多変数の場合)• 多変数の場合 ������ 1 • ������ ������ + ������������ = ������ ������ + ������ ������������ + ������������������ H������������ 2 • gはEの勾配ベクトル,Hはヘッセ行列• 右辺を������������で微分して0とおくと以下を得る ������������ = −H −1 ������ 11
  12. 12. ヘッセ行列が正定値である必要性• ヘッセ行列が正定値=二次微分が正 – 二次近似が全てのxについて凸関数になっていると いう保証 – そうでなければ,どこかで凹となる次元が発生 E(x) これはマズい 12 (������+1) ������ (������) ������ x
  13. 13. ガウス・ニュートン法 ≠ ニュートン法• ガウス・ニュートン法 ∈ ニュートン法 – ニュートン法の実現方法の一種• ガウス・ニュートン法を利用する目的 – ヘッセ行列を計算するのは大変 – 逆行列を計算してはいけない (数値計算の常識) – ヤコビ行列の積によって表現 13
  14. 14. ガウス・ニュートン法とは• ������ ≈ ������������ ������という近似を用いたニュートン法 – ������はヤコビ行列• ������ ≈ ������������ ������の精度が高くなるのは最小解付近や eの二階微分が小さい場合など (後で証明) 14
  15. 15. ヤコビ行列 ������������1 ������������1 ⋯ ������������1 ������������������ ������������• J= = ⋮ ⋱ ⋮ ������������ ������������������ ������������������ ⋯ ������������1 ������������������• ������ ≈ J ������ J ������ ������������������ 2 ������ ������������������ ������������������ ������=1 ������������ ⋯ ������=1 ������������ ������������ 1 1 ������• J ������ J = ⋮ ⋱ ⋮ ������ ������������������ ������������������ ������ ������������������ 2 ������=1 ������������ ������������ ⋯ ������=1 ������������ ������ 1 ������ 15
  16. 16. ヤコビ行列を使った表現• ������ ≡ −������ = −J ������ ������ なぜ? ������������ ������������1 ������ 1 ������������ 2 ������������ ������ ������������������• ������ = ⋮ = 2 = ������ ������������ ������������ ������������1 ������������1 1 ������������ ������������������ ������������1 ������������������ ⋯ ������1 ������������1 ������������1• JT = ⋮ ⋱ ⋮ ������ = ⋮ ������������1 ⋯ ������������������ ������������ ������������������ ������������������ 16
  17. 17. ガウス・ニュートン近似の導出• 誤差関数������を������������ で微分 ������������ ������������������ = ������������ ������������������ ������������������ ������• さらに������������ で微分 ������������ ������������������ ������������������ ������ 2 ������������ = +������������ ������������������ ������������������ ������������������ ������������������ ������������������ ������������������ ������• ������が解に近いと ������������ ≈ 0 ∀������ より ������������ ������������������ ������������������ ≈ ������������������ ������������������ ������������������ ������������������ ������ 17
  18. 18. アルゴリズム1. 適当な初期値������を設定2. パラメータ������におけるJ ������ Jおよび−J ������ ������ を計算3. JT J ������������ = −J������ ������ を解いて ������������ を算出4. 更新 ������ ← ������ + ������������5. 収束判定 – 変化量 ������������ /|������|あるいは ������������ / ������ が十分小さ いとき終了.そうでなければ2へ. 18
  19. 19. おさらい• 線形最小二乗法は閉じた解でパラメータが求 まる – そもそも反復計算がいらない• ガウス・ニュートン法は誤差関数を二乗和の 形で表現できないと利用できない• よって,ガウス・ニュートン法はまさしく非線形 最小二乗法のための方法 19
  20. 20. 3.1.2. レベンバーグ・マーカート法 20
  21. 21. レベンバーグ・マーカート法• ガウス・ニュートン法+最急降下法 – 初期は最急降下法で進み,解の近くでガウス・ ニュートン法に切り替える – ダンピングファクタ������を利用 (������ ≥ 0) • ������大: 最急降下法 • ������ = 0: ガウス・ニュートン法 – J������ J + ������I ������������ = −J������ ������• 解釈 – ������������ = − J������ J + ������I −1 J ������ ������ 21
  22. 22. ������の設定方法1. 適当な値から始める2. (21)式を解いて������������を求める3. E ������ + ������������ ≥ ������(������)の場合,������を10倍する.そ うでなければ,������を0.1倍する4. 収束しなければ2.に戻るE(x) 上ってしまったら最急降下法気味に 下がる限りはガウス・ニュートン法気味に 22 x
  23. 23. 3.2. ニュートン法以外の方法 23
  24. 24. ニュートン法以外の方法• ニュートン法の派生アルゴリズムは,標準的 に使用すべし – 準ニュートン法• ヘッセ行列の分解コストが大きい場合にのみ 共役勾配法の使用を検討すればよい• ニュートン法の計算を削減することは可能 – 後述 24
  25. 25. 補足• NLPや機械学習応用分野においては準 ニュートン法であるBFGS (L-BFGS) 法がよく使 われる – 基本的に誤差関数は凸関数であることが多い – 他には共役勾配法も有効な場合もある 25
  26. 26. 3.3. 実装方法 26
  27. 27. 3.3.1 更新量の計算 27
  28. 28. 線型方程式の計算• ニュートン法における反復では,以下の線型 方程式を効率よく計算することがカギとなる A������������ = ������• 逆行列を使えば以下の式で求まるが,計算 量,精度で問題あり ������������ = A−1 ������ – 数値計算の常識 28
  29. 29. 線型方程式の解法• 一般の行列Aに対する選択肢 – ガウスの消去法 – LU分解 – コレスキー分解 • 行列Aが対称かつ正定値の場合 29
  30. 30. LU分解とコレスキー分解• LU分解 (A = LU) ⋯ ������ ⋯ ������ A= ⋮ ������ ⋱ ⋮ ⋮ ⋱ ⋮ ⋯ ������ ⋯• コレスキー分解 (A = LLT ) ⋯ ������ ⋯ ������ ������ A= ⋮ ������ ⋱ ⋮ ⋮ ⋱ ⋮ ⋯ ������ ⋯ 30
  31. 31. コレスキー分解を用いた解法• 準備 – ������ ≡ L������ ������������ とおく – A������������ = LL������ ������������ = L������ = ������• 手順 1. Aをコレスキー分解し,Lを得る 2. L������ = ������ を������について解く • Lが三角行列なので,Lの行を上から順番に処理すれ ば計算できる 3. LT δ������ = ������をδ������について解く • 上記の逆 31
  32. 32. 補足: 前進代入と後退代入 ������1 ������2 = ������������ ������������1 ������������������−1 = ������������������ 32
  33. 33. コレスキー分解の処理• 省略 – 行列の数値計算の文献を参照• 行列の行数分だけ平方根の計算が必要 – 修正コレスキー分解 33
  34. 34. その他の方法• ガウスの消去法 – 計算量が若干大きい• 等価な線型最小二乗法を解く J������������ + ������ 2 → min. – 導出 • JT J������������ = −JT ������ • J������������ + ������ = 0 • 閉じた解で求めるために二乗 – その際のレベンバーグ・マーカート法は(23)となる • 優決定線型方程式の計算 34
  35. 35. 補足: 優決定,劣決定• 優決定 – 変数の数<方程式の数 – 解が存在しない可能性• 劣決定 – 変数の数>方程式の数 – 解は複数存在 35
  36. 36. 3.3.2 疎行列の扱い 36
  37. 37. 疎行列• バンドル調整が対象とする多くの問題ではヤ コビ行列やヘッセ行列は疎行列になる – ������������ が������������ に依存していなければ������������������ /������������������ は常に0• SFMの例 – はある画像上の像の誤差 – この画像に関連しないカメラの姿勢に依存しない – 図1.3 37
  38. 38. 疎行列の活用方法• (1) 行列の実装方法 – 非ゼロ成分だけを保存しておく – 例) Boost, Sparse BLAS – 図1.3(c) # y軸は対数スケール• (2) 得られる行列を疎行列にする – 元の行列が疎でも,計算途中で非ゼロ成分が発 生することがある (fill-in) – Aを直接コレスキー分解するよりも,PAPT を分解 する方が疎となるような置換Pを利用 • ただ,最適な置換Pを計算するのはNP 38
  39. 39. 3.3.4 パラメータの分割 39
  40. 40. Resection-intersection• SFMの未知パラメータ ������ の分割 – カメラのパラメータ ������1 – 点の空間座標 ������2• 片方を固定して交互にパラメータ探索 (1) ������1 を固定して,������������/������������2 = ������の解������2 を計算 (2) ������2 を固定して,������������/������������1 = ������の解������1 を計算• 利点 – (1), (2)いずれかが線形に行える場合,反復計算なしに解 を求めれ,残ったパラメータを反復計算して求めることが できる 40
  41. 41. ブロック分割の利用 A11 A12 ������������1 ������1 = ������ … (24) A21 A22 ������������2 2 A11 ������������1 + A12 ������������2 = ������1 A21 ������������1 + A22 ������������2 = ������2• ������������2 = ������−1 (−������21 ������������1 + ������2 ) を代入し,以下を得る 22 A11 − A12 A−1 A21 ������������1 = ������1 − A12 A−1 ������2 … (25a) 22 22 A22 ������������2 = ������2 − A21 ������������1 … (25b)• これを順に計算すれば,(24)式を直接解いた������������が得られる 41
  42. 42. 補足: シューア補行列• A11 − A12 A−1 A21 はA11 のシューア補行列と 22 呼ばれる −1A11 A12 ������11 ������12 ≡ としたとき,A21 A22 ������21 ������22• ������11 = A11 − A12 A−1 A21 となる性質がある 22 42
  43. 43. ブロック小行列を用いた逆行列の計算• ブロック分解を用いると,効率よく計算可能 A1 ⋯ ������• A22 = ⋮ ⋱ ⋮ ������ ⋯ A������ A−1 1 ⋯ ������• A−1 22 = ⋮ ⋱ ⋮ ������ ⋯ ������−1 ������ 43
  44. 44. 3.4. 数値計算ライブラリの利用 44
  45. 45. 数値計算ライブラリ• 最適化ライブラリ – MATLAB (Optimization Toolbox) • lsqnonlin関数 – Trust-region法,レベンバーグ・マーカート法,ガウス・ニュートン法 –R • optim関数 – Nelder-Mead法,BFGS法, L-BFGS-B法, CG法,SANN法• 線型代数演算ライブラリ – LAPACK• 数値計算ライブラリ – BLAS – BLAS亜種 45
  46. 46. まとめ 46
  47. 47. まとめ• 非線形最小二乗法の最適化手法の紹介 – ガウス・ニュートン法 – レベンバーグ・マーカート法• 実装方法の解説 – コレスキー分解を用いた線型方程式の計算 – 疎行列の活用方法 – パラメータ分割• 数値計算ライブラリの紹介 47
  48. 48. 感想• フリーで利用可能な最適化ライブラリはかな り充実している – けど,何をどう選択すればよいのかわからない • 解きたい問題をどう定式化するかによって利 用可能な/得意なツールは異なってくる – その勘所をつけたいなぁ• 数値計算の常識を身につけたい 48
  49. 49. 参考文献• 金谷健一.これなら分かる最適化数学.共立 出版 (2005). – ガウス・ニュートン近似やレベンバーグ・マーカー ト法の導出もあり• 伊理正夫・藤野和建.数値計算の常識.共立 出版 (1985). – 「逆行列よさようなら」 – 数値計算のノウハウが詰まっている 49
  50. 50. Thank you! 50

×