1. 摘要

本文尝试解释为什么在深度的神经网络中随机初始化会让梯度下降表现很差,并且在此基础上来帮助设计更好的算法。

作者发现 sigmoid 函数不适合深度网络,在这种情况下,随机初始化参数会让较深的隐藏层陷入到饱和区域。

作者提出了一个新的参数初始化方法,称之为 Xavier 初始化,来帮助深度网络更快地收敛。

2. 激活函数的作用以及训练过程中的饱和现象

2.1. 三种激活函数

\[Tanh(x)=\frac{1-e^{-x}}{1+e^{-x}}\]
\[Sigmoid(x)=\frac{1}{1+e^{-x}}\]
\[Softsign(x)=\frac{x}{1+|x|}\]

2.2. Sigmoid 函数

通过观察训练过程中每一个隐藏层激活值的均值和方差,我们可以发现第 4 层的激活值很快就进入到了饱和区域,非常接近于 0。由于 Sigmoid 函数在接近于 0 的时候梯度很小,这样的话反向传播过程就会学习得很慢,虽然最终网络会慢慢离开饱和区域,但往往学到的解也不是最优的。

2.3. Tanh 函数和 Softsign 函数

由于 Tanh 函数和 Softsign 函数接近于 0 的时候梯度近似线性,所以它们不会遇到像 Sigmoid 上面的情况。但是,采用 Tanh 作为激活函数时,从第一层到第四层的激活值却也会在训练过程中依次进入饱和区域。而采用 Softsign 的话,所有层都逐渐进入饱和区域,但这个过程会更慢一点。

在训练完成后,我们可以发现以 Tanh 作为激活函数,最终每层的激活值大多落在饱和区域和 0 附近;以 Softsign 作为激活函数,最终每层的激活值大多落在 (-0.6, -0.8) 和 (0.6, 0.8) 区间。

3. 梯度以及它们的传播

3.1. 损失函数

作者发现采用似然损失比用二次的均方误差要好,因为采用似然损失不容易陷入到平缓区域,不会让训练过程变得很慢。如下图所示,可以看到采用二次损失的损失函数有很多平缓区域。

3.2. Xavier 初始化

针对一个对称的激活函数,并且其在原点处的导数为 1,那么我们有:

根据以上定义,可以得到:

假设初始时我们位于线性区域,权重之间互相独立,并且输入的特征具有一样的方差 \(Var[x]\),第 \(i\) 层具有 \(n_i\) 个神经元,那么有:

可参考 Delving Deep into Rectifiers: Surpassing Human-Level Performance on ImageNet Classification 对比进行分析。

在前向过程中,为了保持信息,让每一层都具有一样的方差,即:

那么我们可以得到:

同样,考虑梯度的反向传播,我们可以得到:

为了保证每一层梯度的方差一致,也即:

我们有:

若同时考虑到前向传播的反向传播的约束,我们想要:

对此,我们用下面的方法来初始化参数

其中,\(U\) 代表均匀分布,其方差为

\[\frac{(b-a)^2}{12} = \frac{2}{n_j+n_{j+1}}\]

正好符合我们的预期。

可以看到,在前向传播过程中,旧的初始化方法,越靠后的层激活值越容易陷入到 0 区域,而采用新的初始化方法后,每一层的激活值分布基本相同。

在反向传播过程中,旧的初始化方法,越靠前的层梯度值越容易陷入到 0 区域,而采用新的初始化方法后,每一层的梯度分布基本相同。

5. 实验结果

获取更多精彩,请关注「seniusen」!

