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. 直線探索法

4.1. 最急降下法

2020/1/6公開

アルゴリズム

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

2. 探索方向m(k)m _ {(k)}m(k)​を点x(k)x _ {(k)}x(k)​における勾配によってm(k)=−grad⁡f(x(k))m _ {(k)} = - \operatorname{grad} f (x _ {(k)})m(k)​=−gradf(x(k)​)と定める

3. ステップサイズt(k)>0t _ {(k)} > 0t(k)​>0を定める(定め方は任意である)

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

x(k+1)=x(k)+t(k)m(k)=x(k)−t(k)grad⁡f(x(k))\begin{aligned} x _ {(k+1)} &= x _ {(k)} + t _ {(k)} m _ {(k)} \\ &= x _ {(k)} - t _ {(k)} \operatorname{grad} f ( x _ {(k)} ) \end{aligned}x(k+1)​​=x(k)​+t(k)​m(k)​=x(k)​−t(k)​gradf(x(k)​)​

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

収束したかどうかの判定には小さい正の定数ε\varepsilonεなどを用いて

∥grad⁡f(x)∥<ε\| \operatorname{grad} f(x) \| < \varepsilon∥gradf(x)∥<ε

とする。大抵は10−16<ε<10−810 ^ {-16} < \varepsilon < 10 ^ {-8}10−16<ε<10−8くらいの範囲に設定する。

原理

最急降下法(steepest descent)はもっとも単純で基本的な直線探索法だが、目的関数の勾配(gradient)さえ計算できれば適用できるので汎用性が高い。

目的関数f ⁣:Rn→Rf \colon \mathbb{R} ^ n \to \mathbb{R}f:Rn→Rが定義域の全体で微分可能ならばその極値を与える点xxxでは

grad⁡f(x)=0(4.1.1)\operatorname{grad} f (x) = 0 \tag{4.1.1}gradf(x)=0(4.1.1)

が成り立つ。最小値は極値であるから、最適化問題

arg⁡min⁡x∈Rn  f(x)\underset{x \in \mathbb{R} ^ n}{\operatorname{arg} \operatorname{min}} \,\, f(x)x∈Rnargmin​f(x)

を解くには目的関数を単調減少させながら (4.1.1) 式を満たすまで更新を繰り返せば少なくとも最適解の候補には到達する(一般にf(x)f(x)f(x)が性質のよい関数でない限り真の最適解に到達するのはどんなアルゴリズムでも非常に難しいため極値で妥協する)。

現在の点x(k)∈Rnx _ {(k)} \in \mathbb{R} ^ nx(k)​∈Rnは既知であるとして、更新方向m(k)∈Rnm _ {(k)} \in \mathbb{R} ^ nm(k)​∈Rnとして妥当な方向を探す。ステップサイズはあとから定めるからm(k)m _ {(k)}m(k)​は方向の情報だけが重要であり、∥m(k)∥=1\| m _ {(k)} \| = 1∥m(k)​∥=1としてよい。目的関数f ⁣:Rn→Rf \colon \mathbb{R} ^ n \to \mathbb{R}f:Rn→Rの点x(k)x _ {(k)}x(k)​の周りで Taylor の定理(1次近似)を適用する、すなわち (2.6) 式でΔx=tm(k)  (t>0)\Delta x = t m _ {(k)} \,\,(t > 0)Δx=tm(k)​(t>0)とおくと、

f(x(k)+tm(k))=f(x(k))+<grad⁡f(x(k)),tm(k)>+o(∥tm(k)∥)=f(x(k))+t<grad⁡f(x(k)),m(k)>+o(t∥m(k)∥)=f(x(k))+t<grad⁡f(x(k)),m(k)>+o(t)(4.1.2)\begin{aligned} f(x _ {(k)} + t m _ {(k)}) &= f(x _ {(k)}) + \left< \operatorname{grad} f(x _ {(k)}), t m _ {(k)} \right> + o \left( \| t m _ {(k)} \| \right) \\ &= f(x _ {(k)}) + t \left< \operatorname{grad} f(x _ {(k)}), m _ {(k)} \right> + o \left( t \| m _ {(k)} \| \right) \\ &= f(x _ {(k)}) + t \left< \operatorname{grad} f(x _ {(k)}), m _ {(k)} \right> + o \left( t \right) \end{aligned} \tag{4.1.2}f(x(k)​+tm(k)​)​=f(x(k)​)+⟨gradf(x(k)​),tm(k)​⟩+o(∥tm(k)​∥)=f(x(k)​)+t⟨gradf(x(k)​),m(k)​⟩+o(t∥m(k)​∥)=f(x(k)​)+t⟨gradf(x(k)​),m(k)​⟩+o(t)​(4.1.2)

