程一-计算所 发表于 2016-11-23 14:49:52

【VALSE 前沿技术选介16-24期】

http://mp.weixin.qq.com/s/RcvZYOT_c7khaHuAePpcTQ




【VALSE 前沿技术选介16-24期】Neural GPU and Active Memory Models
                                                                                                      小S


继 Winsty 之后,我也回归了(泪 QAQ。今天给大家带来的是一篇比较新的工作,《Can Active Memory Replace Attention?》 这篇工作的推荐之处有以下几点。首先它是 Neural GPU 的一个延续工作,Neural GPU 又是 Neural Turing Machine(NTM) 的一个改进工作——NTM 的火爆程度就不用赘述了。二,它分析了 Attention 和 Active Memory 的一些区别,也缩短了 NTM 这类模型和 Attention-based models 在实际任务上(非 algorithm learning)的表现差距。第三,它给出了一些 insight,比如 recurrent/dependency 在 output 上的重要性。


Neural GPU 其实可以认为是一种 Recurrent Convolutional Neural Networks ,只不过它的 Convolutional 操作是作用在 GRU 这种单元上的。它的基本公式就是一个 Convolutional operator,公式如下:


如果这个 Convolutional Operator 直接操作在 memory 上,做一种 residual memory models(即每次 m' = m + update),那么就会出现和 RNN 中的 gradient vanishing 类似的问题。于是乎,Neural GPU 就是让这个 Convolutional Operator 作用在拥有 gate 的 GRU 单元上,变成了 CGRU,得到了如下的公式:

现在有了 CGRU 单元作为每一个 layer,就可以有多个 layer(stack)的网络。剩下的就是解决 input 和 output 了。在 input 上,neural GPU 比较有创新性,它不像我们以前的 recurrent neural networks 一样,每个 timestep 都会读取新的 input 进来,而是一次把全部 input 读进来。比如如下图,即使是两个数字相加(相当于两个序列相加,也是连加号一起读进来):

这个读进来后,也不是立刻作为一列 input,而是转换为 embedding 后作为一个”mental image“s 中的第一列——s_0 中的第一列。而 s_0,作为整个网络的 input,它其他列(取决于 width)全是0。这些0会在后续的计算过程中,逐渐变成非0,就变成了 weight。那么这个设计的原理其实就是,把这些 input 为0 的单元,作为 memory,用于储存中间的计算结果。而在 output 时,也是这样,取 output layer 中的第一列来做计算(不取 memory)。


讲完了 Neural GPU,再多讲一句,这个东西为什么叫 Neural GPU 呢,本来明明就是 CGRU 罢了。按照作者的意思,他们在设计上,比 NTM 更并行化,更浅,所以更像 GPU 的计算——于是乎……


那么这篇论文 是讲什么呢,它是讲,Neural GPU 这个东西,其实可以归为一类叫 Active Memory Models 的东西。Active Memory 主要是有别于 Attention,因为 Attention 只是在计算过程中,改变输入或者说改变 canvas 中的某一些单元的值(是部分更新);而 Active Memory 是计算全部 canvas 的值(全部更新)。这篇论文也是主要来讨论,是否这种全部更新可以取代部分更新,也就是是否可以从实验表现上,超越 Attention-based model。


Neural GPU 这类模型,虽然理念上很好,很 exciting,却在过去的实际任务上表现得很让人失望——比如机器翻译,远不如 Attention-based sequence-to-sequence models。论文 的作者指出,这可能是因为 Neural GPU 在输出时,是彼此独立的。也就是它输出 N 个 output(比如 N 个 digits,或者 N 个 character),是独立进行决策的(这和传统 RNN 就不一样了)。于是乎,这些 output 之间彼此没有信息传递,没有序列性,没有相互依赖。作者认为这才是它表现差的原因。也就是说,你在 input 时候为了性能,把 recurrence 给我去掉了,那么也影响了我的 output。


于是乎,论文 的作者就自然而然地想到了改进它的办法,就是把 Neural GPU 的输出给变成相互依赖的——重新变成有序序列化的。如图:


这个结果就瞬间好了起来,在 NMT 的 benchmark 上超过了 state-of-art 的 Attention-based sequence-to-sequence 模型。从而为 Active Memory 打了一次翻身仗。



Łukasz Kaiser, Samy Bengio. "Can Active Memory Replace Attention?"
Łukasz Kaiser, Ilya Sutskever. "Neural GPUs Learn Algorithms".


页: [1]
查看完整版本: 【VALSE 前沿技术选介16-24期】