神经网络的拟合能力非常强,通过不断迭代,在训练数据上的误差率往往可以降到非常低,从而导致过拟合(从偏差-方差的角度来看,就是高方差)。因此必须运用正则化方法来提高模型的泛化能力,避免过拟合。

在传统机器学习算法中,主要通过限制模型的复杂度来提高泛化能力,比如在损失函数中加入L1范数或者L2范数。这一招在神经网络算法中也会运用到,但是在深层神经网络中,特别是模型参数的数量远大于训练数据的数量的情况下,L1和L2正则化的效果往往不如在浅层机器学习模型中显著。

于是,在训练深层神经网络时,还需要用到其他正则化方法,比如dropout、早停、数据增强和标签平滑等。

一、L1和L2正则化

L1和L2正则化在神经网络中的运用和其他机器学习方法一样,通过约束权重的L1范数或者L2范数,对模型的复杂度进行惩罚,来减小模型在训练数据集上的过拟合问题。

在损失函数中加入L1和L2正则化项,则结构风险最小化问题可以写为:

N为训练样本数量,f(•)为待学习的神经网络模型,θ是权重,lp(θ)表示范数函数,p∈{0,1},λ是正则化参数。

这里有三个问题:

1、为什么只正则化权重θ(通常用W表示),而不正则化偏置b呢?

其实也可以正则化偏置值,但是对于某一隐含层上的神经元来说,权重θ是一个高维的参数矩阵,已经可以表达高方差问题,而偏置b仅仅是单个数字,对模型的复杂度影响不大,因此一般选择忽略不计。

2、选择L1正则化还是L2正则化呢?

答案是一般选择L2正则化,或者同时加入L1正则化和L2正则化。从上图可以看到,L1正则化通常会使得最优解在y坐标轴上,从而使得最终的参数θ是稀疏向量,也就是说θ中很多值为0。此外,L1范数在取得最小值处是不可导的,这会给后续的求梯度带来麻烦。

3、神经网络中的L2正则化有什么特殊之处呢?

在神经网络中,加入的L2范数一般用Frobenius范数

注意在Logistic回归中,参数W是一个向量,而在神经网络中,参数W是一个矩阵!上式中l表示第l层,m(l)表示第l层的神经元个数,因此W是一个m(l)  × m(l-1)维的多维矩阵。于是神经网络中的L2范数是矩阵中所有元素的平方和,称为Frobenius范数。

此时结构风险函数为:

而且L2正则化在神经网络中等价于通过权重衰减的方式来实现正则化。原因是,在损失函数中加入L2正则化,然后用反向传播算法进行梯度下降更新参数时,会得到如下的形式:

也就是权重θt-1会乘以一个比1小的数,也就实现了权重衰减。

二、dropout

在深层神经网络的学习过程中,通过随机丢弃一部分神经元(同时丢弃其对应的连接边)来避免过拟合的做法,称为dropout(丢弃法,李宏毅老师称之为抓爆)。

dropout一般是在神经网络的隐含层中使用,实现dropout的方式可以是设置一个固定的概率p,对于每一个神经元都以一个概率p来判断要不要保留。同时,dropout在训练阶段和测试阶段的做法不一样。

1、训练阶段和测试阶段的dropout

我们通过定义一个公式来描述训练阶段和测试阶段的dropout实现过程,以及二者之间的区别。

对于一个神经网络层y=f(Wx+b),引入一个丢弃函数d(•),使得y=f(Wd(x)+b)。丢弃函数定义为:

在训练阶段中,m∈{0,1}d是丢弃掩码,通过概率为p的0-1分布(伯努利分布)来随机生成。p值一般设置为0.5就能产生比较好的效果,复杂点也可以通过验证集来选取一个最优值,那么训练时激活神经元的平均数量是原来的p倍。举个例子就是神经元有5个,p=0.6,然后随机生成m=[1, 0, 1, 1, 0],于是训练过程中这一层中的第2和第5个神经元就会被丢弃,也就是神经元的数量变成了原理的0.6倍。

部分隐含层神经元被丢弃的结果就是,在反向传播时,和被丢弃神经元相关的权重的梯度为0。而在训练中每个隐含层神经元都有可能被以p的概率丢弃,这样就减少了神经元之间的依赖性,输出层的计算也无法过度依赖任何一个隐含层神经元,从而减少过拟合。

而在测试阶段,为了得到更确定的结果,一般不丢弃神经元。所有神经元都可以激活,这会造成训练和测试时的网络输出不一致,因此在测试时将每一个神经元的输出都乘以概率p,相当于把不同的神经网络做平均,从而在网络输出上和训练阶段保持一致。

以下是一个神经网络使用dropout后的图示:

2、为什么dropout的效果特别好?

