神经网络和深度学习 - Chapter5 深度学习实用技巧
2021-09-20 本文已影响0人
nlpming
训练集、验证集、测试集
- 对于小规模的数据集,训练集验证集划分常采用7/3, 6/4的方式;
- 对于大规模的深度学习训练数据,验证集规模可能小于10%;

- 应该保证训练集和测试集分布式一致的;对于图像分类任务,假设训练集来自网络爬虫;测试集来自用户app上传的图片,则这样会导致训练、测试分布不一致的情况。在训练集上的表现可能比较好,但是测试集上的表现很差。

偏差&方差
- 对于第一幅图是高偏差的例子,此时模型较简单没有很好地拟合数据,称之为过拟合;对于第三幅图,模型能够高度拟合训练集中所有的样本,但是在测试集上效果不好,称之为过拟合;此时模型方差较高。

偏差&方差分析
1. 假设模型在训练集上的误差很低,在验证集上的误差很高,则模型出现过拟合;【高方差】
2. 模型在训练集、验证集上的误差都很高;并且训练集、测试集上误差相差不大;【高偏差】
3. 模型在训练集、验证集上的误差都很高;并且训练集、测试集上误差相差很大;【高偏差 & 高方差】
4. 模型在训练集上、验证集上的误差都很小;【低偏差,低方差】

高偏差&高方差问题诊断
- 首先,判断训练集上的表现怎么样?如果训练集上的表现很差,则证明模型出现欠拟合问题;通过增加网络复杂度、使用新的网络结构可以解决欠拟合问题;
- 其次,判断模型在验证集上的表现怎么样?如果在训练集上的表现很好,验证集上的变现很差则出现了过拟合问题;通过增加更多的训练数据、正则化、增加dropout、早停止等方法解决过拟合问题。

正则化
- 逻辑回归,加入正则化的目标函数如下。常用的正则化方法为L1和L2正则化;

-
神经网络加入正则化项;注意:
是一个矩阵;
神经网络加入正则项.png
为什么正则化能防止过拟合?
-
假设当
很大的时候,为了使得损失函数比较小,则参数
需要比较小;相当于加入正则化对神经网络中的参数取值范围做了一定的约束。
image.png
-
另外一个直观的理解,假设激活函数使用的tanh激活函数。当
很大的时候,
应该很小;此时
的取值应该也很小,这个时候激活函数的输出趋于线性函数。这样就使得其实将神经网络结构给简化了,因为线性激活函数无论堆叠多少层都与逻辑回归是一样的。
image.png
Dropout防止过拟合
- dropout正则化:对于每个样本某层不同的神经元以一定的概率将神经元的激活值置为0;dropout一般有一个参数keep_prob表示保留这个神经元的概率,即不将其神经元激活值置为0。通过这种方式,其实是相当于每次都学习一个较小的网络。
- 一般dropout正则化在以一定的概率将神经元激活值置为0后,还需要除以keep_prob使得激活值的期望不发生变化。在测试阶段一般不使用dropout,需要将keep_prob设置为1.0。

- 一般对于不同的层,可以设置不同的dropout参数;对于参数数量较多的网络层, 一般将keep_prob设置的较小;一般在模型训练中首先不使用dropout,即将参数keep_prob设置为1.0,使得模型过拟合。然后再加入一定的dropout。

其它解决模型过拟合的方法
- (1)数据增强: 比如对于图像分类任务,可以将图片进行翻转,或者裁剪增加训练数据。
- (2)Early Stopping方法: 提前停止训练,即在一定的更新次数内验证集损失没有下降的话则停止训练。

归一化输入数据
- 归一化输入数据,能够加速神经网络的训练过程;假设不同的特征之间,取值范围差别很大则需要将输入数据进行归一化。例如
。归一化输入数据后,损失函数等高线更圆一点使得梯度下降可以更快速的找到局部最优值。


梯度消失&梯度爆炸问题
- 下面的例子中假设,激活函数为
;则经过
层之后的
计算公式如下。
- 当
的取值小于1的时候,经过多个矩阵的相乘最终的激活值非常的小,梯度值也非常的小;导致网络参数
的更新非常的慢,出现梯度消失问题。当
的取值大于1的时候,导致参数的梯度值非常的大出现梯度爆炸问题。

神经网络权重初始化
- 神经网络权重初始化,能够一定程度的缓解梯度消失和爆炸问题。一般将参数初始化为,均值为0方差为
的分布或者在一个给定的区间
内采用均匀分布来初始化参数。常用的参数初始化方法:Xavier初始化 将参数初始化为均值为0,方差为
的分布。

梯度检验
- 检测导数计算是否正确,利用导数的定义公式。


- 如何实时梯度检验?对每一个参数\theta,计算近似梯度值和真实计算得到的梯度进行对比;计算欧式距离,看误差是多少。

- 梯度检验时注意事项;

参考资料
- L1正则化引起稀疏解的多种解释 https://zhuanlan.zhihu.com/p/50142573