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.
1 de 50

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

26

Compartilhar

Baixar para ler offline

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

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 呼ばれる −1 A11 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

×