神经网络
- 输入层: x1, x2…
- 隐藏层: a1, a2… 计算的中间过程
- 输出层: y1, y2…
神经网络结构越复杂, 能解决的问题就越复杂
将输入层数据使用 $z = w_1x_1 + w_2x_2 + … + w_nx_n + b$ (即为 $Z = W^TX+b$) 计算后, 通过激活函数 sgn/logistic/… 等非线性函数转换得出隐藏层 a
$$
\begin{cases}
z=w^Tx+b \
a=f(z) \
\end{cases}
$$
每个隐藏层又作为输入层参与下一层网络的计算.
激活函数(非线性转换)
- logistic
- sgn
- relu: >0 时导数=1, <=0 时导数=0
- tanh
全连接神经网络
网络结构为每一层的每个神经元都与下一层的所有神经元相连接.
预测过程
在已知神经网络上, 传入变量, 得到结果, 就是预测过程.
训练过程(有监督)
训练过程(反向传播)
- 前向传播 (预测过程)
- 求得损失
- 求得梯度
- 梯度下降优化参数, 降低损失
通过反复进行训练过程, 实现参数优化
完成训练的标记
- 求损失: $J(w) = \frac{1}{2}(\hat{y} - y)^2$
- 求 $w$ 梯度(导数): $\frac{\partial J(w)}{\partial w_{11}^{(1)}} = 所有路线的偏导数相加$
- 梯度下降更新 $w$: $w_{11}^{(1)’} = w_{11}^{(1)} - Lr * \frac{\partial J(w)}{\partial w_{11}^{(1)}}$
其中 Lr
为 Learning rate 学习率, 较大时容易在最优解附近跳跃, 较小学习过程漫长.
最终在损失不再下降或者下降的幅度很低时, 或者达到指定学习次数后, 训练完成.
自动微分
缓存每个节点微分的值, 需要的时候直接取用
$\frac{\partial J}{\partial w^{1}{11}} = \frac{\partial J}{\partial z^{1}{1}} * \frac{\partial z^{1}{1}}{\partial w^{1}{11}}$
$\frac{\partial J}{\partial w^{2}{11}} = \frac{\partial J}{\partial z^{1}{1}} * \frac{\partial z^{1}{1}}{\partial w^{2}{11}}$
在记录了每一层 $\partial z$ 之后, 运算就无需每次从后向前一步步运算.
通过自动微分向前逐步找到前面的 $w$ 值的过程, 成为前向传播.