目录

  • 1 正则化作用
  • 2 正则化方法
    • 2.1 基于数据的正则化方法
      • 2.1.1 data augmentation
      • 2.1.2 dropout
    • 2.2 基于网络结构的正则化方法
      • 2.2.1 weight sharing
      • 2.2.2 activation functions
      • 2.2.3 Noisy models
      • 2.2.4 Multi-task learning
      • 2.2.5 Model selection
    • 2.3 基于正则化项
      • 2.3.1 L2
      • 2.3.2 L1
      • 2.3.3 L1与L2的异同
    • 2.4 基于optimization进行正则化
      • 2.4.1 Initialization methods
      • 2.4.2 Update methods
      • 2.4.4 Early Stopping
  • 3 参考

1 正则化作用

当训练一个深度神经网络模型时,模型有可能会过拟合训练数据集,如下图所示:

几乎拟合每个训练样本,在训练样本中虽然准确率很高,但模型泛化能力差,往往在测试集上预测准确率较低。那么怎么解决这种问题?通过正则化(regularization)提高模型的泛化能力,减少过拟合现象。

2 正则化方法

什么叫正则化?传统的定义可能定义为在模型的损失函数增加惩罚项来增强模型的泛化能力。但是,在最新的Goodfellow和Bengio出的deep learning一书中,给出了 “正则化” 较为广义的定义:能够提高模型在test上的准确率,能够提高模型的泛化能力所做的任何改动,我们都可以称之为正则化,如下是常见的一些正则化方法。

2.1 基于数据的正则化方法

深度模型的表现很大程度上依赖于训练数据,我们可以对训练数据D\mathcal DD进行一些转换处理得到一个有助于提高模型泛化能力的新的数据集DR\mathcal D_RDR​。其中转换操作一方面可以通过改变更有利于模型学习的数据的分布;另一方面通过生成更大的训练样本集,加强模型的泛化能力。这两种处理方法都是独立的,也可以两者都结合。总体来说,这两种方式都是通过对输入进行一个变量转换得到,这种转换,我们定义如下:
Tθ(x)=x+θ,θ∼N(0,∑).\mathcal T_\theta(x) = x + \theta, \text{ } \theta ∼ N(0, \sum). Tθ​(x)=x+θ, θ∼N(0,∑).
通过转换参数变量θ\thetaθ来产生新的数据,例如常见的data augmentation,对输入或者隐层特征进行变化。若参数变量θ\thetaθ是确定的,则经过转换后的数据保持不变,若是一个随机的参数,则可以产生一个更大的数据集。而常见的对数据进行转换的方法如下:

2.1.1 data augmentation

data augmentation通过对输入或者隐层特征进行转换,从而获得一个更大的数据集,提高模型在训练样本较少情况下的效果。对原始数据集中(xi,ti)∈D(x_i, t_i) \in \mathcal D(xi​,ti​)∈D每个样本,通过转换函数,进行样本扩增操作(Tθ(xi),ti)∼Q(\mathcal T_{\theta}(x_i), t_i) ∼ Q(Tθ​(xi​),ti​)∼Q,可以获得一个更大的新的数据集QQQ来模型训练。

2.1.2 dropout