である。したがって、更新後の目的関数の値と更新前のそれとの差Δf\Delta fΔfは

Δf=f(x(k)+tm(k))−f(x(k))=t<grad⁡f(x(k)),m(k)>+o(t)=t(<grad⁡f(x(k)),m(k)>+o(t)t)(4.1.3)\begin{aligned} \Delta f &= f(x _ {(k)} + t m _ {(k)}) - f(x _ {(k)}) \\ &= t \left< \operatorname{grad} f(x _ {(k)}), m _ {(k)} \right> + o \left( t \right) \\ &= t \left( \left< \operatorname{grad} f(x _ {(k)}), m _ {(k)} \right> + \frac{o \left( t \right)}{t} \right) \end{aligned} \tag{4.1.3}Δf​=f(x(k)​+tm(k)​)−f(x(k)​)=t⟨gradf(x(k)​),m(k)​⟩+o(t)=t(⟨gradf(x(k)​),m(k)​⟩+to(t)​)​(4.1.3)

である。ここでo(t)o(t)o(t)の素性は (4.1.2) 式から (2.5) 式まで辿れるから、

o(t)=o(∥tm(k)∥)=h1(tm(k))∥tm(k)∥=t⋅h1(tm(k))o(t) = o (\| t m _ {(k)} \|) = h _ 1 (t m _ {(k)}) \| t m _ {(k)} \| = t \cdot h _ 1 (t m _ {(k)})o(t)=o(∥tm(k)​∥)=h1​(tm(k)​)∥tm(k)​∥=t⋅h1​(tm(k)​)

であるとわかる。したがって Taylor の定理から

lim⁡t→0o(t)t=lim⁡t→0o(t)t=lim⁡t→0t⋅h1(tm(k))t=lim⁡t→0h1(tm(k))=0\begin{aligned} \lim _ {t \to 0} \frac{o(t)}{t} &= \lim _ {t \to 0} \frac{o(t)}{t} \\ &= \lim _ {t \to 0} \frac{t \cdot h _ 1(t m _ {(k)})}{t} \\ &= \lim _ {t \to 0} h _ 1 (t m _ {(k)}) \\ &= 0 \end{aligned}t→0lim​to(t)​​=t→0lim​to(t)​=t→0lim​tt⋅h1​(tm(k)​)​=t→0lim​h1​(tm(k)​)=0​

が求まる。点x(k)x _ {(k)}x(k)​が極値や停留点でなければgrad⁡f(x(k))≠0\operatorname{grad} f(x _ {(k)}) \neq 0gradf(x(k)​)=0であるから、m(k)m _ {(k)}m(k)​をgrad⁡f(x(k))\operatorname{grad} f(x _ {(k)})gradf(x(k)​)と直交しないように取れば∣<grad⁡f(x(k)),m(k)>∣>0\left| \left< \operatorname{grad} f(x _ {(k)}), m _ {(k)} \right> \right| > 0​⟨gradf(x(k)​),m(k)​⟩​>0であるから、tttを 0 に近づける途中で、あるtttが存在して

∣<grad⁡f(x(k)),m(k)>∣>∣o(t)t∣(4.1.4)\left| \left< \operatorname{grad} f(x _ {(k)}), m _ {(k)} \right> \right| > \left| \frac{o \left( t \right)}{t} \right| \tag{4.1.4}​⟨gradf(x(k)​),m(k)​⟩​>​to(t)​​(4.1.4)

となる。ゆえにtttが十分小さいとき (4.1.3) の符号は

sign⁡(Δf)=sign⁡(<grad⁡f(x(k)),tm(k)>)\operatorname{sign}(\Delta f) = \operatorname{sign} \left( \left< \operatorname{grad} f(x _ {(k)}), tm _ {(k)} \right> \right)sign(Δf)=sign(⟨gradf(x(k)​),tm(k)​⟩)

