1
0

More than 3 years have passed since last update.

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

Last updated at Posted at 2020-05-18

はじめに

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

(C2W1L01) Train / Dev / Test sets

内容

  • Applied ML is a highly iterative process. Idea → Code → Experiment → Idea …のサイクルを効率的に回すのが大事
  • Train set / dev set / test set
    • 以前は train : test = 70 : 30 や,train : dev (cross-validation) : test = 60 : 20 : 20 と言われていた
    • 最近はデータが多くなった。データが 100 万件くらいあれば,dev set や test set はそれぞれ 1 万件もあれば十分
    • train : dev : test = 98 : 1 : 1 とか,99.5 : 0.25 : 0.25 など
  • train set と dev/test set の distribution を同じにする (Make sure dev and test come from same distribution)
  • test set が無くても (dev set だけでも) OK
  • dev set のことを "test set" と呼ぶこともある

(C2W1L02) Bias / Variance

内容

  • 2 次元だと high bias や high variance を可視化できるが,高次元だと可視化できない
train set error dev set error
1% 11% high variance
15% 16% high bias
15% 30% high bias & high variance
0.5% 1% low bias & low variance
  • 人が判断したときの error (optimal error or Bayes error) を 0 とした場合

(C2W1L03) Basic "recipe" for machine learning

内容

  • high bias の場合 (training data performance でチェック)
    • bigger network
    • train longer
    • (NN architecture search) (有用でないときもある)
    • high bias が解決するまで繰り返す
  • high variance の場合 (dev set performance でチェック)
    • more data
    • regularization
    • (NN architecture search) (有用でないときもある)
  • 初期の neural network では bias と variance の trade-off が問題となった
  • 今はデータが増えたので,bias を悪化させずに variance を改善できるようになった

(C2W1L04) Regularization

内容

J\left(w, b\right) = \frac{1}{m} \sum^{m}_{i=1}L\left(\hat{y}^{(i)}, y^{(i)}\right) + \frac{\lambda}{2m}\|w\|^2_2
  • $\lambda$ ; 正規化パラメータ (ハイパーパラメータの 1 つ)
  • $L_2$ regularization ; $||w||^2_2 = \sum^{n_x}_{j=1} w_j^2 = w^Tw$
  • lambda は Python のコマンドなので,Python でプログラムするときは lambd と書く
J\left(w^{[1]}, b^{[1]}, \cdots , w^{[L]}, b^{[l]}\right) = \frac{1}{m} \sum^{m}_{i=1} L\left(\hat{y}^{(i)}, y^{(i)}\right) + \frac{\lambda}{2m} \sum^{L}_{l=1} \|w^{[l]}\|^2\\
\|w^{[l]}\|^2 = \sum^{n^{[l-1]}}_{i=1}\sum^{n^{[l]}}_{j=1}\left(w_{ij}^{[l]}\right)^2
  • $w$ の次元は $(n^{[l-1]}, n^{[l]})$
  • $|| \cdot ||^2_2$ は Frobenius norm ($|| \cdot ||_F^2$) とも呼ばれる
dw^{[l]} = \left( \textrm{from backprop} \right) + \frac{\lambda}{m}w^{[l]} \\
w^{[l]} = w^{[l]} - \alpha dw^{[l]} = \left(1 - \alpha \frac{\lambda}{m} \right)w^{[l]} - \alpha \left( \textrm{from backprop} \right)
  • regularization によって $dw^{[l]}$ が小さくなるので, weight decay と呼ばれる

(C2W1L05) Why Regularization Reduces Overfitting

内容

  • $\lambda$ が大きいと,$w^{[l]} \sim 0$ になる。すると hidden unit の影響を減らせるので,シンプルなネットワークになったと考えられる。なので,high bias に近づく
  • $\lambda$ が大きいと,ロジスティック回帰に近くなる
  • $g(z) = \tanh(z)$ の場合,$z$ が小さいと $g(z)$ の線形領域を使うことになる
  • activation function を 1 次関数と見なせるようになると,複雑なネットワークを表現することができなくなる。よって high bias に近づく
  • 最急降下法で,各繰り返しごとに $J$ が小さくなっていることを確認する際は,第 2 項も含めて $J$ を計算する

(C2W1L06) Dropout Regularization

内容

  • 各 unit を,ある確率で dropout させる (ユニットを削除する)
  • 減少した neural network で訓練する
  • $l = 3$ (layer 3) を想定。keep_prob (= 0.8) を生き残る確率 (1-keep_prob が dropout させる確率) とする。dropout vector を $d3$ とすると
