设为首页收藏本站

VALSE

查看: 617|回复: 0

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

[复制链接]

50

主题

50

帖子

508

积分

管理员

Rank: 9Rank: 9Rank: 9

积分
508
发表于 2016-11-23 14:49:52 | 显示全部楼层 |阅读模式
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?》[1] 这篇工作的推荐之处有以下几点。首先它是 Neural GPU [2] 的一个延续工作,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,公式如下:

QQ截图20161123144112.png
如果这个 Convolutional Operator 直接操作在 memory 上,做一种 residual memory models(即每次 m' = m + update),那么就会出现和 RNN 中的 gradient vanishing 类似的问题。于是乎,Neural GPU 就是让这个 Convolutional Operator 作用在拥有 gate 的 GRU 单元上,变成了 CGRU,得到了如下的公式:
QQ截图20161123144159.png
现在有了 CGRU 单元作为每一个 layer,就可以有多个 layer(stack)的网络。剩下的就是解决 input 和 output 了。在 input 上,neural GPU 比较有创新性,它不像我们以前的 recurrent neural networks 一样,每个 timestep 都会读取新的 input 进来,而是一次把全部 input 读进来。比如如下图,即使是两个数字相加(相当于两个序列相加,也是连加号一起读进来):
QQ截图20161123144726.png
这个读进来后,也不是立刻作为一列 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 的计算——于是乎……


那么这篇论文[1] 是讲什么呢,它是讲,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。论文[1] 的作者指出,这可能是因为 Neural GPU 在输出时,是彼此独立的。也就是它输出 N 个 output(比如 N 个 digits,或者 N 个 character),是独立进行决策的(这和传统 RNN 就不一样了)。于是乎,这些 output 之间彼此没有信息传递,没有序列性,没有相互依赖。作者认为这才是它表现差的原因。也就是说,你在 input 时候为了性能,把 recurrence 给我去掉了,那么也影响了我的 output。


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

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


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


回复

使用道具 举报

您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

Archiver|手机版|小黑屋|Vision And Learning SEminar    

GMT+8, 2017-5-26 22:52 , Processed in 0.052321 second(s), 32 queries .

Powered by Discuz! X3.2

© 2001-2013 Comsenz Inc.

快速回复 返回顶部 返回列表