dropout不仅能减少过拟合,而且能提高预测的准确性,这可以从集成学习的角度来解释。在迭代过程中,每做一次丢弃,就相当于从原始网络中采样一个不同的子网络,并进行训练。那么通过dropout,相当于在结构多样性的多个神经网络模型上进行训练,最终的神经网络可以看做是不同结构的神经网络的集成模型。

3、循环神经网络中的dropout的特殊性

在循环神经网络上使用dropout时,不能直接对每个时刻的隐状态进行随机丢弃,这样会损害循环神经网络在时间上的记忆能力,而是应该在非时间维度的连接上进行随机丢弃。

如下图,虚线的前馈连接表示非时间循环的连接,而实线的连接表示时间维度上的循环,即隐状态(粗实线表示典型的LSTM中的信息流路径)。如果dropout设置在隐状态上,也就是从左往右的实线位置上,那么每经过一次循环,剩下的信息就会被丢弃一次,如果是长序列,那么循环到最后信息会丢失殆尽。

而把dropout设置在非时间循环的连接上,也就是从下到上的虚线位置,那么对信息进行丢弃就不会影响到对信息的记忆能力。

三、数据增强

减少过拟合的一种思路是增加训练集中的样本数量,尤其在训练深层神经网络的过程中,需要大量的训练数据才能得到比较理想的结果。但是增加样本是需要花费较多资源去搜集和标注更多的样本,因此可以基于现有的有限样本,可以通过数据增强(Data Augmentation)来增强数据,避免过拟合。

目前数据增强主要应用在图像数据上,在文本等其他类型的数据上还没有比较好的应用。

图形数据的增强主要是通过对图像进行转变、引入噪声等方法来增加数据的多样性,生成的假训练数据虽然无法包含像全新数据那么多的信息,但是代价几乎为零。增强的方法有:

(1)旋转:将图像按顺时针或者逆时针方向随机旋转一定角度;

(2)翻转:将图像沿水平或垂直方向随机翻转一定角度;

(3)缩放:将图像沿水平或垂直方向平移一定步长;

(4)加噪声:加入随机噪声。

四、早停

早停(early stopping)就是在训练误差下降到一定程度之前,提早停止神经网络的训练。那么在观察到什么信号时停止呢?答案是迭代了多轮之后,验证集上的错误率仍然没有下降时,就停止迭代。

也就是说,在使用梯度下降法进行优化时,可以使用一个和训练集独立的样本集合,称为验证集,在每次迭代时,把新学习到的模型f(x, θ)在验证集上进行测试,并计算错误率,用验证集上的错误来代替期望错误。验证集上的误差率通常会先下降后上升,而在拐点处就预示着开始过拟合了。

当验证集的错误率在经过多轮迭代后不再下降时(甚至还升高),就停止迭代。因此在使用早停来解决过拟合时,训练和验证要同时进行,或者交叉进行。

五、标签平滑

在数据增强中,是通过给样本特征加入随机噪声来避免过拟合的,而标签平滑是通过给样本的标签(输出)引入噪声来避免过拟合。

假设训练数据集中,有些样本的标签是被错误标注的,那么最小化这些样本上的损失函数会导致权重往错误的方向去学习,从而导致过拟合。例如,在多分类问题中,一个样本的标签一般用one-hot向量表示,y=[0, ..., 0,1, 0, ...,0]T,这种目标可以作为硬目标。如果使用softmax分类器并采用交叉熵损失函数,那么最小化损失函数会使得正确类和其他类之间的权重差异变得非常大。一方面使用softmax分类器和硬目标的最大似然学习可能永远不会收敛,因为softmax函数永远无法真正预测0概率或者1概率,而只能通过学习越来越大的权重,来不断趋近于0或1。另一方面要使得正确类的输出概率接近于1,那么未归一化之前的得分要远大于其他类的得分,这就得到其权重越来越大。权重越大,模型的复杂度越高,也就是产生过拟合问题。

因此使用硬目标来进行最大似然学习的问题在于,模型无法真正拟合到硬目标上,在不断逼近硬目标的过程中会过拟合。

标签平滑的做法是,假设样本为其他类的概率为ε,为正确类的概率为(1-ε),那么把标签表示为:

其中K为标签的数量,这种标签可以看做是软目标。标签平滑之后,模型不会追求确切的概率(0或者1),而且不影响模型学习正确分类。

参考资料:

1、邱锡鹏:《神经网络与深度学习》

2、《Deep Learning》(花书)

3、吴恩达:《深度学习》

转载于:https://www.cnblogs.com/Luv-GEM/p/10699697.html

