1.过拟合定义+处理
1.1 过拟合概述(低偏差,高方差)
定义 :过拟合简单的描述就是在训练集上的表现很好,但在未见过的测试集上的表现却较差。专业一点的定义就是:给定一个假设空间H,一个假设h属于H,如果存在其他的假设h'也属于H,使得在训练样例上h的错误率小于h',但是在整个实例分布上h'比h的错误率小,那么则称假设h过度拟合训练数据。
危害 :一个过拟合的模型试图连“误差”都去解释,而实际上噪音是不需要解释的,这个解释的过程导致模型的泛化能力较差,模型在预测集上的效果较差,因为误差是不能够代表整体数据的特性的。
1.2 过拟合处理
获取使用更多的数据集 :
解决过拟合的一个比较有效的方法是为模型提供更多的数据,使得数据能尽可能的反应整体的全貌,让模型在数据上充分的学习并不断的修正。但是,现实当中受限于数据搜集成本等多方面因素,搜集无限多的数据集似乎是不可能的,因此,常用的办法是调整已有的数据集,通过添加“噪音”、图像锐化、图像旋转、图像明暗度调节等方法增大数据量。之所以可以这样处理,是因为卷积神经网络在图像识别的过程中有强大的“不变性”规则,即待辨识的物体在图像中的形状、姿势、位置、明暗度都不会影响分类结果。
进一步的数据清洗
导致过拟合的其中一个原因也有可能是数据不纯导致的, 如果出现了过拟合就需要我们重新清洗数据。
采用合适的模型(降低模型复杂度) :
不同的模型对过拟合的返回能力是不同的,一般来说,深度学习中网络深度越大,模型越容易产生过拟合现象
采用模型集成的方式
模型集成即基于现有数据集训练多个模型并进行组合。但是,问题在于模型训练与测试非常耗时,并且,模型组合的方式也非常重要。
使用dropout函数 :
dropout的思想是:(1)训练阶段:在前向传播的过程中, 让某个神经元的激活值以一定的概p继续工作(1-p)的概率停止工作 ,这种方式可以有效的减少隐层节点之间的相互作用,检测器相互作用是指某些检测器依赖其他检测器才能发挥作用。通过这种方式,在每一次“前向传播+后向反馈”过程中,相当于训练了不同的模型并集合了不同的模型,思想上类似于“模型集成”。
(2)测试阶段:权重系数w要乘p,即:pw。原因为:某一隐藏层的一个神经元在dropout之前的输出为x, dropout之后的期望输出为:E=p*x+(1-p)*0=px 。而在测试中,每个神经元都是存在的,因此,为保持同样的数学期望并使得下一层也得到同样的结果,需要调整w→pw. 其中p是Bernoulli分布(0-1分布)中值为1的概率。但是,上边这种方式需要在在激励函数的输入数据计算中在权重w上乘以p进行缩放,这样需要对测试的代码进行更改并增加了测试时的计算量,非常影响测试性能。通常为了提高测试的性能(减少测试时的运算时间),可以将缩放的工作转移到训练阶段,而测试阶段与不使用dropout时相同,称为 inverted dropout :将前向传播dropout时保留下来的神经元的权重乘上1/p(看做惩罚项,使权重扩大为原来的1/p倍,这样测试时不用再缩小权重)。
未进行dropout时的计算:
进行dropout时的计算:
权重衰减
在拟合产生的时候,模型因为要对所有的特征进行拟合,因此在一个原本平滑的拟合曲线上会产生大量的急剧变化的突起或者凹陷,即这些点的导数非常大,且过大的导数值从拟合的模型上来看,数学模型的系数会非常大,即权重也会非常大。而权重衰减(正则化)问题在一定程度上缓解了这个问题,通过对权重值在一定范围内的修正,使其不再偏离一个均值太大,从而降低过拟合的程度。权重衰减的具体做法为:
实际中的使用分为L1和L2正则,即:
公式(1)中C0为损失函数,后半部分为L2正则化相,系数λ为权重衰减系数η为模型学习速率,公式(1)分别对权重ω和误差项b求导可得:
从求导结果中可见,添加了L2正则化项的损失函数不会对误差项b产生影响,而ω的偏导数则多了一项,由此可知,在权值更新的过程当中ω的计算公式变成如下形式:
上式中ωij为对象的第i个特征所对应的第j个权重,δj表示误差反向传播时第j个神经元对应的误差,n为样本总数,xi为对象第i个特征的特征值。从最终的结果中可以看出,n、δj、λ和n均为正数,所以ωij之前的系数必定小于1,因此,起到了对ωij的缩小作用。
Early Stopping
基本思想是判断单签模型的损失值(loss)或者准确率(accuracy)不在发生变化时就停止模型训练。但是,实际情况下模型的loss或者accuracy是在不断的波动中的,因此,可以设定某一个范围,若连续k次出现在这个认为设定的可接受的范围内时,则认为模型已较好的收敛。
学习速率衰减
学习率过大,在算法优化的前期会加速学习,使得模型更容易接近局部或全局最优解。但是在后期会有较大波动,甚至出现损失函数的值围绕最小值徘徊,波动很大,始终难以达到最优。学习速率过小,会严重提升模型的训练成本,收敛速度较慢。所以引入学习率衰减的概念,直白点说,就是在 模型训练初期,会使用较大的学习率进行模型优化 ,随着迭代次数增加, 学习率会逐渐进行减小,保证模型在训练后期不会有太大的波动 ,从而更加接近最优解。
学习速率衰减的类型分为:线性衰减、非线性衰减(tf.train. exponential_decay (learning_rate, global_step, decay_steps, decay_rate, staircase=False, name=None)
Batch_Normalization
该方法的思想是在数据经过卷积层之后,真正进入激活函数之前需要对其进行一次Batch_Normalization,分批对输入的数据求取均值和方差之后重新对数据进行一次 归一化 处理。这样做的好处是对数据进行了一定程度上的预处理,使得无论是训练数据集还是测试数据集都在一定范围内进行分布与波动,对数据中包含的误差进行掩盖话处理,从而增大模型的泛化能力。
2.欠拟合定义+处理
2.1 欠拟合概述(高偏差,低方差)
定义 :欠拟合表示模型未较好的捕捉到数据的特征不能够很好的拟合数据。
2.2 欠拟合处理
增强数据表达能力
模型出现欠拟合的时候是因为特征项不够导致的,可以添加其他特征项来很好地解决。例如,“ 组合 ”、“ 泛化 ”、“ 相关性 ”三类特征是特征添加的重要手段,除此之外,“ 上下文特征 ”、“ 平台特征 ”等等,都可以作为特征添加的首选项。
模型复杂化
包括两种思路:(1)现有模型复杂化:线性模型->多项式模型、增加神经网络的深度等;(2)换更加复杂的模型
调整参数或超参
超参数包括:(1)神经网络中:学习率、学习衰减率、隐藏层数、隐藏层的单元数、Adam优化算法中的β1和β2参数、batch_size数值等;(2)其他算法中:随机森林的树数量,k-means中的cluster数,正则化参数λ等
降低正则化约束
正则化约束是为了防止模型过拟合,如果模型压根不存在过拟合而是欠拟合了,那么就考虑是否降低正则化参数λ或者直接去除正则化项
【注意】 :
一般来说,进一步的增加数据量是没有效果的,欠拟合的本质实际上是模型本身的学习能力不足,此时,增加再多的数据也于事无补。