论文笔记 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

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