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 条评论
登录 后参与评论

相关文章

来自专栏机器之心

业界 | 华为推出新型HiSR:移动端的超分辨率算法

机器之心发布 作者:Mr. AI 近日,华为推出了 HiSR 超分辨率技术,该模型借助第一款人工智能手机芯片 Kirin 970 和深度学习算法将低分辨率图片转...

3678
来自专栏琦小虾的Binary

学习July博文总结——支持向量机(SVM)的深入理解(下)

接上篇博文《学习July博文总结——支持向量机(SVM)的深入理解(上) 》; 三、证明SVM 凡是涉及到要证明的内容和理论,一般都不是怎么好惹的东西。绝大部分...

1969
来自专栏量子位

主流的深度学习模型有哪些?

作者:阿萨姆 | 普华永道 数据科学家 量子位 已获授权编辑发布 转载请联系原作者 深度学习大热以后各种模型层出不穷,很多朋友都在问到底什么是DNN、CNN和R...

3274
来自专栏AI研习社

直观理解深度学习卷积部分

近几年随着功能强大的深度学习框架的出现,在深度学习模型中搭建卷积神经网络变得十分容易,甚至只需要一行代码就可以完成。

952
来自专栏机器之心

AAAI 2018 | 中科大提出新型连续手语识别框架LS-HAN,帮助「听」懂听障人士

3259
来自专栏数据派THU

独家 | 一文读懂深度学习(附学习资源)

Figure1. Deep learning导图 前言 深度学习(deep learning)的概念最早可以追溯到1940-1960年间的控制论(cyberne...

2246
来自专栏IT派

机器学习中的数学基础

导语:现在出现了很多易于使用的机器学习和深度学习的软件包,例如 scikit-learn, Weka, Tensorflow 等等。机器学习理论是统计学、概率学...

3476
来自专栏企鹅号快讯

人工智能开发者必须知道的十种深度学习方法!

源| AI 科技评论文| Camel 不管是AI也好,其他学科也好,学习、研究的过程中不断反思学科的历史,总结学科的发展现状,找出最重要的理念,总能让人能“吾道...

36413
来自专栏AI科技评论

开发 | CNN 那么多网络有何区别?看这里了解 CNN 发展历程

AI科技评论按:本文原载于知乎, AI科技评论获作者授权转载。 深度学习算法最近变得越来越流行和越来越有用的算法,然而深度学习或者深度神经网络的成功得益于层出不...

3345
来自专栏IT派

综述卷积神经网络论文:从基础技术到研究前景

过去几年来,计算机视觉研究主要集中在卷积神经网络(常简称为 ConvNet 或 CNN)上。这些工作已经在广泛的分类和回归任务上实现了新的当前最佳表现。相对而言...

1350

扫码关注云+社区