在整本书中,我们聚焦在解决 MNIST 数字分类问题上。这一“下金蛋的”问题让我们深入理解了一些强大的想法:随机梯度下降,BP,卷积网络,正规化等等。但是该问题却也是相当狭窄的。如果你研读过神经网络的研究论文,那么会遇到很多这本书中未曾讨论的想法:RNN,Boltzmann Machine,生成式模型,迁移学习,强化学习等等……等等!(太多了)神经网络是一个广阔的领域。然而,很多重要的想法都是我们书中探讨过的那些想法的变种,在有了本书的知识基础上,可能需要一些额外的努力,便可以理解这些新的想法了。所以在本节,我们给出这些想法的一些介绍。介绍本身不会非常细节化,可能也不会很深入——倘若要达成这两点,这本书就得扩展相当多内容了。因此,我们接下来的讨论是偏重思想性的启发,尝试去激发这个领域的产生丰富的概念,并将一些丰富的想法关联于前面已经介绍过的概念。我也会提供一些其他学习资源的连接。当然,链接给出的很多想法也会很快被超过,所以推荐你学会搜索最新的研究成果。尽管这样,我还是很期待众多本质的想法能够受到足够久的关注。
Recurrent Neural Networks (RNNs):在前馈神经网络中,单独的输入完全确定了剩下的层上的神经元的激活值。可以想象,这是一幅静态的图景:网络中的所有事物都被固定了,处于一种“冰冻结晶”的状态。但假如,我们允许网络中的元素能够以动态方式不断地比那话。例如,隐藏神经元的行为不是完全由前一层的隐藏神经元,而是同样受制于更早的层上的神经元的激活值。这样肯定会带来跟前馈神经网络不同的效果。也可能隐藏和输出层的神经元的激活值不会单单由当前的网络输入决定,而且包含了前面的输入的影响。
拥有之类时间相关行为特性的神经网络就是递归神经网络,常写作 RNN。当然有不同的方式来从数学上给出 RNN 的形式定义。你可以参考维基百科上的RNN介绍来看看 RNN。在我写作本书的时候,维基百科上介绍了超过 13 种不同的模型。但除了数学细节,更加一般的想法是,RNN 是某种体现出了随时间动态变化的特性的神经网络。也毫不奇怪,RNN 在处理时序数据和过程上效果特别不错。这样的数据和过程正是语音识别和自然语言处理中常见的研究对象。
RNN 被用来将传统的算法思想,比如说 Turing 机或者编程语言,和神经网络进行联系上。这篇 2014 年的论文提出了一种 RNN 可以以 python 程序的字符级表达作为输入,用这个表达来预测输出。简单说,网络通过学习来理解某些 python 的程序。第二篇论文 同样是 2014 年的,使用 RNN 来设计一种称之为 “神经 Turing 机” 的模型。这是一种通用机器整个结构可以使用梯度下降来训练。作者训练 NTM 来推断对一些简单问题的算法,比如说排序和复制。
不过正如在文中提到的,这些例子都是极其简单的模型。学会执行 print(398345+42598)
并不能让网络称为一个正常的python解释器!对于这些想法,我们能推进得多远也是未知的。结果都充满了好奇。历史上,神经网络已经在传统算法上失败的模式识别问题上取得了一些成功。另外,传统的算法也在神经网络并不擅长的领域里占据上风。今天没有人会使用神经网络来实现 Web 服务器或者数据库程序。研究出将神经网络和传统的算法结合的模型一定是非常棒的。RNN 和 RNN 给出的启发可能会给我们不少帮助。
RNN 同样也在其他问题的解决中发挥着作用。在语音识别中,RNN 是特别有效的。例如,基于 RNN 的方法,已经在音位识别中取得了准确度的领先。同样在开发人类语言的上改进模型中得到应用。更好的语言模型意味着能够区分出发音相同的那些词。例如,好的语言模型,可以告诉我们“to infinity and beyond”比“two infinity and beyond”更可能出现,尽管两者的发音是相同的。RNN 在某些语言的标准测试集上刷新了记录。
在语音识别中的这项研究其实是包含于更宽泛的不仅仅是 RNN而是所有类型的深度神经网络的应用的一部分。例如,基于神经网络的方法在大规模词汇的连续语音识别中获得极佳的结果。另外,一个基于深度网络的系统已经用在了 Google 的 Android 操作系统中(详见Vincent Vanhoucke's 2012-2015 papers)
我刚刚讲完了 RNN 能做的一小部分,但还未提及他们如何工作。可能你并不诧异在前馈神经网络中的很多想法同样可以用在 RNN 中。尤其是,我们可以使用梯度下降和 BP 的直接的修改来训练 RNN。还有其他一些在前馈神经网络中的想法,如正规化技术,卷积和代价函数等都在 RNN 中非常有效。还有我们在书中讲到的很多技术都可以适配一下 RNN 场景。
Long Short-term Memory units(LSTMs):影响 RNN 的一个挑战是前期的模型会很难训练,甚至比前馈神经网络更难。原因就是我们在上一章提到的不稳定梯度的问题。回想一下,这个问题的通常表现就是在反向传播的时候梯度越变越小。这就使得前期的层学习非常缓慢。在 RNN 中这个问题更加糟糕,因为梯度不仅仅通过层反向传播,还会根据时间进行反向传播。如果网络运行了一段很长的时间,就会使得梯度特别不稳定,学不到东西。幸运的是,可以引入一个成为 long short-term memory 的单元进入 RNN 中。LSTM 最早是由 Hochreiter 和 Schmidhuber 在 1997 年提出,就是为了解决这个不稳定梯度的问题。LSTM 让 RNN 训练变得相当简单,很多近期的论文(包括我在上面给出的那些)都是用了 LSTM 或者相关的想法。
深度信念网络,生成式模型和 Boltzmann 机:对深度学习的兴趣产生于 2006 年,最早的论文就是解释如何训练称为 深度信念网络 (DBN)的网络。
参见 Geoffrey Hinton, Simon Osindero 和 Yee-Whye Teh 在 2006 年的 A fast learning algorithm for deep belief nets , 及 Geoffrey Hinton 和 Ruslan Salakhutdinov 在2006 年的相关工作Reducing the dimensionality of data with neural networks
DBN 在之后一段时间内很有影响力,但近些年前馈网络和 RNN 的流行,盖过了 DBN 的风头。尽管如此,DBN 还是有几个有趣的特性。
一个就是 DBN 是一种生成式模型。在前馈网络中,我们指定了输入的激活函数,然后这些激活函数便决定了网络中后面的激活值。而像 DBN 这样的生成式模型可以类似这样使用,但是更加有用的可能就是指定某些特征神经元的值,然后进行“反向运行”,产生输入激活的值。具体讲,DBN 在手写数字图像上的训练同样可以用来生成和手写数字很像的图像。换句话说,DBN 可以学习写字的能力。所以,生成式模型更像人类的大脑:不仅可以读数字,还能够写出数字。用 Geoffrey Hinton 本人的话就是:“要识别对象的形状,先学会生成图像。” (to recognize shapes,first learn to generate images)
另一个是 DBN 可以进行无监督和半监督的学习。例如,在使用 图像数据学习时,DBN 可以学会有用的特征来理解其他的图像,即使,训练图像是无标记的。这种进行非监督学习的能力对于根本性的科学理由和实用价值(如果完成的足够好的话)来说都是极其有趣的。
所以,为何 DBN 在已经获得了这些引人注目的特性后,仍然逐渐消失在深度学习的浪潮中呢?部分原因在于,前馈网络和 RNN 已经获得了很多很好的结果,例如在图像和语音识别的标准测试任务上的突破。所以大家把注意力转到这些模型上并不奇怪,这其实也是很合理的。然而,这里隐藏着一个推论。研究领域里通常是赢者通吃的规则,所以,几乎所有的注意力集中在最流行的领域中。这会给那些进行目前还不很流行方向上的研究人员很大的压力,虽然他们的研究长期的价值非常重要。我个人的观点是 DBN 和其他的生成式模型应该获得更多的注意。并且我对今后如果 DBN 或者相关的模型超过目前流行的模型也毫不诧异。欲了解 DBN,参考这个DBN 综述。还有这篇文章也很有用。虽然没有主要地将 DBN,但是已经包含了很多关于 DBN 核心组件的受限 Boltzmann 机的有价值的信息。
其他想法:在神经网络和深度学习中还有其他哪些正在进行的研究?恩,其实还有很多大量的其他美妙的工作。热门的领域包含使用神经网络来做自然语言处理 natural language processing、机器翻译 machine translation,和更加惊喜的应用如 音乐信息学 music informatics。当然其他还有不少。在读者完成本书的学习后,应该可以跟上其中若干领域的近期工作,可能你还需要填补一些背景知识的缺漏。
在本节的最后,我再提一篇特别有趣的论文。这篇文章将深度卷积网络和一种称为强化学习的技术来学习玩电子游戏 play video games well(参考这里 this followup)。其想法是使用卷积网络来简化游戏界面的像素数据,将数据转化成一组特征的简化集合,最终这些信息被用来确定采用什么样的操作:“上”、“下”、“开火”等。特别有趣的是单一的网络学会 7 款中不同的经典游戏,其中 3 款网络的表现已经超过了人类专家。现在,这听起来是噱头,当然他们的标题也挺抓眼球的——“Playing Atari with reinforcement learning”。但是透过表象,想想系统以原始像素数据作为输入,它甚至不知道游戏规则!从数据中学会在几种非常不同且相当敌对的场景中做出高质量的决策,这些场景每个都有自己复杂的规则集合。所以这的解决是非常干净利落的。
意图驱动的用户接口:有个很古老的笑话是这么说的:“一位不耐烦的教授对一个困惑的学生说道,‘不要光听我说了什么,要听懂我说的含义。’”。历史上,计算机通常是扮演了笑话中困惑的学生这样的角色,对用户表示的完全不知晓。而现在这个场景发生了变化。我仍然记得自己在 Google 搜索的打错了一个查询,搜索引擎告诉了我“你是否要的是[这个正确的查询]?”,然后给出了对应的搜索结果。Google 的 CEO Larry Page 曾经描述了最优搜索引擎就是准确理解用户查询的含义,并给出对应的结果。
这就是意图驱动的用户接口的愿景。在这个场景中,不是直接对用户的查询词进行结果的反馈,搜索引擎使用机器学习技术对大量的用户输入数据进行分析,研究查询本身的含义,并通过这些发现来进行合理的动作以提供最优的搜索结果。
而意图驱动接口这样的概念也不仅仅用在搜索上。在接下来的数十年,数以千计的公司会将产品建立在机器学习来设计满足更高的准确率的用户接口上,准确地把握用户的意图。现在我们也看到了一些早期的例子:如苹果的Siri;Wolfram Alpha;IBM 的 Watson;可以对照片和视频进行注解的系统;还有更多的。
大多数这类产品会失败。启发式用户接口设计非常困难,我期望有更多的公司会使用强大的机器学习技术来构建无聊的用户接口。最优的机器学习并不会在你自己的用户接口设计很糟糕时发挥出作用。但是肯定也会有能够胜出的产品。随着时间推移,人类与计算机的关系也会发生重大的改变。不久以前,比如说,2005 年——用户从计算机那里得到的是准确度。因此,很大程度上计算机很古板的;一个小小的分号放错便会完全改变和计算机的交互含义。但是在以后数十年内,我们期待着创造出意图驱动的用户借款购,这也会显著地改变我们在与计算机交互的期望体验。
机器学习,数据科学和创新的循环:当然,机器学习不仅仅会被用来建立意图驱动的接口。另一个有趣的应用是数据科学中,机器学习可以找到藏在数据中的“确知的未知”。这已经是非常流行的领域了,也有很多的文章和书籍介绍了这一点,所以本文不会涉及太多。但我想谈谈比较少讨论的一点,这种流行的后果:长期看来,很可能机器学习中最大的突破并不会任何一种单一的概念突破。更可能的情况是,最大的突破是,机器学习研究会获得丰厚的成果,从应用到数据科学及其他领域。如果公司在机器学习研究中投入 1 美元,则有 1 美元加 10 美分的回报,那么机器学习研究会有很充足的资金保证。换言之,机器学习是驱动几个主要的新市场和技术成长的领域出现的引擎。结果就是出现拥有精通业务的的大团队,能够获取足够的资源。这样就能够将机器学习推向更新的高度,创造出更多市场和机会,一种高级创新的循坏。
神经网络和深度学习的角色:我已经探讨过机器学习会成为一个技术上的新机遇创建者。那么神经网络和深度学习作为一种技术又会有什么样独特的贡献呢?
为了更好地回答这个问题,我们来来看看历史。早在 1980 年代,人们对神经网络充满了兴奋和乐观,尤其是在 BP 被大家广泛知晓后。而在 1990 年代,这样的兴奋逐渐冷却,机器学习领域的注意力转移到了其他技术上,如 SVM。现在,神经网络卷土重来,刷新了几乎所有的记录,在很多问题上也都取得了胜利。但是谁又能说,明天不会有一种新的方法能够击败神经网络?或者可能神经网络研究的进程又会阻滞,等不来没有任何的进展?
所以,可能更好的方式是看看机器学习的未来而不是单单看神经网络。还有个原因是我们对神经网络的理解还是太少了。为何神经网络能够这么好地泛化?为何在给定大规模的学习的参数后,采取了一些方法后可以避免过匹配?为何神经网络中随机梯度下降很有效?在数据集扩展后,神经网络又能达到什么样的性能?如,如果 ImageNet 扩大 10 倍,神经网络的性能会比其他的机器学习技术好多少?这些都是简单,根本的问题。当前,我们都对它们理解的很少。所以,要说神经网络在机器学习的未来要扮演什么样的角色,很难回答。
我会给出一个预测:我相信,深度学习会继续发展。学习概念的层次特性、构建多层抽象的能力,看起来能够从根本上解释世界。这也并不是说未来的深度学习研究者的想法发生变化。我们看到了,在那些使用的神经单元、网络的架构或者学习算法上,都出现了重大转变。如果我们不再将最终的系统限制在神经网络上时,这些转变将会更加巨大。但人们还是在进行深度学习的研究。
神经网络和深度学习将会主导人工智能? 本书集中在使用神经网络来解决具体的任务,如图像分类。现在更进一步,问:通用思维机器会怎么样?神经网络和深度学习能够帮助我们解决(通用)人工智能(AI)的问题么?如果可以,以目前深度学习领域的发展速度,我们能够期待通用 AI 在未来的发展么?
认真探讨这个问题可能又需要另写一本书。不过,我们可以给点意见。其想法基于 Conway's law:
任何设计了一个系统的组织…… 最终会不可避免地产生一个设计,其结构本身是这个组织的社会结构
所以,打个比方,Conway 法则告诉我们波音 747 客机的设计会镜像在设计波音 747 那时的波音及其承包商的组织结构。或者,简单举例,假设一个公司开发一款复杂的软件应用。如果应用的 dashboard 会集成一些机器学习算法,设计 dashboard 的人员最好去找公司的机器学习专家讨论一下。Conway 法则就是这种观察的描述,可能更加宏大。
第一次听到 Conway 法则,很多人的反应是:“好吧,这不是很显然么?” 或者 “这是不是不对啊?” 让我来对第二个观点进行分析。作为这个反对的例子,我们可以看看波音的例子:波音的审计部门会在哪里展示 747 的设计?他们的清洁部门会怎么样?内部的食品供应?结果就是组织的这些部门可能不会显式地出现在 747 所在的任何地方。所以我们应该理解 Conway 法则就是仅仅指那些显式地设计和工程的组织部门。
而对另一个反对观点,就是 Conway 法则是很肤浅,显而易见的?对那些常常违背 Conway 法则运行的组织来说,可能是这样子,但我认为并非如此。构建新产品的团队通常会被不合适的员工挤满或者缺乏具备关键能力的人员。想想那些包含无用却复杂特征的产品,或者那些有明显重大缺陷的产品——例如,糟糕的用户界面。这两种情况的问题通常都是因所需构建好产品的团队和实际上组成的团队之间的不匹配产生的。Conway 法则可能是显而易见的,但是并不是说就可以随随便便忽略这个法则。
Conway 法则应用在系统的设计和工程中,我们需要很好地理解可能的系统的组成结构,以及如何来构建这些部件。由于 AI 还不具备这样的特性:我们不知道组成部分究竟是哪些,所以 Conway 法则不能直接应用在 AI 的开发过程中。因此,我们甚至不能确定哪些是最为根本的问题。换言之,AI 更是一个科学问题而非工程问题。想像我们开始设计 747,并不了解喷气引擎和空气动力学的原理。也就难以确定自己团队需要哪种类型的专家。正如 Werner von Braun 指出的,“基础研究就是我们并不知道自己正在做的研究究竟是什么”。那么有没有 Conway 法则在更为科学而非工程的问题上的版本呢?
为了正好地回答这个问题,我们可以看看医学的历史。在人类早期,医学是像 Galen 和 Hippocrates 这样的实践者的领域,他们研究整个人体。但是随着我们知识的增长,人类便被强迫进行专业分工了。我们发现很多深刻(deep)的新观点:如疾病的微生物理论,或者对抗体工作机制的理解,又或者心脏、肺、血管和动脉的理解,所有这些知识形成了完整的心血管疾病系统。这样深刻的理解形成了诸如流行病学、免疫学和围绕在心血管疾病系统交叉关联的领域的集群。所以我们的知识结构形成了医学的社会结构。这点在免疫学上显现的尤其明显:认识到免疫系统的存在和具备研究的价值是非凡的洞察。这样,我们就有了医学的完整领域——包含专家、会议、奖项等等——围绕在某种不可见的事物周围,可以说,这并非一个清晰的概念。
深刻(deep)这里并没有给出关于这个概念的严格定义,粗略地指对于整个丰富研究领域来说基础性的概念和想法。BP 算法和疾病的微生物理论就是关于深刻很好的例子。
这种特点也在不同的科学分支上广泛存在:不仅仅是医学,在物理学、数学、化学等等领域都存在这样的情况。这些领域开始时显现出一整块的知识,只有一点点深刻的观点。早期的专家可以掌握所有的知识。但随着时间流逝,这种一整块的特性就发生的演变。我们发现很多深刻的新想法,对任何一个人来说都是太多以至于难以掌握所有的想法。所以,这个领域的社会结构就开始重新组织,围绕着这些想法分离。我们现在看到的就是领域被不断地细分,子领域按照一种复杂的、递归的、自指的社会结构进行分解,而这些组织关系也反映了最深刻的那些想法之间的联系。因此,知识结构形成了科学的社会组织关系。但这些社会关系反过来也会限制和帮助决定那些可以发现的事物。这就是 Conway 法则在科学上变体版本。
那么,这又会对深度学习或者 AI 有什么影响呢?
因为在 AI 发展早期,存在对它的争论,一方认为,“这并不是很难的一件事,我们已经有[超级武器]了。”,反对方认为,“超级武器并不足够”。深度学习就是最新的超级武器,更早的有逻辑、Prolog或者专家系统,或者当时最牛的技术。这些论点的问题就是他们并以较好的方式没有告诉你这些给定的候选超级武器如何强大。当然,我们已经花了一章来回顾深度学习可以解决具备相当挑战性的问题的证据。看起来令人兴奋,前景光明。但是那些像 Prolog 或者Eurisko 或者专家系统在它们的年代也同样如此。所以,那些观点或者方法看起来很有前景并没有什么用。我们如何区分出深度学习和早期的方法的本质差异呢?Conway 法则给出了一个粗略和启发性的度量,也就是评价和这些方法相关的社会关系的复杂性。
所以,这就带来了两个需要回答的问题。第一,根据这种社会复杂性度量,方法集和深度学习关联的强度是怎么样的?第二,我们需要多么强大的理论来构建一个通用的人工智能?
对第一个问题:我们现在看深度学习,这是一个激情澎湃却又相对单一的领域。有一些深刻的想法,一些主要的学术会议,其中若干会议之间也存在着很多重叠。然后,一篇篇的论文在不断地提升和完善同样的一些基本想法:使用 SGD(或者类似的变体)来优化一个代价函数。这些想法非常成功。但是我们现在还没有看到子领域的健康发展,每个人在研究自己的深刻想法,将深度学习推向很多的方向。所以,根据社会复杂性度量,忽略文字游戏,深度学习仍然是一个相当粗浅的领域。现在还是可以完全地掌握该领域大多数的深刻想法的。
第二个问题:一个想法集合需要如何复杂和强大才能达到 AI?当然,对这个问题的答案是:无人知晓。但在附录部分,我讨论了一些已有的观点。我比较乐观地认为,将会使用很多很多深刻的观点来构建 AI。所以,Conway 法则告诉我们,为了达到这样的目标,我们必需看到很多交叉关联的学科,以一种复杂和可能会很奇特的结构的出现,这种结构也映射出了那些最深刻洞察之间的关系。目前在使用神经网络和深度学习中,这样的社会结构还没有出现。并且,我也坚信离真正使用深度学习来发展通用 AI 还有至少几十年的距离。
催生这个可能看起来很易见的试探性的并不确定的论断已经带给我很多的困扰。毫无疑问,这将会让那些寄望于获得确定性的人们变得沮丧。读了很多网络上的观点,我发现很多人在大声地下结论,对 AI 持有非常乐观的态度,但很多是缺少确凿证据和站不住脚的推断的。我很坦白的观点是:现在下这样乐观的结论还为之过早。正如一个笑话所讲,如果你问一个科学家,某个发现还有多久才会出现,他们会说 10 年(或者更多),其实真正的含义就是“我不知道”。AI,像受控核聚变和其他技术一样,已经发展远超 10 年已经 60 多年了。另一方面,我们在深度学习中确确实实在做的其实就是还没有发现极限的强大技术,还有哪些相当开放的根本性问题。这是令人兴奋异常的创造新事物的机遇。