TensorFlow从1到2 - 2 - 消失的梯度

TensorFlow从0到N专题入口

上一篇1 深度神经网络我们知道,通过追加隐藏层来构建更加“智能”的深度神经网络,并不奏效。

真正的问题不在“深度”本身,而是由梯度下降算法所指导的训练过程,容易遭遇梯度消失问题(Vanishing Gradient Problem),以及与之成对存在的梯度爆炸问题(Exploding Gradient Problem)

本篇分析梯度消失和爆炸问题,并引入整流线性单元(ReLU)。

Vanishing Gradient

重现梯度消失

为了凸显这个问题,我们需要一个特别的网络架构,抽出网络中由蓝色神经元构成的路径,形成一个每层只有一个神经元的多层网络,如下图所示:

接下来采用链式法则进行反向传播,来获得最靠前的隐藏层神经元参数的梯度形式:

整理得到下式:

这个形式可以清晰的反应出在反向传播过程中,靠后的层如何影响靠前的层:神经元梯度会受到其后每层神经元的累积乘性影响,越靠近输出层的,乘性因子越多。这将导致靠前面的神经元层梯度的不稳定——容易过小或者过大,从而产生梯度消失或梯度爆炸。

以梯度消失为例。假设网络参数初始化符合标准正态分布N(0,1),且神经元的激活函数采用Sigmoid函数,则有|w| < 1,而Sigmoid的导数σ' < 1/4(见下面的Sigmoid导数曲线)。

Sigmoid导数曲线

根据上述,得到下面推断:网络越深,靠近输入层的神经元的梯度的绝对值越小,也就意味着神经元学习缓慢,甚至停止学习。这种情况下靠前的隐藏层都是不爱“学习”的无效层,如下所示:

对前面的网络结构,进行训练迭代60次,并监测各隐藏层偏置上的梯度,会得到与理论分析相同的结果。如下图所示,从左到右,从上到下,依次是第1个到第4个隐藏层偏置bl上的梯度求模的值,曲线显示越靠前的层偏置向量b的模越小,所用代码tf_2-2_one_path.py

梯度爆炸

梯度爆炸问题,效果与梯度消失恰恰相反——越靠前的隐藏层的梯度越大。

一个简单的解释是:训练过程中随着权重w的不断更新,分布不再服从初始化时的N(0, 1)。一旦出现权重w的标准差远远大于1,那么越靠前的隐藏层将获得很大的梯度(绝对值),导致权重更新幅度非常大,神经元很难学到稳定的概念。

总的来说,不管是梯度消失还是梯度爆炸,深度网络中靠近输入层的神经元,其梯度的内在结构“不稳定”是学习困难的根本原因。

Sigmoid三宗罪

前面的神经网络以及相应的问题都是基于S型神经元,即采用Sigmoid作为各层的激活函数。下面来说说Sigmoid的3个主要缺陷。

1.输出区间不以0为中心

Sigmoid的输出范围为(0, 1),总是正数,不以0为中心。由此可推断,一个由S型神经元构成的网络中,第一个隐藏层之后层的输入永远为正值。这会带来一个问题:网络中一个神经元中的所有权重(除第一个隐藏层之外),其上梯度的符号相同,要么都为正,要么都为负,造成“zig-zagging dynamics”(之字形动态)。

所谓“zig-zagging”,就是指权重向量的更新方向受到限制,对于某些方向上(各分量梯度符号不同)的目标解,需要“之”字迂回多次才能达到。这就好比两个人的腿绑在一起,对于各自的目标,两人必须步调一致妥协达成,而不能各干各的。

以一个输出层S型神经元为例,来证明权重上梯度的符号相同。

神经元输入输出定义如下,其中σ表示Sigmoid函数:

如下式所示,输入xi恒为正,σ'(z)恒为正,神经元的任一权重wi上的梯度符号也不依赖权重自身(求导后消去),最终要么都为正,要么都为负:

2.神经元容易饱和,停止学习

Sigmoid曲线

回顾下熟悉的Sigmoid曲线。从图上看,当神经元加权和|z| > 2时,Sigmoid曲线趋于平缓,此时σ'(z) → 0,神经元趋于饱和,权重和偏置更新幅度非常小,学习几乎停滞。如下式所示,以一个输出层神经元为例,如果σ'(z) → 0,在权重w上的梯度也趋于0。