深度学习之正则化方法相关推荐

  1. 无人驾驶汽车系统入门(十一)——深度前馈网络,深度学习的正则化,交通信号识别

    无人驾驶汽车系统入门(十一)--深度前馈网络,深度学习的正则化,交通信号识别 在第九篇博客中我们介绍了神经网络,它是一种机器学习方法,基于经验风险最小化策略,凭借这神经网络的拟合任意函数的能力,我们可 ...

  2. 面向弹载图像的深度学习网络压缩方法研究

    这里写自定义目录标题 源自:航空兵器 作者:高一博 杨传栋 陈栋 凌冲 摘 要 针对基于深度学习目标识别算法具有网络结构复杂.参数量大.计算延迟高等特点,难以直接应用于弹载任务的问题,对网络轻量化方法 ...

  3. 值得收藏!基于激光雷达数据的深度学习目标检测方法大合集(下)

    作者 | 黄浴 来源 | 转载自知乎专栏自动驾驶的挑战和发展 [导读]在近日发布的<值得收藏!基于激光雷达数据的深度学习目标检测方法大合集(上)>一文中,作者介绍了一部分各大公司和机构基于 ...

  4. 【西安交大】2020年最新深度学习目标检测方法综述

    关注上方"深度学习技术前沿",选择"星标公众号", 资源干货,第一时间送达! 目标检测的任务是从图像中精确且高效地识别.定位出大量预定义类别的物体实例.随着深度 ...

  5. 「技术综述」基于弱监督深度学习的图像分割方法综述

    https://www.toutiao.com/a6713527528251720200/ 本文是基于弱监督的深度学习的图像分割方法的综述,阐述了弱监督方法的原理以及相对于全监督方法的优势. 作者 | ...

  6. 【深度学习】解析深度学习的集成方法

    [深度学习]解析深度学习的集成方法 文章目录 1 前言 2 使用集成模型降低方差 3 如何集成神经网络模型3.1 Varying Training Data3.2 Varying Combinatio ...

  7. 深度学习模型压缩方法(3)-----模型剪枝(Pruning)

    link 前言 上一章,将基于核的稀疏化方法的模型压缩方法进行了介绍,提出了几篇值得大家去学习的论文,本章,将继续对深度学习模型压缩方法进行介绍,主要介绍的方向为基于模型裁剪的方法,由于本人主要研究的 ...

  8. 【技术综述】基于弱监督深度学习的图像分割方法综述​

    文章首发于微信公众号<有三AI> [技术综述]基于弱监督深度学习的图像分割方法综述​ 本文是基于弱监督的深度学习的图像分割方法的综述,阐述了弱监督方法的原理以及相对于全监督方法的优势,首发 ...

  9. 【技术综述】基于弱监督深度学习的图像分割方法综述

    本文是基于弱监督的深度学习的图像分割方法的综述,阐述了弱监督方法的原理以及相对于全监督方法的优势. 作者 | 孙叔桥 编辑 | 言有三 1 基础概念 生活中,我们和周围的事物都是有"标签&q ...

最新文章

  1. leetcode327 超时大坑
  2. Windows 安装redis
  3. 在内存中读取函数的ShellCode并执行
  4. MOCTF-Web-死亡退出
  5. git比较当前工作区和之前提交的内容差异
  6. 版本控制工具SVN+Apache整合
  7. LeetCode 15. 三数之和 思考分析(双指针解)
  8. 流媒体服务器搭建实例——可实现录音,录像功能
  9. mysql中datediff跨年的用法_Mysql 函数使用记录(一)——DATEDIFF、CONCAT
  10. mysql 热切换_热璞HotDB学习篇—如何基于MySQL进行数据高可用
  11. java kaptcha,java验证码组件kaptcha使用方法
  12. 【20CSPS提高组】贪吃蛇
  13. pandas按行、按列合并数据
  14. 串口通信的隔离传输方案记录
  15. 在网格的边缘试探——企业服务行业如何试水 Istio
  16. linux python 调试_Python安装与环境配置
  17. utf-8的中文是一个汉字占三个字节长度吗?
  18. html 苹果微信录音js,微信js-sdk 录音功能的示例代码
  19. C语言中.c文件与.h文件 的使用-2020-12-27
  20. ABAP里OO ALV选中或container alv里的选中方法

热门文章

  1. Hyper-V 2016 系列教程34 在局域网内架设Windows时间服务器
  2. 长期演进技术(LTE,Long Term Evolution)
  3. 一个简单例子:贫血模型or领域模型
  4. nginx配置wordprocess访问wp-admin自动加斜杠配置实例
  5. 陶哲轩实分析例17.2.3
  6. jQuery之父:JavaScript的开发之路
  7. 手动安装Linux网卡驱动程序
  8. python eval 字符串替换_Python中eval妙用,字符串转字典和列表
  9. 设计一个处理两种类型地址的地址簿程序_短信平台的API接口都有哪些类型?
  10. Java NIO网络编程之群聊系统