## ICLR 2017精选论文 深度学习及表征学习的顶级会议 The 5th International Conference on Learning Representations(ICLR 2017)将于今年4月24日-26日在法国南部的地中海海港城市土伦举行。今年是 ICLR 举办的第五个年头。这个从最开始就依靠深度学习权威学者 Yann LeCun(Facebook AI研究院主管)和 Yoshua Bengio 所引领的会议正在成为深度学习研究和实践发展的桥头堡。ICLR 因为其开放的论文审核制度和更加专注的研究讨论范畴已经吸引了越来越多的深度学习专家和学者在这个会议上发表最新成果。 因为 ICLR 的论文涵盖非常广泛的主题,而且一般的读者很难从浩如烟海的文献中即刻抓取到有用信息,这里笔者从众多文章中精选出5篇有代表性的文章(包含2篇最佳论文),为读者解惑。 #### TopicRNN: Combine RNN and Topic Model **概要:这篇文章探讨的是如何结合深度学习中的序列模型 RNN 和文本分析模型 Topic Models。建议对深度学习以及文档分析有兴趣的读者精读。** 文章由来自微软研究院和哥伦比亚大学的学者共同完成。作者中的 Chong Wang 以及 John Paisley 都有长期从事 Graphical Models 以及 Topic Models 的研究工作。这篇文章想把在深度学习中非常有效的序列模型——RNN 和在文档分析领域非常有效的 Topic Models 结合起来。这里面的原因就是,RNN 比较能够抓住文档的“局部信息”(Local Structure),而 Topic Models 对于文档的“全局信息”(Global Structure)则更能有效把握。之前也有一些这样的尝试,不过这篇文章提出了一种简单直观的模型。 首先,每一个文档有一个基于高斯分布的 Topic Vector。这一步和传统的 latent Dirichlet allocation (LDA)有了区别,因为传统上这个 Vector 常常是基于 Dirichlet 分布。然后对于文档里面的每一个字,都采用了类似 RNN 的产生构造方法。首先,要产生每个字的一个隐含状态。这个隐含状态的产生,都基于之前的一个字本身,以及前面一个字的隐含状态。产生了隐含状态以后,这篇文章做了一个假设,那就是有两种类型的语言模型来控制文档里具体字的产生。一种是一个类似 Stop Word 的语言模型(Language Model),另一种是普通的 Topical 语言模型。那么,在一个字的隐含状态产生以后,作者们有设计了一个基于当前字的隐含状态的伯努利分布,来决定当前这个字是不是 Stop Word。如果这个字是 Stop Word,那这个字就从 Stop Word 的语言模型产生,如果这个词不是 Stop Word,那就从 Stop Word 以及 Topical 语言模型产生。 也就是说,作者们认为,Stop Word 的影响是肯定有的,但 Topical 的影响则不一定有。这就是 TopicRNN 模型的一个简单描述。文章采用了 Variational Auto-encoder 的方式来做 Inference。值得注意的是,文章本身提出的模型可以适用不同的 RNN,比如文章在试验里就展示了普通的 RNN、LSTM 以及 GRU 的实现以及他们的结果。使用了 TopicRNN 的模型比单独的 RNN 或者简单使用 LDA 的结果作为 Feature 要好,而且 GRU 的实现要比其他 RNN 的类型要好。 #### Understanding Deep Learning Requires Re-Thinking Generalization **摘要:这篇文章是最佳论文之一。文章的核心是重新思考深度学习模型的泛化能力,这篇文章颇受争议。建议对深度学习有兴趣的人泛读。** 文章来自 Google Brain、Google DeepMind 的一批学者。文章的核心内容备受争议,那就是如何在深度学习这个语境下看待机器学习算法的泛化能力(Generalization)。文章指出,传统上,比较好的泛化能力,也就是通常说的比较小的泛化错误(Small Generalization Error)来自于某种类型模型(比如神经网络)或者是正则化(Regularization)的能力。但是在深度学习的语境下,作者们通过大量实验,发现这样的观点可能不适用了。 文章的核心思想建立在一系列的随机测试(Randomization Tests)上。作者们精心的设计了这么一组实验,找来一组真实的数据,然后把真实的数据标签(Label)给替换成为彻底的随机标签(Random Label),然后用来训练神经网络。结果是,神经网络能够达到没有任何训练错误,就是 Training Error 是零。也就是说,神经网络可以完全记忆住整个数据集。而且作者们还发现,尽管是随机的数据标签,整个神经网络的训练过程并没有大幅度增加难度。随后作者们还发现,如果在 CIFAR10 和 ImageNet 上随机替代真实图像成为高斯随机噪声(Gaussian Noise)的话,神经网络依然能够达到没有任何训练错误。当然,噪声如果不断加大,训练错误也随之增大。整个这部分的实验其实就是验证了神经网络能够非常有效地同时处理数据的有效部分和噪声部分。那么上述这些情况是否是因为传统的正则化(Regularization)所带的呢。 作者们发现,传统的对于神经网络的正则化理解,诸如 Dropout、Weight Decay、Data Augmentation 等方法,都没有能够很好得解释神经网络对于随机数据的优化能力。文章甚至指出,即便没有正则化这一在传统的优化领域几乎是必不可少的方法,神经网络依然能够表现出比较好的泛化能力。文章最后通过一套理论分析,来证明了深度为2的神经网络已经能够表达任何数据标签信息了。虽然这个理论见过比较简单,但这也给这篇文章从实验结果到理论这么一个比较完整的论证体系画上了句号。 #### Neural Architecture Search with Reinforcement Learning **摘要:如何通过强化学习和 RNN 来学习深度学习模型的网络框架。作者们来自 Google。这篇文章很适合深度学习的学者泛读。** 文章来自 Google Brain。作者之一 Quoc V. Le 曾是 Alex Smola 的早期弟子,后来其长期在 Google 做深度学习的研究,代表作品有 Paragraph2Vec 等。这篇文章要解决的问题是现在深度学习的各种网络结构(Network Architecture),大多通过手调和纯经验设置,文章希望尝试用 RNN 和强化学习(Reinforcement Learning)来学习(Learn)到这样的架构。 文章的思路是这样的,首先,有一个 RNN 所代表的Controller。这个 Controller 的作用是去预测(Predict)整个网络结构的各种参数(比如,有多少 Filters,Filter 的 Height,Filter 的 Width 等等),这些参数都是通过 RNN 来进行预测的。当然,整个 Controller 还是要控制层数的,这就是一个外部参数。那么如何来训练这个 RNN 所代表的 Controller 呢?这篇文章采取的思路是使用强化学习的方法。简单说来,RNN 所生成的准确度(Accuracy)就是强化学习的 Reward,然后文章采用了经典的 REINFORCE 算法来对 RNN 进行强化学习。文章后面介绍了并行运算的提速技巧,以及怎样能让生成的网络具有 Skip-Connection 的表达形式(这也是目前不少成功网络都具有的功能)以及如何产生 RNN 这种递归结构的方式。这里就不复述了。 从实验结果来看,这篇文章提出的方法,能够找到不少网络结构,在 CIFAR-10 数据集上得到相当不错的效果。甚至能和不少手工设置的最佳网络结构所得到的结果不相上下。而在 TreeBank 上得到的 RNN 的效果,也可以和不少成熟的网络框架相比较。 #### Efficient Vector Representation for Documents through Corruption **摘要:这篇文章探讨了如何有效学习文档的表示。建议对深度学习应用于文字有兴趣的读者精读。** 文章来自 Criteo Research 的 Minmin Chen。Criteo 是一个来自法国的互联网广告公司。这个 Criteo Research 是设立于硅谷的研究院。文章介绍在深度学习的语境中,如何学习一个文档的表现形式。在这方面的研究,可能大家都熟悉比较经典的 Word2Vec、Paragraph Vectors 等文档的表现形式。Word2Vec 其实是学习的单独 Word 的表现形式,然后有各种方法来取得 Weighted Word Embedding 从而间接获得文档的表达形式。Paragraph Vectors 把文档 Encode 到了模型里,但是模型的复杂度是随着 Word 和文档的数目增加而增加的。 这篇文章提出的思想很直观。首先,提出的模型还是直接 Model 每一个词。然后,和 Paragraph Vectors 不同的是,这个模型并不直接学习一个文档的表达,而是认为一个文档的表达是一些 Random 的词表达的一个平均(Average)。这个思想看起来比较震惊,文档的表达并不是所有的词的平均,而是从文档中随机采样的词的平均。类比来说,这有一点 Dropout 的意思。文章花了不小的篇幅来说明这个思路其实是从某种意义上来 Regularize 一个文档的表现形式,并且去决定什么样的词会对文章的表达形式产生什么样的作用。 文章的实验部分很详实。基本上说,用这样方法产生的结果能够轻而易举击败 Paragraph Vector 或者 Average 的 Word2Vec,甚至不少数据集上比 LSTM 的方法都还要好。 #### Making Neural Programming Architectures Generalize via Recursion **摘要:这篇文章探讨了如何使用深度学习来学习编程,也就是用深度学习的模型来产生程序。这篇文章适合深度学习爱好者泛读、深度学习编程研究人员精读。** 文章是获得了 ICLR 2017最佳论文的三篇文章之一,是基于 ICLR 2016年的一篇 Google DeepMind 的文章 Neural Programmer-Interpreters(NPI)的扩展。文章作者来自伯克利大学。NPI 在去年也是获得了 ICLR 2016的最佳论文。可以看出,用深度学习来学习编程行为,是深度学习最近一段时期以来的热点和新前沿。那么,NPI 算是提出了一个比较新的框架,来描述如何使用深度学习来进行编程。而这篇文章则是建立在 NPI 的基础上,基本上对于框架本身没有进行任何更改,仅仅是在训练数据上有所创新,从而引入了递归(Recursion)的概念到 NPI 中,并且“证明”了训练所得的程序的正确性,从而在根本上解决了(至少是部分)NPI 的“泛化”(Generalization)问题。 从实验结果上来看,这篇文章通过递归方式学习的程序,能够完全解决 QuickSort、BubbleSort、Topological Sort 问题,准确率在不同长度的输入的情况下高达100%。要想了解整个 NPI 的机制,还是推荐大家去了解原文,这篇文章也只是简单介绍了 NPI 的框架。抛开 NPI 和深度学习有关的细节,有一个设置值得注意的就是,NPI 也好,这篇文章也好,其实都需要利用程序的具体运行流程(Trace),作为训练数据。基本上是用深度学习来学习机器指令级别的操作,或者说是汇编语言级别的操作。这也就其实带来了两个疑问:第一,基本上这是非常细节深层次的训练或者说是干预,很难说这样可以真正学习到未知的程序,只能依葫芦画瓢。第二,整个模型的设置都是高度依赖于具体程序的语义(Semantics),而非是程序的输入输出的数据,给是否这是真正的智能打上了问号。 值得关注的是,文章也并没有完全说明,为什么通过训练数据的创新,就能从本质上彻底解决 NPI 的泛化问题。文章提出了一些假说或者说是解释,但是还是缺乏理论的分析和更多的讨论。可能这方面还是一个未来的研究方向。