深度神经网络的其他形式
整本书都集中在一个问题上:分类MNIST数字。它是一个很意思的问题,主要是让我们理解许多强大的想法:随机梯度下降、反向传播、卷积网络、正则化还有很多。但它也是一个很狭隘的问题。如果你读神经网络文献的话,你会碰见很多我们没有讨论过的思想:循环神经网络、玻尔兹曼机、生成式模型、迁移学习、增强学习等等等等!神经网络是一个很广阔的领域。然而许多重要思想都是在我们已讨论过思想上的变种,稍加努力就可以理解它们。本节我们看一下这些还不曾见过的技术。讨论不会很详细,也不全面——这会极大的扩充这本书。相反它只是给留点印象,试图丰富这个领域上的概念,并开阔你的眼界。这一章我会提供一些其他资源的链接,可以学习更多。当然,这些链接大部分会被很快取代,你可能想找更多近期的文献。尽管如此,我想许多底层的想法将会一直很有意思。
循环神经网络(RNNs):在我们用过的前馈网络里剩下层所有的神经元只有一个完全由激活值决定的输入。这是一个非常静态的场景:网络里的一切都是固定的,有一种凝固的、水晶般的质感。但假设我们允许网络里的元素可以用一种动态的方式去变化。例如,隐含神经元的行为不只是由前面隐含层的激活值决定,也由早些时间的激活值决定。确实,一个神经元的激活值可能部分由其自己早些时间的激活值决定。这当然不会在一个前馈网络里发生。或者隐含和输出神经元的激活值也许不只是由当前网络的输入决定,也由之前的输入。
带有这种随时间变化行为的神经网络被称为循环神经网络或RNN。在最后一段里有很多不同的数学形式,来通俗的描述循环网络。你可以看维基百科上关于RNN的文章来熟悉一下这些数学模型。在我写着这些文字的时候,页面中至少列出了13种不同的模型。但抛开数学细节,其主要思想是RNN是一种有随时间动态变化概念的神经网络。毫不奇怪,它们在分析数据或随时间变化的过程上特别有用。例如,这种数据和过程很自然的出现在像语音或自然语言的问题中。
RNNs目前正在使用的一种方法是将神经网络与传统的算法思维方式联系起来,这是基于图灵机和(传统的)编程语言等概念的思维方式。2014年的一篇论文开发了一个RNN,它可以将一个逐字的描述作为一个(非常,非常简单的!)Python程序的输入,并可以用这个描述来预测输出。通俗来讲,这个网络正在学习去“理解”某个Python程序。第二篇论文也是来自2014年,用RNN作为开发称为神经图灵机(NTM)的起点。这是一个通用的计算机,其整个结构都可以用梯度下降训练。他们训练其NTM为许多像排序和拷贝这样的简单问题推断算法。
实事求是的说,这些都是非常简单的玩具模型。学习执行Python程序 print(398345+42598) 不会让一个网络成为一个成熟的Python解释器!目前还不清楚进一步推动这些想法的可能性有多大。但结果还是很有意思的。从历史上看,神经网络在传统方面遇到麻烦的模式识别问题做的不错。反之,传统方法在神经网络不擅长的地方做的很好。今天还有人用神经网络来实现一个web服务器或一个数据库程序!要是能开发出整合神经网络和更传统方式长处的统一模式那就太好了。RNN和RNN激发出的思想可能实现这个目标。
RNN近些看来已经被用来解决许多其他问题。它们在语音识辨方面特别有用。基于RNN的方法有,如set records for the accuracy of phoneme recognition。它们也被用来开发提升人们说话时所用语言的模型。更好的语言模型可以消除歧义。例如一个好的语言模式将告诉我们“to infinity and beyond”比“two infinity and beyond”更像,尽管这俩短语听起来一样。RNN已经被用来为某种特定语言标准创造新的记录。
顺便说一下,这项工作是深度神经网络广泛运用类型中的一部分,在语音识别里不是只有RNN。例如,一个基于深度网络的方法已达到在大词汇量的连续语音识别上取得优异成绩。还有另一个基于深度网络的系统已经被部署在谷歌的Android操作系统里(相关的技术工作可以看Vincent Vanhoucke's 2012-2015 papers)。
我只说了一点RNN可以做的事情,但没有说它们怎么做的。也许你不会惊讶于许多在前馈网络里用到的思想也可以用在RNN里。尤其是我们可以用简单修改过的梯度下降和反向传播来训练RNN。许多在前馈网络里使用的其他思想,包括从正则化技术到卷积至激活和成本函数的使用,也在循环网络里有很有用。这本书里很多被开发的技术可以适用于RNN。
长短期记忆单元(LSTM):一个影响RNN的挑战是早期的模型很难去训练,甚至比深度前馈网络还难。原因是在第5章里的梯度不稳定问题。回顾下这个问题通常的表象就是随着层的往回传播梯度会越来越小。这让前面几层的学习极其缓慢。实际上这个问题在RNN里更糟,因为梯度不只是随层反向传播,它们还随时间反向传播。如果网络跑了很长一段时间,会让梯度极其不稳定,很难去学习。幸运的是,可以结合一种叫长短期记忆单元(LSTM)到RNN里。这个单元是1997年由Hochreiter和Schmidhuber提出,明确就是为了解决梯度不稳定的问题。LSTM可以在训练RNN时更容易的得到好的结果,并且许多最近的论文(包括许多我上面给出链接的)使用了LSTM或相关思想。
深度信念网络,生成模式和玻尔兹曼机:现代对深度学习的兴趣始于2006年,论文解释了如何训练一种名为“深度信念网络”的神经网络(DBN)【见A fast learning algorithm for deep belief nets, 作者 Geoffrey Hinton, Simon Osindero, 和 Yee-Whye Teh (2006), 还有与之相关的工作 Reducing the dimensionality of data with neural networks, 作者 Geoffrey Hinton 和 Ruslan Salakhutdinov (2006).】。DBN影响了好几年,但随着像前馈网络和循环神经网络的流行,就不是很受欢迎了。尽管这样,DBN还是有许多属性让它很有意思。
DBN很有意思的一个原因是它们是一个叫生成模型的例子。在前馈网络里,我们指定了输入激活值,它们决定网络里后面特征神经元的激活值。一个像DBN这样的生成模型使用了相似的方式,但它也可以指定一些特征神经元的值,然后“反向运行网络”,为激活输入生成值。更具体的说,一个在手写数字图像上训练过的DBN也能(可能需要一些处理)用来生成一些看上去像手写数字的图片。换句话说,DBN在某种意义上学习了写字。在这里,一个生成模型很像人类的大脑:不仅能写数字,也能写数字。这是Geoffrey Hinton的名言:要识别图形,先学习生成图片。
第二个DBN很有意思的原因是它们可以做无监督和半监督学习。举例来说,当训练图像数据时,DBN可以学习有用的特征来理解其他图片,即使训练的图片没有标签。并且无监督学习的能力对基本的科学因素,和——如果可以做的足够好的话——对实践应用都很有意思。
为什么有这些吸引人的特点,DBN作为深度学习模型其流行度降低了呢?部分原因是像前馈和循环网络这样的模型已经达到了很多惊人的结果,诸如像它们在图像和语音识别病竞赛方面的突破。也就不奇怪并且目前就应该将注意力放到这些模型上。然而有一个不幸的推演。创意市场通常是以赢家通吃的方式运作,在任何领域中几乎所有的注意力将放在当前流行的地方。让人们去研究暂时还不流行的思想相当困难,即使这些思想明显长期来看是很有意思的。我个人建议是DBN和其他生成模型应该受到比当前更多的关注。并且我也不会惊讶于DBN或一个相关的模型有一天超越了当前流行的模型。对DBN的介绍可以看这个概览。我发现这篇文章也很不错。本质上它并不是主要讲深度信念网络的,但它囊括了很多关于限制玻尔兹曼机的信息,它是DBN的一个关键组件。
其他思想:在神经网络和深度学习里还会发生什么?好吧,有大量的其他非常好的研究。活跃的研究领域包括用神经网络做自然语言的处理(也可以看这篇论文的评论),还有也许更奇特的应用像音乐信息学。当然还有许多其他的领域。在多数情况下,读了这本书你应该可以开始跟上最近的研究工作,尽管(当然)你需要去弥补假定背景知识上的差距。
让我通过提一个特别有趣的论文来结果这一节。它整合了深度卷积网络和一项叫增强学习的技术,来学习去玩好视频游戏(也可以看这个followup)。其思想是用卷积网络来简化来自游戏屏幕上的像素数据,变为一个简化的特征集,可以用来决定采取哪一个行动:“向左”,“向下”,“开火”等等。特别有意思的是一个网络学了玩七种不同类型的视频游戏,其中三个游戏比人类专家玩的好。目前,所有这些听上去像是一个噱头,并且毫无疑问其论文卖的非常好,用的标题是:“用增强学习玩雅达利”。但从表面上看,考虑到这个系统取的是原始的像素数据——它甚至不知道游戏规则!——并从这些数据中在多种大不相同并且非常具有对抗的环境里学习做高质量的判断,其中每个环境都有复杂的规则。这简直太帅了。