点上方蓝字计算机视觉联盟获取更多干货

在右上方 ··· 设为星标 ★,与你不见不散

仅作学术分享,不代表本公众号立场,侵权联系删除

转载于:作者 | Jonathan Quijas

编译 | ronghuaiyang        转自 | AI公园

AI博士笔记系列推荐

周志华《机器学习》手推笔记正式开源!可打印版本附pdf下载链接

导读

通过非常简单的模型配置,提升深度神经网络的收敛速度和性能。

问题描述

训练深度神经网络是一项具有挑战性的任务,特别是对于深度很深的模型。这些困难的一个主要部分是由于通过backpropagation来计算的梯度的不稳定性造成的。在这篇文章中,我们将学习如何使用Keras创建一个自归一化的深度前馈神经网络。这将解决梯度不稳定的问题,加速训练收敛,提高模型性能。

背景

在他们的2010年里程碑论文中,Xavier gloriot和Yoshua Bengio提供了关于训练深度神经网络困难的宝贵见解。事实证明,当时流行的激活函数和权值初始化技术直接促成了所谓的梯度消失/爆炸问题。

简而言之,这是当梯度开始减少或增加太多时,就无法进行训练了。

饱和的激活函数

在广泛采用现在无处不在的ReLU函数及其变体之前,sigmoid函数(s形)是激活函数最受欢迎的选择。sigmoid激活函数的例子是logistic函数:

sigmoid函数的一个主要缺点是容易饱和,在logistic函数的情况下,输出容易饱和成0或1。这将导致随着输入的变大,梯度越来越小(非常接近0)。

logistic和ELU激活函数及其相应的导数的可视化。由于饱和,logistic函数的导数将趋于收缩到0。相反,对于正输入,ELU函数的导数将是常数。

由于ReLU及其变体没有饱和,它们缓解了这种梯度消失的现象。ReLU的改进变种,如ELU函数(如上所示),在所有地方都具有平滑的导数:

  • 对于任何正输入,其导数总是1

  • 对于较小的负数,导数不会接近于零

  • 所有地方都是光滑可导的

注意:因此,输入的期望值为0,且方差较小是有益的。这将有助于在网络中保持较大的梯度。

权值初始化的糟糕的选择

论文中发现的另一个重要观点是使用均值为0,标准偏差为1的正态分布的权值初始化的影响,在作者发现之前,这是一个广泛流行的选择。

作者表明,sigmoid激活和权值初始化(均值为0,标准差为1的正态分布)的特定组合使输出具有比输入更大的方差。这种效应在整个网络中复合,使得更深层次的输入相对于更浅(更早)层次的输入具有更大的量级。这一现象后来被Sergey Ioffe和Christian Szegedy在2015年的一篇里程碑式的论文中命名为内部协变量移位

正如我们上面看到的,当使用sigmoid激活时,会出现越来越小的梯度。

这个问题在logistic函数中更加突出,因为它的期望值是0.5,而不是0。双曲正切sigmoid函数的期望值为0,因此在实践中表现得更好(但也趋于饱和)。

作者认为,为了使梯度在训练过程中保持稳定,所有层的输入和输出必须在整个网络中保持或多或少相同的方差。这将防止信号在向前传播时死亡或爆炸,以及在反向传播时梯度消失或爆炸。

LeCun正态初始化生成的分布导致更多的概率质量以0为中心,并具有较小的方差。这与正态初始化生成的分布(0均值和1标准差)形成鲜明对比,在正态初始化中,值的分布范围更广(方差更大)。

为了实现这一点,他们提出了一种权值初始化技术,以论文的第一作者命名为Glorot(或Xavier)初始化。结果是,通过对Glorot技术做一点修改,我们得到了LeCun初始化,以Yann LeCun命名。

自归一化神经网络(SNNs)

2017年,Günter Klambauer等人介绍了自归一化神经网络 (SNNs)。通过确保满足某些条件,这些网络能够在所有层保持输出接近0的均值和1的标准偏差。这意味着SNN不会受到梯度消失/爆炸问题的困扰,因此比没有这种自归一化特性的网络收敛得更快。根据作者的说法,SNN在论文中报告的所有学习任务中都显著优于其他变体(没有自归一化)。下面是创建SNN所需条件的更详细描述。

结构和层

SNN必须是一个由全连接的层组成的顺序模型。

注意:根据任务的不同,某些类型的网络比其他类型的网络更适合。例如,卷积神经网络通常用于计算机视觉任务,主要是由于其参数效率。确保全连接的层适合你的任务如果是这种情况,那么考虑使用SNN。否则,Batch Normalization是进行归一化的好方法。

一个深度,顺序的,全连接的神经网络的例子。

在这种情况下,顺序模型是指各层按照严格的顺序排列的模型。换句话说,对于每个隐藏层l, l接收的唯一输入是层l-1的输出。在Keras中,这种类型的模型实际上被称为顺序模型。

全连接层是指层中的每个单元都与每个输入有连接。在Keras中,这种类型的层称为Dense层。

输入归一化