によって定まることがわかるので、t>0t > 0t>0であることを思い出せば

<grad⁡f(x(k)),m(k)><0\left< \operatorname{grad} f(x _ {(k)}), m _ {(k)} \right> < 0⟨gradf(x(k)​),m(k)​⟩<0

となるようにm(k)m _ {(k)}m(k)​を選べば目的関数が単調減少するようにtttを選ぶことが可能になる。

以上の議論はこれから紹介するうちでニュートン法を除くすべての直線探索法に共通した議論であり、直線探索法のバリエーションはこのm(k)m _ {(k)}m(k)​の選び方を変えたものに過ぎない。

探索方向m(k)m _ {(k)}m(k)​はgrad⁡f(x(k))\operatorname{grad} f(x _ {(k)})gradf(x(k)​)を用いた式で定義されることが多いので、これらの手法を総称して勾配法(gradient descent)ともいう。

最急降下法

最急降下法はm(k)=−grad⁡f(x(k))m _ {(k)} = - \operatorname{grad} f(x _ {(k)})m(k)​=−gradf(x(k)​)とする手法で、

<grad⁡f(x(k)),m(k)>=<grad⁡f(x(k)),−grad⁡f(x(k))>=−<grad⁡f(x(k)),grad⁡f(x(k))>=−∥grad⁡f(x(k))∥2<0\begin{aligned} \left< \operatorname{grad} f(x _ {(k)}), m _ {(k)} \right> &= \left< \operatorname{grad} f(x _ {(k)}), - \operatorname{grad} f(x _ {(k)})\right> \\ &= - \left< \operatorname{grad} f(x _ {(k)}), \operatorname{grad} f(x _ {(k)})\right> \\ &= - \| \operatorname{grad} f(x _ {(k)}) \| ^ 2 < 0 \end{aligned}⟨gradf(x(k)​),m(k)​⟩​=⟨gradf(x(k)​),−gradf(x(k)​)⟩=−⟨gradf(x(k)​),gradf(x(k)​)⟩=−∥gradf(x(k)​)∥2<0​

より、点x(k)x _ {(k)}x(k)​の近傍で十分小さいtttを選べば目的関数は単調減少する。

「最急降下(steepest descent)」の名は∣<grad⁡f(x(k)),m(k)>∣\left| \left< \operatorname{grad} f(x _ {(k)}), m _ {(k)} \right> \right|​⟨gradf(x(k)​),m(k)​⟩​がもっとも大きくなる探索方向m(k)m _ {(k)}m(k)​を用いていることに由来する。実際に、Cauchy-Schwarz の不等式と∥m(k)∥=1\| m _ {(k)} \| = 1∥m(k)​∥=1より

∣<grad⁡f(x(k)),m(k)>∣≤∥grad⁡f(x(k))∥⋅∥m(k)∥=∥grad⁡f(x(k))∥\left| \left< \operatorname{grad} f(x _ {(k)}), m _ {(k)} \right> \right| \leq \| \operatorname{grad} f(x _ {(k)}) \| \cdot \| m _ {(k)} \| = \| \operatorname{grad} f(x _ {(k)}) \|​⟨gradf(x(k)​),m(k)​⟩​≤∥gradf(x(k)​)∥⋅∥m(k)​∥=∥gradf(x(k)​)∥

となる。不等式の等号成立は

m(k)=±grad⁡f(x(k))∥grad⁡f(x(k))∥m _ {(k)} = \pm \frac{\operatorname{grad} f(x _ {(k)})}{ \| \operatorname{grad} f(x _ {(k)}) \| }m(k)​=±∥gradf(x(k)​)∥gradf(x(k)​)​

のときであり、ただそのときに限る。したがってt→0t \to 0t→0の極限、すなわち点x(k)x _ {(k)}x(k)​の周りのごく狭い範囲ではm(k)=−grad⁡f(x(k))m _ {(k)} = - \operatorname{grad} f(x _ {(k)})m(k)​=−gradf(x(k)​)が目的関数をもっとも減少させる方向である。

ニュートン法

ニュートン法は関数の2次近似から導出されるので、誤解を防ぐためここでは説明しない。

共役勾配法

