1. 过拟合基础
过拟合产生原因: 训练数据不够多/overtraining
过拟合指的是,随着训练过程,网络在训练数据上的error逐渐减小,但是在验证集上的error却渐渐增大.如下图所示:
原始数据集一般分为: training data, validation data, testing data
validation data就是用于避免过拟合的,在训练过程中,根据在validation data上的accuracy来确定一些超参数(例如迭代次数,学习速率learning rate);
testing data是用来计算梯度更新权重的.
避免过拟合的方法: early stopping,数据集扩增(data augmentation),正则化,dropout
2. 避免过拟合方法
2.1 正则化方法
正则化方法: 防止过拟合,提高模型泛化能力.加入正则化项后,模型能有唯一解,若只用最小二乘可能有无数个解.
L0范数是指向量中非0的元素的个数.即让参数是稀疏的,L1和L0都可以实现稀疏,但L1比L0能更好的被优化求解.
(1) L1 regularization: 在损失函数加上一个L1正则化项,即所有权重w的绝对值的和.其公式如下所示:
计算导数,其权重w的更新规则为:
当w为正时,更新后的w变小;当w为负时,更新后的w变大,其最终效果就是让w朝0接近,使得网络中的权重尽可能为0,减小了网络复杂度,防止过拟合.
需要注意的是,当w为0时,规定sgn(0)=0.
(2) L2 regularization: 在损失函数后加上一个正则化项,即所有参数w的平方的和,除以训练集的大小n,公式如下:
lamda是正则项系数,权衡正则项和原始代价函数C0的比重,系数1/2是为了后面求导的方便.
下面是w的更新过程
L2正则化项加入后,w的更新公式新增加了一个减正数的操作,这将产生相比之前减小w的效果,即权重衰减.
优化时,使得w的每个元素都很小,都接近于0,但与L1不一样,w的各分项又不会等于0.
一般认为,更小的权重w,表示网络的复杂度更低,对数据的拟合程度刚刚好(奥卡姆剃刀).实际中也验证了这一点.(不懂?)
2.2 dropout方法
正则化方法是通过修改代价函数来实现的,dropout则是通过修改神经网络本身来实现的,是一种在训练网络时用的一个技巧.
初始神经网络如下:
在训练开始时,随机地"删除"一半的隐层单元,视他们不存在,得到右边的图.在训练过程中,保持输入和输出层不变,按照BP算法更新神经网络中的权值(虚线连接的单元不更新);每次迭代过程中随机地删掉一半隐层单元,直至训练结束.
防止过拟合的原因: 运用了dropout的训练过程相当于训练了很多个只有半数隐层单元的神经网络(半数网络),每一个这样的半数网络,都可以给出一个分类结果,有的结果是正确的,有的是错误的,随着训练的进行,大部分半数网络都可以给出正确的分类结果,那么少数的错误分类结果就不会对最终结果造成大的影响.
2.3 数据集扩增方法
在深度学习中,更多的训练数据,意味着可以用更深的模型,训练出更好的模型.
但有时候更多的数据意味着需要消耗更多的人力物力.例如人工标注,效率特别低.
可以通过在原始数据上做些改动,得到更多的数据,以图片数据集为例,可以做如下变换:将原始图片旋转一个小角度;添加随机噪声;截取原始图片的一部分.
2.4 参数稀疏的好处
(1)能实现特征的自动选择.一般地,输入特征中大部分和最终的输出y没有关系或者不提供任何信息,在最小化目标函数时会考虑这些因素的影响,最然最后可以得到很小的训练误差,但是在预测新的样本时,由于考虑这些不相关的信息会造成最后结果的偏差.稀疏规则化算子的引入会学习地去掉这些没有信息的特征,即把这些特征的权值置为0.
(2)可解释性.使得模型便于解释.例如在考虑患病和提取到的很多特征的联系时,特征太多时,医生会很难分析,反之,若训练得到的参数只有几个非零,这说明这几个非零的特征在患病分析上提供的信息是巨大的,决策性的,这样便于分析和解释.