每周论文3

1️⃣[A Neural Probabilistic Language Model]

第一篇使用神经网络获得词向量的paper。

通过对language model建模,将词映射到低维表示,在训练过程中同时训练语言模型以及每个词的词向量。

将中心词的前n个拼接起来 $x=(C(w_{t-1},C(w_{t-2}),…,C(w_{t-n+1}))$
将$x$送入神经网络中获得$y=b+Wx+Utanh(d+Hx)$,最后做一个softmax即可。


2️⃣[Adaptive Computation Time for Recurrent Neural Networks]

一种允许RNN动态堆叠层数的算法。

Motivation

证据证明,RNN的堆叠层数多,效果会有提升。但是,对于不同的任务,要求不同的计算复杂度。我们需要先验来决定特定任务的计算复杂度。当然我们可以粗暴地直接堆叠深层的网络。ACT(Adaptive Computation Time)能够动态决定每个输入t所需的计算次数。

方法

将RNN每一步的输出过一个网络+sigmoid层,获得一个概率分布,也即什么时候应当停止不再继续往上堆叠,直到概率加和为1。同时为了尽可能抑制层数的无限增长,在loss添加一项惩罚。

模型

对于普通的RNN:

s是隐藏层;y是输出。

对于ACT的RNN,有:

上标n是指的t时刻的层数;其中:

$δ$是flat,指示x是第几次输入。

引入新的网络,输入时隐状态,输出是一个概率分布:

那么每一层的概率是:

其中$R(t)$是在每一层概率求和超过1时的剩余概率(为了保证概率和为1,可以试着举一个例子来证明)

ε是为了解决第一次输出时就超过1-ε的情况,ε一般取很小。

最终,加权求和,作为最终的结果,传入下一个时间步:

普通RNN与ACT的RNN对比:

损失函数

为了防止模型层数无限增长,添加一项惩罚项以抑制。

记每一步的惩罚项为:

总的惩罚项则为:

Loss function则为:

因为N(t)是不可导的,我们在实际过程中只去最小化R(t) (我觉得不甚合理,一种解读是如果我们不断最小化R(t)直到变成0,那么相当于N(t)少了一层,接着R(t)就会变得很大,然后又继续最小化R(t)…)


3️⃣[Universal Transformers]

提出一种新型通用的transformer。

Motivation

Transformer的问题:RNN的归纳偏置(inductive bias)在一些任务上很重要,也即RNN的循环学习的过程;Transformer在一些问题上表现不好,可能是归纳偏置的原因。

Notably, however, the Transformer foregoes the RNN’s inductive bias towards learning iterative or recursive transformations.Our experiments indicate that this inductive bias may be crucial for several algorithmic and language understanding tasks of varying complexity: in contrast to models such as the Neural Turing Machine [13], the Neural GPU [17] or Stack RNNs [16], the Transformer does not generalize well to input lengths not encountered during training.

因此在Transformer内引入归纳偏置

特点

  • 每一层的权重是共享的,也即multi-head上的权重以及transition function在每一层是一致的。这一点和RNN、CNN一致。
  • 动态层数(ACT mechanism ):对于每个词都会有不同的循环次数;也即有些词需要更多的refine;而有些词不需要。和固定层数的transformer相比,会有更好的通用性。

模型

总体架构

过程:

和普通Transformer不同的地方在于:

  • 加了一层Transition层,Transition可以是depth-wise separable convolution(是什么?)或者全连接层。
  • 每层都添加了position embedding;以及timestep embedding,用以指示层数。

ACT

由于一个句子中间,有些词比其他词更难学会,需要更多计算量,但堆叠太多层会大大增加计算量,为了节省计算量,我们可以引入ACT来动态分配计算量。

ACT原来用于RNN,在Transformer中,当halting unit指示词t应当停止时,直接讲该词的状态复制到下一个time step,直到所有的词都停止。