Hello 大家好,今天我们来讲讲在深度学习中面对过拟合现象的解决办法。
之前我们说过欠拟合和过拟合的现象,我们再来用一个栗子强化一下:
假定我们现在是在做一个分类模型,就是区分男女的模型吧,那么这三个模型的效果我们可以从图上看出来:
第一种明显有很多男的被划分到女的集合里了,这种现象就是欠拟合
第二种感觉比较正常,虽然有个别男的被划分到女的集合里,但是考虑到现实中部分男性表现出和女性类似的特征,比如长头发什么的,所以还是正常
第三种乍一看确实每个男的和每个女的都分开了,但是明显过了,看它这么牛逼的模型都觉得能区分出人妖来,这么牛逼的模型自然需要很多学习的参数,比如喉结大小、有没有胡须、头发长短等等,但现实中,很多样本提炼不出这么多特征,这种现象就是过拟合
言归正传,我们今天就是来介绍一种解决过拟合的方案:正则化
原理小究
我们可以看到造成过拟合的现象的模型有这么几个特点:
需要提取的很多很多特征 X1 X2 ... Xn
模型的各种参数也很多 W1 W2 ... Wn
而我们知模型的参数是通过机器学习出来的,那么最简单的方式让模型防止过拟合就是让 n 减少,或者说控制参数数量。
Q:那么机器学习中怎么控制参数呢?
A:在机器学习中,我们是通过损失函数来不断调整和训练我们模型的参数的,那么我们就可以通过给损失函数增加一个惩罚项来达到控制最后参数的目的,也就是正则化。
假设我们现在模型的损失函数是下面这样:
我们现在需要修正一下这个损失函数变为:
这里 r() 函数就是惩罚项。那么如果 r() 过大,ℓ() 再小也没有用,相反,r() 过小,ℓ() 再大也没有意义,这样就可以有效防止过拟合的现象了。
L2 范数正则化
那么我们现在就是要构造这么一个惩罚函数或者叫正则函数来防止过拟合,在数学中有个范数概念,简单介绍几种范数:
0 范数,向量中非零元素的个数。
1 范数,为绝对值之和。
2 范数,就是通常意义上的模,也就是向量各元素的平方和然后求平方根。
经过计算机大佬们反复努力发现,0 范数的求解难度太高,是一个 NP 完全问题,于是就想用一定条件下的 1 范数来代替 0 范数,但是 1 范数也有个问题,就是让 1 范数最小很有可能就是让权重参数矩阵都为 0 ,而 2 范数是让权重参数都接近于 0 ,更符合现实中思考问题的方式,比如你觉得头发长短对性别肯定有一丝丝影响,要表现出这一丝丝影响,又要防止过拟合,你可能就会考虑 2 范数。
因此在深度学习中,常喜欢使用 L2 范数的正则函数,也就是酱的:
其中超参数 λ>0 。这样的惩罚函数导致:
当所有权重参数 w 都为0时,惩罚项最小
当 λ 较大时,惩罚项在在损失函数中的比重就会比较大,这样就会导致我们学习到的权重参数都接近 0
当 λ 为 0 时,惩罚项不起作用
小结
至此,深度学习中关于解决过拟合的一种方案:正则化就简单科普完了,我稍微总结一下:
正则化是为了解决模型过拟合的问题
由于 0 范数求解困难, 1 范数又有一定局限性,深度学习中常用 2 范数作为正则化函数
好了,下回如果发现你的模型过拟合了,是不是也可以考虑一下 L2 范数正则化呢?
领取专属 10元无门槛券
私享最新 技术干货