Regularization

正则化

在Deep Learning1书中,是这么定义正则化的:

“any modification we make to a learning algorithm that is intended to reduce its generalization error, but not its training error.”

PyTorch的 优化器使用l2l_2l2​参数正则化去限制模型大小(即减小参数方差)。

总的来说,我们可以把它写为:
loss(W;x;y)=lossD(W;x;y)+λRR(W)loss(W;x;y) = loss_D(W;x;y) + \lambda_R R(W) loss(W;x;y)=lossD​(W;x;y)+λR​R(W)
特别的:
loss(W;x;y)=lossD(W;x;y)+λR∥W∥22loss(W;x;y) = loss_D(W;x;y) + \lambda_R \lVert W \rVert_2^2 loss(W;x;y)=lossD​(W;x;y)+λR​∥W∥22​

其中WWW是网络中所有权重元素的集合(即这是model.parameters()),loss(W;x;y)loss(W;x;y)loss(W;x;y)是总训练损失,并且lossD(W)loss_D(W)lossD​(W)是数据损失(即目标函数的误差,也称为损失函数,或者在Distiller样本图像分类器压缩中的criterion)。

optimizer = optim.SGD(model.parameters(), lr = 0.01, momentum=0.9, weight_decay=0.0001)
criterion = nn.CrossEntropyLoss()
...
for input, target in dataset:optimizer.zero_grad()output = model(input)loss = criterion(output, target)loss.backward()optimizer.step()

λR\lambda_RλR​是一个被称为正则强度的标量,它平衡了数据误差和正则误差。在PyTorch中是 weight_decay参数。

∥W∥22\lVert W \rVert_2^2∥W∥22​是WWW的l2l_2l2​范数平方,被称为幅度magnitude),表示张量大小。
∥W∥22=∑l=1L∑i=1n∣wl,i∣2    where  n=torch.numel(wl)\lVert W \rVert_2^2 = \sum_{l=1}^{L} \sum_{i=1}^{n} |w_{l,i}|^2 \;\;where \;n = torch.numel(w_l) ∥W∥22​=l=1∑L​i=1∑n​∣wl,i​∣2wheren=torch.numel(wl​)

LLL是网络中的层数。

在深度学习中解释了l2l_2l2​ 范数和平方l2l_2l2​范数之间的定性差异。

稀疏与正则

我们提到正则化,因为正则化和一些DNN稀疏诱导方法之间存在有趣的相互作用。

在Dense-Sparse-Dense (DSD)2中使用剪枝作为正则化来提升模型准确率:

“Sparsity is a powerful form of regularization. Our intuition is that, once the network arrives at a local minimum given the sparsity constraint, relaxing the constraint gives the network more freedom to escape the saddle point and arrive at a higher-accuracy local minimum.”

正规化也可用于诱导稀疏性。 为了诱导元素稀疏性,我们可以使用l1l_1l1​范数,∥W∥1\lVert W \rVert_1∥W∥1​。

∥W∥1=l1(W)=∑i=1∣W∣∣wi∣\lVert W \rVert_1 = l_1(W) = \sum_{i=1}^{|W|} |w_i| ∥W∥1​=l1​(W)=i=1∑∣W∣​∣wi​∣

l2l_2l2​范数正则化通过减小大的参数来避免过度拟合并提高模型的精度,但它不会强制这些参数为绝对零。l1l_1l1​-范数正则化将一些参数元素设置为零,因此在使模型更简单的同时限制了模型的容量。 这有时被称为特征选择,并为我们提供了修剪的另一种解释。

Distiller的一个Jupyter文件解释了l1l_1l1​-范数正则化器如何引起稀疏性,以及它如何与l2l_2l2​-范数正则化相互作用。

如果我们将weight_decay配置为零并使用l1l_1l1​-范数正则化,那么我们有:
loss(W;x;y)=lossD(W;x;y)+λR∥W∥1loss(W;x;y) = loss_D(W;x;y) + \lambda_R \lVert W \rVert_1 loss(W;x;y)=lossD​(W;x;y)+λR​∥W∥1​
如果同时使用两个正则化,则有:
loss(W;x;y)=lossD(W;x;y)+λR2∥W∥22+λR1∥W∥1loss(W;x;y) = loss_D(W;x;y) + \lambda_{R_2} \lVert W \rVert_2^2 + \lambda_{R_1} \lVert W \rVert_1 loss(W;x;y)=lossD​(W;x;y)+λR2​​∥W∥22​+λR1​​∥W∥1​

