使用auto-regression进行编码:LSTM 。 优化目标:$p(\boldsymbol{x}) = p(x_1) p(x_2 \mid x_1) p(x_3 \mid x_2, x_1)……$
使用auto-encoder进行编码:BERT、word2vec。优化目标:$p(\boldsymbol{x}) \approx \prod_{i} p(x_i \mid \boldsymbol{x}_{\neg i})$
BERT的两个问题:mask标签在真实分布中不存在,输入数据分布会有偏差。输出文字相互独立的假设,实际上违背现实,例如假如输入[Mask] [Mask] is a city 后,infer得到第一个mask输出为”New”时,第二个mask是”York”的概率应该受其影响大幅提升,而BERT无法反映这一点。
LSTM的最大问题:一个序列只能看到一个方向的输入。例如预测文本序列第3个单词时$p(w_3)$完全不依赖于$w_{t \ge 3}$。
XLNet属于auto-regression,解决LSTM的问题主要通过乱序采样。正常阅读顺序是$w_1 \rightarrow w_2 \rightarrow w_3 \rightarrow w_4 ……$(位置编码也包含在内)。当我们把所有序列$\boldsymbol{w}$的排列组合写作$Z$,则从$Z$中随机采样任意序列$\boldsymbol{z} = (z_1, z_2, z_3, ……) \in Z$,假如单词向量(连同位置编码)$z_i$位置上的单词在原先打乱前正是单词$ w_j$,则原文位置j前后的单词,都有概率被auto-regression以序列$z$作为输入时读取到,模型评估$p(z_i \mid \boldsymbol{z}_{1:i-1}) = p(w_j \mid \boldsymbol{w}_{rand(T), i-1, \neg j})$,即随机采样i-1个小于句子长度T的,且不等于j的位置序号,找到这些序号上的单词w,把这些已经infer得到的$\boldsymbol{w}_{rand}$作为已知,去推测第i个单词的概率分布。
我们用一个打乱的顺序去看句子里的单词,然后同样以乱序猜测其他位置上的单词,这样一次编码时,上下文的信息就能够同时用来推测需要预测的位置的单词了。
我们的优化目标于是成为了$\max\limits_{\theta} \mathbb{E}_{\boldsymbol{z} \sim Z} \left[\sum\limits_{t=1}^{T} log p_{\theta}(x_{z_t} \mid \boldsymbol{x}_{\boldsymbol{z}_{1:t-1}}) \right]$ 为了能够快速收敛且节约内存,t的初始位置不一定是1,而是从1到T中间某个位置c开始,整数$K \approx T/(T – c)$是一个超参。
不同于常规监督训练时任意位置t的输出,能够看到输入单词$w_t$,预训练的目标因为要直接预测单词(BERT预训练任务之一以及XLNet的预训练目标),所以预训练时不希望预训练时t位置的输出能够看到$w_t$,否则就会出现输入与输出信息相同,导致信息泄露。BERT中使用MASK确保预训练时正确的信息隐藏,却也导致了预测分布被修改;xlnet提出了Two-Stream机制解决这一问题。
用于正式监督训练的隐层输出(同时也可以用于t+1的单词预测),在第l层t位置,写为$h_{z_t}^{(l)} = Attention_{\theta}(Q=h_{z_t}^{(l-1)}, KV= \boldsymbol{h}_{\boldsymbol{z}_{1:t}}^{(l-1)})$,$h_{z_t}^{(0)}=\left( embed(x_{z_t}), v_t \right)$,第0层h包含了词向量以及位置向量。
用于预训练乱序猜词的输出,在第l层t位置,写为$g_{z_t}^{(l)} = Attention_{\theta} \left( Q=(g_{z_t}^{(l-1)}, v_t), KV=\boldsymbol{h}_{\boldsymbol{z}_{1:t-1}}^{(l-1)} \right)$,第一层$g_{z_t}^{(0)}$是可训练变量。
注意到预训练时,attention的V从来不包含$h_{z_t}^{(l-1)}$,Query也只包括了位置信息,所以当使用最后一层的$g_{z_t}^{(l)}$预测每一个位置t的原本单词时,都不存在信息泄露。
当输入序列很长时,考虑长序列的乱序排列组合数量太多,所以使用了Transformer-XL里的memory思路,用于储存滑窗范围内的$h_{z_t}$,之后在每一次attention时,添加上个滑窗的memory到KV:
$h_{z_t}^{(l)} = Attention_{\theta}\left(Q=h_{z_t}^{(l-1)}, KV= (\boldsymbol{\widetilde h}^{(l-1)} ,\boldsymbol{h}_{\boldsymbol{z}_{1:t}}^{(l-1)}) \right)$
$g_{z_t}^{(l)} = Attention_{\theta} \left( Q=(g_{z_t}^{(l-1)}, v_t), KV=(\boldsymbol{\widetilde h}^{(l-1)}, \boldsymbol{h}_{\boldsymbol{z}_{1:t-1}}^{(l-1)}) \right)$