深度学习模型容量选择与正则化的意义

在使用深度学习算法时,我们采样得到训练集,然后挑选参数去降低训练集误差。用训练好的模型对测试集进行验证,以得到泛化(测试)误差。在这个过程中,泛化误差期望会大于或等于训练误差期望。我们应朝以下方面努力,以提高算法精度:
【深度学习模型容量选择与正则化的意义】(1)降低训练误差;
(2)缩小训练误差和泛化误差的差距。

深度学习模型容量选择与正则化的意义
文章图片

这两个因素对应机器学习的两个主要挑战:欠拟合与过拟合。欠拟合是指模型不能在训练集上获得足够低的误差,而过拟合是指训练误差和测试误差之间的差距过大。
通过调整模型的容量,可以控制模型是否偏向于过拟合与欠拟合。通俗地讲,模型的容量是指其拟合各种函数的能力。容量低的模型很难拟合训练集,容量高的模型可能会过拟合,因为记住了不适用于测试集的训练集性质。训练集不仅包含了特征数据,而且也包含了一些噪声,如果模型容量过大,会将这些噪音也记录为分类特征,因此会对测试集分类造成干扰。形成以下结论:
(1)由于训练集包含噪声,因此训练误差不是越小越好;
(2)泛化误差会随着模型容量的增加而升高。因为没有经过正则化的模型不能自动识别训练集中哪些是特征数据,哪些是噪声。包含了噪声的特征对测试集进行分类必然提高泛化误差。
因此当一个模型训练误差很小而泛化误差较大时,可以降低模型的容量,如减少层数,减少一些层中间神经元的数量。
一个过拟合的例子:
深度学习模型容量选择与正则化的意义
文章图片

统计学习理论提供了量化模型容量的不同方法,最著名的有VC维度。VC维度量二元分类器的容量,定义为该分类器能够分类的训练样本的最大数目。(参考《深度学习》第五章机器学习基础P72)量化模型的容量使得统计学习理论可以进行量化预测。统计学习理论中最重要的结论阐述了训练误差和泛化误差之间差异的上界随着模型容量的增长而增长,但随着训练样本增多而下降。通俗地讲,算法应该是先学习训练集中的特征数据而后学习噪声数据的,训练样本增多以后,算法会继续先学习增加的训练样本中的特征数据,而不是以前样本中的噪声数据。“机器学习保证找到一个在所关注的大多数样本上可能正确的规则。”
没有免费午餐定理暗示我们必须在特定任务上设计性能良好的机器学习算法。我们建立一组学习算法的偏好来达到这个要求。当这些偏好和我们希望算法解决的问题相吻合时,性能会更好。
论述到这里,已经指向这样一个问题:如何构建一个针对具体问题的带偏好的算法?
可以加入权重衰减(weight decay)来修改训练标准。更一般地,正则化一个学习函数的模型,我们可以给代价函数添加被称为正则化项的惩罚。在权重衰减的例子中:
深度学习模型容量选择与正则化的意义
文章图片

对于正则化,有很好的文章对问题进行了阐述:机器学习中正则化项L1和L2的直观理解

L1正则化和特征选择 假设有如下带L1正则化的损失函数:
J=J0+α∑w|w|(1)
其中J0J0是原始的损失函数,加号后面的一项是L1正则化项,αα是正则化系数。注意到L1正则化是权值的绝对值之和,JJ是带有绝对值符号的函数,因此JJ是不完全可微的。机器学习的任务就是要通过一些方法(比如梯度下降)求出损失函数的最小值。当我们在原始损失函数J0J0后添加L1正则化项时,相当于对J0J0做了一个约束。令L=α∑w|w|L=α∑w|w|,则J=J0+LJ=J0+L,此时我们的任务变成在LL约束下求出J0J0取最小值的解。
深度学习模型容量选择与正则化的意义
文章图片