dropout目的是防止模型过拟合,若模型复杂,在训练数据不足的情况下,模型会过拟合训练样本,泛化能力差。dropout通过随机丢弃一部分神经元节点(特征检测器),让模型变简单,防止模型过拟合。那为什么dropout可以缓解过拟合现象?

  • (1) 这种随机丢弃一部分神经元节点,使得两个神经元不一定都在一个网络中出现,可以减少神经元节点之间的互相作用,所谓的相互作用是指一个神经元检测的特征需要依赖其他神经元才能够发挥作用。而通过随机丢弃一部分神经元节点,可以使得神经元节点更关注自身的特征检测是否对最终的结果有帮助,而不是依赖其它有固定关系的神经元检测的特征值

  • (2) dropout机制可以看成是训练多个网络模型结构,而这些网络模型结构共享相同的参数。通过训练这样多个网络,类似bagging思想,通过多个网络的求平均结果,一定程度上可以防止过拟合,提升模型的效果。
    注意:dropout只在训练阶段执行,预测的时候关闭dropout。理想情况是对所有的训练阶段的dropout网络预测一个值,然后求平均值得到预测的结果,但是这样开销太大,所以目前的做法是,在训练的时候,对没有dropout的神经元权重值做一个invert rescale,乘以11−dropout\frac{1}{1-dropout }1−dropout1​,这样可以保证在预测的时候和训练的时候scale保持一致。或者,在训练的时候不做操作,在预测的时候对每个神经权重值预先乘以(1−dropout)(1-dropout)(1−dropout),这样做的目的为了保证训练和预测权重参数scale的一致性。

  • (3) 训练的时候,dropout类似于在input和隐层特征随机加入噪声(一定概率让一部分神经元值为0),通过加入噪声,防止模型过拟合。或者另外一个角度理解,dropout机制,相当于上述提到的Tθ(x)\mathcal T_{\theta}(x)Tθ​(x)转换函数,对原始xxx转换到新的数据分布,由于θ\thetaθ是算计的,会得到一个更大的样本集,一定程度上可以防止过拟合。

  • (4) dropout思想和ReLu的思想有一定的关联,dropout以一定的概率随机对神经元丢弃(输出值为0),而ReLu是对神经元小于0的值置为0。

2.2 基于网络结构的正则化方法

2.2.1 weight sharing

不同的任务共享网络模型结构的部分,则称作权重共享,从而减少模型参数。比如常见的自编码autoencoder,在解码部分的权重与编码部分权重共享。

2.2.2 activation functions

正确选择激活函数对模型的表现是也很重要的,比如ReLu激活函数在许多深度模型结构上训练效率和模型的效果上都有一定的提高。而ReLu函数的成功除了能够缓解梯度消失问题,还因为具有更强的映射能力(用两层的ReLu就可以近似接近sigmoid的非线性表征,但需要无限的sigmoid神经元才能够接近一层的ReLu表征能力)。

2.2.3 Noisy models

通过随机在模型中注入噪声,可以减缓模型的过拟合问题,dropout是我们常见的在模型中注入随机噪声。

2.2.4 Multi-task learning

multi-task学习可以看做一种特殊的正则化,它可以结合半监督学习,在辅助task任务中充分利用无标签的数据。同样这种知识共享的概念也在meta-learning中有体现,通过来自相同领域的多个任务有序的学习,用前面的任务学到的知识作为新任务的一个bias。类似在transfer learning中,主要通过从一个领域的知识迁移到另外一个领域。

2.2.5 Model selection

模型选择的主要目的是从我们训练的多个模型中选择最佳的模型,所以我们需要一份数据集进行评估,往往通过对训练集进行划分validation数据集,通过模型在validation集的预测效果作为评判准则。但由于不同的划分结果模型在validation的表现波动较大,如果划分不好,可能无法选择到最好的模型与参数。为了解决这个问题,有人提出了交叉验证(cross-validation),通过将样本分成k份,依次取其中的一份作为validation验证集,其它作为训练集,最终取k次预测结果的平均作为模型的最终预测预结果。

2.3 基于正则化项

通过在损失函数中增加正则化项,实现正则化目的。损失函数主要是保证模型的输出和目标label一致性,而加入的正则化项是独立于label标签,可以对数据的先验知识进行建模,如果数据是稀疏的或者服从某种分布,我们可以在损失函数中加入这种先验知识限制,提高模型的效果。

2.3.1 L2

