はじめに
Deep Learning Specialization の Course 2, Week 3 (C2W3) の内容です。
(C2W3L01) Tuning process
内容
-
Hyperparameter のチューニング方法の説明
-
Hyperparameter の重要度は,下記の通り
- 1 番大事
- $\alpha$
- 2 番目に大事
- $\beta$ ($\sim 0.9$)
- #hidden_units
- mini-batch size
- 3 番目に大事
- #layers
- learning rate decay
- チューニングしない
- Adam optimization algorithm の $\beta_1$,$\beta_2$,$\epsilon$
- 1 番大事
-
Hyperparameter を試すときは,try random values, don't use a grid
-
Coarse to Fine ; 良さそうな値が見つかったら,その近傍で細かく (fine) 調べる
(C2W3L02) Using an appropriate scale to pich hyperparameter
内容
- リニアスケールでランダムに値を選択できる hyperparameter
- $n^{[l]}$
- #layers $L$
- ログスケールでランダムに値を選択すべき hyperparameter
- $\alpha$ ; 0.0001 ~ 1
- $\beta$ ; 0.9 ~ 0.999
r = -4 \ast \textrm{np.random.rand()} \\
\alpha = 10^r \\
r = -2 \ast \textrm{np.random.rand()} - 1 \\
1-\beta = 10^r\\
\beta = 1-10^r
(C2W3L03) Hyperparameter Tuning in Practice : Panda vs. Caviar
内容
-
Re-test hyperparameters occasionally
-
Intuitions do get stale. Re-evaluate occasionally
-
1 つのモデルに集中してチューニングする ; babysitting one model (Panda)
-
たくさんのモデルで並行してチューニングする ; Training many model in parallel (Caviar)
-
十分なリソースがあるとき ; Caviar
-
データがたくさん,モデルが大きい ; Panda
(C2W3L04) Normalizing Activations in a Network
内容
- input data に適用していた normalizing を,hidden layer にも適用することで,$W$ や $b$ の学習速度を高める
- hidden layer $l$ の $z^{(i)}$ に対して,
\mu = \frac{1}{m}\sum_{i} z^{(i)} \\
\sigma^2 = \frac{1}{m} \sum_{i} \left( z^{(i)} - \mu \right)^2 \\
z^{(i)}_{norm} = \frac{z^{(i)} - \mu}{\sqrt{\sigma^2 + \epsilon}} \\
\tilde{z}^{(i)} = \gamma z^{(i)}_{norm} + \beta
- $\gamma$ と $\beta$ は learnable parameters
- $z^{(i)}$ の平均と分散を,$\gamma$ と $\beta$ で望ましい値にセットする
(C2W3L05) Fitting Batch Norm into a Neural Network
内容
- Batch Norm を使った計算方法の説明
- 通常 ; $z^{[l]} \rightarrow a^{[l]}$
- Batch Norm ; $z^{[l]} \rightarrow \tilde{z}^{[l]} \rightarrow a^{[l]}$
- パラメタは $W^{[l]}$, $b^{[l]}$, $\beta^{[l]}$, $\gamma^{[l]}$ だが,$z^{[l]}$ の平均を計算すると,定数項の $b^{[l]}$ の影響がなくなるので,$b^{[l]}$ は不要になる
- $z^{[l]}$, $\beta^{[l]}$, $\gamma^{[l]}$ の次元は $\left( n^{[l]}, 1 \right)$
- Implementing gradient descent
- for t=1 … numMiniBatches
- Compute forward prop on $X^{\{t\}}$
- In each hidden layer, use BN (Batch Norm) to replace $z^{[l]}$ with $\tilde{z}^{[l]}$
- Use backprop to compute $dW^{[l]}$, $d\beta^{[l]}$, $d\gamma^{[l]}$
- Compute forward prop on $X^{\{t\}}$
- for t=1 … numMiniBatches
- Works w/ momentum, RMSProp, Adam
- TensorFlow なら
tf.nn.batch_normalization
でできるけどね
感想
- いろんな計算方法が出てきたので,正直,消化しきれてない (内容は難しくないが,ボリュームが多い)
(C2W3L06) Why Does Batch Norm Work?
内容
- なぜ batch norm を使うのか? の直感的な説明
- 着目している mini-batch に対して batch norm を適用すると,多少のノイズを混ぜる効果がある (dropout のように)
感想
- 正直,よく分からなかった
(C2W3L07) Batch Norm at Test Time
内容
- $\mu$ と $\sigma^2$ は mini-batch 毎に計算する。
- しかしテストのときにデータ数が少ない場合,$\mu$ と $\sigma^2$ は exponentially weighted average (across mini-batch) を利用する
(C2W3L08) Softmax regression
内容
- multi-class classification の問題
- $C$ ; #classes
- Neural network の最終層 (第 $L$ 層) を softmax layer とする
z^{[L]} = W^{[L]} a^{[L-1]} + b^{[L]} \\
t = e^{z^{[L]}} \ \textrm{(element-wise)}\\
a^{[L]} = \frac{e^{z^{[L]}}}{\sum^C_{j=1}t_i}
- hidden layer が無い場合は,領域を直線で分けるイメージ
- 複雑な neural network なら,複雑な境界になる
(C2W3L09) Training a softmax classification
内容
- Softmax regressoin generalizes logistic regression to $C$ classes.
- If $C=2$, softmax reduces to logistic regression.
L\left( \hat{y}, y \right) = - \sum^{C}_{j=1} y_j \log \hat{y}_j\\
J = \frac{1}{m} \sum^m_{i=1} L\left( \hat{y}^{(i)}, y^{(i)} \right)
(C2W3L10) Deep Learning Frameworks
内容
- Deep Learning Frameworks
- Caffe / Caffe2
- CNTK
- DL4J
- Keras
- Lasagne
- mxnet
- PaddlePaddle
- TensorFlow
- Theano
- Torch
- Deep Learning Framework を選択する際には
- Ease of programming (development and deployment)
- Running speed
- Truly open (open source with good governance)
(C2W3L11) Tensorflow
内容
- $J(w) = w^2 -10w + 25$ を最小化する $w$ を求めることを題材に,TensorFlow の使い方を説明
- コスト関数を設定すれば,back prop は自動で実装してくれる