当前位置: 首页 > news >正文

模型剪枝算法——L1正则化BN层的γ因子

ICCV在2017年刊登了一篇经典论文《 Learning Efficient Convolutional Networks through Network Slimming》。在神经网络的卷积操作之后会得到多个特征图,通过策略突出重要的特征达到对网络瘦身的目的。在该论文中使用的剪枝策略就是稀疏化BN层中的缩放因子 \gamma
BatchNorm的本质是使输入数据标准化,关于0对称,数据分布到一个量级中,在训练的时候有利于加速收敛
BatchNorm本来公式:
\hat{x} = \frac{x^{k}-E[x^{k}]}{\sqrt{var[x^{k}]}}
在实际应用时,引入了两个可训练的参数 \gamma 、 \beta。后文会详解介绍。
为什么说输入数据分布不均匀,网络分布不容易收敛,以sigmoid为例进行介绍。sigmoid函数在神经网络中常用来做激活函数,为了将非线性引入神经网络中,使得神经网络具有更加复杂的决策边界。
​​​​​​​        ​​​​​​​        ​​​​​​​        ​​​​​​​        ​​​​​​​        ​​​​​​​         \phi (z) = \frac{1}{1+e^{-z}}
如sigmoid函数图像所示,输入数据在红框范围内,函数梯度较大,反向传播收敛更快。在红框外,梯度小参数更新慢,甚至有梯度消失的情况。
因此加入BN层能够很好的将数据分布规范化到均值为0,方差为1的标准正态分布。提高了激活函数的灵敏度,加速训练。
但是这样一来又引入了新的问题,我们观察红框内的函数形状类似线性函数。为了保持非线性,因此在BN中加入可训练的参数 \gamma\beta来呈现非线性。 (此处不理解为什么呈现的是非线性)
​​​​​​​        ​​​​​​​        ​​​​​​​        ​​​​​​​        ​​​​​​​                  y^{k} = r^{k} \hat{x}^{k} + \gamma ^{k}
改进后的BN公式:
神经网络中网络层连接顺序:conv->BN->激活层
其中,卷积层的每个通道都会对应一个缩放因子\gamma,我们对\gamma小的值进行prunning,得到稀疏的网络层。
如何将重要的特征(通道)的\gamma值提高?  为什么重要的特征(通道)的\gamma值高?——使用L1正则化能对\gamma进行稀疏作用。
我们先来回顾一下L1、L2正则化。
通常L1正则化用来稀疏与特征选择。目标函数通常由损失函数(此处为MSE)和正则化函数组成,L1正则项表示如下。传入的参数 \theta经过L1正则化可以达到稀疏的效果。
​​​​​​​        ​​​​​​​        ​​​​​​​         J(\theta ) = \frac{1}{m}\sum_{i=1}^{m}h_{\theta }(x^{i}-y^{i})^{2} + \lambda \sum_{n}^{i=1}\left | \theta_{j} \right |
L1正则化函数图像以及它的求导函数sign(θ)的图像如下。L1在反向传播,梯度更新的时候梯度下降的步长衡为1,在参数更新的时候很多参数都学成了0,因此能达到稀疏的目的。

L2正则化用来平滑特征,防止过拟合。目标函数携带L2正则项表示:

        ​​​​​​​        ​​​​​​​        ​​​​​​​        ​​​​​​​        J(\theta ) = \frac{1}{m}\sum_{i=1}^{m}h_{\theta }(x^{i}-y^{i})^{2} + \lambda \sum_{n}^{i=1}\theta_{j}^{2}

L2正则化函数及求导函数的图像:

L2求导为θ,当参数特别大时,参数更新的梯度也大,当参数特别小时,参数更新的梯度也小。因此产生平滑特征的效果。L2可以每个参数都变小但是不至于变成0,这样可以减少模型的复杂度,防止模型拟合数据中的噪声。
因此可以利用L1正则化对参数\gamma进行稀疏作用。
​​​​​​​        ​​​​​​​        ​​​​​​​        ​​​​​​​       

 
http://www.lryc.cn/news/224825.html

相关文章:

  • 11.9 知识总结(三板斧、全局配置文件、静态文件的配置、request对象等)
  • CSS 外边距、填充、分组嵌套、尺寸
  • Exploration by random network distillation论文笔记
  • Ubuntu22.04配置Go环境
  • Zabbix深入解析与实战
  • 怎么用电脑开发安卓app?能外包吗?
  • 1-前端基本知识-HTML
  • 磁盘的分区、格式化、检验与挂载 ---- fdisk,mkfs,mount
  • Solr搜索参数详解
  • Flink(三)【运行时架构】
  • conda添加清华镜像源
  • 「Verilog学习笔记」求两个数的差值
  • 微头条项目实战:通过postman测试登录验证请求
  • ARCGIS SERVER WMS、WFS服务添加过滤条件
  • 2013年108计网
  • 【数据结构】单链表OJ题(一)
  • 2023年云计算发展趋势浅析
  • [极客大挑战 2019]Http1
  • C 语言 for循环
  • 浅谈数据结构之链表
  • 封装一个 虚拟列表渲染 组件
  • Spring中@Bean标注的方法是如何创建对象呢?
  • 伦敦金股票代码是什么?
  • 【环境装配】Anaconda在启动时闪现黑框,闪几次后仍能正常使用,解决黑框问题
  • 【Python】Python爬虫使用代理IP的实现
  • 盘点U-Mail邮件系统安全设计
  • Webpack--动态 import 原理及源码分析
  • 创新无处不在的便利体验——基于智能视频和语音技术的安防监控系统EasyCVR
  • 强化IP地址管理措施:确保网络安全与高效性
  • Power Automate-创建审批流