L2正则化,也叫weight decay,通过在损失函数上额外添加一项正则化项,表达如下:
L=ED(w)+λ12∣∣w∣∣22L =E_D(w) + \lambda \frac{1}{2}||w||_2^2 L=ED​(w)+λ21​∣∣w∣∣22​
其中λ\lambdaλ是一个参数权重,控制正则化项12∣∣w∣∣22\frac{1}{2}||w||_2^221​∣∣w∣∣22​在整个loss的比重。通过加入这项,会带来什么变化?

  • 第一:整个loss不仅仅看模型预测结果与label的度量结果ED(w)E_D(w)ED​(w)产生的loss,还与本身权重参数www的有关系,也就是说优化的最终目标是使得模型的预测的结果尽可能准的条件下,希望模型的参数权重也尽可能小,防止模型结构复杂,减少模型过拟合。
  • 第二:从贝叶斯角度理解,L2正则化其实是加入了数据的先验知识,认为权重参数服从高斯先验分布,所以在损失函数中加入这样的先验知识,让模型表现更好。那L2正则与高斯分布有什么关系? 首先我们来看下高斯分布的概率密度函数如下:
    f(x∣μ,σ2)=12πσ2e−(x−μ)22σ2f(x|\mu, \sigma^2) = \frac{1}{\sqrt{2\pi\sigma^2}}e^{-\frac{(x-\mu)^2}{2\sigma^2}}f(x∣μ,σ2)=2πσ2​1​e−2σ2(x−μ)2​
    对应的概率密度函数图形如下:

而L2范数正好服从的是均值为0,标准差近似为λ−1\lambda^{-1}λ−1的高斯先验分布,表达式关系如下:
−logN(w∣0,λ−1I)∝−logexp(−λ2∣∣w∣∣22)=λ2∣∣w∣∣22-logN(w|0,\lambda^{-1}I) ∝ -log\text{ }exp(-\frac{\lambda}{2}||w||_2^2) = \frac{\lambda}{2}||w||_2^2 −logN(w∣0,λ−1I)∝−log exp(−2λ​∣∣w∣∣22​)=2λ​∣∣w∣∣22​
现在就清晰了,权重参数www服从高斯分布,则−logN(w∣0,λ−1I)-logN(w|0, \lambda^{-1}I)−logN(w∣0,λ−1I)对应的是先验概率值损失函数,更直观的解释是,只有当www在分布中出现的概率较大的区域范围,对应的概率密度值N(w∣0,λ−1I)N(w|0,\lambda^{-1}I)N(w∣0,λ−1I)就越大,则-log(*)函数对应的loss越小,也就是限制让模型的参数www服从先验高斯分布。

2.3.2 L1

同样,L1也是在损失函数中加入一项正则化项,公式表达如下:
L=ED(w)+λ∣w∣L = E_D(w) + \lambda |w| L=ED​(w)+λ∣w∣
λ∣∣w∣∣1\lambda ||w||_1λ∣∣w∣∣1​为正则化项,那么我们来看下,加入这项正则化项,我们最终优化的目标会有什么变化?

  • 直观理解,优化的目标是使得模型的预测的结果尽可能准的条件下,希望模型的参数权重尽可能为稀疏
  • 同样,类似L2假设模型参数w服从高斯先验分布,其中L1假设模型参数服从拉普拉斯分布,我们先来看下拉普拉斯分布概率密度函数公式:
    f(x∣μ,b)=12bexp(−∣x−μ∣b)f(x|\mu,b) = \frac{1}{2b}exp(-\frac{|x-\mu|}{b}) f(x∣μ,b)=2b1​exp(−b∣x−μ∣​)
    对应的概率密度函数图形如下:

    其中μ\muμ为数学期望,bbb为尺度参数,而L1正好假设模型参数服从拉普拉斯分布,关系推导如下:
    −logN(w∣μ=0,b=λ−1)∝−logexp(−λ∣w∣1)=λ∣w∣-logN(w|\mu=0,b=\lambda^{-1}) ∝ -log\text{ }exp(-\lambda|w|_1) = \lambda |w| −logN(w∣μ=0,b=λ−1)∝−log exp(−λ∣w∣1​)=λ∣w∣
    在损失函数中加入这样一个惩罚项,让模型的权重参数服从拉普拉斯分布,若权重参数离分布的中心值较远,则对应的概率越小,产生的损失loss就会大,起到惩罚的作用。L1正则化可以让模型更加稀疏,简化模型的效果,进而防止模型过拟合。

2.3.3 L1与L2的异同

相同点:

  • 防止模型过于复杂,通过对损失函数加入正则化项,防止模型过拟合
  • 假设模型参数服从一个分布,通过加入先验知识,限制模型参数服从一定的分布

