Memory Network系列2 - End-To-End Memory Networks



  • 我的博客:Memory Network系列2 - End-To-End Memory Networks


    References

    1. End-To-End Memory Networks , 31 Mar 2015

    End-To-End Memory Networks

    前一节中我们说到,Memory Networks虽然能够很好地处理长期依赖的问题,但由于其网络结构不是端到端的,导致训练时需要更多的标记,难以用于更多的任务中。于是Facebook紧接着在2015年提出了 End-To-End Memory Networks 解决了这一问题。


    实现

    与前一篇文章相同,模型的输入为离散的句子特征集合 x1,...,xnx_1, ..., x_n,问题特征 qq,输出为答案 aa
    模型首先将所有的 xx 存储到一个固定大小的记忆中,再找到对 xxqq 的一个连续表示,这一连续表示通过多个hop得到输出 aa 。这样我们可以通过反向传播将损失经过多个memory传回输入。

    Single Layer

    我们先从单层记忆网络的端到端实现看起。

    Input Memory Representation

    对于input set x1,...,x2x_1, ..., x_2,我们首先将 xix_i 经过embedding层得到维度为 dd 的memory vector mim_i。最简单的embedding实现方式是用一个大小为 d×Vd \times V 的矩阵 AA 表示embedding。 qq 也通过同样的方式经过embedding得到其internal state uu,接着,我们将 mim_iuTu^T 做内积再经过softmax得到输入 xx 对于 qq 的概率表示 pp

    pi=Softmax(uTmi)p_i = Softmax(u^Tm_i)

    Output Memory Representation

    首先,我们让每一个 xix_i 都有一个与其对应的表示 cic_i (最简单的方式就是再用一个embedding),最终output的输出就是input得到的概率矩阵 ppcc 的乘积(element-wise)的和:

    o=ipicio = \sum_i p_ic_i

    这样,我们就可以将o处的梯度往回传到input了。

    Generating the Final Prediction

    这部分很简单,将记忆输出 oo 与问题表示 uu 相加再与一个权值矩阵 WW 相乘,最后过softmax即可:

    a^=Softmax(W(o+u))\hat a = Softmax(W(o+u))


    Multiple Layers

    这部分要实现的目的与上一篇文章的top-k相同,具体实现也与上一篇文章类似,将前一层的输出与 qq 一同作为下一层的输入。

    • 第一层以后的输入 uku^k 为前一层的输出与 uu 的和:

    uk+1=ok+uu^{k+1} = o^k + u

    • 每一层都有自己的embedding矩阵 Ak,CkA^k, C^k 得到 m,cm, c
    • 最终的输出为:

    a^=Softmax(W(ok+u))\hat a = Softmax(W(o^k + u))


    0_1541406368567_493f70b3-1bb3-4e2c-bc90-388207ed854f-image.png


 

Copyright © 2018 bbs.dian.org.cn All rights reserved.

与 Dian 的连接断开,我们正在尝试重连,请耐心等待