distiller.L1Regularize实现l1l_1l1​-范数正则化,当然也可以通过schedule 使用。

l1_regularizer = distiller.s(model.parameters())
...
loss = criterion(output, target) + lambda * l1_regularizer()

组正则化

在Group Regularization中,我们惩罚整组参数元素,而不是单个元素。 因此,整个组要么是稀疏化的(即所有组元素都具有零值),要么不是。 必须预先定义组结构。

loss(W;x;y)=lossD(W;x;y)+λRR(W)+λg∑l=1LRg(Wl(G))loss(W;x;y) = loss_D(W;x;y) + \lambda_R R(W) + \lambda_g \sum_{l=1}^{L} R_g(W_l^{(G)}) loss(W;x;y)=lossD​(W;x;y)+λR​R(W)+λg​l=1∑L​Rg​(Wl(G)​)
让我们表示组中ggg的所有权重元素为w(g)w^{(g)}w(g)。

Rg(w(g))=∑g=1G∥w(g)∥g=∑g=1G∑i=1∣w(g)∣(wi(g))2R_g(w^{(g)}) = \sum_{g=1}^{G} \lVert w^{(g)} \rVert_g = \sum_{g=1}^{G} \sum_{i=1}^{|w^{(g)}|} {(w_i^{(g)})}^2 Rg​(w(g))=g=1∑G​∥w(g)∥g​=g=1∑G​i=1∑∣w(g)∣​(wi(g)​)2
其中w(g)∈w(l)w^{(g)} \in w^{(l)}w(g)∈w(l)并且∣w(g)∣|w^{(g)}|∣w(g)∣是w(g)w^{(g)}w(g)中的元素数。

λg∑l=1LRg(Wl(G))\lambda_g \sum_{l=1}^{L} R_g(W_l^{(G)})λg​∑l=1L​Rg​(Wl(G)​)被称为组正规则。就像在l1l_1l1​-范数正则化中我们总和所有张量元素的大小一样,在Group Lasso中,我们总结了元素结构(即组)的大小。

组正则化也称为块正则化,结构化正则化或粗粒度稀疏性(元素稀疏性有时被称为细粒度稀疏性)。 组稀疏性表现出规律性(即其形状是规则的),因此对提高推理速度可能是有益的。

Huizi-et-al-20173 提供了一些不同组的概述:卷积核,通道,过滤器,层等。 也可以使用诸如矩阵列和行的结构,以及各种形状结构(块稀疏性),甚至intra kernel strided sparsity4

distiller.GroupLassoRegularizer目前实现了大多数这些组,也可以轻松添加新组。

参考


  1. Ian Goodfellow and Yoshua Bengio and Aaron Courville.
    Deep Learning,
    arXiv:1607.04381v2,
    2017. ↩︎

  2. Song Han, Jeff Pool, Sharan Narang, Huizi Mao, Enhao Gong, Shijian Tang, Erich Elsen, Peter Vajda, Manohar Paluri, John Tran, Bryan Catanzaro, William J. Dally.
    DSD: Dense-Sparse-Dense Training for Deep Neural Networks,
    arXiv:1607.04381v2,
    2017. ↩︎

  3. Huizi Mao, Song Han, Jeff Pool, Wenshuo Li, Xingyu Liu, Yu Wang, William J. Dally.
    Exploring the Regularity of Sparse Structure in Convolutional Neural Networks,
    arXiv:1705.08922v3,
    2017. ↩︎

  4. Sajid Anwar, Kyuyeon Hwang, and Wonyong Sung.
    Structured pruning of deep convolutional neural networks,
    arXiv:1512.08571,
    2015 ↩︎

