TensorFlow从1到2 | 第一章 消失的梯度

上一主题 《TensorFlow从0到1》介绍了人工神经网络的基本概念与其TensorFlow实现,主要基于浅层网络架构,即只包含一个隐藏层的全连接(FC,Full Connected)网络。

新主题 《TensorFlow从1到2》 将探索近5年来取得巨大成功的深度神经网络(Deep Neural Networks),它已成为机器学习中一个独立的子领域——深度学习(Deep Learning)。

本篇解释“深度”的含义,并引出在纵向扩展神经网络时所遇到的一个障碍——消失的梯度问题(Vanishing Gradient Problem)。

Vanishing Gradient Problem,来源:https://www.youtube.com/watch?v=SKMpmAOUa2Q

神秘的黑盒

神经网络是一个“黑盒”(Black Box)。不仅外行人看它如此,即使是对亲手构建它并训练它的工程师而言,亦是如此。

它的神秘,并不在于打不开、看不到,而是学习过程不可控,识别原理不可解释。

以一个全连接网络为例。当预设了它的架构,并对其进行初始化后,剩下的就是喂数据给它,至于网络中数以万计的权重和偏置如何调整,又将止步何处,整个动态优化的过程人类完全插不上手。

当网络训练收敛,并惊艳的输出超越人类的识别结果,若此时去查看网络的所有参数和中间结果,肯定会令人失望的,因为那无非是一堆调整的恰到好处的数字,但它们究竟意味着什么概念和逻辑,则不得而知。

理解隐藏层

机器思考的逻辑形式如密码一般晦涩难懂,但是并没有妨碍它成功的应用在诸多领域。所幸研究者除了关注如何进一步提升网络性能,还积极尝试去“解码”机器学习的秘密,而且已经获得了很多启发性的理解。

简单来说,从神经网络输入层的“裸数据”开始,经历层层前馈(Feedforward),最终在输出层获得一个高度抽象的、人类定义的类别概念,而这两端之间的每一层隐藏层都可以看做不同层次的概念表示,离输入层越近的抽象程度越低,反之离输出层越近的抽象程度越高。

以一个识别汽车图片的网络为例,来模拟这种理解,如下图所示。

第一个隐藏层,输入图像像素,可能表示形状的概念。第二个隐藏层,输入为几何形状,概念进一步抽象,可能表示汽车的零部件,直到输出层可以用于综合判断是否可以分类为汽车。

概念层次

上图只是对解释神经网络一种理想的模拟。实际情况中,不同的数据和目的,会训练出不同的网络,而每一层意义也会大相径庭。基于这种启发,研究者已经发展出逐层的可视化分析手段,尝试去理解机器学习的机理。

“深度”的定义

2006年,Hinton发表《基于深度置信网络的快速学习方法》,深度神经网络(DNN)和深度学习(Deep Learning)被提出。

从形式上说,包含两层或更多隐藏层的网络即可称为深度神经网络。

《Deep Learning》中深度学习的定义如下:

(本书所围绕的)这个方案让计算机从经验中学习,并根据层次化的概念体系来理解世界,而每个概念则通过与之关联的更简单的概念来定义。从经验获取知识这种方法,可以避免由人类形式化的制定所有计算机所需要的知识。运用层次化的概念,计算机可以通过较简单的概念来构建复杂的概念。如果我们绘制一个图形来表示概念是如何建立在其他概念之上,这个图形会很深,具有很多层。基于这个原因,我们称这种方法为AI深度学习。

理解机器视角下的层次化概念意义深远,一旦可以充分解释,人类就可以向机器请教,从而照亮思维的盲区。遭遇过Master(即AlphaGo)的柯洁,在正式对战AlphaGo之前,就已经知道了结局:

人类数千年的实战演练进化,计算机却告诉我们人类全都是错的。

我觉得,甚至没有一个人沾到围棋真理的边。但是我想说,从现在开始,我们棋手将会结合计算机,迈进全新的领域达到全新的境界。

棋士柯洁

无效的隐藏层

基于对深度的理解,我们似乎获得了一个简单可行的终极方案:尽可能的增加隐藏层!

以MNIST识别为例,使用在上一主题中构建好的全连接网络进行训练,测试结果如下表所示:

隐层数量

每隐层神经元数

迭代次数

识别精度

代码

1

隐层x1

100

30

95.25%

tf_2-1_1_hidden_layers.py

2

隐层x2

100

30

95.87%

tf_2-1_2_hidden_layers.py

3

隐层x3

100

30

96.3%

tf_2-1_3_hidden_layers.py

4

隐层x4

100

60

96.08%

tf_2-1_4_hidden_layers.py

令人稍感绝望,随着隐藏层数量的增加,识别精度增长并不显著,而当隐藏层数量增加到4层时,不仅需要更多的迭代次数,识别精度反而开始下降了。

可说好的“深度”呢?

消失的梯度

通过追加隐藏层来实现深度神经网络,并不奏效。真正的问题不在“深度”本身,而是由梯度下降算法所指导的训练过程存在困难,其中一个经典障碍就是消失的梯度问题(Vanishing Gradient Problem),以及与之成对存在的爆炸的梯度问题(Exploding Gradient Problem)。

