0. 引子
1. 人工神经网络发家史
2. 深度学习——从横空出世到广泛应用
四个例子:--计算机视觉 --自然语言处理 --自动驾驶系统 --生成对抗网络
3. 神经网络背后的算法
三大要点:--反向迭代算法 --激活函数的选择 --随机梯度下降法
4. 神经网络的局限性
--要求大量训练数据 --过度拟合 --超参数选取和数学理论的缺乏
5. 小编点评
0. 引子
近几年,“人工智能”(AI)、“深度学习”这类字眼越来越频繁地出现在我们的视野中。和十年前相比,我们的生活已经被 AI 和深度学习改变了太多太多,而今年的图灵奖得主也颁发给了深度学习领域的三位奠基人:
2019 年图灵奖得主,图片来自纽约时报(The New York Times)
正所谓几家欢喜几家愁,有人把它们当作赚钱的利器;有人对这类野蛮生长的科技深表忧虑;还有人则只愿意安静地当吃瓜群众,扔掉瓜皮吐光瓜籽后继续自己的美好或并不美好的生活。无论您是哪类人,一个既定事实是,人工智能和深度学习已经在短短数年之内对人们的生活带来了太多的改变。近年来最为著名的一个例子也许就是 DeepMind 团队的阿尔法狗战胜李世石和柯洁 —— 尽管在国际象棋方面,人工智能在 30 年前就足以吊打所有人类大师,但由于围棋在计算复杂度吊打国际象棋,阿尔法狗的辉煌战绩依然被认为是人工智能领域的一大里程碑。
国际象棋和围棋的计算复杂度对比。两者皆为决策树模型,国际象棋使用了 α-???? 修剪算法,围棋则使用了蒙特卡洛决策树搜索+神经网络。图片来自 DeepMind 官网
有读者也许依然会对此不屑一顾:“围棋虽然复杂,但本质上和象棋一样,也只有有限多种可能结果啊,人工智能只需要把最佳结果意义列举并比较比较罢了!”然而对于具有无限多种可能结果的情况,人工智能也不甘示弱,这在去年的一些电竞比赛中得到了证实。例如,在团队型即时战略游戏 Dota 2 中 (一个 5 v 5 的在线游戏),人类顶尖玩家团队被 OpenAI 团队的 OpenAI Five 战胜。
OpenAI Five(左下方)对战人类玩家(右上方)
一些资深游戏玩家或许认为 Dota 毕竟是五个人的游戏,出现“猪队友”的概率比“猪人工智能”大多了。不过在以单人竞技为主的即时战略游戏《星际争霸》中,人类顶尖玩家也败于 DeepMind 团队开发的人工智能 , 阿尔法星(AlphaStar) 之手。AlphaStar 的训练过程。动图来自 https://deepmind.com/blog/alphas ... -game-starcraft-ii/
不管是 DeepMind 也好,还是 OpenAI 也好,他们在训练人工智能的时候都用到了深度学习,也就是有很多层的人工神经网络(artificial neural network,以下简称神经网络)。想必大部分读者对“神经网络”的最初印象都来自于大脑神经,顾名思义,神经网络必然和脑神经有着千丝万缕的联系。那么神经网络为什么会这么火呢?我们先来看看神经网络的发家史。1. 人工神经网络发家史
人工神经网络的首次提出可以追溯到上世纪 40 年代,美国神经科学家 Warren McCulloch 和 Walter Pitts 提出的神经逻辑计算模型(Neural Logical Calculus Model,[1])。不过做为神经科学家,McCulloch 和 Pitts 提出该模型的初衷只是为了解释大脑是如何运行的,他们不会想到这个模型会成为神经网络的先驱,为人工智能领域带来天翻地覆的影响。
图一:McCulloch-Pitts 模型,后来的各种人工神经网络都可以归纳于这个大框架。我们会在后面的章节中详细介绍
由于受到时代的限制,McCulloch-Pitts 模型乃至于之后出现的感知元(Perception)都并不能体现出神经系统的特点。到了 1959 年,加拿大神经科学家 David Hubel 和瑞典神经科学家 Torsten Wiesel (两位都是诺贝尔生理学或医学奖得主,神经科学家的牛 x 是不分国界的)发现视觉神经系统中存在两种不同细胞,复杂细胞(complex cell)和简单细胞(simple cell),分别位于大脑的不同部位。受此启发,人们便在原来的神经网络中加入隐藏层(Hidden Layer),以体现复杂细胞可以跨层次存在。图二
不过归根结底,人工神经网络终究是个数学模型,层数越多,模型越复杂。由于缺少有效的算法支持,在 60-80 年代期间,神经网络的研究进入一个低谷期。直到 1984 年,深度学习之父,杰弗里·辛顿(Geoffrey Hinton)等人将所谓的反向迭代算法(Backpropagation)引入神经网络中,神经网络的研究方才再次步入正规。例如如今炙手可热的玻尔兹曼机 [3](Boltzmann machine)、卷积神经网络 [4](CNN, Convolutional Neural Network)和长短期记忆 [5](LSTM, Long-Short Term Memory)等,实际上在上世纪 80-90 年代就出现了。图三:神经网络界的几大网红。小编会在后续的文章中更加详细地介绍这些神经网络的工作原理
2. 深度学习——从横空出世到广泛应用当神经网络真正成为网红概念时,它已经有了一个更加高大上的名字——深度学习(Deep learning) 。2012 年,深度学习之父杰弗里·辛顿和他的两个学生设计了一个有 7 个隐藏层的卷积神经网络,不仅赢得了该年度计算机图像分类大赛的冠军(ILSVRC),并且其分类错误率远低于传统的图像分类方法 [6]。
小编注:
在计算机视觉领域,“传统”方法也是上世纪 90 年代以后才提出来的方法了,例如支持向量机、稀疏编码、SIFT方法等。该领域更新换代速度也许只略逊于生物医学的某些领域(例如癌症研究),远超其他大多数行业。
图四:你能准确分辨拖把和拖把狗吗?基于深度学习的计算机已经可以了!
从此以后,深度学习渐渐变成了越来越多领域的香饽饽。文章开头提到的阿尔法狗、阿尔法星和 OpenAI Five 就都用到了深度神经网络,以及强化学习(Reinforcemence Learning)的框架。图五:新东西总是最美好的
又如在自然语言处理(Natural Language Processing, 一般指不同于计算机语言的人类语言)领域,2012 年,谷歌团队开发出了一种用高维向量来表示单词的方法(俗称 word2vec),于是文本变成了数据,为使用深度学习方法(例如长短期记忆 LSTM网络)提供了理论架构 [7]。图六:文本处理与深度学习的结合。多数聊天机器人就是用这种方式被训练出来的
再如自动驾驶系统的实现。最著名的框架也许是英伟达(NVIDIA)公司在 2016 年提出来的“端对端系统”[8](end-to-end system)。该系统采用三个不同相机以通过不同视角记录和随机生成路况信息,然后将这些生成的路况信息用一个卷积神经网络进行训练,并不断地用实际操纵指令来纠正神经网络产生的错误。该系统的训练过程如下所示:图七:英伟达的“端对端系统”训练过程。原图来自 [8] 的图片 2
英伟达提出的这个架构十分类似于另一个近年来应用十分火爆的神经网络架构 —— 生成对抗网络 [9](Generative Adversarial Nets)。也许很多读者并不清楚这是何方神圣,所以我们先来看一下它的几个应用:智能换脸
AI 合成表情
新华社的 AI 合成主播
也就是说,我们平常在网上看到的一些看似不可思议的视频或动图,其实都是通过生成对抗网络合成出来的!而这个网络的魔力就在于,它拥有生成器(Generator)和判别器(Discriminator)两个不同的神经网络,其中生成器通过随机输入的数据来生成图像,判别器则负责鉴别生成器生成的图像是否达到标准,以此来达到训练的目的。3. 神经网络背后的算法
注:本节要求读者有高等数学和线性代数基础,并对梯度下降法有一定了解
到这里,相信读者们已经对神经网络的应用有了一些大体的认识。我们经常听说一个神经网络需要接受“训练”,这个“训练”到底是怎么做到的呢?
答案就是反向迭代算法(Backpropagation)。读者不要被这个算法高大上的名字吓到了,它的核心只有两个——偏导数和链式法则。反向迭代算法的目的在于通过减小输出值与实际值的差异,来不断更新神经网络里的各种参数。这便是“训练”一个神经网络的全部内容。
听上去训练一个 AI 比训练小孩子容易多了!然而实际上,训练神经网络最大的挑战就在于更新模型中的大量参数。一图以蔽之,神经网络隐藏层的每个神经元本质上都是这样运作的:
图八:神经网络算法总结
从上图中我们可以看到,神经元起到的作用无非就是把一系列输入数据转化为输出,只不过需要引入一系列未知参数——权重 w_{ij} 和 偏差 b_{j} 罢了(j 表示神经网络的第 j 层,i 表示第 j-1 层的第 i 个神经元)。而如何更新这些未知参数,则是训练神经网络的核心所在。下面的图表明了反向迭代算法和向前迭代算法的区别,以及为什么在训练神经网络(尤其是深层神经网络)的过程中必须用到反向迭代算法的原因:图九:反向迭代vs向前迭代
在实际训练过程中,我们需要不断地更新权重 w_{ij} 和偏差 b_{j},这可以通过不断地最小化某个损失函数 L 来完成。根据实际问题,常用的损失函数有均方差(L2 损失)、DL 距离和交叉熵(Cross Entropy)等等。确定好损失函数后,我们使用梯度下降法分别对 w_{ij} 和 b_{j} 求偏导数,然后利用链式法则计算出每一步需要更新的步长,例如对于权重参数 w_{ij},更新方法如下:图十:上角标 t 表示训练(迭代)次数
其中“学习效率”一般取值在 0 和 1 之间。就像小孩一样,如果学习效率太高,遇到不好的输入数据时就很容易学到坏东西,但如果学习效率太低,那么学习成本又会过高。因此选取适当的学习效率值,是训练一个好神经网络的关键。图十一:学如江流徒杠,不可鹅行鸭步,亦不可操之过急
此外值得一提的是,从数学的观点看来,神经网络中激活函数(Activation Function)的非线性性是神经网络的一大特色。早期的激活函数选择受到了生物神经元的影响,一般选择 Sigmoid 函数或双曲正切函数(tanh):图十二:生物神经元模型中常用的两种激活函数
不过由于当输入比较大时,上面这两兄弟关于输入的导数接近于 0 (读者可自行验证),这在反向迭代过程中并不是个好消息 —— 图十中在 L 对 s_{i} 的偏导数几乎为 0,因而在迭代过程中权重 w_{ij} 几乎不变!这在十年之前一直是一个难题,不过 2011 年以后,上面这两兄弟便很快被一种叫做线性整流(ReLU,Retified Linear Unit)的激活函数所取代。这个函数长这样:图十三:ReLU 函数
容易验证,只要 u > 0, 那么 f'(u) = 1, 于是损失函数 L 对 s_{i} 的偏导数不会接近 0,更新参数困难的问题得以解决!到此为止,神经网络算法的理论基础已经被搞定了。然而在实际操作中还有另外一个问题——计算时间。试想如果要训练一个非常深层的神经网络,势必需要更新大量未知参数(未知参数的个数随着网络层数呈指数上升),如果采用图十那样的每更新一个参数都需要把 N 个训练数据(输入数据的一种)都用进去,那么当训练数据很多的时候,计算复杂度将非常高!为了解决这个方法,人们通常采用一种叫做随机梯度下降(Stochastic Gradient Descent)的算法,来代替常规的梯度下降法:
图十四:梯度下降 vs 随机梯度下降。其中 L_k 表示只依赖于第 k 个训练数据的损失函数, k 从 N 个总训练数据中随机取出的一个
可以看到,相比常规的梯度下降法,每一步随机梯度下降的计算量小了很多。不过由于训练数据的随机性,这样带来的后果便是收敛速度变慢,训练所需的迭代次数增加了(t 的取值上界更高)。所以如今常用的迭代方法一般是经过两者综合的微小块梯度下降法(Mini Batch Gradient),或者收敛速度更快的的自适应动量估计(Adam, Adaptive Moment Estimation) 算法等等。限于文章篇幅,具体细节在此不做介绍,有兴趣的读者可以参考一篇不错的综述 [10]。4. 神经网络的局限性
到此为止,我们已经对深度学习和神经网络的历史、应用,以及背后的算法有了初步的认识。但话说回来,世间万物皆有破绽,那么神经网络还存在哪些局限性呢?
也许一些读者会思考这样的问题:如果神经网络真的这么厉害,历史也不算短了,为什么直到 21 世纪以后才开始普遍投入使用呢?其中主要原因其实是硬件层面的,因为进入 21 世纪,电子硬件的成熟,尤其是通用性 GPU 的广泛使用才得以胜任深层神经网络的训练任务。换言之,神经网络和深度学习的火爆在很大程度上依赖于芯片技术的不断更新换代。
CPU 和 GPU 计算力(以浮点数计算效率为测度)对比。图片来自网络
既然有了如此强大硬件的支持,如果没有足够的训练数据集的话,神经网络也并不见得比传统方法高效多少了。这是因为神经网络的一大主要特色就是,其未知参数数量可以非常多,因此在理论上可以逼近出任何函数。但这样做的代价就是需要有足够的训练和测试数据集(测试数据集用于测试训练出来的神经网络表现如何)。另一方面,如果模型参数太多,很容易出现过度拟合(overfitting)的情况,反而降低模型的准确率。为了解决过度拟合,人们会采用许多不同的正则化(regularization)技巧,例如随机失活(Dropout)、加入惩罚项、自助式聚合(Bagging, Bootstrap Aggragation)等方法来达到减少参数个数的目的。限于篇幅,这里不做进一步介绍了。
神经网络的另一大特色就是架构非常灵活——如引言中所述,卷积神经网络(CNN)、长短记忆(LSTM)、玻尔兹曼机等等都是很常用的神经网络,而且每种神经网络都有大量超参数(Hyperparameter,例如神经网络的深度、宽度、学习效率、激活函数等等)供选择,没有一个可靠的数学定理保证应该如何选取超参数以及神经网络种类。
做为数学系出身的小编对此表示遗憾。限于学识水平,小编所知道的关于神经网络的数学定理都不算十分本质,例如万有近似定理 [11](Universal Approximation Theorem),用本科的泛函分析工具(哈恩-巴拿赫定理 + 里兹表示定理)证明了任一连续有界的 n 维实函数可被一个至少一层的神经网络任意逼近,且该定理对不同的激活函数(Sigmoid 和 ReLU)又有不同的证明方法,尽管证明过程都非常漂亮。这个定理不算十分本质的原因在于,其他许多非神经网络系统,例如模糊系统(Fuzzy System),也有类似的万有近似定理。
万有近似定理的核心就是证明上面这个函数的值域在 R^N 上是稠密的
从数学上看来,还有一些其他有趣结论和神经网络有关。例如 2016 年有人严格地证明了在模型复杂度的意义下,深层的神经网络比浅层的更为高效 [12]。不过从证明过程中可以看出,这个定理只是在渐进意义(单层神经元数目趋向于无穷)下有效,对实际应用的指导依然非常有限。小编十分希望以后有机会能看到一个能真正具有广泛指导意义的数学定理。5. 小编点评
我们不难看出,深度学习虽然在很大程度上改变了我们的生活,但它依然存在不少软肋。天下没有免费的午餐,深度学习之所以有今天的火爆,很大程度上依赖于芯片技术的发展(计算力的提升),而芯片生产是一个很长的产业链,有设计、设备、材料和测封等过程,涉及到大量基础学科。因此小编认为,基础学科才是科技发展的重中之重,而并非盲目地追求人工智能、深度学习这些热门词汇。
另一方面,深度学习虽然火爆至今,但这种火热能持续多久,小编持以保留态度。其一,深度学习的理论基础,神经网络,在上世纪 90 年代就已经被研究透测,而据小编所知,该领域至今并未出现一个如同广义相对论或规范场论那样具有框架性的数学理论;其二,深度学习只是众多机器学习方法的其中一种,每种机器学习方法都有自己的优缺点,并不存在一种万能的方法。因此,小编建议打算入行深度学习的朋友们,要先打好微积分、线性代数、概率论与数理统计、离散数学、最优化算法和数据挖掘这些课程的基础,毕竟也许几年以后,便会有一种全然不同的机器学习方法凌驾于深度学习之上。
参考文献:
[1] McCulloch WS, Pitts W. A logical calculus of the ideas immanent in nervous activity. The bulletin of mathematical biophysics. 1943 Dec 1;5(4):115-33.
[2] https://www.nobelprize.org/prize ... hubel/biographical/
[3] Ackley DH, Hinton GE, Sejnowski TJ. A learning algorithm for Boltzmann machines. Cognitive science. 1985 Jan 1;9(1):147-69.
[4] LeCun Y, Boser B, Denker JS, Henderson D, Howard RE, Hubbard W, Jackel LD. Backpropagation applied to handwritten zip code recognition. Neural computation. 1989 Dec;1(4):541-51.
[5] Hochreiter S, Schmidhuber J. Long short-term memory. Neural computation. 1997 Nov 15;9(8):1735-80.
[6] Krizhevsky A, Sutskever I, Hinton GE. Imagenet classification with deep convolutional neural networks. InAdvances in neural information processing systems 2012 (pp. 1097-1105).
[7] Mikolov T, Chen K, Corrado G, Dean J. Efficient estimation of word representations in vector space. arXiv preprint arXiv:1301.3781. 2013 Jan 16.
[8] Bojarski M, Del Testa D, Dworakowski D, Firner B, Flepp B, Goyal P, Jackel LD, Monfort M, Muller U, Zhang J, Zhang X. End to end learning for self-driving cars. arXiv preprint arXiv:1604.07316. 2016 Apr 25.
[9] Goodfellow I, Pouget-Abadie J, Mirza M, Xu B, Warde-Farley D, Ozair S, Courville A, Bengio Y. Generative adversarial nets. In Advances in neural information processing systems 2014 (pp. 2672-2680).
[10] Ruder S. An overview of gradient descent optimization algorithms. arXiv preprint arXiv:1609.04747. 2016 Sep 15.
[11] Cybenko G. Approximation by superpositions of a sigmoidal function. Mathematics of control, signals and systems. 1989 Dec 1;2(4):303-14.
[12] Eldan R, Shamir O. The power of depth for feedforward neural networks. In Conference on learning theory 2016 Jun 6 (pp. 907-940).
来源:科普最前线