Distiller:正则化相关推荐

  1. Intel发布神经网络压缩库Distiller:快速利用前沿算法压缩PyTorch模型

    Intel发布神经网络压缩库Distiller:快速利用前沿算法压缩PyTorch模型 原文:https://blog.csdn.net/u011808673/article/details/8079 ...

  2. 神经网络压缩库Distiller学习

    课题需要来学习一下Intel开源的Distiller神经网络压缩库. Intel 主要根据以下特征和工具构建了 Distiller: 集成了剪枝.正则化和量化算法的框架 分析和评估压缩性能的一组工具 ...

  3. Distiller:神经网络压缩研究框架

    Distiller是由Intel AI Lab维护的基于PyTorch的开源神经网络压缩框架.主要包括: 用于集成剪枝(pruning),正则化(regularization)和量化(quantiza ...

  4. 基于Distiller的模型压缩工具简介

    Reference: https://github.com/NervanaSystems/distiller https://nervanasystems.github.io/distiller/in ...

  5. 神经网络压缩库 Distiller

    Distiller 是 Intel 开源的一个用于神经网络压缩的 Python 包,可减少深度神经网络的内存占用.提高推断速度并节省能耗.Distiller 为 PyTorch 环境提供原型和分析压缩 ...

  6. 关于使用sklearn进行数据预处理 —— 归一化/标准化/正则化

    20220121 z-score标准化 模型存储和load再调用其实没有关系 再load计算的时候,也是以实际的数据重新计算 并不是以save模型的边界来计算的 20211227 onehot训练集保 ...

  7. 深度学习--TensorFlow(7)拟合(过拟合处理)(数据增强、提前停止训练、dropout、正则化、标签平滑)

    目录 拟合 1.拟合情况 2.抵抗过拟合方法 过拟合处理(防止过拟合): 一.数据增强 1.设置图像生成器 2.载入图片 3.图像转三维数据 4.三维转四维 5.生成图片(用图像生成器) 代码 二.提 ...

  8. 深度学习(2)基础2 -- 分类:得分函数损失函数(损失、正则化惩罚项、梯度下降、学习率)概率

    目录 一.得分函数 1.10分类 2.5分类 二.损失函数 0.引言 1.损失函数(数据损失) 2.损失函数应用 3.损失函数(数据损失与正则化惩罚项) 1.数据损失 2.正则化惩罚项 三.概率 1. ...

  9. 机器学习(12)欠拟合过拟合、模型分析与正则化

    目录 一.欠拟合 二.过拟合 三.模型分析 四.正则化 4-1.L2正则化 4-2.L1正则化 一.欠拟合 机器学习的特征过少,导致预测不准确.(训练集和测试集表现都不好) 解决方法:增加数据的特征数 ...

最新文章

  1. 那些年我们一起追过的缓存写法(二)
  2. Import project出现Select at least one project的解决方法
  3. 本地配置_Hadoop本地模式的安装配置
  4. 法斗几个月长鼻筋_路医生说丨脚底板早起一下地特别疼?得了足底筋膜炎,该怎么办?...
  5. 如果你20秒钟还看不懂这个短信的话,说明你还纯洁!?
  6. 计算机课程学习小结,计算机课程学习心得5篇___.docx
  7. franz ubuntu_重新审视Unix理念,持续测试,Franz,Gitbase,Python,Linux等
  8. Linux Performance Observability Tools
  9. pytorch查看模型weight与grad
  10. multisim安装
  11. 高斯过程回归(资料整理阶段)
  12. java面试真题 烽火通信_java和数据库面试题-烽火通信
  13. 查准率(Precision),灵敏性(Sensitivity),特异性(Specificity),F1,PR曲线,ROC,AUC
  14. ps cs6如何破解
  15. 创建计算机桌面快捷方式图标异常,桌面图标显示异常怎么解决
  16. Mr.Go 会客厅第二期,B站+斗鱼“后浪” Gopher 火花四溅!
  17. Runtime源码剖析-对象
  18. centos7 silk转mp3 wav
  19. 最适合人工智能开发的5种编程语言
  20. 初学者学习网页设计用什么软件最好?

热门文章

  1. 验证:获取linux系统的网卡信息
  2. PDF文件如何添加签名
  3. [图形学] 经典算法 - Kajiya三维纹理渲染毛发
  4. 【WEB】前端系统配色方案(全览)
  5. 让逆向工程师们头疼的代码混淆,就像永远也走不出的“浪浪山”
  6. 丢失LDF文件怎么办?
  7. unpacking of archive failed: cpio: lstat failed - Not a directory
  8. Mybatis中Collection集合标签的使用
  9. [linux] SFTP文件传输基本命令
  10. 【Kafka】kafka架构