深度学习tips-降低模型的方差
请双击666,没点关注的老铁们请点波关注。没有简书账号的老铁们也可以关注CSDN同名博客。
bias和variance在深度学习中是两个不同的概念,一个是偏差,一个是方差,这两个中文名字反而更让人混淆一点。
-
偏差可以理解为训练出来的模型和真实数据分布的差距。
例如偏差小,说明模型和真实分布相差不大;偏差很大,说明训练出来的模型和真实分布相差较大。例如只用了一个直线,进行了一个复杂分布的二分类。很明显这个模型的偏差是很大的。 -
方差很好理解,在数学上就是统计模型离散程度的计量,在深度学习中,我个人把它看做可以代表模型的复杂度,或者说是对数据分布的拟合程度。方差越大,模型就越复杂,也就是说对训练集的拟合程度越好,直至过拟合。
综上所述,我们需要一个偏差小一些,方差也不是太大的“适中”的模型。
如果训练好一个模型之后偏差大,我们可能是选择的算法不好或者是模型不对,需要修改模型。而方差大呢?(过拟合了)
以下是一些降低方差的方法并附上简单解释:
-
增加数据集
最显而易见的办法,模型过拟合了,增加数据集,然而很多时候并不会有我们希望的那么多数据集,所以重点是以下的方法。
再说一些吴恩达介绍的trick:如果是图像处理,可以把图像反转,或者是在留下重要内容的前提下的变换角度重新剪裁。这样可以成倍增加数据集。 -
正则化 regularization
就是在loss function后边加一个罚项λ||w||22,用来代表模型的复杂度。这个罚项的具体含义是w的L2范式,也就是所有w的平方和。如果λ很大,也就是这个罚项占的比重很大,模型倾向于变得简单,λ小的话,模型倾向于变得相对复杂一点。
这种方式的复杂之处在于要多次的训练才能找到一个较为合适的λ。 -
dropout
一种丢弃部分神经元来使模型得到简化的方法。与L2正则化功能类似。每次在训练过程中,数据到达的每一层都会根据设置好的比例随机放弃一些神经元,因此模型不会再过度的“倚重”某些神经元,给它们过大的权重,因为每次有效的神经元都是不同的,从而所有神经元都会获得一定的权重。达到防止过拟合的效果。 -
early stopping
图中黄线是训练集算是函数,红线是验证集损失函数,可以看出,虽然训练集一直在降低,但是到了验证集的效果就不是那么理想,所以提前结束训练是一种方式。
这种方式只需要一次训练即可,不需要重复多次来寻找合适的参数。