不同点:

  • L2正则化相比L1对大数值参数www更敏感,惩罚粒度也会更大
    首先L2和L1的概率密度分布图对比如下:

    其中L1是蓝色线,L2是橙色线,从图上来看,对于参数∣w∣|w|∣w∣较大时,L2比L1更快让概率值接近0,而L1的分布对极端值更能够容忍。

-L1相比L2会更容易获得稀疏解
我们来看下L1和L2正则化求导结果如下:
L1(w)=∣w∣→dL1(w)dw=sign(w)L_1(w) = |w| \to \frac{dL_1(w)}{dw}=sign(w)L1​(w)=∣w∣→dwdL1​(w)​=sign(w)
L2(w)=12λ∣w∣2→dL2(w)dw=wL_2(w) = \frac{1}{2}\lambda|w|^2 \to \frac{dL2(w)}{dw}=w L2​(w)=21​λ∣w∣2→dwdL2(w)​=w
对应的图形结果如下:

从上面可以看出L1正则化的函数图为左上图,对应的导数图为右上图,可以看出不管L1的大小是多少(只要不为0),梯度都是1或者-1,所以每次更新梯度的时候,参数www会稳步向0前进。而L2函数的导数图如右下图,w越靠近0的时候,梯度也越来越小,所以优化一定步骤后只能让www接近0,很难等于0,但是L1有稳定的梯度,经过一定的迭代步数后很可能变为0,这就是为什么L1正则化比L2正则化可以得到更稀疏的解。

2.4 基于optimization进行正则化

2.4.1 Initialization methods

通过对模型参数的初始化,让模型一开始有个好的状态。目前最常见的对参数的初始化方法是从一个已知的数据分布中采样(例如正态分布等)初始化模型参数,有利于减缓深层网络导致的梯度消失或者梯度爆炸问题。另外一种方法是通过在相同领域上的数据集做=pre-training得到的模型参数初始化fine-tuning中的模型。用pre-training的模型参数初始化模型,通常可以加快模型收敛,而且可以学习到一些基础特征。另外一种方法课程学习 (curriculum learning)也称作warm-start methods,核心思想是模仿人类学习的特点,先学简单,再学较难的,会更有利于学习。所以在机器学习中,先学习简单的样本,再学习较困难的样本,能够提高模型的表现。比如在神经网络中的warmup策略,在最开始的steps中,先以小的学习率学习,再逐渐上升,如下表示:
lri=in∗lr{lr}_i = \frac{i}{n}*lr lri​=ni​∗lr
其中iii是当前的step,nnn代表warmup阶段的所有steps,比如在bert中设置为占整个训练steps的10分之一。在warmup阶段,学习率是慢慢上升的,但还是比我们的初始化学习率低。避免模型在一开始由于学习率过大,模型对mini-batch过拟合,导致后期很难再纠正过来,等稍微平稳了,就可以用大的学习率进行加快学习,这样能够保持深层模型学习的稳定性。

2.4.2 Update methods

在梯度更新过程中,有两方面影响最终权重的计算,一方面是梯度更新规则,常见的有SGD,momentum,RMSProp,Adam等,另一方面权重和梯度的值的更改,比如在梯度上注入噪声值等。

2.4.4 Early Stopping

在恰当时刻结束模型训练也有可能提高模型的泛化能力,而常见的是通过early stopping准则,通过模型在validation的测试表现,保存结果最优的模型,防止模型一直训练,可能在训练集上表现越来越好,但模型过拟合了,有可能某个时刻,在测试集上已经开始变差。

3 参考

Regularization for Deep Learning: A Taxonomy