输入必须归一化。这意味着训练数据的均值应为0,所有特征的标准差为1。

权值初始化

SNN中的所有层必须使用LeCun正则初始化来初始化。正如我们前面看到的,这将确保权重值的范围接近于0。

SELU激活函数

作者引入了Scaled ELU (SELU)函数作为snn的激活函数。只要满足上述条件,SELU就提供了自归一化的保证。

Keras实现

下面的示例展示了如何为10类分类任务定义SNN:

def get_snn(num_hidden_layers=20, input_shape=None, hidden_layer_size=100):model = keras.models.Sequential()model.add(keras.layers.Flatten(input_shape=input_shape))for layer in range(num_hidden_layers):model.add(keras.layers.Dense(hidden_layer_size,    activation='selu', kernel_initializer='lecun_normal'))model.add(keras.layers.Dense(10, activation='softmax'))return model

自归一化神经网络在Keras中的实现

实验结果

下面是常规前馈神经网络和SNN在三种不同任务上的比较:

  • 图像分类(Fashion MNIST, CIFAR10)

  • 回归(波士顿住房数据集)

两个网络共享以下配置:

  • 20个隐藏层

  • 每隐藏层100个单位

  • Nadam优化器

  • 7e-4的学习率

  • 50个epochs

对于这两种模型,学习曲线都停留在获得最佳性能度量的epoch。

Fashion MNIST

与常规模型相比,SNN在28%的迭代时间内达到了最佳的验证精度。

SNN最后一层权重在时间上的分布。

常规模型最后一层权重的时间分布。

CIFAR10

与常规模型相比,SNN的验证损失和准确性始终更好。

与常规模型相比,SNN在测试集上获得了12%的F1分数。

Boston Housing

与常规模型相比,SNN在少用了32%的时间内获得了最佳的验证精度。

总结

通过确保我们的前馈神经网络结构满足一组条件,我们可以使它自动规范化。所需条件如下:

  • 模型必须是一个全连接的层序列

  • 使用LeCun normal初始化技术初始化权值

  • 使用SELU激活函数

  • 输入归一化

与没有自归一的模型相比,这几乎总是会导致性能和收敛性的改进。如果你的任务需要一个常规的前馈神经网络,可以考虑使用SNN变体。否则,Batch Normalization是一种优秀的(但需要更多时间和计算成本)规范化策略。

英文原文:https://medium.com/towards-artificial-intelligence/solving-the-vanishing-gradient-problem-with-self-normalizing-neural-networks-using-keras-59a1398b779f

end

我是王博Kings,一名985AI博士,在Github上开源了机器学习、深度学习等一系列手推笔记,获得了不少同学的支持。

这是我的私人微信,还有少量坑位,可与相关学者研究人员交流学习 

目前开设有人工智能、机器学习、计算机视觉、自动驾驶(含SLAM)、Python、求职面经、综合交流群扫描添加CV联盟微信拉你进群,备注:CV联盟

王博Kings 的公众号,欢迎关注,干货多多

王博Kings的系列手推笔记(附高清PDF下载):

博士笔记 | 周志华《机器学习》手推笔记第一章思维导图

博士笔记 | 周志华《机器学习》手推笔记第二章“模型评估与选择”

博士笔记 | 周志华《机器学习》手推笔记第三章“线性模型”

博士笔记 | 周志华《机器学习》手推笔记第四章“决策树”

博士笔记 | 周志华《机器学习》手推笔记第五章“神经网络”

博士笔记 | 周志华《机器学习》手推笔记第六章支持向量机(上)

博士笔记 | 周志华《机器学习》手推笔记第六章支持向量机(下)

博士笔记 | 周志华《机器学习》手推笔记第七章贝叶斯分类(上)

博士笔记 | 周志华《机器学习》手推笔记第七章贝叶斯分类(下)

博士笔记 | 周志华《机器学习》手推笔记第八章集成学习(上)

博士笔记 | 周志华《机器学习》手推笔记第八章集成学习(下)

博士笔记 | 周志华《机器学习》手推笔记第九章聚类

博士笔记 | 周志华《机器学习》手推笔记第十章降维与度量学习

博士笔记 | 周志华《机器学习》手推笔记第十一章特征选择与稀疏学习

博士笔记 | 周志华《机器学习》手推笔记第十二章计算学习理论(上)

博士笔记 | 周志华《机器学习》手推笔记第十二章计算学习理论(下)

博士笔记 | 周志华《机器学习》手推笔记第十三章半监督学习

博士笔记 | 周志华《机器学习》手推笔记第十四章概率图模型

点个在看支持一下吧

