HW5-Transformer
Reference Code
Homework Link
这里贴一个可参考的blog
1.Video 1-Batch Normalization
当 x 1 x_1 x1与 x 2 x_2 x2范围相差很大时(如上图),会导致 e r r o r s u r f a c e error surface errorsurface在 w 1 w_1 w1的斜率较小, w 2 w_2 w2的斜率较大。即 w 1 w_1 w1的变化对训练时的影响会较小。利用梯度下降更新时, w 1 w_1 w1的更新速度会比较慢。
其中一种标准化为Feature normaliaztion
:
上图有R
个特征向量:
x
1
,
x
2
,
.
.
.
,
x
R
x^1,x^2,...,x^R
x1,x2,...,xR,其中
x
1
1
x^1_{1}
x11表示特征1中维度为1的值。将维度为i
的特征值标准化,将其变为正态分布:
x
i
r
~
=
x
i
r
−
m
i
σ
i
\widetilde{x^{r}_{i}} = \frac{x^r_{i}-m_i}{\sigma_i}
xir
=σixir−mi,其中
m
i
m_i
mi是均值,
σ
i
\sigma_i
σi是标准差。
当训练的时候,GPU的memory并不能直接处理所有train data
的Feature normalization
,而是分批,处理每个batch
的 Feature normalization
。
2.Video 2 Transformer Encoder
Transformer
是一个Seq2Seq
的模型,Transformer
的Encoder
采用的即为Self-Attention
的架构,而Encoder
作用为将输入的语音等转换为相应的向量输出即输入一个Vector Seq
输出一个Vector Seq
。
上图中的Add & Norm
就是Residual
+ Normalization
。而Transformer
中的Normaliaztion
(如下图)与Video 1中的Batch Normalization
并不相同。
上图是Transformer
中的Normaliation
,并不是一个batch
中的同一个维度的不同Feature
间做标准化,而是在一个特征向量中做标准化。
3.Video 3 Transformer Decoder-Autoregressive(AT)
Decoder
开始会收到一个起始的One-hot向量BEGIN
,预测出一个One-hot向量,其中“机”的概率最大,即输出为“机”;然后会将前一个预测出的”机“作为Decoder
的输入继续预测。
但是当前一个预测出错,如将”机“预测为”气“,可能会导致后面“一步错步步错”的情况发生。输入序列长度与输出序列长度的关系是不确定的(eg.利用Seq2Seq
进行文章摘要),所以在上面图片上Decoder
输出完“习”之后并不会停下来,可能会继续输出(eg.“惯”)。
上图是Encoder(左)&Decoder(右)
的内部结构。 可以发现如果把Deconder
中间部分的Add&Norm
、Multi-Head Attention
去掉,Decoder
与Encoder
的区别为:多头注意力是否有Masked
。(多头注意力也即存在多个计算
q
i
k
i
v
i
q^i \quad k^i \quad v^i
qikivi的矩阵)
如下面两张图片所示,Self-Attention
产生的
b
i
b^i
bi都是考虑了
a
1
∼
a
4
a^1\sim a^4
a1∼a4的信息得到的。Masked Self-Attention
产生的
b
i
b^i
bi则是只考虑前面的
a
1
∼
a
i
a^1\sim a^i
a1∼ai的信息得到的,也即只用
q
2
q^2
q2与
k
1
k
2
k^1 \quad k^2
k1k2来计算
b
2
b^2
b2。
(Self-Attention)
(Masked Self-Attention)
(Masked Self-Attention)
Decoder
将自己的输出作为输出来预测后面,所以Decoder
只能采用“只考虑左边信息”的Masked Self-Attention
。
Decoder
和Encoder
共同协作的流程参考:视频24:32处开始。
4.Training Tricks
4.1 Copy Mechanism
在某些情况下,模型不用理解某些名词【库洛洛】,模型可以直接将输入的该名词输出。
4.2 Guided Attention
在Seq2Seq
的任务中(eg.语音辨识、语音合成),模型会忽略某些信息从而无法得到好的效果。在语音合成任务的时候,语音的输出应该是从左向右,所以可以在Train的过程中就将该从左向右的过程固定下来。
4.3 Beam Search
贪心不一定是最好的。当每个点的选择种类很多时,复杂度就会爆炸,而Beam Search
是一种找到符合某种条件的路径算法。
4.4 Scheduled Sampling
Testing:在最终测试集的时候Decoder
是将自己前一个预测的东西作为输入进行预测的,会出现“一步错步步错”的exposure bias
。
Training:训练的时候,Decoder
是将标签作为输入而不是将自己预测的东西作为输入。
为了解决exposure bias
的问题,可以在Training 的时候,给Decoder
一些错误的东西去train,反而可以得到更好的模型。