Xavier——Understanding the difficulty of training deep feedforward neural networks
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的更多相关文章
- [Xavier] Understanding the difficulty of training deep feedforward neural networks
目录 概 主要内容 Glorot X, Bengio Y. Understanding the difficulty of training deep feedforward neural netwo ...
- Understanding the difficulty of training deep feedforward neural networks
本文作者为:Xavier Glorot与Yoshua Bengio. 本文干了点什么呢? 第一步:探索了不同的激活函数对网络的影响(包括:sigmoid函数,双曲正切函数和softsign y = x ...
- 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 翻 ...
- Understanding the Effective Receptive Field in Deep Convolutional Neural Networks
Understanding the Effective Receptive Field in Deep Convolutional Neural Networks 理解深度卷积神经网络中的有效感受野 ...
- AlexNet论文翻译-ImageNet Classification with Deep Convolutional Neural Networks
ImageNet Classification with Deep Convolutional Neural Networks 深度卷积神经网络的ImageNet分类 Alex Krizhevsky ...
- Image Scaling using Deep Convolutional Neural Networks
Image Scaling using Deep Convolutional Neural Networks This past summer I interned at Flipboard in P ...
- (转) 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 ...
- 中文版 ImageNet Classification with Deep Convolutional Neural Networks
ImageNet Classification with Deep Convolutional Neural Networks 摘要 我们训练了一个大型深度卷积神经网络来将ImageNet LSVRC ...
- 深度学习的集成方法——Ensemble Methods for Deep Learning Neural Networks
本文主要参考Ensemble Methods for Deep Learning Neural Networks一文. 1. 前言 神经网络具有很高的方差,不易复现出结果,而且模型的结果对初始化参数异 ...
随机推荐
- etherlime-2-Etherlime Library API-deployer
Etherlime Library API 库API Deployer部署者 Deployer functionality The main functionality the deployer ex ...
- mongodb的学习-2-简介
http://www.runoob.com/mongodb/mongodb-intro.html 什么是MongoDB ? MongoDB 是由C++语言编写的,是一个基于分布式文件存储的开源数据库系 ...
- Python学习笔记系列——数据结构相关
Python有4种数据结构:列表(list).字典(dictionary).元组(Tuple).集合(set).从最直接的感官上来说,这四种数据结构的区别是:列表中的元素使用方括号括起来,字典和集合是 ...
- P1796 汤姆斯的天堂梦
题目描述 汤姆斯生活在一个等级为0的星球上.那里的环境极其恶劣,每天12小时的工作和成堆的垃圾让人忍无可忍.他向往着等级为N的星球上天堂般的生活. 有一些航班将人从低等级的星球送上高一级的星球,有时需 ...
- Java 遍历指定文件夹及子文件夹下的文件
Java 遍历指定文件夹及子文件夹下的文件 /** * 遍历指定文件夹及子文件夹下的文件 * * @author testcs_dn * @date 2014年12月12日下午2:33:49 * @p ...
- Centos7安装elasticsearch、logstash、kibana、elasticsearch head
环境:Centos7, jdk1.8 安装logstash 1.下载logstash 地址:https://artifacts.elastic.co/downloads/logstash/logsta ...
- 【OC底层】Category、+load方法、+initialize方法原理
Category原理 - Category编译之后的底层结构是 struct categroy_t,里面存储着分类对象方法.属性.协议信息- 当程序运行时,通过runtime动态的将分类的方法.属性. ...
- 微信小程序<每日查看>开发总结
之前一直在做iOS平台的App和SDK开发,发现微信小程序还蛮有意思的,花了将近几天的时间,从看书学习到萌发想法,最后开发出一款小应用,现在花点时间总结一番!作为自我勉励和后续继续学习动力- 先上效果 ...
- FPGA-Xilinx原语调用之ODDR
记录背景:最近由于想实现GMIItoRGMII的功能,因此需要调用ODDR原语. ODDR:Dedicated Dual Data Rate (DDR) Output Register 通过ODDR把 ...
- mssqlserver的md5函数
参考:https://www.cnblogs.com/JuneZhang/p/6396896.html?utm_source=itdadao&utm_medium=referral 简单说明: ...