一、深度学习的实用层面
1. 训练集(train set)、验证集(development set)、测试集(test set)
2.偏置(bias)与方差(variance)
bias-variance trade-off:根据训练集验证集误差来判断
3. 正则化(避免过拟合)
1. L2正则化
正则化作用的直观理解:
2. Dropout正则化(inverted dropout随机反向失活)
![](https://i-blog.csdnimg.cn/blog_migrate/a84e3e6d6e9dbf415cbb5b230fe33994.png)
修正或弥补所需的那20%,确保期望值不变
![](https://i-blog.csdnimg.cn/blog_migrate/5172c2f598002e30e6e5e048e8d2698e.png)
测试阶段不使用Dropout
单元的输入可能被随机清除,不愿意把所有赌注放在一个节点上,产生收缩权重的平方范数的效果
(1)除非算法过拟合,不然不会使用
(2)其缺点是代价函数J不再被明确定义,失去了调试工具。通常先关闭dropout,确保J单调递减,再打开dropout函数。
3. Data augmentation(数据扩增)
4. Early stopping
提早停止训练神经网络,选择参数W范数较小的神经网络
机器学习包括几个步骤:
(1)选择一个算法来优化代价函数J
(2)避免过拟合
也称正交化(Orthogonalization):在一个时间做一个任务。
其缺点是不能独立地处理这两个问题,没有采取不同的方式来解决这两个问题,而是用一种方法同时解决两个问题。
如果不用early stopping,另一种方法是L2正则化。
4.正则化输入
(1)零均值化
(2)归一化方差
注:训练集和测试集归一化的均值和方差相同
如果特征值范围相差很大,则必须使用一个非常小的学习率,学习算法运行得慢
5. 梯度消失与梯度爆炸
权重W只比1略大一点,深度神经网络的激活函数将爆炸式增长;略小一点,激活函数将以指数级递减。
梯度下降算法的步长会非常非常小,将花费很长的时间来学习
6. 权重初始化
调参优先级低
7. 梯度检验
在backprop中执行梯度检验,使用双边误差的方法更逼近导数
技巧:
二、优化算法
1.mini-batch梯度下降法
one epoch一次遍历训练集
mini-batch大小的选择问题:
典型值:64~512(2的指数次方)
2.指数(移动)加权平均
一个大致的思考方向(非正式的数学证明):
相比直接平均的优点:只占单行数字的存储和内存,不用存储太多历史数据,只用带入最新数据。
偏差校正(让平均数运算更加准确)
![](https://i-blog.csdnimg.cn/blog_migrate/1187197ac382506180b4d19705a10b05.png)
当t很大时,偏差修正几乎没有作用。(此时本来紫线基本和绿线重合)
3.动量梯度下降法(Momentum)
纵轴上的摆动平均值接近于0,横轴方向的平均值仍然较大。因而几次迭代后,纵轴方向的摆动变小了,横轴方向运动更快(走了一条更加直接的路径,在抵达最小值的路上减少了摆动)。
在使用梯度下降法或者Momentum时,人们不会受到偏差修正的困扰。
4. RMSprop(root mean square)
纵轴方向的摆动较小,横轴方向继续前进。这样就可以用一个更大的学习率α,加快学习
为了确保数值稳定,加一个很小的数
与Momentum的相似之处:可以消除梯度下降中的摆动,允许使用一个更大的学习率,从而加快算法的学习速度。
5. Adam(Adaptive Moment Estimation)
尝试不同的α值,其他的取默认值就可以了
6. learning rate decay(学习率衰减)
7. 局部最优的问题
在高维空间中(maybe2000个参数),更多梯度为0的点不是局部最值(local optimum),而是鞍点(saddle point)
平稳段会减缓学习,这也是复杂的学习算法能够加速学习的地方。