美文网首页
2015 End-To-End Memory Networks

2015 End-To-End Memory Networks

作者: Eukaring | 来源:发表于2018-12-07 11:13 被阅读0次

    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:测试模型在语言建模上的能力

    模型的创新点:

    1. 解决当时人工智能领域的两大挑战:
      • 建立一个在回答问题或者完成一个任务时可以进行多重计算步( multiple computational steps)的模型。
      • 作者所提出的模型是对记忆网络( Memory Network)的一个改进,解决记忆网络难以通过使用BP算法进行训练,需要对网络中的每一层进行监督的问题。它从输入-输出对(input-output pairs)中使用端对端(end-to-end)进行训练, 因此可以应用于大多数任务中。
    2. 作者所提出的模型是对记忆网络 (Memory Network) 的一个改进,解决记忆网络难以通过使用 BP 算法进行训练,需要对网络中的每一层进行监督的问题。它从输入-输出对 (input-output pairs) 中使用端对端 (end-to-end) 进行训练, 因此可以应用于大多数任务中。
    3. 作者提出的模型,虽然结构与 RNN 类似,但不像传统的 RNN 网络,它显式地将存储在记忆中的输出在 K 跳中进行调整 (explicitly condition on the outputs stored in memory during the K hops) ,同时保持输出 soft (keep these output soft) ,而不是对输出进行采样。因此他们的模型在产生一个输出之前会经过几个计算步 (several computational steps) 。
    4. 与基于RNNs或LSTM模型去捕捉序列数据中长期结构 (long-term structure) 的各种方法不同,作者提出的模型使用的是一个全局记忆,并共享读取和写入函数。

    模型结构:

    1. Single Layer
      作者首先介绍了模型在 Single Layer 下对单个记忆跳 (a single memory hop) 操作的实现。

      • 输入记忆表示( Input memory representation):
        将输入集 (input set) x_1,...,x_i 存储在记忆中。再将 {x_i} 转换为记忆向量 {m_i} ,该记忆向量是通过计算每个 x_i 在连续空间( continuous space)的 d 维嵌入,例如使用一个简单的嵌入矩阵 A (维度大小为 d \times V) 。问题 q 也可以转化为嵌入向量 u (但使用的是另一个嵌入矩阵 B ) 。 在嵌入空间中,他们通过内部乘积和 softmax 计算 u 和 每个记忆 m_i 的匹配分数 (compute the match)。 p 是一个基于输入的概率向量( a probability vector over the inputs)。
        【这里的 x_iq 都是一维的句子向量,而不是由词向量组成的二维矩阵。后面会解释作者怎么产生句子向量】
        p_i = Softmax(u^Tm_i)
      • 输出记忆表示( Output memory representation):
        每个 x_i 有一个对应的输出向量 c_i (例如通过另一个简单的嵌入矩阵 C)。 记忆 o 产生的响应向量( response vector ) 是对输入转化后的向量 c_i 进行加权求和, 权重是从输入得到的概率向量。
        o = \sum_i p_i c_i
        因为从输入到输出的函数是平滑的,可以容易计算它的梯度和反向传播。最近提出的其他记忆形式( forms of memory )或者注意力( attention )可以使用作者这种方式,例如[4],[5],[6]
      • 生成最终预测( generating the final prediction):
        在单层的情况下,先对输出向量 o 和 输入嵌入向量 u 进行求和,再通过一个最终权重矩阵 W (维度为 V \times d) 和 一个softmax 产生预测标签。
        \hat{a} = Softmax(W(o+u))
    2. Multiple Layers
      这里,作者将它们的模型扩展到K跳操作 (K hop operations) 。记忆层 (the memory layers) 通过下面的方法进行堆叠 :

      • 第一层以上的输入是来自层 k 的输出 o^k 和输入 u^k 之和。
        u^{k+1} = u^k + o^k
      • 每一层都有它自己的嵌入矩阵 (A^k , C^k),用来对输入 {x_i} 进行嵌入。
      • 在网络的最顶层, W的输入也是通过结合最顶层的记忆层 (the top memory layer) 的输入和输出。
        \begin{split} \hat{a} &= Softmax(Wu^{K+1})\\ &= Softmax(W(o^K+u^K)) \end{split}
        为了减轻模型训练 (ease training) 的计算复杂度和减小参数数量,作者对每一层的嵌入矩阵 (A^i , C^i) 分别采用了两种权重绑定 (weight tying) 方法进行约束:
      • 邻近 (Adjacent):
        某一层的输出记忆的嵌入矩阵( C^k )是下一层的输入记忆的嵌入矩阵( A^{k+1} )。 作者还约束了:
        • 答案预测矩阵 (W^T) 的 shape 与最后的输出记忆的嵌入矩阵 (C^K) 一致。
        • 问题嵌入矩阵 (B) 为第一层的输入记忆的嵌入矩阵 (A^1)
      • 分层(Layer-wise, RNN-like):
        输入和输出嵌入矩阵在不同层中都是相同。例如:A^1 = A^2 = ... = A^KC^1 = C^2 = ... = C^K 。 作者还发现在更新 u^{k+1} 时,增加一个线性映射层 H ,使 u^k 通过 H 进行线性映射。这个映射可以和其他参数一起学习,因此作者使用 layer-wise 权重绑定 (weight tying) 进行实验时,都会使用这种线性映射。
        u^{k+1} = Hu^k + o^k
        当使用 layer-wise 权重绑定方法时,作者的模型结构会转变成传统的RNN模型,只是把RNN的输出分为内部输出和外部输出( internal 和 external outputs)。 内部输出( o^k )可以认为是记忆,外部输出( u^k )可以认为是用于标签预测。
        从 RNN 的角度上看, u 是一个隐藏状态,模型产生一个内部输出 p ( 可以说是图1(a)中的注意力权重 (attention weights)),然后模型通过 pC 来更新隐藏状态 u
    3. 模型结构图:

      图1
    4. 其他细节和技巧:

      • 句子表示 (Sentence Representation:
        在作者的实验中,他们探讨了两种不同的句子表示:
        • 词袋表示:
          先得到句子中每个词的词嵌入,然后进行求和得到句子表示。这种表示有一个缺点就是无法捕捉句子中词语的顺序,而词序 (the order of the words) 对于某些任务来说是很重要的。
          m_i = \sum_jAx_{ij}
        • 结合单词在句子中的位置进行编码:
          对于这种句子表示,作者称之为位置编码 (position encoding (PE)) ,这意味着词的顺序会影响这种句子表示。
          m_i = \sum_jl_j \cdot{} A x_{ij}
          l_{kj} = (1 - j/J) - (k/d)(1 - 2j/J)
          从1开始索引。 J是句子中单词的个数, d是嵌入的维度。
      • 临时编码 (Temporal Encoding):
        许多的QA任务需要临时上下文 (temporal context) 的概念。例如在图2中模型需要理解 Sam 在 kitchen 之后再到 bedroom 。为了使模型能够处理这些,对记忆向量 (m_i) 和输出向量 (c_i) 进行修改。 T_A(i) 是由临时信息编码得到的特殊矩阵 T_A 的第 i 行。注意:作者在论文中对句子的索引是反序的,即 x_1 是故事的最后一句话。
        m_i = \sum_jA x_{ij} + T_A(i)
        c_i = \sum_jC x_{ij} + T_C(i)
        图2
      • 通过注入随机噪声来学习时间不变性( Learning time invariance by injecting random noise):
        作者发现通过加入假的记忆来正则化 T_A 对模型的训练具有一定的帮助作用。 在训练时,作者在故事中随机加入10%的空记忆。他们将这个方法称为随机噪声 (random noise RN)。
      • linear start training:
        一开始训练的时候,先去除记忆层的 softmax 函数进行训练,使得模型除了最后的答案预测有 softmax ,其他全部只有线性映射。当验证集的 Loss 停止下降时,再将 softmax 重新插入,并继续训练。作者把这种方法叫做线性训练启动 (linear start training (LS))。

    参考文献:

    1. http://papers.nips.cc/paper/5846-end-to-end-memory-networks.pdf "End-To-End Memory Networks"
    2. https://arxiv.org/pdf/1410.3916.pdf "Memory networks"
    3. https://arxiv.org/pdf/1506.07285.pdf "Ask me anything: Dynamic memory networks for natural language processing"
    4. https://arxiv.org/pdf/1409.0473.pdf "Neural machine translation by jointly learning to align and translate"
    5. https://arxiv.org/pdf/1410.5401.pdf "Neural turing machines"
    6. https://arxiv.org/pdf/1502.04623.pdf "DRAW: A recurrent neural network for image generation"

    相关文章

      网友评论

          本文标题:2015 End-To-End Memory Networks

          本文链接:https://www.haomeiwen.com/subject/pktthqtx.html