Neural Programmer: Inducing Latent Programs with Gradient Descent笔记

# Neural Programmer: Inducing Latent Programs with Gradient Descent笔记

## neural programmer模型

整个模型由四个部分组成:

* 一个RNN用于处理输入的问题

* 一个选择器用于在每一个time step,分别给一组操作和data segments赋予概率值

* 一组这个模型可以采用的操作

* 一个历史RNN用于记忆之前的操作和data segments

如下图


Neural Programmer: Inducing Latent Programs with Gradient Descent笔记_第1张图片
Neural Programmer

其中模型在t时刻的输出通过在data segments应用操作并按照概率加权得到,模型的最终输出是T时刻的输出

### 问题模型(question module)

question module将question tokens转换为一个distribution representation。在论文中,作者使用了RNN以及RNN最后的隐藏状态(hidden state)来表示。

类似于最常见的RNN,在机器翻译中的encoder-decoder模型中,将句子中每一个词的embedding作为每一个时刻的输入,取最终的hidden state作为该句子的一个表示。

对于每一个句子,作者除去了句子中的数字,并且将数字和数字左端那个词选出来单独保存为一个list

对于长句子,使用bidirectional RNN

### Selector选择器

selector在每一个时刻产生两个概率分布,一个用于set of operations,另一个用于set of columns。selector的输入是之前问题模型中得到的问题的表示和history RNN在时刻t的输出。

每一个operation由一个d维的向量表示,如果operation个数为O,那么可以用一个O*d的矩阵U来表示所有的operation.

**操作的选择**由以下公式决定


它就相当于将selector的输入(question representation 和 history RNN输出)拼接后接一个全联接层,一个激活层,一个全联接层后接 softmax 输出一个概率值

selector在每个时刻t也会产生columns的概率,用矩阵P(C*D)来表示column

**数据选择**

类似于操作选择


Neural Programmer: Inducing Latent Programs with Gradient Descent笔记_第2张图片


## Operations

Neural Programmer现在支持两种输出:a)标量 b)a list of items selected from the table

第一类输出用于"sum of elements in column C"类型的问题

第二类输出用于"Print elements in column A that are greater than 50"类型的问题

为了达到这样的目的,模型在每个时刻t维护来两种输出变量: scalar_answer, lookup_answer,除来这两个变量,模型还维护来另外一个变量row_select,用于表示选择row i的概率

neural programmer的关键是built-in的操作,这些操作可以接触到所有时间t之前的输出,下表所示


Neural Programmer: Inducing Latent Programs with Gradient Descent笔记_第3张图片

下图展示了如何计算输出


Neural Programmer: Inducing Latent Programs with Gradient Descent笔记_第4张图片

论文中给出了输出的变量的公式


### 

你可能感兴趣的:(Neural Programmer: Inducing Latent Programs with Gradient Descent笔记)