深度学习经典trick汇总

trick这个词或许有投机取巧的意味,但深度学习论文中出现的很多这个trick确实对模型更方面性能有所提高,而且它们中的很多还具有普适性,那么这种“trick“或许应该被叫做“技术”。

1. 权重衰减

θ t + 1 = ( 1 − ω α ) θ t − α ∇ θ t L ( x , θ t ) T (1-1) θ_{t+1}=(1-\omegaα)θ_t-α∇_{θ_t}L(x,θ_t )^T\tag{1-1} θt+1​=(1−ωα)θt​−α∇θt​​L(x,θt​)T(1-1)

(1-1)为引入权重衰减时参数更新公式,ω为权重衰减系数,α为学习率。可以直观的看出,引入权重衰减与不引入权重衰减相比,θ会有减小的倾向。通过推导可知在不引入动量的SGD优化器中,权重衰减等价于对权重L2正则化,详见笔记:[L2正则化与权重衰减]。

权重衰减实际上限制了权重的可行域,相当于降低了模型的复杂度,目前是防止模型过拟合的一种常用手段。

  • **tips:**一般来说,ω取值越大,权重衰减越剧烈,模型拟合能力越差,易造成欠拟合,所以ω一般取较小的值(<=1e-3)。ω的取值也是一个需要不断调参的过程,让模型最终处于欠拟合与过拟合之间的状态。

2. Dropout层

