CV_5全连接神经网络(中)
目录
全连接神经网络(中)
1.梯度消失与梯度爆炸
梯度消失将导致参数无法更新,网络无法继续训练(无解决方法)
eg.sigmoid函数的导数$\in(0,\frac{1}{4}]$使得回传梯度不断变小
梯度爆炸使得步长过大,超出合理区域,使得算法无法收敛
解决方法:限制步长最大值——梯度裁剪
2.激活函数再议
-
一般不使用sigmoid以及tanh函数:
局部梯度特性不利(导数小,容易导致梯度消失)
-
常用relu或者leaky relu函数:
- relu:输入大于0时,梯度恒为1,特性好,利于计算
- leaky relu:基本没有死区(除零点),局部梯度特性最佳
3.梯度算法改进
原有问题:损失函数在不同方向上的变化差异大$\to$在山壁间不断震荡但是在朝低谷方向上行进缓慢(增大步长难以解决)
改进方法:
动量法:利用累加历史梯度信息更新梯度
分析历史数据来消去震荡,从而凸显真正方向
还可以冲出局部最小以及鞍点(常见于高维空间)来找到更好解
自适应梯度法:调整不同方向的学习率 AdaGrad$\to$RMSProp
- 梯度幅度平方大的方向是震荡方向
- 梯度幅度平方小的方向是平坦方向
同时为了纠正当$r\to \infty$时学习率过小的问题,采用了RMSProp方法,修正$r=pr+(1-p)g^2\quad p=0.999(一般情况下)$
ADAM方法:同时使用上述两种方法
通过修正偏差这一步可以解决算法初期的冷启动问题:由于衰减速率以及动量系数均很大,因此无修正偏差的话会导致算法初期学习效率很低
4.权值初始化
有效初始化:使得网络各层激活值和局部梯度的方差在传播过程中一致,因此保证网络中正、反向数据流动
Xaiver初始化——当激活函数为sigmoid或者tanh函数时
采样$N(0,\frac{1}{N})$的高斯分布来初始化
推导过程如下:
HE初始化——当激活函数为Relu时
采样$N(0,\frac{2}{N})$的高斯分布来初始化
5.批归一化
调整权值分布使得输入输出具有相同分布
eg.有32样本,则有32输出$y_1,…,y_{32}$对这32个输出进行归一化(减均值除方差),因此只需要每层每个神经元均进行批归一化即可
经常用于全连接层后,非线性激活函数前