MemNN

Memory Networks:记忆网络

任务

传统的RNN和其改进模型虽然具有记忆功能,但是在长期记忆中表现并不好,Memory Networks的目的是实现长期记忆。

方法(模型)

MEMORY NETWORKS

组成:1个内存模块(m—用索引的数组),4个组件(I,G,O,R—通过学习得到)

组件

  • $I$:(输入特征映射)—— 将输入转换为内部特征表示。
  • $G$:(泛化)—— 对于给定新的输入更新旧的内存。称之为泛化是因为在这个阶段网络有机会压缩并泛化其内存以供未来某些需要。

  • $O$:(输出特征映射)—— 给定新的输入与当前的内存状态,产生新的输出(在特征空间中)。

  • $R$:(回复)—— 将输出转换为特定格式的回复。比如,文本回复或者一个动作。

流程

  • 输入$x$(可以是单词,句子,图片,音频)
  • 将$x$转为内部特征表示:$I(x)$
  • 更新内存$m_i$:$m_i= G(m_i, I(x), m), ∀i$
  • 计算输出特征:$o = O(I(x), m)$
  • 将输出特征解码,得到最终回复:$r = R(o)$

实现

  • $G$:最简单的实现是利用下述$H(x$)将输入$I(x)$存储到槽中。

H(x) 是一个寻址函数(slot choosing function)。

G 更新的是$m$的$index$,可以直接把新的输入 $I(x)$ 保存到下一个空闲的地址$m_n$,并不更新原有的memory。

更复杂的 G 函数可以去更新更早的memory甚至是所有的memory。

A MEMNN IMPLEMENTATION FOR TEXT

  • $I$:sentence
  • $G$:将输入保存到下一个可用的地址,仅用于存储新的memory,并不更新原有的memory。
  • $O$:输入一个问题$x$,将最合适的$k$个支撑记忆(the supporting memories)返回。

k=1时:

k=2时:

输出:$o$:$[x, m{o1}, m{o2}]$

$s_O$:对匹配项的评分函数。

  • $R$:根据$O$的输出,返回一组词汇。

$W$:字典中左右单词的词汇列表。

$s_R$:对匹配项的评分函数。

推理的核心:$O,R$组件。

评分函数

评分函数$s_O,s_R$具有与嵌入模型相同的形式。

  • 使用损失函数MarginRankingLossSGD优化器训练。

数据集

$QA$

性能水平

image-20201124162815142

结论

单个单词回答任务:

  • 在Difficulty 1任务上,RNN和LSTM在提问之前表现较好,但是提问后效果变差,是由于RNN和LSTM长期记忆较差导致的。
  • 在Difficulty 5任务上,由于模型限制RNN和LSTM表现较差,随着难度增加,效果还会更差。
  • 在actor和actor+object任务上加入时间特征,效果提升很明显。
  • 使用了两段推理的MemNN表现最好。