收藏 | 用 Keras 实现神经网络来解决梯度消失的问题相关推荐

  1. 如何解决梯度消失和梯度爆炸?

    何为梯度消失,梯度爆炸? 目前优化神经网络的方法都是基于反向传播的思想,即根据损失函数计算的误差通过梯度反向传播的方式,指导深度网络权值的更新优化.这样做是有一定原因的,首先,深层网络由许多非线性层堆 ...

  2. RNN梯度消失和爆炸的原因 以及 LSTM如何解决梯度消失问题

    RNN梯度消失和爆炸的原因 经典的RNN结构如下图所示: 假设我们的时间序列只有三段,  为给定值,神经元没有激活函数,则RNN最简单的前向传播过程如下: 假设在t=3时刻,损失函数为  . 则对于一 ...

  3. RNN梯度爆炸原因和LSTM解决梯度消失解释

    RNN梯度爆炸原因: 经典的RNN结构如下图所示: 假设我们的时间序列只有三段, 为给定值,神经元没有激活函数,则RNN最简单的前向传播过程如下: 假设在t=3时刻,损失函数为 . 则对于一次训练任务 ...

  4. LSTM解决梯度消失问题

    "LSTM 能解决梯度消失/梯度爆炸"是对 LSTM 的经典误解. 1.首先需要明确的是,RNN 中的梯度消失/梯度爆炸和普通的 MLP 或者深层 CNN 中梯度消失/梯度爆炸的含 ...

  5. 【深度学习篇】--神经网络中解决梯度弥散问题

     一.前述 在梯度下降中,随着算法反向反馈到前面几层,梯度会越来越小,最终,没有变化,这时或许还没有收敛到比较好的解,这就是梯度消失问题,深度学习遭受不稳定的梯度,不同层学习在不同的速度上 二.解决梯 ...

  6. LSTM如何解决梯度消失或爆炸的?

    from:https://zhuanlan.zhihu.com/p/44163528 哪些问题? 梯度消失会导致我们的神经网络中前面层的网络权重无法得到更新,也就停止了学习. 梯度爆炸会使得学习不稳定 ...

  7. 【深度学习笔记】Batch Normalization 以及其如何解决梯度消失问题

    前言 Batch Normalization作为最近一年来DL的重要成果,已经广泛被证明其有效性和重要性.目前几乎已经成为DL的标配了,任何有志于学习DL的同学们朋友们雷迪斯俺的詹特曼们都应该好好学一 ...

  8. 深度理解RNN的梯度消失和LSTM为什么能解决梯度消失

    一.RNN的梯度消失有什么不同之处 先说结论:RNN的梯度等于近距离梯度与远距离梯度的和,RNN的梯度消失是远距离梯度的消失,而近距离梯度不会消失,同时总的梯度不会消失,从而导致总的梯度由近距离梯度占 ...

  9. 神经网络中的梯度消失

    什么是梯度消失? 神经元的权重w和偏置b是和激活函数的梯度成正比的,激活函数导数越大,则w,b调整越快,如果激活函数梯度很小,在反向传播时,多个小于0的导数相乘,随着神经网络层数的加深,梯度方向传播到 ...

最新文章

  1. python统计窗口函数怎么处理_python移动窗口函数
  2. 奇瑞s61鸿蒙,数码提前曝光,奇瑞新能源 S61 将搭载华为鸿蒙车机系统
  3. UOJ#179. 线性规划(线性规划)
  4. 网络营销外包对于搜索引擎策略性调整网络营销外包专员如何解析
  5. 《信息系统项目管理师软考辅导——3年真题详解与全真模拟》主要创新点、关注点...
  6. Silverlight 4 新特性之Silverlight as Drop Target
  7. flask框架中勾子函数的使用
  8. 分享一次与SharpDX坑爹Bug刚正面的过程
  9. 已知法向量 求投影_MIT—线性代数笔记15 子空间投影
  10. [luogu4133 BJOI2012] 最多的方案 (计数dp)
  11. 2017.9.22 松鼠的聚会 失败总结
  12. C#基础18:内置委托类型Action和Func
  13. 马哥运维班第一周作业
  14. Orcle数据库 表的 内置函数 内链接 外连接 相关练习题
  15. UE4保存信息到本地
  16. 风车im即时通讯源码
  17. FY-4A建立中国区域图像行列号转经纬度的经纬度查找表进行几何校正
  18. 人生就是游戏,你如何遵守游戏规则?
  19. android最新直播框架,NDK--Android Studio中直播推流框架的搭建
  20. MPDA:基于Domain Adaption的V2X协同感知(3D目标检测)

热门文章

  1. 为什么虚拟机上一运行就显示程序停止_五分钟学Java:如何学习Java面试必考的JVM虚拟机...
  2. php7扩展sphinx,php7进行安装sphinx简单记录
  3. 玩客云刷armbian后根目录扩展
  4. java如何脱离ide运行_如何脱离IDE使用自己的jar包?
  5. 沉浸式全息本是什么_够炫酷!联想全息教学设备,构建沉浸式教学场景
  6. 解压deb_Linux填坑记:很全面的解压和压缩命令集合
  7. poi生成word不可以修改_操作不懂技术就可以做小程序无限生成平台的创业项目实操教程...
  8. concurrenthashmap为什么是线程安全_为什么SimpleDateFormat不是线程安全的?
  9. 计算机实测声波和拍实验报告,course:platform
  10. Delphi 防止程序多次运行《转》