d3 = \mathrm{np.random.rand(} a3 \mathrm{.shape[0], }\, a3 \mathrm{.shape[1])} < \mathrm{keep\_prob} \\
a3 = \mathrm{np.multiply(} a3, d3 \mathrm{)} \\
a3\  /= \mathrm{keep\_prob} \\
a^{[4]} = W^{[4]} a^{[3]} + b^{[4]}
  • 最後に keep_prob で割ることで,$a^{[3]}$ の期待値を維持する
  • 最急降下法の繰り返しごとに dropout vector $d3$ を変える
  • test set の計算時には dropout を実装しない (テストで dropout を入れると,ノイズになる)

(C2W1L07) Understanding dropout

内容

  • Intuition ; Can't rely on any one feature, so have to spread out weights
  • 特定の入力に重みを掛けない → 重みを分散させる → 重みの効果を減らす → $L_2$ regularization と同様の効果
  • layer 毎に keep_prob の値を変えることもできる。次元の大きな $W^{[l]}$ に対しては,keep_prob を小さくする
  • computer vision では dropout の成功事例が多い (ピクセル数 = feature が多く,data が相対的に少ないため,high variance になりやすい)
  • 欠点 ; cost function $J$ が正しく計算されているか check するのが難しい
  • 対策 ; keep_prob = 1 で $J$ が減少する (coding に問題がない) ことを確認してから,keep_prob を有効にする

(C2W1L08) Other Regularization Methods

内容

  • Data augmentation
    • 画像を左右反転したり,回転・拡大によりデータを増やすことで,overfit を防ぐ
    • 完全に独立したデータを増やすような効果は期待できないが,低コストでデータを増やすことができる
  • Early stopping
    • 各繰り返しで training error (or $J$) と dev set error の両方をチェックし,dev set error が減少から上昇に転じたところで繰り返し計算をストップする
    • 欠点は,$J$ と overfit を同時に考えてしまい,問題を複雑にしてしまうこと。
    • 対策は,$L_2$ regularization を使う (この欠点は $\lambda$ の値を気にする必要があること)

(C2W1L09) Normalizing inputs

内容

  • input feature の scale が大きく違うときに,input feature を normalize する。そうすることで,最急降下法が早く計算できる
\mu = \frac{1}{m} \sum^{m}_{i=1} x^{(i)} \\
x := x - \mu \\
\sigma^2 = \frac{2}{m} \sum^{m}_{i=1} x^{(i)} \ast\ast 2 \\
x \ /= \sigma^2
  • dev set を normalize するときも,train set の $\mu$ と $\sigma$ を使うこと

(C2W1L10) Vanishing / exploding gradients

内容

  • 非常に深い neural network を train しているとき,微分地が非常に小さくなったり大きくなったりする。特に小さくなると,最急降下法に時間がかかる
  • 現在の neural network は 150 層くらいある

(C2W1L11) Weight initialization for deep networks

内容

  • input feature が多くなると,$z = wx + b$ で計算される $z$ が大きくなる。そこで,input feature が多いときは,初期化の際に w が小さくなるようにする
W^{[l]} = \mathrm{np.random.randn} \left( \cdots \right) \ast \mathrm{np.sqrt} \left( \frac{2}{n^{[l-1]}} \right)
  • ReLU のときは $\sqrt{\frac{2}{n^{[l-1]}}}$ がうまくいく
  • $\tanh$ は $\sqrt{\frac{1}{n^{[l-1]}}}$ とする (Xavier initialization)

(C2W1L12) Numerial Approximation of Gradients

内容

  • 微分の近似値は,$\epsilon$ を小さな数値として $\frac{f(\theta + \epsilon) - f(\theta - \epsilon)}{2\epsilon}$ となる
  • 誤差のオーダは $O(\epsilon^2)$

(C2W1L13) Gradient checking

内容

  • Take $W^{[1]}$,$b^{[1]}$,$\cdots$ ,$W^{[L]}$,$b^{[L]}$ and reshape into a big vector $\theta$
  • Take $dW^{[1]}$,$db^{[1]}$,$\cdots$ ,$dW^{[L]}$,$db^{[L]}$ and reshape into a big vector $d\theta$
  • for each $i$ :
d\theta_{approx}^{[i]} = \frac{J(\theta_1, \cdots, \theta_i+\epsilon, \cdots) - J(\theta_1, \cdots, \theta_i-\epsilon, \cdots)}{2\epsilon} \sim d\theta^{[i]}
  • check ($\epsilon = 10^{-7}$ とする)
\frac{\|d\theta_{approx} - d\theta\|_2}{\|d\theta_{approx}\|_2 + \|d\theta\|_2}
value judgement
$10^{-7}$ great!
$10^{-5}$ OK かもしれないけど,check する
$10^{-3}$ バグの可能性
  • バグっぽいときは,特定の $i$ について $d\theta_{approx}$ と $d\theta$ の差が大きいところをチェックする

(C2W1L14) Gradient Checking Implementation Notes

内容

  • gradient checking の使い方や,$d\theta_{approx}$ と $d\theta$ が異なるときの対処の考え方など

参考

1
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
1
0