Input layer -> Hidden Layer -> Output Layer
前向传播的核心思路主要包括两层,先对前一层的激活值进行线性组合再加上偏移值,再通过对前一步所得到的结果施加激活函数实现非线性化。
Input $A^{l-1}$, output $Z^{l},A^{l}$
$$
w^{T} = \begin{bmatrix}
w_{1}, w_{2}, \dots, w_{n_{l-1}}
\end{bmatrix}
$$
在前一层激活值的基础上,我们对其进行线性变换,得到当前层的 $z^{l}$ 作为激活函数的输入值
$$ z^{l} = w^{l}a^{l-1} + b^{l} $$
将其整体向量化以后,我们可以得到:
$$ Z^{l} = w^{l}A^{l-1} + b^{l} $$
向量化即为将 m 个样本集所对应的高维向量堆叠成为矩阵
$$
\begin{align} \\
&w^{l}\in \mathbb{R}^{n_{l}n_{l-1}} \\
&a^{l} \in \mathbb{R}^{n_{l}} \\
&A^{l} \in \mathbb{R}^{n_{l}m}
\end{align}
$$
[!Note] Why Activation Function
如果整个神经网络的中间层均采用线性函数,那么堆叠多层神经网络没有任何意义,因为均可用一次线性变化完成
[!Important] 激活函数的种类
$$
\begin{align}
&\sigma(z) = \frac{1}{1+e^{-z}} \\
&\frac{d}{dz}\sigma(z) =\sigma(z)(1-\sigma(z))
\end{align}
$$
$$
\begin{align}
& \tanh(z) = \frac{e^{z} - e^{-z}}{e^{z} + e^{-z}} \\
& \frac{d}{dz}\tanh z = 1-(\tanh z)^{2}
\end{align}
$$
$$ g(z) = max(0,z) $$
$$ pReLU(x) = max(0,x) + \alpha min(0.x) $$
完成正向传播的计算框架后,我们需要对随机初始化得到的参数进行进一步优化,而这一步则依赖于梯度下降实现,Logistic Regression
为了实现梯度下降,最核心的步骤即为计算复合函数的导数,然后通过梯度下降实现对 cost function 的优化
Cost Function:
$$ J(W^{1},\dots,W^{L},b^{1},\dots,b^{L}) = \frac{1}{m}*\sum_{i=1}^{m}\mathcal{L}(\hat{y},y) $$
计算框架:从 J 往前一直求所对应的 W,b 对应的偏导,在通过梯度下降完成一次迭代优化
Input $dA^{l}$, Output $dZ^{l-1},dA^{l-1}$,同时得出的 $dW^{l},db^{l}$
$$
\begin{align}
&dZ^{l} = dA^{l}*g^{l’}(Z^{l}) \\
&dW^{l} = \frac{1}{m}dZ^{l}A^{[l-1]T} \\
&db^{l} = \frac{1}{m}np.sum(dz^{l},axis=1,keepdims=true) \\
&dA^{l-1} = W^{[l]T}dZ^{l}
\end{align}
$$
然后进行梯度下降即可
$$
\begin{align}
&W^{l} = W^{l} -\alpha dW
&b^{l} = b^{l} -\alpha db
\end{align}
$$
深层网络能够通过隐藏层深度的逐级递增实现对输入数据的复杂特征的逐步学习,而相比之下浅层神经网络想要达到相同的学习效果可能需要呈指数级别增长的节点。