论文笔记 Deep Transition Architecture

paper 1

paper: Self-Attention: A Better Building Block for Sentiment Analysis Neural Network Classifiers, 2018 WASSA@EMNLP

将 self-attention 和 LSTM,CNN 进行对比. 因为单纯只是为了比较三者作为一个 building block 的性能,所以保证公平性的情况下,只用了 1 layer 和 2-layer.

整篇文章并没有看到其他的创新性,不知道是不是看错了。。所以这样也能发 EMNLP?

但是看了还是有点收获,复习了一下 multi-head self-attention. 以及文中提到了三种 position encoding:

  • Sinusoidal Position Encoding

  • Learned Position Encoding

  • Relative Position Representations

Sinusoidal 是在 Transformer 中使用的, 好处在于即使是测试集中出现 sentence 的长度比训练集中所有的 sentence 都要长,也能计算其 position encoding.

Relative 是效果最好的,作者和 Tansformer 的作者是一样的,值得一看。Self-attention with relative position representations

For this method, the self-attention mechanism is modified to explicitly learn the relative positional information between every two sequence positions. As a result, the input sequence is modeled as a labeled, directed, fully-connected graph, where the labels represent positional information. A tunable parameter k is also introduced that limits the maximum distance considered between two sequence positions. [Shaw et al., 2018] hypothesized that this will allow the model to generalize to longer sequences at test time.

paper 2

DTMT: A Novel Deep Transition Architecture for Neural Machine Translation AAAI 2019

腾讯 WeChat AI 的一篇机器翻译的 paper,同样也是 encoder-decoder, 但是改进了 Deep transition RNN.

先了解何为 deep transition RNN, 注意与 deep stacked architectures 的区别。

也就是在传统的 RNN 迭代之前,先对 state 进行 transition。而这篇 paper 改进的就是这种 transition 的方式,目的就是为了减轻其中因为非线性操作带来的梯度消失的问题。

模型结构图:

  • encoder transition

  • multi-head attention

  • query transition

  • decoder transition

其中提出了 GRU 以及其变体 T-GRU 和 L-GRU.

GRU

回顾下 GRU

$$h_t = (1-z_t)\odot h_{t-1} + z_t\odot \tilde h_t$$

其中:

candidate state:

$$\tilde h_t = tanh(W_{xh}x_t + r_t\odot (W_{hh}h_{t-1}))$$

reset gate:

$$r_t = \sigma(W_{xr}x_t+W_{hr}h_{t-1})$$

update gate:

$$z_t=\sigma(W_{xz}x_t+W_{hz}h_{t-1})$$

T-GRU (transition GRU)

对 GRU 做了简化,因为只针对于 state 的变化,去掉了 $x_t$ 的输入.

$$h_t = (1-z_t)\odot h_{t-1} + z_t\odot \tilde h_t$$

candidate state:

$$\tilde h_t = tanh(r_t\odot (W_{hh}h_{t-1}))$$

reset gate:

$$r_t = \sigma(W_{hr}h_{t-1})$$

update gate:

$$z_t=\sigma(W_{hz}h_{t-1})$$

L-GRU( Linear Transformation enhanced GRU)

$$h_t = (1-z_t)\odot h_{t-1} + z_t\odot \tilde h_t$$

candidate state:

$$\tilde h_t = tanh(W_{xh}x_t + r_t\odot (W_{hh}h_{t-1}))+ l_t\odot H(x_t)$$

增加了一个基于 x_t 的线性的变换 H(x_t), 并由 $l_t$ 控制信息量的多少。

$$H(x_t)=W_xx_t$$

$$l_t=\sigma(W_{xl}x_t+W_{hl}h_{t-1})$$

这个模块相对于 $W_{xh}x_t$ 多了一个线性控制器,其实他与第二个模块 $r_t\odot (W_{hh}h_{t-1}))$ 倒是对称的,只不过 $h_{t-1}$ 换成了 $x_t$.

所以我可不可以再加个这样的?

$\tilde h_t = tanh(W_{xh}x_t +W_{hh2}h_{t-1} +l_t\odot W_{xh2}x_t+ r_t\odot (W_{hh}h_{t-1}))$

DNMT

Decoder

$L_s$ 表示 encoder transition 的深度 depth. $j$ 表示 current time step.

$$\overrightarrow h_{j,0}=L-GRU(x_j, \overrightarrow h_{j-1,L_s})$$

$$\overrightarrow h_{j,k}=T-GRU(\overrightarrow h_{j, k-1}),\text{ for } 1\le k\le L_s$$

很好理解,就是 k=0 transition 的第一步需要输入 $x_t$,使用 L-GRU. transition 的剩余步骤使用 T-GRU.

双向 bi-direction GRU: $C=[\overrightarrow h_{j, L_s}, \overleftarrow h_{j, L_s}]$

Decoder

  • query transition: depth $L_q$

  • decoder transition: depth $L_d$

对于 query transition: 输入是上一步的输出 $y_{t-1}$ 和 上一步的隐藏状态 $s_{t-1}$.

然后得到 $S_{t, L_q}$ 与 encoder 进行交互, multi-head attention:

得到 attention vector $c_t$ 之后,$c_t$ 类似于输入, $s_{t,L_q}$ 是隐藏状态,进一步进行 transition state 转换。

得到 $s_{t, L_q+L_d+1}$ 就是当前时间步的最终隐藏状态,通过映射到词表空间,即可预测当前时间步的词。

Tricks

还是有很多可以借鉴的地方的~