以下图中的网络为例来解释下梯度消失问题。

假设我们能抽出由蓝色神经元构成的前馈路径,形成一个每层只有一个神经元的多层网络,尝试获得损失C对第一层神经元偏置b1的梯度。采用链式法则进行反向传播进行推导:

整理得到下式,再次表达出反向传播的含义:参数的梯度会受到其后每层神经元的乘性影响,越靠近输出层的,乘性因子越多。这会导致梯度的不稳定——容易过大或者过小,最终各层神经元的更新速率差异显著。

接下来说明梯度是如何消失的。

假设网络参数初始化符合标准正态分布N(0,1),且神经元的激活函数采用Sigmoid函数,那么大部分情况下|w| < 1,而Sigmoid的导数σ' < 1/4。Sigmoid导数曲线见下图。

Sigmoid导数曲线

于是有:

可见网络越深,靠近输入层的神经元的梯度越小,几近消失,神经元也停止学习。

ReLU是救星吗?

ReLU

当看到sigmoid激活函数导数的最大值不过1/4时,你一定会想到ReLU(Rectified Linear Units),整流线性单元,如上图所示。在输入大于0时,它的导数为1,几乎完美。

可如果一个ReLU就能解决深度神经网络难训练的问题,Hinton就不会在2006年发表《基于深度置信网络的快速学习方法》了。

将隐藏层的激活函数全部换成ReLU进行实验,结果如下表所示。尽管识别精度比Sigmoid版本高了2个点,但是随着层数的增加,识别精度并没有出现大幅的提高。

隐层数量

每隐层神经元数

迭代次数

识别精度

代码

1

隐层x1

100

30

97.62%

tf_2-1_1_hidden_layers_relu.py

2

隐层x2

100

30

97.72%

tf_2-1_2_hidden_layers_relu.py

3

隐层x3

100

30

97.79%

tf_2-1_3_hidden_layers_relu.py

4

隐层x4

100

60

97.79%

tf_2-1_4_hidden_layers_relu.py

尽管RelU已取代Sigmoid称为神经元标配激活函数,很大程度上平衡了各层更新速率的差异,但是基于梯度下降算法导致的梯度不稳定性,是算法本身所固有的:

深度学习的复兴

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

原文发布于微信公众号 - 人工智能LeadAI(atleadai)

原文发表时间:2017-09-29

本文参与腾讯云自媒体分享计划,欢迎正在阅读的你也加入,一起分享。

发表于

我来说两句

0 条评论
登录 后参与评论

相关文章

来自专栏大数据挖掘DT机器学习

【干货】机器算法学习感悟(下)

今天的内容是续接昨天的,请喜欢的亲们一如既往的支持! (…………续) 第二个是KNN。KNN将测试集的数据特征与训练集的数据进行特征比较,然后算法提取样本集中特...

2976
来自专栏专知

走进深度生成模型:变分自动编码器(VAE)和生成对抗网络(GAN)

【导读】近日,深度学习爱好者Prakash Pandey发布一篇博文介绍深度生成模型。我们知道,有监督学习在很多方面都达到了很好的效果,但是,由于有监督学习由于...

5456
来自专栏奇点大数据

机器学习必备的数学基础有哪些?

对于机器学习给出了这样一个定义,机器学习是由三个部分组成,分别是表示、评价,还有优化。这样的三个步骤,实际上也就对应着在机器学习当中所需要的数学。

602
来自专栏机器学习算法全栈工程师

AI从业者搞懂---这10种深度学习方法---老婆孩子热炕头

作者:王抒伟 编辑:王抒伟 首先,让我们来看看主要有啥 1 1.机器学习 过去的十年里已经爆炸了。 大伙几乎每天都会在计算机科学计划,行业会议和各大公众号看到...

4288
来自专栏数据魔术师

机器学习 | 模型评估和选择

1875
来自专栏机器之心

CVPR 2018 | Spotlight论文:解耦神经网络DCNet,性能优于标准CNN

1504
来自专栏数据派THU

卷积神经网络失陷,CoordConv来填坑(附代码&视频)

本文讲述了卷积神经网络在涉及坐标建模等方面的缺陷,但是提出了CoordConv 作为解决方案。

562
来自专栏大数据挖掘DT机器学习

强大的矩阵奇异值分解(SVD)及其应用

PCA的实现一般有两种,一种是用特征值分解去实现的,一种是用奇异值分解去实现的。在上篇文章中便是基于特征值分解的一种解释。 特征值和奇异值在大部分人的印象中,...

2877
来自专栏AI研习社

【算法】机器学习算法实践 K均值聚类的实用技巧

本文作者为美国数据分析专家 Bilal Mahmood,他是用户数据分析平台 Bolt 的创始人之一。在本文中,他详细介绍了一种称为 K-Means Clust...

2776
来自专栏灯塔大数据

塔说 |盘点人工智能从业者必备的10个深度学习方法

导读:近日,软件工程师 James Le 在 Medium 上发表了一篇题为《The 10 Deep Learning Methods AI Practitio...

3274

扫描关注云+社区