trybeetle

take it slow!!

DeepLearning.ai course1 振り返り


Posted on Aug. 14, 2018, 7:51 a.m.



DeepLearning.aiのコース(Neural Network and Deep Learning)では、hidden layerが入った複数層のNeural Networkについて学びます。numpyを使用して、pythonベースで説明しています。


week 1

week 1は、コースのイントロダクションでした。
Data量の増加、conputation能力の向上、algorithmの発達が近年deep learningを支えていて、これからもこのトレンドは変わらないでしょうとのこと。

Neural Networkの種類

  • SNN(standard)
  • CNN(convolutional)
  • RNN(recursive)
  • custom

データの種類

  • structured data (統計情報など)
  • unstructured data (画像、音声など)

week 2

Logistic Regressionについて説明をしています。

input dataの初期化(random, flat)した後は、下記の流れをiteration回数分ループ処理します。

$$ Forward Propagation $$ $$z^{(i)} = w^T x^{(i)} + b \tag{1}$$ $$\hat{y}^{(i)} = a^{(i)} = sigmoid(z^{(i)})\tag{2}$$ $$ \mathcal{L}(a^{(i)}, y^{(i)}) = - y^{(i)} \log(a^{(i)}) - (1-y^{(i)} ) \log(1-a^{(i)})\tag{3}$$ $$ J = \frac{1}{m} \sum_{i=1}^m \mathcal{L}(a^{(i)}, y^{(i)})\tag{4}$$
$$ Backward Propagation $$ $$ \frac{\partial J}{\partial w} = \frac{1}{m}X(A-Y)^T\tag{5}$$ $$ \frac{\partial J}{\partial b} = \frac{1}{m} \sum_{i=1}^m (a^{(i)}-y^{(i)})\tag{6}$$
$$ Update Parameters $$ $$ w = w - α * \frac{\partial J}{\partial w} \tag{7}$$ $$ b = b - α * \frac{\partial J}{\partial b} \tag{8}$$


week 3

1つのhidden layerを取り入れたneural networkについて説明しています。
input dataの初期化(random, flat)した後は、下記の流れをiteration回数分ループ処理します。

$$ Forward Propagation $$ $$z^{[1] (i)} = W^{[1]} x^{(i)} + b^{[1]}\tag{1}$$ $$a^{[1] (i)} = \tanh(z^{[1] (i)})\tag{2}$$ $$z^{[2] (i)} = W^{[2]} a^{[1] (i)} + b^{[2]}\tag{3}$$ $$\hat{y}^{(i)} = a^{[2] (i)} = \sigma(z^{ [2] (i)})\tag{4}$$ $$y^{(i)}_{prediction} = \begin{cases} 1 & \mbox{if } a^{[2](i)} > 0.5 \\ 0 & \mbox{otherwise } \end{cases}\tag{5}$$ $$J = - \frac{1}{m} \sum\limits_{i = 0}^{m} \large\left(\small y^{(i)}\log\left(a^{[2] (i)}\right) + (1-y^{(i)})\log\left(1- a^{[2] (i)}\right) \large \right) \small \tag{6}$$
$$ Backward Propagation $$ $$ \frac{\partial J}{\partial z^{[2]}} = A^{[2]} -Y \tag{7}$$ $$ \frac{\partial J}{\partial w^{[2]}} = \frac{\partial J}{\partial z^{[2]}} * \frac{\partial z^{[2]}}{\partial w^{[2]}} \tag{8}$$ $$ \frac{\partial J}{\partial b^{[2]}} = \frac{\partial J}{\partial z^{[2]}} * \frac{\partial z^{[2]}}{\partial b^{[2]}} \tag{9}$$ $$ \frac{\partial J}{\partial a^{[1]}} = \frac{\partial J}{\partial z^{[2]}} * \frac{\partial z^{[2]}}{\partial a^{[1]}} \tag{10}$$ $$ \frac{\partial J}{\partial z^{[1]}} = \frac{\partial J}{\partial a^{[1]}} * \frac{\partial a^{[1]}}{\partial z^{[1]}} \tag{11}$$ $$ \frac{\partial J}{\partial w^{[1]}} = \frac{\partial J}{\partial z^{[1]}} * \frac{\partial z^{[1]}}{\partial w^{[1]}} \tag{12}$$ $$ \frac{\partial J}{\partial b^{[1]}} = \frac{\partial J}{\partial z^{[1]}} * \frac{\partial z^{[1]}}{\partial b^{[1]}} \tag{13}$$
$$ Update Parameters $$ $$ w^{[1]} = w - α * \frac{\partial J}{\partial w^{[1]}} \tag{14}$$ $$ b^{[1]} = b - α * \frac{\partial J}{\partial b^{[1]}} \tag{15}$$ $$ w^{[2]} = w - α * \frac{\partial J}{\partial w^{[2]}} \tag{16}$$ $$ b^{[2]} = b - α * \frac{\partial J}{\partial b^{[2]}} \tag{17}$$

続いて、主なActivate functionの種類についてです。

activation
function
sigmoid tanh relu leaky relu
$$ g(z) = a $$ $$ \frac{1}{1 + e^{(-z)}} $$ $$ \frac{e^{(z)}-e^{(-z)}}{e^{(z)}+e^{(-z)}}$$ $$ maximum(0,z) $$ $$ maximum(0.01*z,z) $$
$$ g'(z) $$ $$ a(1-a) $$ $$ 1 - a^2$$ $$ 0 ~~~~~~\text{if}~~~ z \lt 0 \\ 1 ~~~~~~\text{if}~~~ z \geq 0 $$ $$ 0.01 ~~~~~~\text{if}~~~ z \lt 0 \\ 1 ~~~~~~\text{if}~~~ z \geq 0 $$

また、binary判定(0 or 1)の場合は、hidden layerには好みのactivation functionを使用し、output layerにはsigmoidを使用します。

parameter(W)と(b)の初期値について、下記の様に設定します。wに関しては、0.01を掛けてあげることで、十分に小さい値にさせます。wの値が大きい場合、傾きが小さくなり、学習速度が遅くなってしまいます。


    w = np.random.randn((3,4)) * 0.01
    b = np.zeros((3,1))

week 4

week4 では多層のhidden layerの場合のNeural Networkに関する内容でした。Propagationのしくみを理解するためにBuilding Blockと呼ばれる図があります。下記の様に、Forward propagationにてcostを計算する際に、計算過程で求めたW,b,Zをcacheとして一時的に保存し、後のBackward propagationに使用します。
下記Building blockの図です。


以上です。


Category:ML
Tag: ML python
Aug. 14, 2018, 7:51 a.m.

Comments