Dropout(暂退)层的做法也十分好理解:在上一层输出后以一定概率随机屏蔽掉部分神经元(令其们输出为0)。
h ′ = { 0 概率为 p h 1 − p 其他情况 (2-1) h^{'}=\begin{cases} 0 & 概率为p\\ \frac{h}{1-p} & 其他情况 \end{cases}\tag{2-1} h′={01−ph​​概率为p其他情况​(2-1)
由(2-1),h为神经元原输出,h‘为暂退后输出。可见上一层输出经过Dropout层后,均值不变。(但方差变了)

图1 暂退层的作用

这种方法更“粗暴”地降低了权重数量,降低了模型复杂度,当然可以【避免过拟合】,很好理解吧。

  • tips:【暂退概率】是Dropout层唯一需要调整的超参数,以这个概率随机丢掉部分神经元。该值在(0,1)之间取值。经验取值在(0,0,5]之间,而且越靠近输入层暂退概率应该取值越小,以保留更多可能有价值的特征。

    需要注意一个事情,在前向传播的时候暂退层是【随机】丢弃一部分神经元。改变输出方差的同时也是输出变得不稳定,可能造成无法收敛或者loss震荡的情况,所以如果加入暂退层的网络出现loss震荡的情况就应该考虑减少或去掉暂退层。

3. 标准化层

标准化层一般是添加在隐藏层后的一种对其输出数据标准化处理的trick。我们已经知道输入数据需要标准化后才能输入网络,其实标准化也是一个道理。你想想,隐藏层有很多权重和输入数据做线性计算输出,再逐一对元素进行非线性计算,那怎么保证中间输出的数据仍然保证分布一致?中间数据分布不一致了后面网络的处理效果不就更差了?

所以,对于深层神经网络而言,标准化层是一个【保证模型拟合能力】的一种必要trick。

图2 标准化处理数据的作用

那么接下来的问题是,归一化层的设计是什么样的?下面看看归一化层的计算公式:
μ S = 1 m ∑ i = 1 m x i σ S 2 = 1 m ∑ i = 1 m ( x i − μ S ) 2 x i ^ = x i − μ S σ S 2 + ξ y i = γ x i ^ + β (3-1) μ_S=\frac{1}{m}\sum_{i=1}^{m}x_i\\ \sigma^2_S=\frac{1}{m}\sum_{i=1}^{m}(x_i-μ_S)^2\\ \widehat{x_i}=\frac{x_i-μ_S}{\sqrt{\sigma^2_S+ξ}}\\ y_i=γ\widehat{x_i}+β\tag{3-1} μS​=m1​i=1∑m​xi​σS2​=m1​i=1∑m​(xi​−μS​)2xi​ ​=σS2​+ξ ​xi​−μS​​yi​=γxi​ ​+β(3-1)
xi是输入数据,m是输入数据个数,yi是输出,γ β作为标准化层参数S是数据标准化的域。

好理解吧,先算数据均值和方差,然后减均值 除以方差,再计算最终输出。这里重点解释两点:标准化层参数,和标准化域。

标准化层的参数可以作为整个网络的权重,加入梯度反向传播计算;也可以不作为网络权重,直接取常数,各种深度学习框架都对此细节有很好的支持。

而标准化域S有点不太好理解,标准化层有4种标准化域,下面这副图可以很好的说明它们的关系:

图3 4种标准化域

由(3-1),标准化是按照标准化域计算的,标准化域就是图3中蓝色的数据。(就是对这部分数据求均值和方差)

你可以把图3中的正方体块想象成一个tensor:H、W是图像的高和宽,C是通道数,N是batch_size。也就是说,上图中的正方体块可以表示为这样的tensor(N, C, H, W)

如此,四中标准化方法就比较好理解了:

  1. Batch Norm:以batch中所有图像的一个channel为单位做标准化,标准化层参数是2C。
  2. Layer Norm:以batch中一个图像的所有channel为单位做标准化,标准化层参数是2N。
  3. Instance Norm:以batch中一个图像的一个channel为单位做标准化,标准化层参数是2CN。
  4. Group Norm:以batch中的一个图像的group个channel为单位做标准化,标准化层参数是2NC/group。
  • **tips:**对于深层网络这个东西几乎是必用的,否则到后面可能会导致模型拟合能力下降严重。而且最好是让标准化层参数加入网络梯度训练,让网络学习到一个最佳的标准化策略。

4. 权重初始化

模型要迭代训练一定要有一个初始权重,那初始权重应该取多少呢?或者说这个问题应该如何考虑呢?

我们的目标应该是这样:要使得每一层【输出o】、【输入x】、【该层反向传播时计算梯度】的【均值和方差】保持一致。

这有啥好处呢?因为如果每次迭代后输入输出分布接近一致,那么权重向量就可以在相同比例的两个空间内寻找一组最佳映射;假设每次迭代后输出的分布空间都有很大变化,则权重每次还得学习不一样的映射尺度,造成模型学习的震荡,很难收敛。

更重要的是梯度的稳定。如果每次梯度分布空间不一样,则容易造成梯度爆炸或消失的问题。

总之,我们学习一个输入和输出的映射关系,最好要排除掉变量之间分布的差异影响因素,才可以更好的学习到输入输出的本质关系。因此,初始值更要取一个

基于此目的,下面来推导一下初始权重应该取怎样的值?我们假设一个最简单的情况,一个没有非线性单元的全连接层中,输入、权重、输出三者的关系:
o i = ∑ j = 1 n i n w i j x j (4-1) o_i=\sum_{j=1}^{n_{in}}w_{ij}x_j\tag{4-1} oi​=j=1∑nin​​wij​xj​(4-1)
(4-1)中,nin为输入神经元个数。

x在输入前一般已经做了归一化处理,均值为0,方差为γ2。假设我们的ω是从某种分布中抽取的(不一定是高斯分布),该分布的均值也是0(可以证明此时输出的均值也能保证为0)方差为δ2。

那么按此计算,输出的均值和方差是多少呢?不难计算得到:
E ( o ) = 0 V a r ( o ) = n i n δ 2 γ 2 (4-2) E(o)=0\\ Var(o)=n_{in}δ^2γ^2\tag{4-2} E(o)=0Var(o)=nin​δ2γ2(4-2)
如此,如果我们想让输入和输出的方差相等,必须令ninδ2=1。同理,在反向传播中(由该层神经元输出计算该层参数的梯度),也必须令noutδ2=1(nout为输出神经元个数)才能保证参数梯度的方差=输出的方差。据此,我们只需满足:
δ 2 = 2 n i n + n o u t (4-3) δ^2=\frac{2}{n_{in}+n_{out}}\tag{4-3} δ2=nin​+nout​2​(4-3)
**我们采样 一个的(4-3)的方差,0均值的高斯分布,即可得出一层权重的初始值。这就是Xavier采样初始化。**当然,没必要非得采样高斯分布,均匀分布反而更简单计算,也很容易计算出该均匀分布的值域。

深度学习经典trick汇总相关推荐

  1. [转载]机器学习深度学习经典资料汇总,全到让人震惊

    自学成才秘籍!机器学习&深度学习经典资料汇总 转自:中国大数据: http://www.thebigdata.cn/JiShuBoKe/13299.html [日期:2015-01-27] 来 ...

  2. 深度学习经典论文汇总

    CV-CNN AlexNet(2012):深度学习热潮的奠基作 VGG(2014):使用 3x3 卷积构造更深的网络 GoogleNet(2014):使用并行架构构造更深的网络 ResNet(2015 ...

  3. 【转】自学成才秘籍!机器学习深度学习经典资料汇总

    小编都深深的震惊了,到底是谁那么好整理了那么多干货性的书籍.小编对此人表示崇高的敬意,小编不是文章的生产者,只是文章的搬运工. <Brief History of Machine Learnin ...

  4. 机器学习深度学习经典资料汇总

    小编都深深的震惊了,到底是谁那么好整理了那么多干货性的书籍.小编对此人表示崇高的敬意,小编不是文章的生产者,只是文章的搬运工. <Brief History of Machine Learnin ...

  5. 深度学习经典数据集汇总

    点击上方"小白学视觉",选择加"星标"或"置顶" 重磅干货,第一时间送达 很多朋友在学习了神经网络和深度学习之后,早已迫不及待要开始动手实战 ...

  6. 【深度学习】深度学习经典数据集汇总

    深度学习数据集 Author:louwill From:深度学习笔记 很多朋友在学习了神经网络和深度学习之后,早已迫不及待要开始动手实战了.第一个遇到的问题通常就是数据.作为个人学习和实验来说,很难获 ...

  7. 深度学习经典教程:深度学习+动手学深度学习

    作者:[美] Ian,Goodfellow(伊恩·古德费洛),[加] Yoshua,Bengio(约书亚·本吉奥)等 出版社:人民邮电出版社 品牌:异步图书 出版时间:2019-06-01 深度学习经 ...

  8. 深度学习经典网络解析图像分类篇(二):AlexNet

    深度学习经典网络解析图像分类篇(二):AlexNet 1.背景介绍 2.ImageNet 3.AlexNet 3.1AlexNet简介 3.2AlexNet网络架构 3.2.1第一层(CONV1) 3 ...

  9. 2019 到目前为止的深度学习研究进展汇总

    本文为 AI 研习社编译的技术博客,原标题 : Best Deep Learning Research of 2019 So Far 作者 | ODSC - Open Data Science 翻译 ...

最新文章

  1. 增加CentOS File Descriptors
  2. springmvc json 406
  3. python3 域名转ip
  4. java软件网络工程师面试题_170道Java工程师面试题,你敢挑战吗?
  5. autossh端口映射
  6. SQL 与NoSQL
  7. 旅行商问题的n种解法
  8. 弹性盒模型--新版与旧版比较(2)
  9. 全球撤稿排行榜前10出炉:第一名多到想象不到
  10. Weblogic跨域session冲突解决办法
  11. telnet黑屏就是通_黑屏的智能农贸市场竟通过验收?市场监管部门:工作力度不够 | 电视问政...
  12. 重磅!吴恩达新书《机器学习训练秘籍》中文版来了(附PDF下载)
  13. 身份证读取设备开发解决方案:3、单片机读取身份证信息的demo
  14. 操作系统实验·字符设备驱动程序
  15. rba有哪几個主要組成部分_RBA管理体系有哪些
  16. deepfacelab安卓版_DeepFaceLab2.0中文版
  17. 嵌入Quicktime
  18. 某财经网站股市信息系统疑被黑 证券内参泄密
  19. 使用jQuery的基于DOM的数据存储和检索
  20. 多方安全计算(MPC)发展脉络及应用实践

热门文章

  1. diea的maven项目中,spring上下文扫描不生效(无容器图标)
  2. 51单片机入门自学方法
  3. Python 之网络式编程
  4. php yii框架addselect,PHP Yii框架之数据库查询操作总结
  5. 塑料清洗污水处理(塑料清洗污水处理设备)
  6. antd tabe表头出现遮挡
  7. //众神云集、群魔乱舞、以一抵百、砥砺前行//P1577 切绳子
  8. 与50位网站主编面对面
  9. 关于reell和real
  10. 【Python课程设计】学生成绩管理系统