深层神经网络参数调优(一)——方差、偏差与正则化
(原创内容,转载请注明来源,谢谢)
一、概述
现在来到ng【深层神经网络参数调优】专题的学习,这部分主要是对深度学习过程中,需要涉及到的参数、超参数的调优的方法与技巧。
二、样本集的使用
1、三个集
在深度学习中,为了检验算法的效果,通常会设置训练集、验证集和测试集。
训练集用来训练分类器,得到最低代价函数情况下,各层网络对应的w、b。
验证集用来调试的,目的是为了获得最优的超参数,如学习速率α、正则化因子λ等。
测试集用来验证训练集得到的结果,确认错误率、召回率、查准率都在正常水平。
2、样本集使用
通常,如果数据量不大(如万级别),一般来说,分成三个集的比例训练:验证:测试 = 6:2:2。
当数据量非常大的时候(如百万以上),则并不需要那么多的数据进行验证和测试,反而会大量的进行训练,有可能会到99.5:0.25:0.25。
3、数据源
有时候,测试需要在app之类的地方,而这类地方不容易拿到大量数据,会造成训练和测试的数据源不同。这种情况下,至少需要保证测试和验证集是同一个数据源。
三、方差与偏差
1、直观判断
以下图为例,蓝线是拟合出来的分类线,左边高偏差/欠拟合,中间正常,右边高方差/过拟合。
高偏差表示拟合程度不够,会导致训练误差很大;高方差表示训练集过拟合,但是这样会导致验证集无法正常拟合。
2、判别方差和偏差
当测试集的测试结果,不满足情况,就需要判断是过拟合还是欠拟合引起的。首先,假设给定的最终结果的错误率是0%,即所有样本给出的分类结果都是正确的。这个样本分类结果的错误率,称为贝叶斯错误率。下面考虑几种情况:
1)高方差过拟合
当训练集错误率很低,如1%,而验证集错误率比训练集的错误率高得多,如11%,则此时样本很好的被训练,但是过度训练,导致无法很好的对验证集进行判别,此时就成为过拟合。
2)高偏差欠拟合
当训练集错误率较高(这里的较高是相对于贝叶斯错误率),如15%,而验证集错误率和训练集差不多,如16%,则可以看出此时欠拟合,训练集都没有被拟合好。
3)高方差+高偏差
当计算出的错误率,训练集的比贝叶斯错误率高得多(高偏差),验证集的比训练集的还要高得多(高方差),则此时既高方差,又高偏差,如下图所示:
4)正常情况
训练集、验证集错误率相近,且都和贝叶斯错误率相近。
3、调试过程
1)当完成一个模型后,首先会计算训练集的错误率,以判断是否存在高偏差。如果是,则通常会加大神经网络的深度、神经元数量等,再次验证,直到没有了高偏差。
2)没有高偏差后,会计算验证集的错误率,以判断是否存在高方差。如果是,则会拿更多的数据参与训练,或者调整正则化参数,并且重新回到第一步,验证偏差。
3)通常方差和偏差存在一个均衡,很可能一个调整降低了另一个就升高了。但是通常深层的神经网络,可以同时降低两者。
四、正则化
1、概述
正则化,即在代价函数的公式,后面加上一个式子,是对w的计算,目的是为了解决过拟合。正则化通常分为两种——L1正则化和L2正则化,区别在于||w||是否平方。L2用的更频繁。
另外,由于b只是一组数,而w是一个矩阵,印象更大,因此通常正则化项不用考虑b。
2、梯度下降
正则化项加入代价函数后,也要参与梯度下降的计算,经过计算dJ/dw,可以看出加入正则化项后,这个值变大了。即后面调参的时候w=w-αdw的值更小了,因此正则化项的加入,也被称为权重衰减。
3、正则化解决过拟合的原因
1)直观了解
当正则化项的值比较大,而我们对代价函数的优化是让其尽量小,因此也就导致w的值会普遍减小,影响力会逐渐降低,让式子趋于线性。且每层神经元的影响,会被调整成1个神经元的影响,相当于深层单神经元的网络。当λ太大,还有可能出现欠拟合的情况。
2)数学推导
从前面的说明中,已知λ增大会导致正则化的值增大,进而导致w减小。而根据z的计算公式,z=wx+b,w减少会造成z减少。假设激活函数是tanh,则其图像在z很小时,是一个近似线性的图像,即结果趋于线性。
五、总结
本文主要是讨论样本的使用与正则化项,这些是在实际进行深度学习较为实用的内容。
另:已经开通博客园,方便我自己随时复习,朋友们如果想更方便的看历史文章,也欢迎到博客园 http://www.cnblogs.com/linhxx ,不过我比较懒。。两边一起编辑真的好麻烦,我主要还是会在这边发文章,然后阶段性的把文章同步过去。
——written by linhxx 2018.02.04