Transformer
一、Seq2seq模型和常见应用
1.1 Seq2seq模型
Seq2seq指的是输入是序列,输出也是序列的模型,输出序列的长度由模型自身决定。Transformer是Seq2seq模型的一种。
1.2 常见应用
- 语音识别(Speech Recognition):输入是声音序列,输出是文字,输入和输出是同一种语言
- 机器翻译(Machine Translation):输入是一种语言的文字,输出是另一种语言的文字
- 语音翻译(Speech Translation):输入是一种语言的声音序列,输出是另外一种语言的文字
- 语言合成(Text-to-Speech(TTS)):输入是文字,输出是声音序列
- 聊天机器人(Chatbot)
- 多标签分类(Multi-label Classification):比如输入一篇新闻文章,直接通过Seq2seq模型输出属于哪些题材
大部分的NLP问题都可以被看成是QA(Question Answering)问答问题,即输出问题和文本,输出答案。
二、Transformer结构
2.1 整体结构
由Encoder和Decoder两部分组成,Encoder的结果会通过Cross Attention作为Decoder的中间输入(K,V)。
2.2 Encoder
输入一个序列,输出相同长度的序列。中间的结构是多头注意力机制+residual connection & layer normalization + 全连接层 + residual connection & layer normalization,这个结构可以重复(N次)。
layer norm和batch norm的区别:前者是对所有输入特征进行标准化,后者是对同一特征的所有样本进行标准化。
2.3 Decoder
2.3.1 Decoder 结构
与Encoder的区别是第一个多头注意力是加掩码(mask)的,中间多一个Cross Attention的部分。
加mask的原因是保证当前的输出只受之前输入的影响。
Cross Attention的原理
Encoder的输出向量生成K和V,Decoder本身产生Q,这样共同形成Cross Attention机制,产生向前传播的向量序列。
2.3.2 Autoregressive(AT) 和Non-autoregressive(NAT)
AT: 一开始输入start向量,然后每次产生的结果做为下一个输入,当输出向量代表end时,输出结束。
NAT: 一次性输入全部为start的向量,并行生成输出向量。一般情况下,忽略end之后的token。NAT性能通常比AT差。
三、Training和Testing过程的区别
3.1Training
直接用标准答案做为输入(Teacher Forcing),最小化交叉熵损失。
3.2Testing
用bos(begin of sentence)做为输入,一次产生一个新向量,然后该向量作为预测下一个结果的输入