2015 End-To-End Memory Networks
摘要:
作者介绍了一种在大型外部记忆 (a possibly large external memory) 上使用循环注意力模型的神经网络。这个结构是记忆网络 (Memory Network) ,但却不像记忆网络那样工作,它通过端对端进行训练,因此训练时只需要明显较少的监督,使得它更适合应用于真实场景。它可以看做是在 需要每个输出符号 (per output symbol) 表现出多个计算步/跳 (multiple computational steps(hops)) 的情况下 对 RNN 研究的一个扩展。 该模型的适应性使其可以应用很多任务,例如(综合型的)问答和语言模型建模。之前,作者将他们的方法与记忆网络进行比较,使用更少的监督信息。之后,在 the Penn TreeBank 和 Text8 数据集上,使用他们的方法与 RNNs 和 LSTMs 进行对比。从实验结果看,多重计算跳 (multiple computational hops) 这个关键的概念提高了测试结果。
数据集:
- bAbI:测试模型在问答系统上的性能
- the Penn TreeBank 和 Text8:测试模型在语言建模上的能力
模型的创新点:
- 解决当时人工智能领域的两大挑战:
- 建立一个在回答问题或者完成一个任务时可以进行多重计算步( multiple computational steps)的模型。
- 作者所提出的模型是对记忆网络( Memory Network)的一个改进,解决记忆网络难以通过使用BP算法进行训练,需要对网络中的每一层进行监督的问题。它从输入-输出对(input-output pairs)中使用端对端(end-to-end)进行训练, 因此可以应用于大多数任务中。
- 作者所提出的模型是对记忆网络 (Memory Network) 的一个改进,解决记忆网络难以通过使用 BP 算法进行训练,需要对网络中的每一层进行监督的问题。它从输入-输出对 (input-output pairs) 中使用端对端 (end-to-end) 进行训练, 因此可以应用于大多数任务中。
- 作者提出的模型,虽然结构与 RNN 类似,但不像传统的 RNN 网络,它显式地将存储在记忆中的输出在 K 跳中进行调整 (explicitly condition on the outputs stored in memory during the K hops) ,同时保持输出 soft (keep these output soft) ,而不是对输出进行采样。因此他们的模型在产生一个输出之前会经过几个计算步 (several computational steps) 。
- 与基于RNNs或LSTM模型去捕捉序列数据中长期结构 (long-term structure) 的各种方法不同,作者提出的模型使用的是一个全局记忆,并共享读取和写入函数。
模型结构:
-
Single Layer
作者首先介绍了模型在 Single Layer 下对单个记忆跳 (a single memory hop) 操作的实现。-
输入记忆表示( Input memory representation):
将输入集 (input set) 存储在记忆中。再将 转换为记忆向量 ,该记忆向量是通过计算每个 在连续空间( continuous space)的 维嵌入,例如使用一个简单的嵌入矩阵 (维度大小为 ) 。问题 也可以转化为嵌入向量 (但使用的是另一个嵌入矩阵 ) 。 在嵌入空间中,他们通过内部乘积和 softmax 计算 和 每个记忆 的匹配分数 (compute the match)。 是一个基于输入的概率向量( a probability vector over the inputs)。
【这里的 和 都是一维的句子向量,而不是由词向量组成的二维矩阵。后面会解释作者怎么产生句子向量】
-
输出记忆表示( Output memory representation):
每个 有一个对应的输出向量 (例如通过另一个简单的嵌入矩阵 )。 记忆 产生的响应向量( response vector ) 是对输入转化后的向量 进行加权求和, 权重是从输入得到的概率向量。
因为从输入到输出的函数是平滑的,可以容易计算它的梯度和反向传播。最近提出的其他记忆形式( forms of memory )或者注意力( attention )可以使用作者这种方式,例如[4],[5],[6] -
生成最终预测( generating the final prediction):
在单层的情况下,先对输出向量 和 输入嵌入向量 进行求和,再通过一个最终权重矩阵 (维度为 ) 和 一个softmax 产生预测标签。
-
输入记忆表示( Input memory representation):
-
Multiple Layers
这里,作者将它们的模型扩展到K跳操作 (K hop operations) 。记忆层 (the memory layers) 通过下面的方法进行堆叠 :- 第一层以上的输入是来自层 的输出 和输入 之和。
- 每一层都有它自己的嵌入矩阵 ( , ),用来对输入 进行嵌入。
- 在网络的最顶层, W的输入也是通过结合最顶层的记忆层 (the top memory layer) 的输入和输出。
为了减轻模型训练 (ease training) 的计算复杂度和减小参数数量,作者对每一层的嵌入矩阵 ( , ) 分别采用了两种权重绑定 (weight tying) 方法进行约束: -
邻近 (Adjacent):
某一层的输出记忆的嵌入矩阵( )是下一层的输入记忆的嵌入矩阵( )。 作者还约束了:- 答案预测矩阵 的 shape 与最后的输出记忆的嵌入矩阵 一致。
- 问题嵌入矩阵 为第一层的输入记忆的嵌入矩阵 。
-
分层(Layer-wise, RNN-like):
输入和输出嵌入矩阵在不同层中都是相同。例如: 和 。 作者还发现在更新 时,增加一个线性映射层 ,使 通过 进行线性映射。这个映射可以和其他参数一起学习,因此作者使用 layer-wise 权重绑定 (weight tying) 进行实验时,都会使用这种线性映射。
当使用 layer-wise 权重绑定方法时,作者的模型结构会转变成传统的RNN模型,只是把RNN的输出分为内部输出和外部输出( internal 和 external outputs)。 内部输出( )可以认为是记忆,外部输出( )可以认为是用于标签预测。
从 RNN 的角度上看, 是一个隐藏状态,模型产生一个内部输出 ( 可以说是图1(a)中的注意力权重 (attention weights)),然后模型通过 和 来更新隐藏状态 。
- 第一层以上的输入是来自层 的输出 和输入 之和。
-
模型结构图:
图1
-
其他细节和技巧:
-
句子表示 (Sentence Representation:
在作者的实验中,他们探讨了两种不同的句子表示:-
词袋表示:
先得到句子中每个词的词嵌入,然后进行求和得到句子表示。这种表示有一个缺点就是无法捕捉句子中词语的顺序,而词序 (the order of the words) 对于某些任务来说是很重要的。
-
结合单词在句子中的位置进行编码:
对于这种句子表示,作者称之为位置编码 (position encoding (PE)) ,这意味着词的顺序会影响这种句子表示。
从1开始索引。 J是句子中单词的个数, d是嵌入的维度。
-
词袋表示:
-
临时编码 (Temporal Encoding):
许多的QA任务需要临时上下文 (temporal context) 的概念。例如在图2中模型需要理解 Sam 在 kitchen 之后再到 bedroom 。为了使模型能够处理这些,对记忆向量 () 和输出向量 () 进行修改。 是由临时信息编码得到的特殊矩阵 的第 行。注意:作者在论文中对句子的索引是反序的,即 是故事的最后一句话。
图2 -
通过注入随机噪声来学习时间不变性( Learning time invariance by injecting random noise):
作者发现通过加入假的记忆来正则化 对模型的训练具有一定的帮助作用。 在训练时,作者在故事中随机加入10%的空记忆。他们将这个方法称为随机噪声 (random noise RN)。 -
linear start training:
一开始训练的时候,先去除记忆层的 softmax 函数进行训练,使得模型除了最后的答案预测有 softmax ,其他全部只有线性映射。当验证集的 Loss 停止下降时,再将 softmax 重新插入,并继续训练。作者把这种方法叫做线性训练启动 (linear start training (LS))。
-
句子表示 (Sentence Representation:
参考文献:
- http://papers.nips.cc/paper/5846-end-to-end-memory-networks.pdf "End-To-End Memory Networks"
- https://arxiv.org/pdf/1410.3916.pdf "Memory networks"
- https://arxiv.org/pdf/1506.07285.pdf "Ask me anything: Dynamic memory networks for natural language processing"
- https://arxiv.org/pdf/1409.0473.pdf "Neural machine translation by jointly learning to align and translate"
- https://arxiv.org/pdf/1410.5401.pdf "Neural turing machines"
- https://arxiv.org/pdf/1502.04623.pdf "DRAW: A recurrent neural network for image generation"
网友评论