正则化(regularization)方法总结相关推荐

  1. pytorch实现L2和L1正则化regularization的方法

    pytorch实现L2和L1正则化的方法 目录 目录 pytorch实现L2和L1正则化的方法 1.torch.optim优化器实现L2正则化 2. 如何判断正则化作用了模型? 2.1 未加入正则化l ...

  2. PyTorch实现L2和L1正则化的方法 | CSDN博文精选

    作者 | pan_jinquan 来源 | CSDN博文精选 目录 1.torch.optim优化器实现L2正则化 2.如何判断正则化作用了模型? 2.1未加入正则化loss和Accuracy 2.1 ...

  3. Coursera公开课笔记: 斯坦福大学机器学习第七课“正则化(Regularization)”

     Coursera公开课笔记: 斯坦福大学机器学习第七课"正则化(Regularization)" +13投票 斯坦福大学机器学习第七课"正则化"学习笔记, ...

  4. 全面讨论泛化 (generalization) 和正则化 (regularization) — Part 1

    ©作者 | 李诗淼 学校 | 卡内基梅隆大学 研究方向 | Physics-informed ML 模型泛化能力,是设计和评估一个机器学习 or 深度学习方法时无比重要的维度,所以我想通过一系列文章, ...

  5. 全面讨论泛化 (generalization) 和正则化 (regularization)

    来源:PaperWeekly 本文约8400字,建议阅读15分钟 本文和大家全面讨论机器学习和深度学习中的泛化和正则化. 模型泛化能力,是设计和评估一个机器学习 or 深度学习方法时无比重要的维度,所 ...

  6. 线性代数中的正则化(regularization)(zz)

    正则化(regularization)在线性代数理论中,不适定问题通常是由一组线性代数方程定义的,而且这组方程组通常来源于有着很大的条件数的不适定反问题.大条件数意味着舍入误差或其它误差会严重地影响问 ...

  7. 正则化(regularization)

    正则化(regularization)在线性代数理论中,不适定问题通常是由一组线性代数方程定义的,而且这组方程组通常来源于有着很大的条件数的不适定反问题.大条件数意味着舍入误差或其它误差会严重地影响问 ...

  8. L2正则化Regularization详解及反向传播的梯度求导

    摘要 本文解释L2正则化Regularization, 求解其在反向传播中的梯度, 并使用TensorFlow和PyTorch验证. 相关 系列文章索引 : https://blog.csdn.net ...

  9. AI:机器学习的正则化 (Regularization)

    目录 机器学习:正则化 (Regularization) 正则化的方法 1.参数正则化 1.0 范数 1.1 L2 Regularization(Ridge Regression,权重衰减) 1.2 ...

最新文章

  1. python免费自学爬虫_这套Python爬虫学习教程,不到一天即可新手到进阶!免费领...
  2. get,put,post,delete含义与区别
  3. SAP Spartacus LockFocusDirective的单步调试
  4. 3D姿态估计——ThreeDPose项目简单易用的模型解析
  5. js向下取整的奇技淫巧
  6. View绑定式监听器实现原理
  7. vue和iview应用中的一些问题(持续更新)
  8. pdf转ppt_好用的pdf转ppt(一个神站+一个神器)
  9. 前端性能优化不完全手册 【已更新至React、原生JS懒加载和Nginx负载均衡】
  10. 架构师考试的一些想法
  11. org.apache.common.io-FileUtils详解
  12. paip.输入法编程----删除双字词简拼
  13. c语言程序设计徐立辉答案,C语言习题
  14. Armv6 Armv7
  15. snmp trap日志
  16. 深度学习教程 | 吴恩达专项课程 · 全套笔记解读
  17. tp5和vue前后端分离工作环境部署
  18. CSS解决连续英文字母或连续数字不能自动换行
  19. 《麦田里的守望者》阅读笔记
  20. c语言编程等边三角形代码,C语言中 正 倒等边三角形的代码

热门文章

  1. 8位加法器的流水线设计(2级流水、四级流水)
  2. Huffman编码MATLAB实现
  3. Linux环境下Apache配置多个虚拟主机
  4. Potsdam,Vaihingen数据集(附百度网盘下载地址)
  5. 交换机的基本配置和VLAN配置
  6. UI一揽子计划 11 (自定义UITableViewCell、Cell 的自适应高度)
  7. 恋梦2013年8月13日下 小学生日记
  8. async和awit
  9. C语言分支与循环--分支篇,那些分支语句的坑你都避开了吗(附加C99变长数组)
  10. (转) 如何将notepad++添加到右键