# 【4.1.3】浅层神经网络

## 一、 神经网络概述（Neural Network Overview）

$$\left\{ \begin{array}{l} x\ w\ b \end{array} \right\} \implies{z={w}^Tx+b}$$

$$\left\{ \begin{array}{l} x\ w\ b \end{array} \right \} \implies{z={w}^Tx+b} \implies{\alpha = \sigma(z)}\ \implies{{L}(a,y)}$$

$$\left \{ \begin{array}{r} {x }\ {W^{[1]}}\ {b^{[1]}} \end{array} \right\} \implies{z^{[1]}=W^{[1]}x+b^{[1]}} \implies{a^{[1]} = \sigma(z^{[1]})}$$

$$\left \{ \begin{array}{r} \text{a^{[1]} = \sigma(z^{[1]})}\ \text{W^{[2]}}\ \text{b^{[2]}}\ \end{array} \right\} \implies{z^{[2]}=W^{[2]}a^{[1]}+b^{[2]}} \implies{a^{[2]} = \sigma(z^{[2]})}\ \implies{{L} \left ( a^{[2]},y \right ) }$$

$$\left \{ \begin{array}{r} {x }\ {{ d}W^{[1]}}\ {{ d}b^{[1]}} \end{array} \right \} \impliedby{{d}z^{[1]}={d}(W^{[1]}x+b^{[1]})} \impliedby{{d}\alpha^{[1]} = { d}\sigma(z^{[1]})}$$

$$\left \{ \begin{array}{r} {da^{[1]} = {d}\sigma(z^{[1]})}\ {dW^{[2]}}\ {db^{[2]}}\ \end{array} \right \} \impliedby{{dz}^{[2]}={d}(W^{[2]}\alpha^{[1]}+b^{[2]}}) \impliedby{{{da}^{[2]}} = {d}\sigma(z^{[2]})}\ \impliedby{{dL} \left ( a^{[2]},y \right ) }$$

## 二、神经网络的表示（Neural Network Representation）

$$a^{[1]} = \left[ \begin{array}{ccc} a^{[1]}{1}\ a^{[1]}{2}\ a^{[1]}{3}\ a^{[1]}{4} \end{array} \right ]$$

## 三、计算一个神经网络的输出（Computing a Neural Network’s output）

 $$z^{[1]}_1 = w^{[1]T}_1x + b^{[1]}_1, a^{[1]}_1 = \sigma(z^{[1]}_1)$$

$$z^{[1]}_2 = w^{[1]T}_2x + b^{[1]}_2, a^{[1]}_2 = \sigma(z^{[1]}_2)$$

$$z^{[1]}_3 = w^{[1]T}_3x + b^{[1]}_3, a^{[1]}_3 = \sigma(z^{[1]}_3)$$

$$z^{[1]}_4 = w^{[1]T}_4x + b^{[1]}_4, a^{[1]}_4 = \sigma(z^{[1]}_4)$$

$a^{[n]}=\sigma(z^{[n]})$

$$a^{[1]} = \left[ \begin{array}{c} a^{[1]}{1}\ a^{[1]}{2}\ a^{[1]}{3}\ a^{[1]}{4} \end{array} \right] = \sigma(z^{[1]})$$

$$\left[ \begin{array}{c} z^{[1]}{1}\ z^{[1]}{2}\ z^{[1]}{3}\ z^{[1]}{4}\ \end{array} \right] = \overbrace{ \left[ \begin{array}{c} ...W^{[1]T}{1}...\ ...W^{[1]T}{2}...\ ...W^{[1]T}{3}...\ ...W^{[1]T}{4}... \end{array} \right] }^{W^{[1]}} * \overbrace{ \left[ \begin{array}{c} x_1\ x_2\ x_3\ \end{array} \right] }^{input}$$ $$+ \overbrace{ \left[ \begin{array}{c} b^{[1]}_1\ b^{[1]}_2\ b^{[1]}_3\ b^{[1]}_4\ \end{array} \right] }^{b^{[1]}}$$

## 四、多样本向量化（Vectorizing across multiple examples）

【注】：$a^{2}$$(i)$是指第$i$个训练样本而$[2]$是指第二层。

