首页
学习
活动
专区
工具
TVP
发布
精选内容/技术社群/优惠产品,尽在小程序
立即前往

从神经图灵机到可微分神经计算机系列之 NTM 详解

这一系列涉及下面两篇论文:

Neural Turing Machine

Neural Turing Machine(2014)

Differentiable Neural Machine

Hybrid computing using a neural network with dynamic external memory (2016)

这一篇讲神经图灵机 NTM

Basic Idea

主要创新是将神经网络与外部存储器(external memory)结合来扩展神经网络的能力(通过注意力机制进行交互),可以类比图灵机,不过 NTM 是端到端可微的,所以可以使用梯度下降进行高效训练。

两个主要元件是controller和memory bank。类比计算机来看基本思路,实际是把神经网络看成是 CPU,把 memory 看做是计算机内存。CPU 根据任务来确定到内存的哪个位置读写信息,不过计算机的内存位置是离散数据,而 NTM 里是连续可导的。

Architecture

一张图读懂架构,取 DeepMind DNC Slides 做了部分修改。最重要的概念还是那句话,每个组件都是可微分的,所有操作皆可导,这就可以直接用梯度下降训练来训练。

主要来研究读写操作。

Read Head

读操作和普通的 MemNN 相似,使用 attention 原理计算每个 memory vector 的权重向量,然后对 memory vector 进行加权生成读操作的结果。

M_t是一个 NxM 的矩阵,表示 t 时刻的 memory,N 是 memory 的数量,M 是 memory vector 的维度。w_t是 t 时刻产生的权重向量,和 memory 数量相同,进行了归一化,

Write Heads

写操作包含两个步骤:先擦除(erase)后添加(add)

Erase

- input + controller 产生 erase vector;

- input + memory 产生;

- 和读操作一样,需要由 attention 机制得到 weight vector,表示每个 memory vector 被改动的幅度的大小,有多少个 memory 就有多少个 w_t;

- 将上一时刻每个 memory vector 都乘上一个 0-1 之间的 vector,就是擦除操作,相当于 forget gate;

- 如果 w_t 和 e_t 都为 1,memory 就会被重置为 0,如果两者有一个为 0,那么 memory 保持不变。多个 erase 操作可以以任意顺序叠加

Add

- input + controller 产生 add vector

- input + memory 产生

- 相当于 update gate

- 同样的,多个 add 操作的顺序并没有关系

所有的 memory vector 共享 e_t, a_t,erase 和 add 操作中的 w_t 也是共享的。再次注意 erase vector 和 add vector 都是由 controller 对 input 做编码得到的。

擦除和添加动作都有 M 个独立的 component,使得对每个 memory location 的修改可以在更细的粒度上进行。

知道了怎么读写,现在来看看权重是如何产生的。主要通过两种方式来进行寻址,一是content-based addressing,基于 controller 提供的状态向量 key vector 和当前 memory vector 的相似度来决定对内存地址的聚焦程度,另一个是location-based addressing,通过地址来寻址,可能还会伴随权重的位移(rotational shift)。

整个 Addressing 过程的流程图:

Content-based addressing

Controller 会产生一个长度为 M 的状态向量 key vector k_t,基于每一个 memory vector M_t(i) 和 controller 状态向量 k_t的相似程度 K[·,·],计算每个 memory vector 的 attention 权重。其中相似度可以用 cosine similarity 计算,

使用 softmax 将相似度转化为概率分布

其中,β_t 可以放大或减弱聚焦的程度,β_t = 1时就是标准的 softmax,而 β 的值越大,越会强化最大相似度分数的 memory vector 的优势,可以看做赢者通吃。要注意的是 β 不是超参数,而是 controller 预测得到的。举个具体的例子,在对话领域,如果输入时“呵呵”这类没有太多信息量的句子,那么 controller 就会产生一个非常接近 0 的 β,表示没有明确倾向去访问某个特定的信息;反之,如果是包含很多信息的输入,产生的 β 值会很大。

content addressing 完成的下面一个流程,k_t可以看做是 controller 对输入进行编码产生的状态向量,β_t 是标量,一个 concentration 参数。

Location-based addressing

不是所有的问题都可以通过 content-based addressing 来解决的。在一些特定任务尤其是有 variable-binding 的任务中,变量的内容是任意的,但变量还是需要一个可识别的名字/地址来 refer。比如说算数任务,x, y 代表任意值,要计算 f(x, y)=x*y,这时候 controller 就会把 x,y 存到对应的地址上,然后通过地址而不是数值内容来获取它们并进行乘法操作。

Content-based addressing 比 location-based addressing 更为通用,因为 Content-based addressing 本身可能包含地址信息。然而 location-based addressing 对某些形式的通用化很有必要,所以论文同时引入了两种寻址机制。

1. Interpolation Gate

Location-based addressing 第一步要进行插值计算