图1 L1正则化
图中等值线是J0的等值线,黑色方形是LL函数的图形。在图中,当J0等值线与LL图形首次相交的地方就是最优解。上图中J0与L在L的一个顶点处相交,这个顶点就是最优解。注意到这个顶点的值是(w1,w2)=(0,w)(w1,w2)=(0,w)。可以直观想象,因为LL函数有很多『突出的角』(二维情况下四个,多维情况下更多),J0与这些角接触的机率会远大于与LL其它部位接触的机率,而在这些角上,会有很多权值等于0,这就是为什么L1正则化可以产生稀疏模型,进而可以用于特征选择。
对于L1正则化,还需要说明:为什么这些角接触的几率会远大于与其它部位接触的机率?只有J0函数,也即是原损失函数的梯度方向与w构造的菱形的边垂直时,才能与菱形的边相切,否则肯定是与角接触。因为从0到π的范围内,选中π/2的概率为0,因此与角接触的几率远远大于与边的接触的几率。
而正则化前面的系数α,可以控制LL图形的大小。α越小,L的图形越大(上图中的黑色方框);α越大,L的图形就越小,可以小到黑色方框只超出原点范围一点点,这是最优点的值(w1,w2)=(0,w)(w1,w2)=(0,w)中的ww可以取到很小的值。
类似,假设有如下带L2正则化的损失函数:
J=J0+α∑ww2(2)
同样可以画出他们在二维平面上的图形,如下:
深度学习模型容量选择与正则化的意义
文章图片

图2 L2正则化
二维平面下L2正则化的函数图形是个圆,与方形相比,被磨去了棱角。因此J0J0与LL相交时使得w1w1或w2w2
等于零的机率小了许多,这就是为什么L2正则化不具有稀疏性的原因
-----------------------------------------------------------------------------------------------------------------------
对于具体约束的过程,我还想多说几句:
举例logistic回归,原始损失函数中的一项:J01=-log(sigmoid(w1x11+w2))
-log函数图像如下:
深度学习模型容量选择与正则化的意义
文章图片


看做蓝色曲线就好了。
J0
深度学习模型容量选择与正则化的意义
文章图片

sigmoid函数的自变量基本在(0,4)之间,其输出变量在0.5以上,同时其输出变量又是sigmoid函数的自变量,而x1、x2是给定值,因此原始损失函数的增加率是随着(w1,w2)的减小而加速上升的,即图1、图2中的彩色圈圈,如果是原始损失函数的均匀等高线的话,那么这个圈圈越到外围是越密的。原始损失函数越靠近0点,其数值是高于1维加速上升的,而控制图形L是1维线性下降的,当原始损失函数的变化率=L的线性变化率时,正则化后的损失函数取最小值。
值得注意的是,L2也是线性下降的,因其是L2范数,对平方和开根号。
正则化的意义:
首先,因为有范数的约束,其正则化后的损失函数的最小值一定会大于原始损失函数最小值,因此正则化提升了训练误差,减少了噪声的学习。防止过拟合,提升了泛化能力。
其次,我的理解尚未从理论上证实:正则化构建了一个w矩阵所有参数都比较小的模型,在这个过程中w矩阵的病态程度减轻了(系统更加稳定),类似于主成分分析中去掉了次要维度的做法(L1中是实实在在去掉了,L2中通过降低次要维度权重基本去掉)。这样也滤除了一些训练集中的噪声。
参考资料:矩阵论基础知识5(病态矩阵与条件数 )
参考资料:机器学习中的范数规则化之(一)L0、L1与L2范数
我对于病态矩阵的理解:

猜想:吴恩达深度学习第1课第4周的作业,对于w1矩阵进行SVD变换,将很小特征值对应的特征向量置0,再反变换回w1,是否对于滤除噪声更有好处?
需要进一步对L2正则化的意义进行理解。
有高人指点:
正则化和噪声的关系不大,很难说什么是噪声,什么不是。正则化就是为了增强模型泛化能力,防止过拟合的。(其机理是什么?)形象地说就是让模型更加平滑。往训练样本里加噪声反而是一种正则化方式。模型在和输出协方差小的特征维度上不平滑的结果是什么?(原因我倒是知道,可能就是w矩阵的病态化。)训练集有灰猫和白猫,输出是猫的概率都是0.9,测试来了一个黑猫,一下识别概率跑到0.2了,这就是不平滑,颜色对应的w分量过大,导致识别受颜色影响过大。(应该不是颜色对应权重过大,是颜色的权重矩阵维度和某些维度高度相关,夹角太小,导致输入自变量(像素值)的微小变化引起输出y的很大变化。)
吴恩达的课程讲到了一种解释正则化为什么能减少过拟合的原因:w减小了,输出y也减小。无论是sigmoid还是tanh,在输出y(y为激活函数的自变量)属于0附近的区域,其非线性程度减小,导致整个网络拟合复杂函数的能力下降,从而减少过拟合。

参考资料:深度学习中正则化技术概述(附Python代码)



    推荐阅读