$$z^{1}=W^{1}x^{(i)}+b^{1}$$

$$a^{1}=\sigma(z^{1})$$

$$z^{2}=W^{2}a^{1}+b^{2}$$

$$a^{2}=\sigma(z^{2})$$

$$x = \left[ \begin{array}{c} \vdots & \vdots & \vdots & \vdots\ x^{(1)} & x^{(2)} & \cdots & x^{(m)}\ \vdots & \vdots & \vdots & \vdots\ \end{array} \right]$$

$$Z^{[1]} = \left[ \begin{array}{c} \vdots & \vdots & \vdots & \vdots\ z^{1} & z^{1} & \cdots & z^{1}\ \vdots & \vdots & \vdots & \vdots\ \end{array} \right]$$

$$A^{[1]} = \left[ \begin{array}{c} \vdots & \vdots & \vdots & \vdots\ \alpha^{1} & \alpha^{1} & \cdots & \alpha^{1}\ \vdots & \vdots & \vdots & \vdots\ \end{array} \right]$$

$$\left\{ \begin{array}{r} \text{z^{1} = W^{1}x^{(i)} + b^{[1]}}; \ \text{ \alpha^{1} = \sigma(z^{1})} ; \ \text{z^{2} = W^{2}\alpha^{1} + b^{[2]}}\ \text{\alpha^{2} = \sigma(z^{2})}\ \end{array} \right \}$$ $$\implies \begin{cases} \text{A^{[1]} = \sigma(z^{[1]})}; \ \text{z^{[2]} = W^{[2]}A^{[1]} + b^{[2]}} ;\ \text{A^{[2]} = \sigma(z^{[2]})}\ \end{cases}$$

## 五、向量化实现的解释（Justification for vectorized implementation）

$$z^{1} = W^{[1]}x^{(2)} + b^{[1]}$$

$$z^{1} = W^{[1]}x^{(3)} + b^{[1]}$$

$$W^{[1]} x = \left[ \begin{array}{ccc} \cdots \ \cdots \ \cdots \ \end{array} \right]$$ $$\left[ \begin{array}{c} \vdots &\vdots & \vdots & \vdots \\ x^{(1)} & x^{(2)} & x^{(3)} & \vdots\\ \vdots &\vdots & \vdots & \vdots \\ \end{array} \right] = \\ \left[ \begin{array}{c} \vdots &\vdots & \vdots & \vdots \\ w^{(1)}x^{(1)} & w^{(1)}x^{(2)} & w^{(1)}x^{(3)} & \vdots\\ \vdots &\vdots & \vdots & \vdots \\ \end{array}\right]=\\ \left[ \begin{array}{c} \vdots &\vdots & \vdots & \vdots \\ z^{[1](1)} & z^{[1](2)} & z^{[1](3)} & \vdots\\ \vdots &\vdots & \vdots & \vdots \\ \end{array} \right] = Z^{[1]}$$

## 六、激活函数（Activation functions）

$a = \sigma(z) = \frac{1}{{1 + e}^{- z}}$

 $a= tanh(z) = \frac{e^{z} - e^{- z}}{e^{z} + e^{- z}}$

$g(z^{[1]}) = tanh(z^{[1]})$

• 在二分类的问题中，对于输出层，因为 y 的值是0或1，所以想让$\hat{y}$的数值介于0和1之间，而不是在-1和+1之间。所以需要使用sigmoid激活函数。

$g(z^{[2]}) = \sigma(z^{[2]})$

sigmoid函数和tanh函数两者共同的缺点是，在 z 特别大或者特别小的情况下，导数的梯度或者函数的斜率会变得特别小，最后就会接近于0，导致降低梯度下降的速度。

$a =max( 0,z)$

• 如果输出是0、1值（二分类问题），则输出层选择sigmoid函数，然后其它的所有单元都选择Relu函数。
• 这是很多激活函数的默认选择，如果在隐藏层上不确定使用哪个激活函数，那么通常会使用Relu激活函数。有时，也会使用tanh激活函数，但Relu的一个优点是：当 z 是负值的时候，导数等于0。