基于内容的 weight vector w^c_t 和上一个时间的 weight vector w_ 的线性组合,线性组合的参数 g_t 是一个 (0, 1)之间的标量,由 controller 产生,表示多大程度上使用当前时刻基于内容的寻址,多大程度上使用上一时刻产生的 w_

如果 g=0,那么 content-weighting 整个就被忽略了,只用上一时刻的权重;如果 g=1,那么上一时刻的权重就被忽略了,只使用 content-based addressing。

2. Shifting and Sharpening

基于地址的寻址机制既可以用做简单的 memory bank 遍历,也可以用于随机访问,通过对 weighting 的旋转位移操作来实现。如果当前 weight 全力聚焦在一个单一地址上,那么一个为 1 的旋转可以把部分焦点位移到下一个地址,一个负的位移则相反。

具体是在 Interpolation 之后进行。controller 产生的 shift weighting s_t 定义了所有允许的整数位移值上的归一化分布。如果 -1 到 1 间的位移是被允许的,那么 s_t 就有三个对应位移值 -1,0,1 上的概率分布。最简单是用 softmax 来预测 shift weighting,不过这里用了另一种方法,controller 产生一个 single scalar 表示均匀分布的下界(the lower bound of a width one uniform distribution over shifts),也就是如果 shift scalar=6.7,那么 s_t(6)=0.3,s_t(7)=0.7,剩下的 s_t(i)都是 0。

Shift attention:

s_t 其实相当于一个 convolution filter,每一个元素表示当前位置和对应位置的相关程度,像是定义了一个滑动窗里的权重,shift attention 将滑动窗里的 vector 做加权平均。

如果位移权重不是 sharp 的,也就是说权重分布相对均匀,那么这个卷积操作会使权重随时间变化更加发散。例如,如果给 -1,0,1 的对应的权重 0.1,0.8 和 0.1,旋转位移就会将聚焦在一个点上的权重轻微分散到三个点上。

controller 还会给出一个标量 γ_t 用来 sharpen 最终的权重,作用和之前讲过的 β_t 差不多,值越大权重大的越突出。

Sharpening:

结合权重插值(weighting interpolation)、内容寻址(content-based addressing)和地址寻址(location-based addressing)的寻址系统可以在三种补充模式下工作:

权重可以完全由 content-based addressing 来自主选择而不受 location system 的影响

由 content-based addressing 产生的权重可以被选择然后进行位移。这使得 focus 能够跳跃到通过内容寻址产生的地址附近而不是具体一个点。在计算方面,这使得 head 可以访问一个连续的数据块,然后访问这个块中的特定数据

来自上一个时刻的权重可以在没有任何 content-based addressing 的输入的情况下被旋转,以便权重可以以相同的时间间隔连续地访问一个地址序列(allows the weighting to iterate through a sequence of addresses by advancing the same distance at each time-step)

Summary

input 被 controller 加工产生 key vector 和一些中间变量,基于 key vector 和 memory bank 里的记忆向量的相似程度,用 attention 机制将 memory 检索结果转化成 vector 返回给读操作;基于 controller 加工后的外界输入,把一些信息写到 memory 里面,实现更新 memory 的效果(擦除+更新,都需要 weight vector 来确定 memory vector 的权重,权重由 content-base+location-base 产生,表示输入与记忆的相似程度,记忆与记忆的相似程度)。

NTM 架构有三个 free parameters:

size of memory

number of read and write heads

range of allowed location shifts

但最重要的选择还是用作 controller 的网络模型。来探讨下 recurrent 和 feedforward network 的选择

递归网络像 LSTM 拥有自己的 internal memory,可以对矩阵中更大的存储器起到补充作用。想象 controller 是 CPU,memory 是 RAM,那么 RN 里的 hidden activations 相当于处理器的寄存器(rigisters),允许 controller 跨时间操作时可以共享信息

前馈网络 FN 可以通过每一时刻读写同一个记忆地址来模拟 RN,在网络操作上有更大透明度,读写 memory matrix 的模式比 RNN 的中间状态更容易解释。但局限是并行 read/write heads 的数量有限,在 NTM 计算时会成为瓶颈。单个 read head 在每个时刻只能对单个 memory vector 进行一元变换,而两个 read heads 可以进行二元向量变换,以此类推。递归控制器能够存储上一时刻的读出的向量,不会受到这个限制。

  • 发表于:
  • 原文链接http://kuaibao.qq.com/s/20180122G03SS800?refer=cp_1026
  • 腾讯「腾讯云开发者社区」是腾讯内容开放平台帐号(企鹅号)传播渠道之一,根据《腾讯内容开放平台服务协议》转载发布内容。
  • 如有侵权,请联系 cloudcommunity@tencent.com 删除。

扫码

添加站长 进交流群

领取专属 10元无门槛券

私享最新 技术干货

扫码加入开发者社群
领券