参考:
深度学习是一个典型的迭代过程,迭代的效率很关键
创建高质量的训练数据集,验证集和测试集有助于提高循环效率
关键数据:
训练集误差、验证集误差
如果最优误差(贝叶斯误差,人分辨的最优误差)非常高,比如15%。那么上面第二种分类器(训练误差15%,验证误差16%),15%的错误率对训练集来说也是非常合理的,偏差不高,方差也非常低。
(以上基于假设:基本误差很小,训练集和验证集 来自相同分布)
根据这两个指标,更好的优化算法。
正则化有助于防止过拟合,降低方差
当λ设置的很大的时候,最终W会变得很接近于 0,神经网络中的很多单元的作用变得很小,整个网络越来越接近逻辑回归
λ 增大时,整个神经网络会计算离线性函数近的值,这个线性函数非常简单,不是复杂的高度非线性函数,不会发生过拟合
L2 正则化是 训练深度学习模型时最常用的一种方法
以上是一个样本的过程,其他样本也是同样的过程。
实施 dropout
举例:最常用的方法 - inverted dropout(反向随机失活)
用一个三层网络举例
keep-prob
值(不同的层,可以使用不同的值),缺点是:需要交叉验证更多的参数dropout
一大缺点就是:代价函数不再被明确定义,每次迭代,都会随机移除一些节点,想检查梯度下降的性能,实际上是很难进行复查的
dropout
,将keep-prob
设置为 1,确保 J 函数单调递减dropout
水平翻转;随意剪裁旋转放大(这种方式扩增数据,进而正则化数据集,减少过拟合成本很低)
对于数字识别图片,我们可以进行旋转,扭曲来扩增数据集
在验证集误差变坏的时候,提早停止训练
early stopping 缺点:不能同时处理 过拟合 和 代价函数不够小的问题
不使用 early stopping ,那么使用 L2 正则,这样训练时间可能很长,参数搜索空间大,计算代价很高
early stopping 优点:只运行一次梯度下降,可以找出 w 的较小值,中间值,较大值,无需尝试 L2 正则化超参数 λ \lambda λ 的很多值
归一化输入,可以加速训练
注意: μ,σ2 是由训练集得到,然后用于其他所有数据集
在非常深的神经网络中,权重只要不等于 1,激活函数将会呈指数级递增或者递减,导致训练难度上升,尤其是梯度与 L 相差指数级,梯度下降算法的步长会非常非常小,学习时间很长。
上面讲到了梯度消失/爆炸,如何缓解这个问题?
这样设置的权重矩阵既不会增长过快,也不会太快下降到 0 从而训练出一个权重或梯度不会增长或消失过快的深度网络 我们在训练深度网络时,这也是一个加快训练速度的技巧
在反向传播时,有个测试叫做梯度检验
我们使用双边误差,
不使用单边误差,因为前者更准确。
梯度检验帮助我们发现反向传播中的 bug
dropout
同时使用,可以关闭dropout
,进行梯度检验,检验正确了,再打开dropout