1.为什么引入非线性激励函数?
因为如果不用非线性激励函数,每一层都是上一层的线性函数,无论神经网络多少层,输出都是输入的线性组合,与只有一个隐藏层效果一样。相当于多层感知机了。所以引入非线性激励函数,深层网络就变得有意义了,可以逼近任意函数。
2.常用的激励函数
1)sigmoid:将输出实值压缩到0-1之间。 缺点:(输入非常大或非常小的时候)容易梯度消失;sigmoid函数是非0均值的,下一层的神经元将从上一层神经元得到的非0 均值的信号作为输入,再结合w计算梯度,始终都是正的。(可根据batch调节)
2)Tanh:是0均值的。
3)Relu(修正线性单元):好处:收敛快,求梯度简单。具有稀疏特性。
(相比于sigmoid:sigmoid反向传播求误差梯度时,求导计算量很大,而relu求导简单;对于深层网络,sigmoid反向传播时,在sigmoid接近饱和区时,变换太缓慢,导数趋0,从而无法完成深层网络的训练;Relu会使一部分神经元的输出为0,造成了网络的稀疏性,并且减少了参数的相互依存关系,缓解了过拟合问题。)
缺点:训练的时候很脆弱,一个非常大的梯度流过一个Relu神经元后,不会对其他数据有激活现象了,设置较小的学习率,这种情况会不那么频繁。
参考【这里】
3.常用损失函数[更多]
0-1损失; 感知损失
Hinge损失; log损失、交叉熵
平方损失; 指数损失; 绝对值损失
4.BP,SGD公式推导
5.参数的更新方式
(1) Vanilla update:
(2) Momentum update动量更新:
# integrate velocity
# integrate position
(3) Nesterov Momentum:
(4) Adagrad:
(自适应的方法,梯度大的方向学习率越来越小,由快到慢)
(5) Adam: