LoginSignup
0
0

More than 3 years have passed since last update.

Deep Learning Specialization (Coursera) 自習記録 (C2W2)

Last updated at Posted at 2020-05-21

はじめに

Deep Learning Specialization の Course 2, Week 2 (C2W2) の内容です。

(C2W2L01) Mini-batch gradient descent

内容

  • $m = 5000000$ くらいのとき,training set を mini-batch に分けて,mini-batch 毎に forward propagation と back propagation を計算する
  • mini-batch のほうが早く収束する
X^{\{1\}} = \left[ X^{(1)} \, X^{(2)} \, \cdots \, X^{(1000)}\right] \\
Y^{\{1\}} = \left[ Y^{(1)} \, Y^{(2)} \, \cdots \, Y^{(1000)}\right] \\
X^{\{2\}} = \left[ X^{(1001)} \, X^{(1002)} \, \cdots \, X^{(2000)}\right] \\
Y^{\{2\}} = \left[ Y^{(1001)} \, Y^{(1002)} \, \cdots \, Y^{(2000)}\right] 

(C2W2L02) Understanding Mini-batch Gradient Descent

内容

  • mini-batch gradient descent の場合,cost function $J^{\{t\}}$ は各 mini-batch の繰り返しに対して振動しながら減少する
  • mini-batch の適切なサイズは,vectorization による計算の効率化の恩恵が得られる程度の大きさにする
  • 典型的なサイズは $2^6$,$2^7$,$2^8$,$2^9$ など (メモリを効率的に使うために,2 の累乗)
  • CPU/GPU のメモリサイズに収まらない mini-batch サイズだと,効率が悪い
  • 2 の累乗をいくつか試して,効率的に計算できるサイズを探す

(C2W2L03) Exponentially Weighted Average

内容

  • exponentially weighted (moving) average (指数加重 (移動) 平均,で日本語合ってますか?) の説明
  • 元のデータ ($\theta_0$,$\theta_1$,$\cdots$) を変換する
V_0 = 0 \\
V_t = \beta V_{t-1} + \left( 1-\beta \right) \theta_t
  • $V_t$ は,おおよそ $\frac{1}{1-\beta}$ 個のデータの平均と見なせる
  • $\beta$ が大きいと,より多くのデータを使って計算するので,データがスムーズになる
  • $\beta$ が小さいと,ノイズが大きく,異常値に敏感

(C2W2L04) Understanding exponentially weighted average

内容

  • exponentially weighted average の実装方法
  • $V_0 = 0$
  • 以下を繰り返す
    • Get next $\theta_t$
    • $V_t = \beta V_{t-1} + (1-\beta)\theta_t$
  • メモリが少なくて済むのが利点

(C2W2L05) Bias correction in exponentially weighted average

内容

  • exponentially weight average では,初期段階で $V_t$ がとても小さくなる
V_0 = 0 \\
V_1 = 0.98 V_0 + 0.02 \theta_1 = 0.02 \theta_1 \\
V_2 = 0.98 V_1 + 0.02 \theta_2 = 0.0196\theta_1 + 0.02\theta_2
  • そこで,$V_t$ を $\frac{V_t}{1-\beta^t}$ で補正する。t が大きくなると $\beta^t \sim 0$ となり,補正の効果がほとんどなくなる
  • 多くの場合,bias correction は実装されない (初期段階以降のデータを使う)

(C2W2L06) Gradient descent with momentum

内容

  • iteration $t$ において
    • 現在の mini-batch で $dW$,$db$ を計算する
V_{dw} = \beta V_{dw} + \left( 1-\beta \right) dW \\
V_{db} = \beta V_{db} + \left( 1-\beta \right) db \\
W := W - \alpha V_{dW} \\
b := b - \alpha V_{db}
  • 最急降下法の振動をスムーズにする
  • $\beta$ と $\alpha$ はハイパーパラメタだが,$\beta = 0.9$ が良い
  • bias correction はほとんど使わない。10 回も繰り返すと $\beta^t \sim 0$ になる
  • $V_{dW} = \beta V_{dW} + dW$ とする文献もある。この場合は,$\alpha$ が $\frac{1}{1-\beta}$ でスケーリングされていると見なせる

(C2W2L07) RMSProp

内容

  • RMS = Root Mean Square
  • iteration $t$ において
    • 現在の mini-batch で $dW$,$db$ を計算する
S_{dW} = \beta S_{dW} + \left( 1-\beta \right) dW^2 \ (\textrm{要素ごと}) \\
S_{db} = \beta S_{db} + \left( 1-\beta \right) db^2 \ (\textrm{要素ごと}) \\
W := W -\alpha \frac{dW}{\sqrt{S_{dW}} + \epsilon} \\
b := b -\alpha \frac{db}{\sqrt{S_{db}} + \epsilon} \\
  • 分母が 0 にならないように,$\epsilon=10^{-8}$ を入れる

(C2W2L08) Adam optimization algorithm

内容

  • Adam optimization = momentum + RMSProm
  • Adam = Adaptive momentum estimation
  • iteration $t$ において
    • 現在の mini-batch を使って $dW$,$db$ を計算
V_{dw} = \beta_1 V_{dw} + \left( 1-\beta_1 \right) dW \\
V_{db} = \beta_1 V_{db} + \left( 1-\beta_1 \right) db \\
S_{dW} = \beta_2 S_{dW} + \left( 1-\beta_2 \right) dW^2  \\
S_{db} = \beta_2 S_{db} + \left( 1-\beta_2 \right) db^2  \\
V^{corrected}_{dW} = \frac{V_{dw}}{1-\beta_1^t} \\
V^{corrected}_{db} = \frac{V_{db}}{1-\beta_1^t} \\
S^{corrected}_{dW} = \frac{S_{dw}}{1-\beta_2^t} \\
S^{corrected}_{db} = \frac{S_{db}}{1-\beta_2^t} \\
W := W -\alpha \frac{V^{corrected}_{dW}}{\sqrt{S^{corrected}_{dW}}+\epsilon} \\
b := b -\alpha \frac{V^{corrected}_{db}}{\sqrt{S^{corrected}_{db}}+\epsilon} \\
  • ハイパーパラメタ
    • $\alpha$ ; needs to be tuned
    • $\beta_1$ ; 0.9
    • $\beta_2$ ; 0.999
    • $\epsilon$ ; $10^{-8}$ (あまり影響しないが,大抵 $10^{-8}$ )

(C2W2L09) Learning rate decay

内容

  • mini-batch では, $\alpha$ 一定だと収束しない。徐々に $\alpha$ を小さくすると,最小値近傍に収まってくれる
  • epoch ; 1 pass through data (mini-batch に分けたとき,全部の mini-batch データを扱う単位を epoch という)
\alpha = \frac{1}{1 + \textrm{decay_rate} \ast \textrm{epoch_num}} \alpha_0
  • その他の方法としては,下記など
\alpha = 0.95^{\textrm{epoch_num}} \alpha_0\\
\alpha = \frac{k}{\sqrt{\textrm{epoch_num}}} \alpha_0

参考

0
0
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
0
0