MML
  • 数学プログラミング置き場
  • 数学記号記法一覧
  • 機械学習のための数学
    • 確率論
  • 機械学習・データサイエンス
    • 1. 機械学習・データサイエンス(概要)
    • 2. 機械学習
      • 2.1. 機械学習をこれから始める人へ
      • 2.2. 回帰問題
        • 2.2.1. 線形回帰の基礎
        • 2.2.2. 線形回帰モデルと正則化
        • 2.2.3. 線形基底関数モデル
          • いろいろな基底関数
        • 2.2.4. ベイズ線形回帰モデル
        • 2.2.5. カーネル回帰
        • 2.2.6. ガウス過程回帰
        • 2.2.7. 一般化線形モデル
        • 2.2.8. 一般化加法モデル
        • 2.2.9. 分位点回帰
        • 2.2.10. 3層ニューラルネットワーク
        • 2.2.11. 深層学習
        • 2.2.12. 深層学習とガウス過程
      • 分類問題
        • 線形判別分析
        • SVM
        • カーネルSVM
      • 強化学習
    • 3. データサイエンス
      • 主成分分析
      • 白色化
      • 低ランク行列近似
      • 行列補完
      • NMF
      • スパースモデリング
        • LASSO
          • FISTA
          • ADMM
        • 全状態探索法
    • 4. ニューラルネットワーク
      • CNN
      • GAN
      • VAE
      • GNN
      • word2vec
    • 5. ベイズ推論
      • 確率
      • 確率分布
      • ちょっとだけ振り返って
      • MCMC
      • ギブスサンプリング
      • 変分推論
  • 連続最適化
    • 1. Taylor展開と関数近似
    • 2. Taylorの定理と誤差の評価
    • 3. 最適化問題
    • 4. 直線探索法
      • 4.1. 最急降下法
      • 4.2. Armijo条件・Wolfe条件
      • 4.3. ニュートン法
      • 4.4. 共役勾配法
        • 4.4.1. 原始的な共役勾配法
        • 4.4.2. PRP法
        • 4.4.3. HS法
      • 4.5. 準ニュートン法
        • 4.5.1. DFP法
        • 4.5.2. BFGS法
        • 4.5.3. L-BFGS法
        • 4.5.4. Bryoden family of methods
        • 4.5.5. Broyden法
    • 5. 確率的最適化
      • 5.1. 確率的勾配降下法(SGD)
      • 5.2. 確率的準ニュートン法(SQN)
  • 行列計算
    • QR分解
    • コレスキー分解
    • 一般化コレスキー分解
    • 固有値分解
    • 一般化固有値問題
    • 特異値分解
  • その他
    • 位相限定相関法
  • カーネル法
    • カーネル法(概要)
  • Riemannian最適化
    • Riemann多様体って?
    • Riemannian最適化(概要)
    • 概説
    • 詳説
      • 解析学
      • 線形代数学(反変性・共変性・不変量)
      • テンソル解析
      • リーマン積分と微分形式
      • 位相空間論
      • 多様体論(解析幾何学)
      • Riemann多様体
  • プログラミングサイドブック
    • はじめに
    • Step 0. 勉強の仕方
      • いつ始める?どれくらい勉強する?
      • どうやって勉強する?
      • どこから手をつけたらいい?
    • Step 1. インターネットで調べる
    • Step 2. コンピュータの仕組みを学ぶ
    • Step 3. 開発環境を整える
    • Step 4. プログラミング言語を学ぶ
    • Step 5. 次のステップへ進むには
    • Step 6. 情報科学を学ぶ
  • プログラミング
    • プログラミング(概要)
    • システムの構成
    • サーバーのセットアップ
      • OSセットアップ
        • ユーザの作成
        • SSHの設定
        • ファイアウォールの設定
      • ドメインの取得と設定(Google domain)
    • Dockerによる仮想化
    • サーバーサイド(golang/gin)
    • リバースプロキシの設置(nginx)
    • SSL/TLS(Let's Encrypt)
    • フロントエンド(Elm)
    • Authentication(Firebase)
    • DB(MySQL)
    • KVS(Redis)
  • 数学勉強ノート
    • 0. 数学勉強ノート(概要)
    • 1. 第1群(基礎1)
      • 1.1. 集合
      • 1.2. ファジィ集合
      • 1.3. 論理学
      • 1.4. 位相
      • 1.5. 代数学
        • 1.5.1. 群
        • 1.5.2. 環
        • 1.5.3. 体
      • 1.6. 多様体論
    • 2. 第2群(基礎2)
      • 2.1. 線形代数学
      • 2.2. 解析学
        • 2.2.1. 常微分
        • 2.2.2. 全微分/偏微分
        • 2.2.3. 反変・共変と不変量
        • 2.2.4. リーマン積分
        • 2.2.5. 外微分
        • 2.2.6. ベクトル解析
      • 2.3. 複素解析学
      • 2.4. 圏論
      • 2.5. 測度論
      • 2.6. 確率論
    • 3. 第3群(情報科学)
      • 3.1. 情報理論
      • 3.2. 通信符号理論
      • 3.3. 暗号理論
      • 3.4. グラフ理論
    • 4. 第4群(基礎3)
      • 4.1. 位相幾何学
      • 4.2. 微分幾何学
      • 4.3. 関数解析学
      • 4.4. 偏微分方程式論
      • 4.5. 数値解析学
        • 4.5.1. 常微分方程式
        • 4.5.2. 偏微分方程式
        • 4.5.3. 固有値問題/特異値分解
      • 4.6. 数理統計学
    • 5. 第5群(物理学)
      • 5.1. 古典力学
      • 5.2. 剛体力学
      • 5.3. 流体力学
      • 5.4. 解析力学
      • 5.5. 電磁気学
      • 5.6. 相対性理論
      • 5.7. 熱力学
      • 5.8. 統計力学
      • 5.9. 量子力学
    • 6. 第6群(電気・機械工学)
      • 6.1. 電気回路学
      • 6.2. システム制御理論
    • 7. 第7群(基礎4)
      • 7.1. 情報幾何学
      • 7.2. 確率解析
  • 書籍メモ
    • 書籍メモ(概要)
  • 論文メモ
    • 論文メモ(概要)
    • 線形代数
      • The Matrix Cookbook
      • ON THE EARLY HISTORY OF THE SINGULAR VALUE DECOMPOSITION
      • The tensor rank decomposition
    • 行列分解
      • Probabilistic Matrix Factorization
      • Probabilistic Matrix Factorization with Non-random Missing Data
      • Graph Regularized Non-negative Matrix Factorization for Data Representation
      • Alternating least squares for personalized ranking
    • 連続最適化
      • Quasi-Newton Methods: Superlinear Convergence Without Line Searches for Self-Concordant Functions
    • 確率・統計
      • Statistical inference of Langevin distributionfor directional data
      • Bayesian Inference over the Stiefel Manifold via the Givens Representation
      • あとで読む(Langevin distribution)
    • Riemannian最適化
      • A Broyden Class of Quasi-Newton Methods for Riemannian Optimization
      • Riemannian stochastic quasi-Newton algorithm with variance reduction and its convergence analysis
      • Primal-Dual Optimization Algorithms over Riemannian Manifolds: an Iteration Complexity Analysis
      • Extending FISTA to Riemannian Optimization for Sparse PCA
    • RCD空間
      • On the geometry of metric measure spaces. I
      • On the geometry of metric measure spaces. II
      • Cohomology and other analyticalaspects of RCD spaces
      • Untitled
  • 雑記帳
    • 球面幾何(楕円幾何)
    • 双曲幾何
  • なんかの部屋
    • データの表現について
Powered by GitBook
On this page
  • アルゴリズム
  • 原理
  • 収束性
  • 特徴

Was this helpful?

  1. 連続最適化
  2. 4. 直線探索法
  3. 4.4. 共役勾配法

4.4.1. 原始的な共役勾配法

2020/1/8公開

Previous4.4. 共役勾配法Next4.4.2. PRP法

Last updated 5 years ago

Was this helpful?

アルゴリズム

1. 初期値x(0)∈Rnx _ {(0)} \in \mathbb{R} ^ nx(0)​∈Rnを定める(定め方は任意である)

2. 探索方向m(k)m _ {(k)}m(k)​を

m(k)=grad⁡f(x(k))+β(k)r(k)m _ {(k)}= \operatorname{grad} f (x _ {(k)}) + \beta _ {(k)} r _ {(k)}m(k)​=gradf(x(k)​)+β(k)​r(k)​

 により定める。ただし

β(k)={  0if  k=0−<r(k),Hx(k)grad⁡f(x(k))><r(k),Hx(k)r(k)>otherwise\beta _ {(k)} = \begin{cases} \quad \quad \quad \,\, 0& \quad {\rm if} \,\, k =0 \\ - \frac{\left< r _ {(k)}, H _ {x _ {(k)}} \operatorname{grad}f(x _ {(k)}) \right> }{\left< r _ {(k)}, H _ {x _ {(k)}} r _ {(k)} \right>} &\quad otherwise \end{cases}β(k)​=⎩⎨⎧​0−⟨r(k)​,Hx(k)​​r(k)​⟩⟨r(k)​,Hx(k)​​gradf(x(k)​)⟩​​ifk=0otherwise​
r(k)=m(k−1)r _ {(k)} = m _ {(k-1)}r(k)​=m(k−1)​

 である(r(0)r _ {(0)}r(0)​は未定義だが係数のβ(0)\beta _ {(0)}β(0)​が 0 なのでm(0)=grad⁡f(x(0))m _ {(0)} = \operatorname{grad} f (x _ {(0)})m(0)​=gradf(x(0)​)となる)。

3. ステップサイズα(k)>0\alpha _ {(k)} > 0α(k)​>0を定める。α(k)\alpha _ {(k)}α(k)​は通常の直線探索で決定してもよいが、

 を用いてもよい。

4. 次の更新式を用いて現在の点を更新する

5. 収束していなければ手順 2 へ戻る

原理

ニュートン法と同様に、2次近似した関数

であるから、

となることがわかる。そこで

の方向に更新することを考える。

とおける。これを (4.4.4) 式に代入すると

となるので

より

と求まる。

を用いる。

となることがわかる。ゆえに

が求まる。

収束性

共役勾配法は1次収束のアルゴリズムである。

特徴

共役勾配法の収束性は最急降下法と同じ1次収束であるが、経験的に最急降下法よりも早く収束することが知られている。

α(k)=−<m(k),grad⁡f(x(k))><m(k),Hx(k)m(k)>\alpha _ {(k)} = - \frac{\left< m _ {(k)}, \operatorname{grad} f (x _ {(k)}) \right>}{\left< m _ {(k)}, H _ {x _ {(k)}} m _ {(k)} \right>}α(k)​=−⟨m(k)​,Hx(k)​​m(k)​⟩⟨m(k)​,gradf(x(k)​)⟩​
x(k+1)=x(k)+α(k)m(k)=x(k)+α(k)(grad⁡f(x(k))+β(k)r(k))\begin{aligned} x _ {(k+1)} &= x _ {(k)} + \alpha _ {(k)} m _ {(k)} \\ &= x _ {(k)} + \alpha _ {(k)} \left( \operatorname{grad} f ( x _ {(k)} ) + \beta _ {(k)} r _ {(k)} \right) \end{aligned}x(k+1)​​=x(k)​+α(k)​m(k)​=x(k)​+α(k)​(gradf(x(k)​)+β(k)​r(k)​)​
fII(x)=f(x‾)+<grad⁡f(x‾),Δx>+<Hess⁡f(x‾)Δx,Δx>(4.4.1)f _ {\rm II} (x) = f(\overline{x}) + \left< \operatorname{grad} f(\overline{x}), \Delta x \right> + \left< \operatorname{Hess} f(\overline{x}) \Delta x, \Delta x \right> \tag{4.4.1}fII​(x)=f(x)+⟨gradf(x),Δx⟩+⟨Hessf(x)Δx,Δx⟩(4.4.1)

をxxxで微分して

∇fII(x)=grad⁡f(x‾)+Hess⁡f(x‾)Δx(4.4.2)\nabla f _ {\rm II} (x) = \operatorname{grad} f (\overline{x}) + \operatorname{Hess} f (\overline{x}) \Delta x \tag{4.4.2}∇fII​(x)=gradf(x)+Hessf(x)Δx(4.4.2)

を得る。2次近似した関数の極値は∇fII(x)=0\nabla f _ {\rm II}(x) = 0∇fII​(x)=0を満たすので

grad⁡f(x(k))+Hx(k)Δx=0(4.4.3)\operatorname{grad} f (x _ {(k)}) + H _ {x _ {(k)}} \Delta x = 0 \tag{4.4.3}gradf(x(k)​)+Hx(k)​​Δx=0(4.4.3)

となる。ここでgrad⁡f(x(k))⊥r(k)\operatorname{grad} f (x _ {(k)}) \perp r _ {(k)}gradf(x(k)​)⊥r(k)​を満たすr(k)r _ {(k)}r(k)​を選んだとして、(4.4.3) 式の両辺でr(k)r _ {(k)}r(k)​との内積をとると、左辺は

<r(k),grad⁡f(x(k))+Hx(k)Δx>=<r(k),grad⁡f(x(k))>+<r(k),Hx(k)Δx>=0+<r(k),Hx(k)Δx>=<r(k),Hx(k)Δx>\begin{aligned} \left< r _ {(k)}, \operatorname{grad} f (x _ {(k)}) + H _ {x _ {(k)}} \Delta x \right> &= \left< r _ {(k)}, \operatorname{grad} f (x _ {(k)}) \right> + \left< r _ {(k)}, H _ {x _ {(k)}} \Delta x \right> \\ &= 0 + \left< r _ {(k)}, H _ {x _ {(k)}} \Delta x \right> \\ &= \left< r _ {(k)}, H _ {x _ {(k)}} \Delta x \right> \end{aligned}⟨r(k)​,gradf(x(k)​)+Hx(k)​​Δx⟩​=⟨r(k)​,gradf(x(k)​)⟩+⟨r(k)​,Hx(k)​​Δx⟩=0+⟨r(k)​,Hx(k)​​Δx⟩=⟨r(k)​,Hx(k)​​Δx⟩​
<r(k),Hx(k)Δx>=0(4.4.4)\left< r _ {(k)}, H _ {x _ {(k)}} \Delta x \right> = 0 \tag{4.4.4}⟨r(k)​,Hx(k)​​Δx⟩=0(4.4.4)
m(k)=grad⁡f(x(k))+β(k)r(k)(4.4.5)m _ {(k)} = \operatorname{grad} f(x _ {(k)}) + \beta _ {(k)} r _ {(k)} \tag{4.4.5}m(k)​=gradf(x(k)​)+β(k)​r(k)​(4.4.5)

まずβ(k)\beta _ {(k)}β(k)​を導出する。ステップサイズをα(k)\alpha _ {(k)}α(k)​とすると

Δx=α(k)m(k)(4.4.6)\Delta x = \alpha _ {(k)} m _ {(k)} \tag{4.4.6}Δx=α(k)​m(k)​(4.4.6)
<r(k),Hx(k)(α(k)m(k))>=α(k)<r(k),Hx(k)m(k)>=0∴<r(k),Hx(k)m(k)>=0\begin{aligned} &\left< r _ {(k)}, H _ {x _ {(k)}} (\alpha _ {(k)} m _ {(k)}) \right> = \alpha _ {(k)} \left< r _ {(k)}, H _ {x _ {(k)}} m _ {(k)} \right> = 0 \\ &\therefore \left< r _ {(k)}, H _ {x _ {(k)}} m _ {(k)} \right> = 0 \end{aligned}​⟨r(k)​,Hx(k)​​(α(k)​m(k)​)⟩=α(k)​⟨r(k)​,Hx(k)​​m(k)​⟩=0∴⟨r(k)​,Hx(k)​​m(k)​⟩=0​
<r(k),Hx(k)m(k)>=<r(k),Hx(k)(grad⁡f(x(k))+β(k)r(k))>=<r(k),Hx(k)grad⁡f(x(k))>+β(k)<r(k),Hx(k)r(k)>=0\begin{aligned} \left< r _ {(k)}, H _ {x _ {(k)}} m _ {(k)} \right> &= \left< r _ {(k)}, H _ {x _ {(k)}} \left(\operatorname{grad} f (x _ {(k)}) + \beta _ {(k)} r _ {(k)} \right) \right> \\ &= \left< r _ {(k)}, H _ {x _ {(k)}} \operatorname{grad} f (x _ {(k)}) \right> + \beta _ {(k)} \left< r _ {(k)}, H _ {x _ {(k)}} r _ {(k)} \right> = 0 \end{aligned}⟨r(k)​,Hx(k)​​m(k)​⟩​=⟨r(k)​,Hx(k)​​(gradf(x(k)​)+β(k)​r(k)​)⟩=⟨r(k)​,Hx(k)​​gradf(x(k)​)⟩+β(k)​⟨r(k)​,Hx(k)​​r(k)​⟩=0​
β(k)=−<r(k),Hx(k)grad⁡f(x(k))><r(k),Hx(k)r(k)>(4.4.7)\beta _ {(k)} = - \frac{\left< r _ {(k)}, H _ {x _ {(k)}} \operatorname{grad} f (x _ {(k)}) \right>}{\left< r _ {(k)}, H _ {x _ {(k)}} r _ {(k)} \right>} \tag{4.4.7}β(k)​=−⟨r(k)​,Hx(k)​​r(k)​⟩⟨r(k)​,Hx(k)​​gradf(x(k)​)⟩​(4.4.7)

次に共役勾配方向r(k)r _ {(k)}r(k)​を求める。r(k)r _ {(k)}r(k)​はgrad⁡f(x(k))\operatorname{grad} f (x _ {(k)})gradf(x(k)​)と直交してさえいればよいので選び方には自由度があるが、ここでは古典的な

r(k)=m(k−1)(4.4.8)r _ {(k)} = m _ {(k-1)} \tag{4.4.8}r(k)​=m(k−1)​(4.4.8)

厳密直線探索を用いるとgrad⁡f(x(k))⊥r(k)\operatorname{grad} f (x _ {(k)}) \perp r _ {(k)}gradf(x(k)​)⊥r(k)​となることを示しておく。いま点x(k)x _ {(k)}x(k)​を始点としてm(k)m _ {(k)}m(k)​方向への直線探索を考えると、媒介変数tttによる関数

F(t)=f(x(k)+tm(k))(4.4.10)F(t) = f (x _ {(k)} + t m _ {(k)}) \tag{4.4.10}F(t)=f(x(k)​+tm(k)​)(4.4.10)

の極値を与えるtttを求めることになる。この関数の点x(k+1)=x(k)+tm(k)x _ {(k+1)} = x _ {(k)} + t m _ {(k)}x(k+1)​=x(k)​+tm(k)​における方向微分を考えると

dF(t)dt=<∇f(x(k+1)),dm(k)dt>(4.4.9)\frac{d F(t)}{dt} = \left< \nabla f (x _ {(k+1)}), \frac{d m _ {(k)}}{dt}\right> \tag{4.4.9}dtdF(t)​=⟨∇f(x(k+1)​),dtdm(k)​​⟩(4.4.9)

である(方向微分を (4.4.10) 式の右辺の形に分解するには微分の連鎖律を用いる)。F(t)F(t)F(t)が極値をとるときのtttをt∗t ^ \astt∗とおくと

dF(t)dt∣t=t∗=0(4.4.11)\left. \frac{d F(t)}{dt} \right| _ {t = t ^ \ast} = 0 \tag{4.4.11}dtdF(t)​​t=t∗​=0(4.4.11)

であるから、x(k+1)=x(k)+t∗m(k)x _ {(k+1)} = x _ {(k)} + t ^ \ast m _ {(k)}x(k+1)​=x(k)​+t∗m(k)​を選べば、(4.4.10), (4.4.11) 式より

<∇f(x(k+1)),dm(k)dt>=0(4.4.12)\left< \nabla f (x _ {(k+1)}), \frac{d m _ {(k)}}{dt}\right> = 0 \tag{4.4.12}⟨∇f(x(k+1)​),dtdm(k)​​⟩=0(4.4.12)

となる。また、直線探索なのでdm(k)dt∥m(k)\frac{d m _ {(k)}}{dt} \parallel m _ {(k)}dtdm(k)​​∥m(k)​だから、(4.4.12) 式と定数c≠0c \neq 0c=0を用いて

<∇f(x(k+1)),dm(k)dt>=<∇f(x(k+1)),cm(k)>=c<∇f(x(k+1)),m(k)>=0(4.4.13) \left< \nabla f (x _ {(k+1)}), \frac{d m _ {(k)}}{dt}\right> = \left< \nabla f (x _ {(k+1)}), c m _ {(k)} \right> = c \left< \nabla f (x _ {(k+1)}), m _ {(k)} \right> = 0\tag{4.4.13}⟨∇f(x(k+1)​),dtdm(k)​​⟩=⟨∇f(x(k+1)​),cm(k)​⟩=c⟨∇f(x(k+1)​),m(k)​⟩=0(4.4.13)
<∇f(x(k+1)),m(k)>=0⇒∇f(x(k+1))⊥m(k)(4.4.14)\begin{aligned} \left< \nabla f (x _ {(k+1)}), m _ {(k)} \right> = 0 \\ \Rightarrow \nabla f (x _ {(k+1)}) \perp m _ {(k)} \end{aligned} \tag{4.4.14}⟨∇f(x(k+1)​),m(k)​⟩=0⇒∇f(x(k+1)​)⊥m(k)​​(4.4.14)

となる。したがってr(k+1)=m(k)r _ {(k+1)} = m _ {(k)}r(k+1)​=m(k)​とおけば∇f(x(k+1))⊥r(k+1)\nabla f (x _ {(k+1)}) \perp r _ {(k+1)}∇f(x(k+1)​)⊥r(k+1)​となることがわかるので共役勾配方向r(k)r _ {(k)}r(k)​が得られたことになる。

残る未知数はステップサイズα(k)\alpha _ {(k)}α(k)​であるが、(4.4.8) 式、すなわちr(k)=m(k−1)r _ {(k)} = m _ {(k-1)}r(k)​=m(k−1)​の正当性を保証しているのは厳密直線探索を行っていることであるから、(4.4.10), (4.4.11) 式のあたりの議論からα(k)=t∗\alpha _ {(k)} = t ^ \astα(k)​=t∗とすればよいことがわかる。

t∗t ^ \astt∗を厳密に求めるのは難しいので、これをどう求めるかもアルゴリズムの構成の自由度となる。もっとも簡単な方法は目的関数を2次近似した極値へ到達するα(k)\alpha _ {(k)}α(k)​を求める方法で、 (4.4.3) 式に (4.4.6) 式を代入して

grad⁡f(x(k))+Hx(k)(α(k)m(k))=0∴  α(k)⋅Hx(k)m(k)=−grad⁡f(x(k))\begin{aligned} &\operatorname{grad} f (x _ {(k)}) + H _ {x _ {(k)}} (\alpha _ {(k)} m _ {(k)}) = 0 \\ &\therefore \,\, \alpha _ {(k)} \cdot H _ {x _ {(k)}} m _ {(k)} = - \operatorname{grad} f (x _ {(k)}) \end{aligned}​gradf(x(k)​)+Hx(k)​​(α(k)​m(k)​)=0∴α(k)​⋅Hx(k)​​m(k)​=−gradf(x(k)​)​

となることから、両辺でm(k)m _ {(k)}m(k)​との内積をとって

α(k)<m(k),Hx(k)m(k)>=−<m(k),grad⁡f(x(k))>∴α(k)=−<m(k),grad⁡f(x(k))><m(k),Hx(k)m(k)>(4.4.15)\begin{aligned} &\alpha _ {(k)} \left< m _ {(k)}, H _ {x _ {(k)}} m _ {(k)} \right> = - \left< m _ {(k)}, \operatorname{grad} f (x _ {(k)}) \right> \\ &\therefore \alpha _ {(k)} = - \frac{\left< m _ {(k)}, \operatorname{grad} f (x _ {(k)}) \right>}{\left< m _ {(k)}, H _ {x _ {(k)}} m _ {(k)} \right>} \end{aligned} \tag{4.4.15}​α(k)​⟨m(k)​,Hx(k)​​m(k)​⟩=−⟨m(k)​,gradf(x(k)​)⟩∴α(k)​=−⟨m(k)​,Hx(k)​​m(k)​⟩⟨m(k)​,gradf(x(k)​)⟩​​(4.4.15)

原始的な共役勾配法でも Hesse 行列の逆行列の計算は回避できるが、Hesse 行列自体はまだβk\beta ^ kβkを求める際の更新式に現れている。現代では Hesse 行列自体の計算も回避するようなバリエーションが提案されており、それが次に解説するような PRP 法や HS 法である。