End-To-End Memory Networks

2014 年 FaceBook 提出了 Memory Networks (MEMNN),MEMNN 会保存上下文句子的信息,使模型拥有更大的记忆,然后利用类似 Attention 的机制找出最相关的记忆。但是 MEMNN 需要进行很多有监督训练,因此 FaceBook 提出了一种更加完善的端到端 Memory Networks (MemN2N),使其更容易使用并且支持多层结构。

1. 前言

前一篇文章介绍了记忆网络 MEMNN,在 MEMNN 中包含了 I, G, O, R 四个模块,其中模块 I 和 G 负责将句子转成向量并保存到 Memory Slots,模块 O 负责找出相关的 Memory,而模块 R 负责输出预测结果。

MEMNN 的有监督训练包含很多要素,除了最终预测的单词外,还包括了最相关的两个 Memory,因此在实际中训练比较困难。

因此 FaceBook 在 2015 年提出了一种改进版的 Memory Network (MemN2N),对应的论文是《End-To-End Memory Networks》。和之前 MEMNN 不同,MemN2N 采用了端到端的训练方式,减少了监督训练的难度。MemN2N 可以支持多层网络结构,我们首先看一下单层结构的 MemN2N,多层结构只是多个单层结构堆叠形成。

下文中 x1, x2, ..., xn 表示上下文信息 (即背景知识),q 表示一个问题,a 表示答案。

2. Single Layer

MemN2N 的单层结构

上图是 MemN2N 的单层结构,可以看到 MemN2N 包含了两个 Memory Slots,分别是 Input memory (图中蓝色) 和 Output memory (图中黄色)。另外还包含一个 Predict 模块,用来预测答案 a。

Input Memory:对于所有上下文句子 xi,Input Memory 都会使用矩阵 A 计算出对应的句子向量 mi 并保存在 Input Memory 里面。句子向量生成的方法在第 4 节介绍。保存好 memory 后传入问题 q,用矩阵 B 计算出 q 对应的特征向量 u,然后 Input Memory 需要用 attention 机制计算出每一个 memory mi 对应的权重 pi,计算公式如下。

pi 计算公式

Output Memory:和 Input Memory 一样,Output Memory 会使用矩阵 C 计算出上下文句子 xi 的特征向量 ci,然后根据 Input Memory 得到的权重 pi 将特征向量 ci 加权融合在一起,得到最终的输出特征 o。

最终的输出特征 o

Prediction:最终的预测模块,预测前将问题的特征向量 u 和最后输出的特征向量 o 相加,然后传入一个 softmax 层进行预测。

预测

3. Multiple Layers

多层结构 MemN2N

MemN2N 可以支持多层结构,如上图所示,此时 MemN2N 包含多个 Input Memory 和 Output Memory。除了第一层外,其他所有层的输入向量 u(k+1) 都是上一层的输入向量 uk 和输出向量 ok 之和。

uk

在多层结构时 (K 层),每一层的特征矩阵 A1, A2, .., AKC1, C2, .., CK 有不同的设置方法,文章中提到了两种:

AdjacentA(k+1) = C(k), W = C(K), B = A(1)

Layer-wise (RNN-like)A(1) = A(2) = ... = A(K)C(1) = C(2) = ... = C(K)

4. 句子向量计算

给定一个句子 xi,其包含很多的单词 {xi1, xi2, ..., xin},最简单的句子向量计算方法是使用 bag-of-words BoW,直接将句子中所有单词的表征向量求和得到。但是直接使用 BoW 求和没有考虑到单词之间的位置信息和句子之间的位置信息。

因此 MemN2N 提出了第二种计算句子向量的方法,考虑了句子中每一个单词的位置信息,计算方式如下:

公式中 A(xij) 指单词 xij 的表征向量,lj 中的 j 是单词在句子中的位置,lj 是单词位置的表征向量,通过 lj 可以引入单词位置的信息。MemN2N 在此基础上还加上一个 Temporal Encoding,编码句子在所有上下文中的位置信息 T(i),最终的句子向量如下计算:

5. 参考文献

《End-To-End Memory Networks》

你可能感兴趣的:(End-To-End Memory Networks)