Transformer
Seq2Seq
输出label数由机器自己决定。
台语翻译
台语语音+中文字幕作为data
台语语音合成
Seq2Seq for chatbot
output是response
More NLP applications…
-Q&A
QA can be done by seq2seq.
输入question,context,seq2seq处理后输出是answer。
不同NLP任务需要定制化模型
Seq2Seq for syntactic parsing
句法解析,输出是一个树状结构,但这个结构也可以对应到sequence的形式
Seq2Seq for multi-label classification
multi-label意思是同一个东西可以属于不只一个class。
Seq2seq可以自己决定输出几个class。
Seq2Seq for object detection
Seq2Seq怎么做?
Encoder—> Decoder
Encoder
Encoder就是输出相同长度的向量,transformer的encoder用的就是self-attention.
Encoder的架构
Encoder的一个block里面做的是好几个layer做的事情。
Transformer的block做的更复杂,在self-attention输出后还要叠加输入作为新的输出,这个结构就叫residual connection。
再做layer normalization,对同一个feature的不同dimension计算均值和标准差。这个输出才是FC的输入,FC那边也有residual的架构,也再做一次layer normalization。
transformer的input先加position,然后transformer的encoder里的Add & Norm就是Residual + Layer norm的意思。
上面讲的是最原始的transformer的架构,但不一定是最optimization的。
Decoder
有2种,最常见是Autoregressive。
Autoregressive
先读入encoder的输出作为decoder的输入。
先给一个特殊的符号,代表开始begin。接下来会吐出一个向量,这个向量的长度跟输出的vocab的长度相同。每个word都会对应一个分数。这个分数是softmax得到的distribution的值,加起来总和为1。分数最高的值就是这个向量的输出。
现在输出的“机”这个字加入到下一步的输入。
Decoder的架构
Decoder的结构比encoder还复杂一点,
Encoder结构和decoder结构放一起,可以发现结构就差中间这一块。
还可以看到decoder再第一步的multi-head基础上还加了一个mask,mask什么意思呢?
Mask是这样的,原来的self-attention需要先看所有输入再计算,加入mask可以,输出b1的时候只考虑a1的资讯,不考虑a234的资讯。产生b2的时候只考虑a1、a2的资讯,不考虑a3、a4。产生b3的时候只考虑a1、a2、a3,不考虑a4。
矩阵运算时也一样,b2的计算只考虑a1、a2.
Why mask?
因为Decoder的时候,a1、a2、a3、a4是顺次产生的,所以输出b2的时候还没有a3、a4,所以没办法像encoder一样计算全局。
Decoder怎么决定输出长度?
可以设置一个END的符号来表示断。
Non-autoregressive (NAT)
NAT不是一次产生一个字,是一次产生整个句子。
怎么决定NAT decoder的输出的长度?
-解决1: 扔一个classifier去决定输出长度。
-解决2: 不管三七二之一先给N个begin,看哪里输出了END,END右边的输出就扔掉。
NAT的好处: 平行化;输出长度可控。
Encoder和Decoder中间怎么传递?
传递靠刚刚Decoder遮住的部分叫cross-attention,它有2个输入来自encoder,有1个输入来自decoder。
Encoder 输出a1、a2、a3,先有begin,再经过带mask的self-attention得到一个向量,乘上一个linear transform后得到query。a1、a2、a3得到三个k,q和三个k相乘得到attention score,接下来a1、a2、a3乘上v1、v2、v3,再把它vk sum(加权)加起来得到v,这个v再丢给fully-connect。
Cross attention ref
Training
比如翻译“机”这个字,正确答案是一个one-hot的vector,decoder的输出是一组probability,要做的就是使“机”的probability越接近1越好,也就是minimize cross entropy。
这个机制像分类问题。
现在就是希望所有output的cross entropy越小越好。
Decoder的输入就是正确答案,这个技术就是Teacher Forcing。
但是做测试的时候没有正确答案,那这中间的mismatch要怎么办?
训练的Tips
Tips1: Copy Mechanism
从输入里复制一些东西出来。
比如chat-bot复制user name。
比如summarization提炼摘要
Tips2: Guided Attention
有时候机器会犯一些低级错误。比如会漏掉部分输入,这时候可以强制机器看完全部的输入,这个技术就叫Guided Attention。
就是让机器以固定的attention模式学习。
Tips3: Beam Search
假设现在decoder只能输出2种输出A、B,每次就决定AB选哪一个,单次选分数比较高的那个。这个路径就叫Greedy Decoding。但是存在别的路径得到的结果比这个路径好的可能性,但是又没办法穷举所有路径,这时候就引入Beam Search技术。
但是这个技术有时候有用,有时候没有用。
如果答案只有一种可能性,beam search比较有用,如果答案比较随机性,那就不太好用。比如语音合成、TTS。
Optimizing Evaluation Metrics
validation的时候是考虑BLEU score,是算完一整句话再跟正确答案比较,但是训练的时候是minimize cross entropy,minimize cross entropy可以最大化BLEU score吗?
不一定。
那能不能训练的时候考虑BLEU score?没有那么容易,BLEU score很复杂,没法做微分和gradient descending。
有一个答案是:遇到optimize问题无法解决的时候,总是用reinforcement learning (RL)。
Exposure Bias
前面提到的训练能看正确答案,测试的时候看不到正确答案导致的mismatch的问题就叫Exposure Bias。
测试的时候因为没有正确答案,只要有一个错,就会一步错步步错。
解决:训练的时候加入一些错误的东西,这个技术叫Scheduled Sampling。
我自己的Transformer总结:
Transformer解决Seq2Seq的任务,label输出数由机器自己决定,应用如台语语音翻译、语音合成、Chatbot、Q&A、句法解析、multi-label分类、object-detect等。Seq2Seq由encoder和decoder组成,Encoder输出跟输入相同长度的向量,transformer的encoder用的就是self-attention。Encoder的一个block是multi-head attention,Transformer的encoder的block的结构在self-attention和Fully-connection后面加(Residual connection [原输入+输出作为新输出]+ Layer norm)结构。Decoder最常见是Autoregressive结构,有begin和end符号决定开始结束,每一个单位的输出是softmax得到的distribution的最大值。Decoder在第一步的multi-head基础上还加了一个mask,意思是输出output的时候只看之前的输出结果不用看全局输出。Decoder还有一种Non-autoregressive (NAT)结构,不是一次一个字,可以平行化输出整个句子且长度可控。Transformer的Encoder和Decoder的传递靠Decoder中间的cross-attention (2个输入k、v来自encoder,1个输入q来自decoder)。Decoder的优化机制训练时是minimize cross entropy,测试时是BLEU score。训练的tips有Copy Mechanism、Guided Attention、Beam Search。训练的时候Decoder有正确答案,测试的时候没有,引起Exposure Bias,所以训练的时候加一些错误答案,这个技术叫Scheduled Sampling。