z 在ReLu的梯度一半都是0，但是，有足够的隐藏层使得z值大于0，所以对大多数的训练数据来说学习过程仍然可以很快。

• sigmoid激活函数：除了输出层是一个二分类问题基本不会用它。
• tanh激活函数：tanh是非常优秀的，几乎适合所有场合。
• ReLu激活函数：最常用的默认函数，，如果不确定用哪个激活函数，就使用ReLu或者Leaky ReLu。

$a = max( 0.01z,z)$

## 七、为什么需要非线性激活函数？（why need a nonlinear activation function?）

(1) $a^{[1]} = z^{[1]} = W^{[1]}x + b^{[1]}$

(2) $a^{[2]} = z^{[2]} = W^{[2]}a^{[1]}+ b^{[2]}$ 将式子(1)代入式子(2)中，则： $a^{[2]} = z^{[2]} = W^{[2]}(W^{[1]}x + b^{[1]}) + b^{[2]}$

(3) $a^{[2]} = z^{[2]} = W^{[2]}W^{[1]}x + W^{[2]}b^{[1]} + b^{[2]}$ 简化多项式得 $a^{[2]} = z^{[2]} = W^{'}x + b^{'}$ 如果你是用线性激活函数或者叫恒等激励函数，那么神经网络只是把输入线性组合再输出。

## 八、激活函数的导数（Derivatives of activation functions）

1）sigmoid activation function

$\frac{d}{dz}g(z) = {\frac{1}{1 + e^{-z}} (1-\frac{1}{1 + e^{-z}})}=g(z)(1-g(z))$

2）Tanh activation function

$g(z) = tanh(z) = \frac{e^{z} - e^{-z}}{e^{z} + e^{-z}}$

$\frac{d}{{d}z}g(z) = 1 - (tanh(z))^{2}$

3）Rectified Linear Unit (ReLU)

