DeepMind Relational Reasoning(RNs)
Relational reasoning(RNs)
- 论文:A simple neural network module for relational reasoning(2017)
- github代码: https://github.com/siddk/relation-network
关系推理的传统方法有基于符号的方法(symbolic approaches)和基于统计的方法(statistical learning)。基于符号的方法存在着 symbol grounding 的问题,在小任务(small task)和输入变化(input variations)的问题上也不够鲁棒,学习能力不强;而基于统计的方法像深度学习,虽然泛化能力强,但是对数据稀疏但关系复杂的问题也是束手无策。DeepMind 2017年出的这篇论文提出的Relation network(RN),是用于关系推理(relational reasoning)的一个神经网络模块(NN module),能直接加载到已有的神经网络架构中。与 GNN 等网络结构相比,更为简单和灵活,即插可用(plug-and-play),在一些关系推理的测试上的准确率已经超过了人类。
Structure
RN 的网络结构是真的很简单(不然也不会说是”simple neural network”),以至于通篇下面一个公式就可以概括,核心就是利用神经网络来找出任意 pairwise 对象之间的潜在关系。
$$RN(O) = f_\phi (\sum_{i,j}g_\theta(o_i, o_j))$$
- Inputs: O={$o_1, …, o_n$}
- MLPs: $f_\phi$, $g_\theta$
- $g_\theta$: 使用一个全连接的神经网络来量化 $o_i$ 和 $o_j$ 的关系,任意两个对象之间的关系使用同一套参数 $g_\theta(•,•)$
- $f_\phi (\sum_{i,j}g_\theta(o_i, o_j))$: 考虑所有组合的关系,相当于考虑一个完全连接图,在这个图上计算各个边的权重,把重要的关系凸显出来,f 函数就计算了这个重要关系的集合
用在自然语言处理里,就是把每个句子当做一个对象,每个句子与句子的 pair 用 g 计算关系,再把所有关系加权和放到最终的预测网络里。
小结一下,RNs有以下三个特点:
- 可以学习推理。这里 RNs 计算了所有的两个对象之间的关系,当然也可以只计算部分两个对象之间的关系,这里的“部分”需要预定义
- RNs的数据效率更高(data efficient)。RNs 使用一个 gθ 函数来计算所有的关系,任意两个对象之间的关系使用同一套参数,泛化能力更强
- RNs作用在一个集合上,对输入和输出都是与顺序无关的(input/output invariation)
Tasks
简单提一下和 NLP 有关的任务。
VQA
RN 在 VQA 任务上的结构也很简单,CNN 处理图像,LSTM 编码 question,然后两两配对的 spatial cell(红蓝;黄红;蓝黄…)和 question embedding 拼接,后面接几个 FC 层,最后 softmax 得到某个 answer word。
Word-embedding: dim32; LSTM: dim128
$g_\theta$: 4-layer MLP, dim256-256-256, RELU
$f_\phi$: 3-layer MLP, dim256-256-29, RELU
$f_\phi (\sum_{i,j}g_\theta(o_i, o_j, q)$: 综合所有组合 $g_\theta(o_i, o_j;q)$,implicitly 提取有用的组合预测最终答案
bAbI
RN 在 bAbI 测试集上的结构,每个问题之前的最多 20个句子作为 support set,使用 LSTM-dim32 把 support set 连同每个句子在 set 里的相对位置编码转化为 RN 的 object set,同时使用另一个 LSTM-dim32 的 encoding state 表示问题。
$g_\theta$: 4-layer MLP, dim256-256-256-256
$f_\phi$: 3-layer MLP, dim 256-512-159
在 joint training 也就是 20 个任务一起训练一个 QA 模型的情况下,通过了 18/20 bAbI test。DNC 在 path finding 任务上表现不错,但在 basic induction 上误差达到 55.1%,而 RN 达到了 2.1% 的误差水平。