0%

Transformer原理

Attention is all your need

序列编码

深度学习做$NLP$的方法,基本上都是先将句子分词,然后每个词转化为对应的词向量序列。这样一来,每个句子都对应的是一个矩阵 $X= (x_1,x_2,…,x_t)$, 其中$X_i$都代表着第$i$个词的词向量(行向量),维度为d维,故$X\in R^{n*d}$。这样的话,问题就变成了编码这些序列了。

RNN层

RNN方法很简单,采用递归式进行:
$$
y_t = f(y_{t-1},xt)
$$

不管是已经被广泛使用的LSTMGRU还是最近的SRU,都并未脱离这个递归框架。RNN结构本身比较简单,也很适合序列建模,

但RNN的明显缺点之一就是无法并行,因此速度较慢,这是递归的天然缺陷

CNN层

CNN的方案采用窗口式遍历,比如尺寸为3的卷积,就是:
$$
y_t = f(x_{t-1},x_t,x_{t+1})
$$

Attention定义
$$
Attention(Q,K,V) = softmax(\frac{QK^T}{\sqrt{d_k}})
$$
4fn03R.md.png