$$g(z)^{'}= \begin{cases} 0& \text{if z < 0} \\ 1& \text{if z > 0} \\ undefined& \text{if z = 0} \end{cases}$$

4）Leaky linear unit (Leaky ReLU)

$$g(z)=\max(0.01z,z) \ \ \ g(z)^{'}= \begin{cases} 0.01& \text{if z < 0} \\ 1& \text{if z > 0} \\ undefined & \text{if z = 0} \end{cases}$$

## 九、神经网络的梯度下降（Gradient descent for neural networks）

Cost function: 公式： $J(W^{[1]},b^{[1]},W^{[2]},b^{[2]}) = {\frac{1}{m}}\sum_{i=1}^mL(\hat{y}, y)$

loss function和之前做logistic回归完全一样。

$\hat{y}^{(i)},(i=1,2,…,m)$ 公式3.28： $dW^{[1]} = \frac{dJ}{dW^{[1]}},db^{[1]} = \frac{dJ}{db^{[1]}}$

${d}W^{[2]} = \frac{{dJ}}{dW^{[2]}},{d}b^{[2]} = \frac{dJ}{db^{[2]}}$

$W^{[1]}\implies{W^{[1]} - adW^{[1]}},b^{[1]}\implies{b^{[1]} -adb^{[1]}}$

$W^{[2]}\implies{W^{[2]} - \alpha{\rm d}W^{[2]}},b^{[2]}\implies{b^{[2]} - \alpha{\rm d}b^{[2]}}$

(1) $z^{[1]} = W^{[1]}x + b^{[1]}$

(2) $a^{[1]} = \sigma(z^{[1]})$

(3) $z^{[2]} = W^{[2]}a^{[1]} + b^{[2]}$

(4) $a^{[2]} = g^{[2]}(z^{[z]}) = \sigma(z^{[2]})$

back propagation：

$dz^{[2]} = A^{[2]} - Y , Y = \begin{bmatrix}y^{[1]} & y^{[2]} & \cdots & y^{[m]}\ \end{bmatrix}$

$dW^{[2]} = {\frac{1}{m}}dz^{[2]}A^{[1]T}$

${\rm d}b^{[2]} = {\frac{1}{m}}np.sum({d}z^{[2]},axis=1,keepdims=True)$

$dz^{[1]} = \underbrace{W^{[2]T}{\rm d}z^{[2]}}{(n^{[1]},m)}\quad*\underbrace{{g^{[1]}}^{'}}{activation ; function ; of ; hidden ; layer}*\quad\underbrace{(z^{[1]})}{(n^{[1]},m)}$

$dW^{[1]} = {\frac{1}{m}}dz^{[1]}x^{T}$

${\underbrace{db^{[1]}}{(n^{[1]},1)}} = {\frac{1}{m}}np.sum(dz^{[1]},axis=1,keepdims=True)$

## 十、（选修）直观理解反向传播（Backpropagation intuition）

$$\left \{ \begin{array}{l} {x }\ {w }\ {b } \end{array} \right \} \implies{z={w}^Tx+b} \implies{\alpha = \sigma(z)} \implies{{L}\left (a,y \right )}$$

$$\underbrace{ \left \{ \begin{array}{l} {x }\ {w }\ {b } \end{array} \right \} }{dw={dz}\cdot x, db =dz}$$ $$\impliedby\underbrace{{z={w}^Tx+b}}{dz=da\cdot g^{'}(z), g(z)=\sigma(z), {\frac{{dL}}{dz}}={\frac{{dL}}{da}}\cdot{\frac{da}{dz}}, {\frac{d}{ dz}}g(z)=g^{'}(z)}$$ $$\impliedby\underbrace{{a = \sigma(z)} \impliedby{L(a,y)}}_{da={\frac{{d}}{da}}{L}\left (a,y \right)=(-y\log{\alpha} - (1 - y)\log(1 - a))^{'}={-\frac{y}{a}} + {\frac{1 - y}{1 - a}{}} }$$

$dz^{[2]}=a^{[2]}-y;，;dW^{[2]}=dz^{[2]}{a^{[1]}}^{T}$

(注意：逻辑回归中；为什么$a^{[1]T}$多了个转置：$dw$中的$W$(视频里是$W^{[2]}_i$)是一个列向量，而$W^{[2]}$是个行向量，故需要加个转置);

$db^{[2]}=dz^{[2]}$

$dz^{[1]} = W^{[2]T}dz^{[2]}* g[1]^{'}(z^{[1]})$

$z^{[2]}$$dz^{[2]}$的维度都是：$(n^{[2]},1)$，如果是二分类，那维度就是$(1,1)$

$z^{[1]}$$dz^{[1]}$的维度都是：$(n^{[1]},1)$

$W^{[2]T}dz^{[2]}$维度为：$(n^{[1]},n^{[2]})$、$(n^{[2]},1)$相乘得到$(n^{[1]},1)$，和$z^{[1]}$维度相同，

$g[1]^{'}(z^{[1]})$的维度为$(n^{[1]},1)$，这就变成了两个都是$(n^{[1]},1)$向量逐元素乘积。

$$Z^{[1]} = \left[ \begin{array}{c} \vdots &\vdots & \vdots & \vdots \ z^{1} & z^{1} & \vdots & z^{1} \ \vdots &\vdots & \vdots & \vdots \ \end{array} \right]$$

$dZ^{[2]}=A^{[2]}-Y;，;dW^{[2]}={\frac{1}{m}}dZ^{[2]}{A^{[1]}}^{T}$

$L = {\frac{1}{m}}\sum_i^n{L(\hat{y},y)}$

$db^{[2]} = {\frac{1}{m}}np.sum(dZ^{[2]},axis=1,keepdims=True)$

$\underbrace{dZ^{[1]}}{(n^{[1]}, m)} = \underbrace{W^{[2]T}dZ^{[2]}}{(n^{[1]}, m)}*\underbrace{g[1]^{'}(Z^{[1]})}_{(n^{[1]}, m)}$

$dW^{[1]} = {\frac{1}{m}}dZ^{[1]}x^{T}$

$db^{[1]} = {\frac{1}{m}}np.sum(dZ^{[1]},axis=1,keepdims=True)$

## 十一、 随机初始化（Random+Initialization）

$W^{[1]} = np.random.randn(2,2);;0.01;,;b^{[1]} = np.zeros((2,1))$ $W^{[2]} = np.random.randn(2,2);;0.01;,;b^{[2]} = 0$