此外,从上一节中Sigmoid导数曲线可以看出,其最大值也不过0.25,使得梯度在反向传播过程中衰减较快。

3.计算耗时

Sigmoid表达式中包含了指数函数ex,增加了计算复杂度。

神奇ReLU

忍了S型神经元那么久,它的终结者神奇ReLU终于出场了,它的全称整流线性单元,Rectified Linear Units。

采用整流器Rectifier作为激活函数的神经元(单元)被称为ReLU,很多时候人们也直接用ReLU指代整流线性函数。整流函数形式非常简单:f(x) = max(0,x)。如下图蓝色曲线所示,其中绿色的曲线是Softplus曲线,可以看做ReLU的平滑版本。

ReLU

关于ReLU的与神经科学的关系,有3篇中文文章值得一读:

从应用的角度来说,ReLU有几个很棒的特性:

  • 在输入大于0时,它的导数为1,永不饱和;
  • 计算简单高效;
  • 训练收敛极快(与前面2点有关);

ReLU在输入>0时导数为1(相比Sigmoid导数最大值为0.25),具有高效的反向传播,且平衡了各层更新速率的差异,很大程度上消除了梯度消失问题。

ReLU也并非完美,首先它的输出区间也不以0为中心

更加严重的问题是,在它的负区间上,梯度为0,一旦进入到这个区间学习将完全停止。如果某次权重大幅度更新后,导致ReLU神经元上的权重W非常小(绝对值很大的负数),使得整个数据集的输入都无法激活它,我们称这种情况为Dying ReLU Problem

ReLU也不是救星

尝试将前面实验的网络隐藏层激活函数都换成ReLU,实验结果如下表所示。识别精度比Sigmoid版本有了2个百分点的大幅提升,而且训练过程中收敛速度确实很快,几次迭代下来就可以让识别精度达到95%。

隐层数量 每隐层神经元数 迭代次数 识别精度 代码
1 隐层x1 100 30 97.57% tf_2-2_1_hidden_layers_relu.py
2 隐层x2 100,100 30 97.92% tf_2-2_2_hidden_layers_relu.py
3 隐层x3 100,100,100 30 97.9% tf_2-2_3_hidden_layers_relu.py
4 隐层x4 100,100,100,100 60 97.81% tf_2-2_4_hidden_layers_relu.py
5 隐层x4 500,300,150,50 60 97.98% tf_2-2_4_hidden_layers_relu_2.py
6 隐层x4 2048,1024,512,256 60 98.07% tf_2-2_4_hidden_layers_relu_3.py

但是遗憾的是,继续增加隐藏层的数量,与Sigmoid类似,识别精度却并未出现明显的提升。虽然ReLU克服了梯度消失问题,但那并不是唯一的问题,太多的因素都在影响训练深度网络训练的难度。如果单靠追加ReLU隐藏层就能构建深度网络,也就没卷积神经网络什么事了。

尽管从理论上讲,深度网络具备极强的分层概念表示能力,但是这并不保证学习过程总能通向成功。我们的训练过程,可能并没有学习到层次化的概念,或者学习了错误的层次化概念。

这或许是基于梯度下降训练全连接网络的宿命。我们知道,全连接网络的每个神经元都会接收上一层所有神经元的输出,进行输入输出的映射,所以在增加深度(隐藏层)的同时,会造成参数量成倍增加,从而加大了训练难度。

现实中,全连接网络(FC)通常较浅,接受相对低维的特征数据,或者小分辨率的图像数据,用于回归或者分类。对于大分辨率图像来说,也都会事先进行特征提取,再将低维特征数据输入网络,而不是构建端到端的深度网络架构。

深度的复兴

2006年,Hinton的深度信念网络(Deep Belief Network,DBN),通过对每层神经元单独进行训练完成学习过程,成为了第一批成功应用深度架构训练的非卷积模型之一,由此开启了深度学习的复兴,而将深度学习带入巅峰的则是接下来要介绍的:卷积神经网络。

上一篇 1 深度神经网络
下一篇 3 深度学习革命的开端:卷积神经网络


