姓名:雷含笑;学号:21021210745;学院:电子工程学院
参考:https://zhuanlan.zhihu.com/p/33058988
【嵌牛导读】写的模型总是过拟合怎么办?规范化技术一般用于解决模型的过拟合问题,本文将深入浅出的介绍几种常见的正则化技术。
【嵌牛鼻子】正则化 过拟合
【嵌牛提问】如何优化过拟合的模型?
【嵌牛正文】
首先来看看什么是过拟合。
1、什么是过拟合
生活中我们常听到一些地域性偏见的话,如“河南人偷井盖”,“东北人都是黑社会”,“投资不过山海关”等等。但是每个省份这么多人,有好人有坏人,真的就一句话概括了吗?显然这犯了“以偏概全”的毛病,在机器学习里,我们叫这种现象为“过拟合”,即使用少量样本去拟合了所有没见过的样本。
另外,在机器学习中,我们训练模型的数据不可避免的存在一些测量误差或者其他噪音,比如下图中10个点,我们可以找到唯一的9阶多项式
来拟合所有点;也可以使用线性模型 y = 2x 拟合。
从上图可以看出,左侧的拟合结果显然的拟合到所有噪声数据了,这使得模型变得复杂并且不具备健壮的泛化能力。到这里,我们应该知道,过拟合的主要原因就是训练集样本太少或样本中存在噪声。如果是样本太少的原因,那直接增加训练样本就好了,但是训练样本不是你想加就能加的呀。所以我们能做的就是使用正则化技术来防止模型学到训练样本中的噪声,从而降低过拟合的可能性,增加模型的鲁棒性。
2、使用小规模神经网络行不行
从上节的第二个例子可以看到,貌似模型越复杂就越可能导致过拟合,那么我们直接使用简单的模型行不行呢?行当然是行的,但是小规模的神经网络模型效果就不那么好了。比如,如果是MNIST手写数字识别数据集,我们只要使用两层隐藏层的神经网络,并且每层网络的神经元只要100个或者300个就可以得到良好的效果。但是如果是ImageNet那样的数据集呢?显然浅层神经网络就不行了,为此有了152层的ResNet。
所以我们的目标是:大,要大,要足够大。
因此针对不同数据集,我们设计网络结构时,应该设计出比你实际需要的更多层数、更多神经元的网络结构,然后使用规范化技术去防止过拟合。这样可以节省做实验去寻找最佳层数最佳神经元个数的时间,也能更快的得到更好的结果。
最后简单说一下为什么深层神经网络比浅层神经网络更好,①DNN具有更多神经元,因此具有更多参数,这使得它可以拟合更加复杂的各种函数;②现实世界的数据大多都是以分层的结构构造的,比如人脸识别任务,较低层次是各种形状和方向的线条(轮廓),中间层次就是这些线条组成的方形或圆形(五官),高层次的特征就是五官组成的人脸了,DNN的不同层从浅层到高层可以依次提取不同层级的特征;③DNN在新数据集上更具有健壮的泛化能力。
我们要利用深层神经网络的优势又要避免它所带来的过拟合问题,于是规范化技术应运而生。
3、L2-Norm(岭回归(Ridge Regression),即加了L2-norm正则化的线性回归)
L2 规范化是一种最为常用的正则化手段 —— 有时候被称为权重衰减(weight decay)。L2 规范化的想法是增加一个额外的项到代价函数上,这个项叫做规范化项(有时也叫惩罚项)。
上式右边第一项是常规的损失函数,第二项就是L2规范化项,λ>0称为规范化参数,n为训练集合的大小。 直觉地看,规范化的效果是让网络倾向于学习小一点的权重,其他的东西都一样的。大的权重只有能够给出代价函数第一项足够的提升时才被允许。换言之,规范化可以当做一种寻找小的权重和最小化原始的代价函数之间的折中。这两部分之间相对的重要性就由 λ 的值来控制了: λ 越小,就偏向于最小化原始代价函数,反之,倾向于小的权重。
在训练神经网络时,我们知道我们的训练目的就是优化权重,而且是使用反向传播和梯度下降来优化的;那么加入正则化项之后权重是如何优化的呢?将上述加L2正则项的代价函数对参数w进行求导:
于是权重的学习规则(更新规则)变为:
4、 Max-Norm Regularization
虽然单独使用 dropout 就可以使得模型获得良好表现,不过,如果搭配Max-Norm 食用的话,那么效果更佳。对于每一个神经元 Max-Norm Regularization 的目的在于限制输入链接权重的大小,使得,其中 r 是Max-Norm 可调节超参数,||.||_2是L2范数。在每一个 training step 需要计算
,以确保它小于r,如果需要对w进行调整,则使用下式进行调整:
前面我们讲过,更小的权重参数有利于模型对噪声的鲁棒性,这里限制参数的大小目的就是如此。在实践中将 Max-Norm Regularization 结合dropout 使用一般效果将会更好,下图是使用各种规范化技术在不同数据集上的表现: