在深度学习中为什么正则化技术可以解决模型算法的过拟合问题?
限时打折
正文
如何解决过拟合问题?一种方式就是增加足够多的训练数据,另外一种方式就是使用正则化的方式,本节课程将讲解为什么正则化可以解决过拟合?为什么它可以减少高方差问题?
我们先来看一下欠拟合、正常拟合、过拟合这三种情况:
上面的三张图中第一个是欠拟合(高偏差)。第二个是正常集合。第三个是过拟合(高方差)
假如现在对于上面的数据,我们有一个过拟合的神经网络如下所示:
那么此时我们为了解决这个神经网络的过拟合的问题,我们可以为我们的神经网络的代价函数添加正则化项(是弗罗贝尼乌斯范数):
当为损失函数添加好了正则化项的时候,确实能够有效的解决过拟合的问题,那么此时的问题就是为什么缩2范数,或者弗罗贝尼乌斯范数或者参数可以减少过拟合?
直观上理解就是如果正则化设置得足够大,权重矩阵就会被设置为接近于 0 的值,直观理解就是把多隐藏单元的权重设为 0,于是基本上消除了这些隐藏单元的许多影响(下图中画×的神经元)。如果是这种情况,这个被大大简化了的神经网络会变成一个很小的网络,小到如同一个逻辑回归单元,可是深度却很大,它会使这个网络从过度拟合的状态更接近左图的高偏差状态。
但是并不会足够大,而是会存在一个中间值,于是会有一个接近"Just Right"的中间状态:
现在我们应该大概知道了为什么使用正则化可以解决过拟合的问题了,因为使用正则化可以让神经网络中的一部分神经元失去作用,使得原本复杂的神经网络变得简单,神经网络变得简单就意味着参数w变少了,那么神经网络的过拟合问题就得到解决了。
其实也不能说一部分神经元失去了作用,实际上是该神经网络的所有隐藏单元依然存在,但是它们的影响变得更小了。神经网络变得更简单了,貌似这样更不容易发生过拟合
为了帮助大家对正则化解决神经网络过拟合的问题有一个更加深刻的理解,我们再来直观感受一下,正则化为什么可以预防过拟合,假设我们用的是这样的双曲线(tanh)激活函数。
g(z)=tanh(z),我们仔细观察这个图像,我们可以发现只要非常小(2位置),那么激活函数几乎可以看成为线性的,当z变大的时候(1、3位置)激活函数开始变得非线性。
那么我们现在来看一下当λ变大的时候发生了什么?当lambda变大的时候,w一定会变小,而z=wa+b,所以z也会变小
如过z变小,然后z在这个位置的话(被圈起来的位置)
如果的值最终在这个范围内,都是相对较小的值,()大致呈线性,神经网络中每层几乎都是线性的,和线性回归函数一样。如果每层都是线性的,那么整个网络就是一个线性网络,即使是一个非常深的深层网络,因具有线性激活函数的特征,最终我们只能计算线性函数,因此,它不适用于非常复杂的决策,以及过度拟合数据集的非线性决策边界(如同过度拟合高方差的情况),就是说使用正则化之后下图这样的非线性决策边界计算不出来了。
所以如果正则化参数变得很大,参数很小, 也会相对变小,此时忽略的影响,会相对变小,实际上,的取值范围很小,这个激活函数,也就是曲线函数ℎ会相对呈线性,整个神经网络会计算离线性函数近的值,这个线性函数非常简单,并不是一个极复杂的高度非线性函数,那么就不会发生过拟合。
如果我们使用的是梯度下降函数,在调试梯度下降时,其中一步就是把代价函数设计成这样一个函数,它代表梯度下降的调幅数量(梯度下降的次数和损失的关系)。
可以看到,代价函数对于梯度下降的每个调幅都单调递减。我们需要的就是这样的图像,要想出现这样的图像我们需要使用正则化的损失函数:
如果你用的是原函数,你可能看不到单调递减现象,
所以为了调试梯度下降,请务必使用新定义的函数