共享协议:署名-非商业性使用-禁止演绎(CC BY-NC-ND 3.0 CN)
转载请注明:作者黑猿大叔(简书)

最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
  • 序言:七十年代末,一起剥皮案震惊了整个滨河市,随后出现的几起案子,更是在滨河造成了极大的恐慌,老刑警刘岩,带你破解...
    沈念sama阅读 158,847评论 4 362
  • 序言:滨河连续发生了三起死亡事件,死亡现场离奇诡异,居然都是意外死亡,警方通过查阅死者的电脑和手机,发现死者居然都...
    沈念sama阅读 67,208评论 1 292
  • 文/潘晓璐 我一进店门,熙熙楼的掌柜王于贵愁眉苦脸地迎上来,“玉大人,你说我怎么就摊上这事。” “怎么了?”我有些...
    开封第一讲书人阅读 108,587评论 0 243
  • 文/不坏的土叔 我叫张陵,是天一观的道长。 经常有香客问我,道长,这世上最难降的妖魔是什么? 我笑而不...
    开封第一讲书人阅读 43,942评论 0 205
  • 正文 为了忘掉前任,我火速办了婚礼,结果婚礼上,老公的妹妹穿的比我还像新娘。我一直安慰自己,他们只是感情好,可当我...
    茶点故事阅读 52,332评论 3 287
  • 文/花漫 我一把揭开白布。 她就那样静静地躺着,像睡着了一般。 火红的嫁衣衬着肌肤如雪。 梳的纹丝不乱的头发上,一...
    开封第一讲书人阅读 40,587评论 1 218
  • 那天,我揣着相机与录音,去河边找鬼。 笑死,一个胖子当着我的面吹牛,可吹牛的内容都是我干的。 我是一名探鬼主播,决...
    沈念sama阅读 31,853评论 2 312
  • 文/苍兰香墨 我猛地睁开眼,长吁一口气:“原来是场噩梦啊……” “哼!你这毒妇竟也来了?” 一声冷哼从身侧响起,我...
    开封第一讲书人阅读 30,568评论 0 198
  • 序言:老挝万荣一对情侣失踪,失踪者是张志新(化名)和其女友刘颖,没想到半个月后,有当地人在树林里发现了一具尸体,经...
    沈念sama阅读 34,273评论 1 242
  • 正文 独居荒郊野岭守林人离奇死亡,尸身上长有42处带血的脓包…… 初始之章·张勋 以下内容为张勋视角 年9月15日...
    茶点故事阅读 30,542评论 2 246
  • 正文 我和宋清朗相恋三年,在试婚纱的时候发现自己被绿了。 大学时的朋友给我发了我未婚夫和他白月光在一起吃饭的照片。...
    茶点故事阅读 32,033评论 1 260
  • 序言:一个原本活蹦乱跳的男人离奇死亡,死状恐怖,灵堂内的尸体忽然破棺而出,到底是诈尸还是另有隐情,我是刑警宁泽,带...
    沈念sama阅读 28,373评论 2 253
  • 正文 年R本政府宣布,位于F岛的核电站,受9级特大地震影响,放射性物质发生泄漏。R本人自食恶果不足惜,却给世界环境...
    茶点故事阅读 33,031评论 3 236
  • 文/蒙蒙 一、第九天 我趴在偏房一处隐蔽的房顶上张望。 院中可真热闹,春花似锦、人声如沸。这庄子的主人今日做“春日...
    开封第一讲书人阅读 26,073评论 0 8
  • 文/苍兰香墨 我抬头看了看天上的太阳。三九已至,却和暖如春,着一层夹袄步出监牢的瞬间,已是汗流浃背。 一阵脚步声响...
    开封第一讲书人阅读 26,830评论 0 195
  • 我被黑心中介骗来泰国打工, 没想到刚下飞机就差点儿被人妖公主榨干…… 1. 我叫王不留,地道东北人。 一个月前我还...
    沈念sama阅读 35,628评论 2 274
  • 正文 我出身青楼,却偏偏与公主长得像,于是被迫代替她去往敌国和亲。 传闻我的和亲对象是个残疾皇子,可洞房花烛夜当晚...
    茶点故事阅读 35,537评论 2 269

推荐阅读更多精彩内容