Xavier——Understanding the difficulty of training deep feedforward neural networks的更多相关文章

  1. [Xavier] Understanding the difficulty of training deep feedforward neural networks

    目录 概 主要内容 Glorot X, Bengio Y. Understanding the difficulty of training deep feedforward neural netwo ...

  2. Understanding the difficulty of training deep feedforward neural networks

    本文作者为:Xavier Glorot与Yoshua Bengio. 本文干了点什么呢? 第一步:探索了不同的激活函数对网络的影响(包括:sigmoid函数,双曲正切函数和softsign y = x ...

  3. Deep learning_CNN_Review:A Survey of the Recent Architectures of Deep Convolutional Neural Networks——2019

    CNN综述文章 的翻译 [2019 CVPR] A Survey of the Recent Architectures of Deep Convolutional Neural Networks 翻 ...

  4. Understanding the Effective Receptive Field in Deep Convolutional Neural Networks

    Understanding the Effective Receptive Field in Deep Convolutional Neural Networks 理解深度卷积神经网络中的有效感受野 ...

  5. AlexNet论文翻译-ImageNet Classification with Deep Convolutional Neural Networks

    ImageNet Classification with Deep Convolutional Neural Networks 深度卷积神经网络的ImageNet分类 Alex Krizhevsky ...

  6. Image Scaling using Deep Convolutional Neural Networks

    Image Scaling using Deep Convolutional Neural Networks This past summer I interned at Flipboard in P ...

  7. (转) Ensemble Methods for Deep Learning Neural Networks to Reduce Variance and Improve Performance

    Ensemble Methods for Deep Learning Neural Networks to Reduce Variance and Improve Performance 2018-1 ...

  8. 中文版 ImageNet Classification with Deep Convolutional Neural Networks

    ImageNet Classification with Deep Convolutional Neural Networks 摘要 我们训练了一个大型深度卷积神经网络来将ImageNet LSVRC ...

  9. 深度学习的集成方法——Ensemble Methods for Deep Learning Neural Networks

    本文主要参考Ensemble Methods for Deep Learning Neural Networks一文. 1. 前言 神经网络具有很高的方差,不易复现出结果,而且模型的结果对初始化参数异 ...

随机推荐

  1. JS应该放在什么位置?

    (1)放在底部,虽然放在底部照样会阻塞所有呈现,但不会阻塞资源下载 (2)如果嵌入JS放在head中,请把嵌入JS放在CSS头部 (3)使用defer(只支持IE) (4)不要在嵌入的JS中调用运行时 ...

  2. 分布式唯一ID的几种生成方案

    前言 在互联网的业务系统中,涉及到各种各样的ID,如在支付系统中就会有支付ID.退款ID等.那一般生成ID都有哪些解决方案呢?特别是在复杂的分布式系统业务场景中,我们应该采用哪种适合自己的解决方案是十 ...

  3. 《Java程序设计》第12周课堂实践总结

    <Java程序设计>第12周课堂实践总结 实践一 教材代码检查-p98 要求 修改教材P98 Score2.java, 让执行结果数组填充是自己的学号: 提交在IDEA或命令行中运行结查截 ...

  4. springboot不使用内置tomcat启动,用jetty或undertow

    Spring Boot启动程序通常使用Tomcat作为默认的嵌入式服务器.如果需要更改 - 您可以排除Tomcat依赖项并改为包含Jetty或Undertow: jetty配置: <depend ...

  5. tp5简要

    1.实例化模型 namespace app\web\controller; use think\Controller; use app\web\model\Member; use think\Load ...

  6. http 的request和response 在servlet的应用文件下载

    一)response 我们通过浏览器访问网站的时候,处理响应的是response. 它由三部门组成:响应行.响应头.响应体 作用:往浏览器写东西. 1)响应行 格式:协议/版本  状态码 状态码说明. ...

  7. 【Potplayer】视频播放器

    Potplayer——视频播放器

  8. css学习之LInk & import

    一.用link加载外部样式表 1.放置位置:放在head元素中 2.样式表中只能包含样式规则,不能包含其他标记语言.如出现了标记,会导致其中一部分或全部被忽略. 3.type = 'text/css' ...

  9. jQuery----获取兄弟元素的方法

    ① $(this).next():        获取的是当前元素的下一个兄弟元素 ②$(this).nextAll();       获取的是当前元素的后面的所有的兄弟元素 ③$(this).pre ...

  10. 【PHP开发规范】老生常谈的编码开发规范你懂多少?

    [PHP开发规范]老生常谈的编码开发规范你懂多少? 这几天看了一下阿里技术发布的一套Java开发规范<阿里巴巴Java开发手册>,里面写了阿里内部的Java开发规范标准,写的很好.这套Ja ...