参考:
https://blog.csdn.net/u012162613/article/details/44261657
https://blog.csdn.net/liujiandu101/article/details/55103831
1. 正则化方法:防止过拟合,提高泛化能力
2. Dropout
L1、L2正则化是通过修改代价函数来实现的,而Dropout则是通过修改神经网络本身来实现的,它是在训练网络时用的一种技巧(trike)。它的流程如下:
假设我们要训练上图这个网络,在训练开始时,我们随机地“删除”一半的隐层单元,视它们为不存在,得到如下的网络:
保持输入输出层不变,按照BP算法更新上图神经网络中的权值(虚线连接的单元不更新,因为它们被“临时删除”了)。
以上就是一次迭代的过程,在第二次迭代中,也用同样的方法,只不过这次删除的那一半隐层单元,跟上一次删除掉的肯定是不一样的,因为我们每一次迭代都是“随机”地去删掉一半。第三次、第四次……都是这样,直至训练结束。
以上就是Dropout,它为什么有助于防止过拟合呢?可以简单地这样解释,运用了dropout的训练过程,相当于训练了很多个只有半数隐层单元的神经网络(后面简称为“半数网络”),每一个这样的半数网络,都可以给出一个分类结果,这些结果有的是正确的,有的是错误的。随着训练的进行,大部分半数网络都可以给出正确的分类结果,那么少数的错误分类结果就不会对最终结果造成大的影响。
更加深入地理解,可以看看Hinton和Alex两牛2012的论文《ImageNet Classification with Deep Convolutional Neural Networks》
经验:原始输入每一个节点选择概率0.8,隐藏层选择概率为0.5
dropout的优点:
- 相比于weight decay、范数约束等,该策略更有效
- 计算复杂度低,实现简单而且可以用于其他非深度学习模型
dropout的缺点:
- 当训练数据较少时,效果不好
注意:
dropout训练过程中的随机过程不是充分也不是必要条件,可以构造不变的屏蔽参数,也能够得到足够好的解。
3. 数据集扩增(data augmentation)
“有时候不是因为算法好赢了,而是因为拥有更多的数据才赢了。”既然这样,收集更多的数据不就行啦?如果能够收集更多可以用的数据,当然好。但是很多时候,收集更多的数据意味着需要耗费更多的人力物力,有弄过人工标注的同学就知道,效率特别低,简直是粗活。
所以,可以在原始数据上做些改动,得到更多的数据,以图片数据集举例,可以做各种变换,如:
- 旋转/反射变换(rotation/reflection)
- 翻转变换(flip)
- 缩放变换(zoom)
- 平移变换(shift)
- 尺度变换(scale)
- 对比度变换(contrast)
- 噪声扰动(noise)
更多的数据可以使算法表现得更好。在机器学习中,算法本身并不能决出胜负,不能武断地说这些算法谁优谁劣,因为数据对算法性能的影响很大。
4. 提前停止(Early Stopping)
在模型训练过程中经常出现随着不断迭代,训练误差不断减少,但是验证误差减少后开始增长。
提前停止(Early Stopping)的策略是:在验证误差不在提升后,提前结束训练;而不是一直等待验证误差到最小值。
为什么提前终止具有正则化效果?
- 与L2正则化的原理相似,都是使得参数 ω ω 趋于一个合适的大小。
- 提前终止可以在参数 ω ω 变得越来越大的时候,提前结束这个变化过程,避免太大的 ω ω 出现,如此也就防止了过拟合。
提前终止的优点:
- 有效性,提前终止了训练,所以节省了计算时间。
- 简单性,不需要像L1、L2正则化那样设置更复杂的损失函数,因此相比之下,梯度下降的计算也更简单。此外,L2正则化需要设定一个 λ λ 的超参数,需要尝试多个值以得到最合适的 λ λ 。与之相比,提前终止只需要确定一个训练时间就能够自动选择最佳参数。
- 在很多情况下具有与L2相近的正则化效果。
提前终止的缺点:
- 需要额外的存储空间来存储最佳参数副本(但这一点可忽略不计)。
- 比较显著的代价是,训练期间需要定期地评估验证集(如果评估的间隔设置得太短,会显得过于频繁,延长了训练的时间;如果间隔太长,可能会与理论最佳参数偏差太大)。
- 最为致命的一点是,在过拟合情况出现前就提前终止的同时,其实也提前终止了优化的过程,这就导致了对于代价函数的优化程度可能还不够。
5. 多任务学习
多任务学习是通过合并几个任务中的样例来提高泛化的一种方式。正如额外的训练样本能够将模型参数推向更好的泛化能力值一样,当模型的一部分被多个额外的任务共享时,这部分被约束为良好的值,通常会带来更好的泛化能力。
单任务学习
多任务学习
6. 集成化方法(Ensemble Methods)
Bagging方法是一种通用的降低泛化误差的方法,通过合并多个模型的结果,也叫作模型平均,高级称呼为集成化方法。
Bagging的策略很多,例如不同初始化方法、不同mini batch选择方法、不同的超参数选择方法。
与之对应的集成方法是Boosting,通过改变样本权重来训练不同模型。
集成学习之bagging & boosting
7. 稀疏表示(sparse representation)
引入稀疏性:通过引入维度比数据维度低很多的字典矩阵***B,用一个尽量稀疏的向量h与字典矩阵B的乘积来尽可能表示原数据的向量y,那么这个稀疏的向量h就称为y的稀疏表示*。
两种获得稀疏性的方式:
- L1正则化惩罚项系数,使得参数变得稀疏。
- 通过对字典学习求解获得稀疏表示。
为何稀疏表示具有正则化效果?
- 前面已经说过,参数的稀疏性能够降低参数总量的大小,从而诱导模型趋于简单,也就有效防止过拟合的情况的发生了。
- 奥坎姆剃刀原理。两个模型的解释力相同,选简洁的那个。