Transfomer上
Seq2seq model
分为两块,encoder和decodeer,当输入一个sequence,由encoder处理,再把处理好的结果给decoder,由decoder决定输出什么样的sequence。
Encoder内部结构如下:
transformer里面encoder一个block的输出具体如下
residual:直接把input和output加起来
Layer Normalization:对同一个feature里面不同的dimension去计算mean和standard deviation
Transfomer下
Decoder之Autoregressive(AT)
Size V:vocabulary的size,如果要输出的是中文,那么此size可能就是中文字的数目。
然后Decoder会把自己的输出当做接下来的输入。
Decoder内部结构如下:
Self-attention和Masked Self-attention的区别:
Self-attention:每一个输出都要看过完整的input之后才会做决定,比如输出b1的时候就是根据a1到a4所有的信息输出b1
Masked Self-attention:每一个输出不考虑其右边的信息,比如b1只考虑a1的信息,b2考虑a1,a2的信息......
即要产生b2的时侯,只拿第二个位置的query去跟第一个位置的key和第二个位置的key计算attention,第三个和第四个位置的就不管。
当输入结束时,Decoder要能输出一个特殊的符号来表示输入结束。
Decoder之Non-autoregressive(NAT)
由于不知道要输出的长度,不知道要放多少个begin当做NAT Decoder的输入,因此用以下方法确定NAT输出长度:
1.设置一个classifier,向这个classifier输入encoder的input,然后classifier就会输出decoder应该输出的长度
2.直接给decoder一长串的begin,再确定在哪里输出end,end之后的就直接丢弃
NAT优点:
1.平行化:AT的decoder在输出句子的时候是一个一个字的产生当需要输出长句子的时候需要很多次的decoder,而NAT不管句子的长度都是一个步骤就产生完整的句子。因此NAT会更快。
2.容易控制输出的长度
缺点:
通常效果比AT差
Cross attention运行过程
训练Seq2seq model的tips:
Copy Mechanism
从使用者的输入中copy一些词汇当做输出,或总结摘要。
Guided Attention
要求机器在做attention的时侯有固定的方式,比如语音识别产生文字的时侯从左到右。
Beam Search
exposure bias:
训练的时候decoder看到的是完全正确的,测试的时候decoder看到的是自己的输出,所以可能会看到错误的东西。
解决办法:
Schedule Sampling:给decoder的输入加一些错误的东西
各式各样的Attention
Local Attention/Truncated Attention
有时候在做attention的时侯不一定需要看整个sequence,也许有些问题在做attention的时侯在每一个位置上只需要看左右邻居就可以。就可以直接把相距更远的weight设为零
缺点:每次做attention的时候,只能看得到一个小范围的信息,那么就跟CNN没什么差别了
Stride Attention
相较于Local Attention,不是看上一个,下一个的信息,而是跳几个再看信息,就可以看到一个比较大范围的信息。
Global Attention
在attention里加入一个特殊的token或符号代表某个位置要做Global attention。
首先它会从sequence里的每一个token收集信息,了解整个input sequence里发生了什么事情
Global Attention做法:
1.在原来的sequence里面直接让一些token作为特殊的token,
2.额外加上特殊token
Clustering
1.根据query和key的相近程度把比较近的分类在一起,比较远的就属于不同的cluster
2.如果一个query和一个key在一个cluter里面才会计算attention的weight,其他的直接为零,从而加快attention matrix的计算
Sinkhorn Sorting Network
在计算attention的时侯先产生一个N*N的matrix,matrix里面有些位置是1,有些位置是0,位置为1的地方才去计算attention,位置为0的地方就不计算attention
从N个key,N个value中选出K个有代表性的key减小matrix的大小。
纵轴为表现,横轴为速度,圈的大小为需要的memory大小