共役とは簡単に言えば「直交している」という意味である。つまり勾配に直交するベクトルr(k)r _ {(k)}r(k)​をm(k)m _ {(k)}m(k)​に加えてm(k)+r(k)m _ {(k)} + r _ {(k)}m(k)​+r(k)​を探索方向とするのが共役勾配法である。

(4.1.4) 式の時点でm(k)m _ {(k)}m(k)​はgrad⁡f(x(k))\operatorname{grad}f(x _ {(k)})gradf(x(k)​)と直交しないものを選んだが、そうして選んだm(k)m _ {(k)}m(k)​にgrad⁡f(x(k))\operatorname{grad} f (x _ {(k)})gradf(x(k)​)と直交するベクトルr(k)r _ {(k)}r(k)​を加えても

<grad⁡f(x(k)),m(k)+r(k)>=<grad⁡f(x(k)),m(k)>+<grad⁡f(x(k)),r(k)>=<grad⁡f(x(k)),m(k)>+0=<grad⁡f(x(k)),m(k)>\begin{aligned} \left< \operatorname{grad} f(x _ {(k)}), m _ {(k)} + r _ {(k)} \right> &= \left< \operatorname{grad} f(x _ {(k)}), m _ {(k)} \right> + \left< \operatorname{grad} f(x _ {(k)}), r _ {(k)} \right> \\ &= \left< \operatorname{grad} f(x _ {(k)}), m _ {(k)} \right> + 0 \\ &= \left< \operatorname{grad} f(x _ {(k)}), m _ {(k)}\right> \end{aligned}⟨gradf(x(k)​),m(k)​+r(k)​⟩​=⟨gradf(x(k)​),m(k)​⟩+⟨gradf(x(k)​),r(k)​⟩=⟨gradf(x(k)​),m(k)​⟩+0=⟨gradf(x(k)​),m(k)​⟩​

となるので目的関数が単調減少するようなtttが選べるという議論は変わらない。

準ニュートン法

準ニュートン法はB(k)B _ {(k)}B(k)​を正定値行列としてm(k)m _ {(k)}m(k)​に

m(k)=−B(k)grad⁡f(x(k))m _ {(k)} = - B _ {(k)} \operatorname{grad} f(x _ {(k)})m(k)​=−B(k)​gradf(x(k)​)

を選ぶ方法である。このときやはり

<grad⁡f(x(k)),m(k)>=<grad⁡f(x(k)),−B(k)grad⁡f(x(k))>=−<grad⁡f(x(k)),B(k)grad⁡f(x(k))><0\begin{aligned} \left< \operatorname{grad} f(x _ {(k)}), m _ {(k)} \right> &= \left< \operatorname{grad} f(x _ {(k)}), - B _ {(k)}\operatorname{grad} f(x _ {(k)})\right> \\ &= - \left< \operatorname{grad} f(x _ {(k)}), B _ {(k)} \operatorname{grad} f(x _ {(k)})\right> < 0 \end{aligned}⟨gradf(x(k)​),m(k)​⟩​=⟨gradf(x(k)​),−B(k)​gradf(x(k)​)⟩=−⟨gradf(x(k)​),B(k)​gradf(x(k)​)⟩<0​

が成り立つのでm(k)m _ {(k)}m(k)​は依然として降下方向である。

収束性

最急降下法は1次収束のアルゴリズムである。

特徴

最急降下法は1次収束のアルゴリズムで、本書で紹介する中ではもっとも収束性が悪い部類に入るが、実装がもっとも簡単であり、イテレーションごとの計算量も勾配を計算するだけなので比較的小さい。

勾配法でうまくいくかどうかを検証するためにまずとりあえず最急降下法を実装してみるのは手段としてはありである。収束性は悪いが回しておけば徐々に最適解には近づいていくので、一晩回しておいて最適解の候補を得ておけば他の手法を試すときにも安心感がある。

参考文献

Previous4. 直線探索法Next4.2. Armijo条件・Wolfe条件

Last updated 5 years ago

Was this helpful?

4.3. ニュートン法
4.4. 共役勾配法
4.5. 準ニュートン法
http://www.dais.is.tohoku.ac.jp/~shioura/teaching/mp08/mp08-10.pdf
http://www2.kaiyodai.ac.jp/~yoshi-s/Lectures/Optimization/2011/lecture_1.pdf