吴恩达:深度学习的实用层面技巧

测试开发和训练集

1 迭代过程,不断尝试和改进,我们需要不断改进来得到最好的超参数

2 大数据时代,百万级别的数据量,验证集和测试集逐渐比例变小。以前的7/3比例发生了变化,可以变成99/0.5/0.5

3 由于深度学习需要大量的数据,所以很可能训练集和测试集不处于一个分布

4 如果没有测试集,只有训练集和验证集也可以

偏差和方差

1 欠拟合,高偏差,过拟合,高方差

2 高方差时,训练集误差小,测试集误差大。高偏差时,训练集和测试集误差都比较大。偏差方差都很高时,训练集误差很大,测试集更大。

3 同时高偏差和高方差可能是过拟合了部分数据,欠拟合了部分数据。这在高维度的情况下很常见。

4

现象 应对措施
高方差 使用更多数据
高方差 正则化
高方差 改变神经网络结构
高偏差 更深更大的网络
高偏差 训练更差时间
高偏差 改变神经网络结构

5 在大数据时代,只要有更多的数据和更大的网络,可能可以在不影响方差偏差一方的时候减少另一方

正则化

  1. 所谓正则化系数即在目标优化函数中加入一项,该项表示神经网络中各权重的大小
  2. L1正则化系数:$\frac {\lambda} {2m} \sum_{i=1}^{m}|w| $
  3. L2正则化系数:$\frac {\lambda} {2m} \sum_{i=1}^{m}{w^Tw} $
  4. 为什么L1不好呢?因为会使得w中有很多0
  5. $\lambda$也是一个系数,需要进行选择
  6. L2正则化系数又称权重衰减,因为加上L2系数之后,使用w=w-dw公式更新w时,dw中会多一项$\frac \lambda mw$,于是相当于每次w更新都要乘以$1-\alpha \frac \lambda m$,使得权重变小。
  7. 正则化项为什么能起到作用呢?可以这样看

$$
目标函数 = 原目标函数 + L正则化系数
$$

所以w会变小,使得正则化系数变小,当w较小接近0时,例如$z=wx+b$便会使得z比较小,z进入激活函数的接近0的那一小段,那一小段接近线性部分,于是整个神经网络不会过于非线性,于是成功防止过拟合的发生。

dropout

dropout又称随机失活,是每次取一部分数据进行训练时,随机令一部分节点值为0(并且去掉其连接),相当于精简了一部分网络,然后让其余节点除以失活概率(使得最后输出的期望相同),利用输出进行反向传播,更新未失活的链接的权重,完成后恢复被删掉的神经元,再次进行下一轮训练。

dropout可以有效防止过拟合,原因可能有以下几种:

  • 取平均的作用:相当于用不同的数据训练不同的网络,最后取得这些网络的平均值,而不同的网络产生不同的过拟合,一些互为“反向”的拟合相互抵消就可以达到整体上减少过拟合。
  • 减少神经元的依赖:随机失活神经元,使得一些特殊的依赖关系得以减轻
  • 进化论:类似于有性繁殖,生成新的变种,防止过拟合,提高物种适应能力。

缺点:使得梯度下降的优化函数变得复杂

其余几种防止过拟合方法

  • 扩增数据量:但是数据可能不好收集,可以利用已有的数据来添加新数据,例如将图片反转或截取,来扩增数据,提高鲁棒性。
  • 提前停止:观察目标函数与训练时间的关系,在其达到最低点时停止训练。但此法有缺点,混淆了优化目标函数和防止过拟合两个目标。
  • 归一化输入:利用数据分布的$\mu和\sigma$,来将输入的不同特征归一化,使得参数落在相似的范围内。

梯度消失、爆炸以及其解决办法

已经知道,我们是通过链式法则来求取反向传播时的导数,例如一个如图所示的神经网络:

求偏导可知:

可见,有一项$\sigma w$是不断重复的,呈指数级别上升或下降,如果该项略大于1或小于1,则会使得梯度变得极大或极小,影响神经网络训练效果。

一般而言,常见解决方法有以下几种:

  • 使得激活函数的导数值$\sigma$尽量接近1,可以选择ReLU激活函数
  • 批量归一化:在对于每次一层的输出都进行归一化,然后再传入下一层。归一化方法:求出$\mu和\sigma$,然后$\frac {x-\mu} {\sigma}$。
  • 合理初始化权重:对于n个节点的层数,将权重初始化为$\frac1n$为均值的高斯分布等
  • 减小学习率,回避梯度爆炸。

梯度检查的小技巧

对于求导出来的$d\theta_j$,怎么判断它对不对呢?

使用算式:
$$
d\theta_{check}=\frac {J(\theta_1,\theta_2…\theta_j+\epsilon…..)-J(\theta_1,\theta_2…\theta_j-\epsilon…..)} {2\epsilon}
$$
然后计算两者的距离:
$$
distance = \frac {||d\theta-d\theta_{check}||} {||d\theta||^2+||d\theta_{check}||^2}
$$
如果distance很小说明求导正确。

梯度检测不能和dropout一起用,因为$J(\theta)$不固定。

查看更多

所有的文章都会在我的博客和我的知乎专栏同步进行更新,欢迎阅读


本文结束啦感谢您的阅读
生活不易,求打赏
0%