self-attention
-
输入为:
一排向量–word embedding
可以是一段声音讯号、一个图(一个节点)、一个分子(一个原子) -
输出为:
① 每个向量都有一个对应的label,输入长度=输出长度
例:词性标注(每一个单词都有一个对应的磁性)、社交网络
② 一整个sequence需要一个label
例:机器判断一段话是正面的还是负面的、根据一段语音判断讲话人是谁
③ 模型自己决定输出的label个数
例:翻译 -
输入个数=输出个数,称为Sequence Labeling(sequence的每一个向量都要输出一个Label)
fully-connected(全连接)
-
考虑更多的信息,比如上下文。可以给全连接层一整个window的信息,来考虑上下文
如果考虑一个window不能解决,需要考虑整个sequence,window的长度不能无限大来盖住整个sequence?利用自注意力机制。 -
self_attention可以考虑一整个sequence
self-attention可以叠加。
-
根据a1找出sequence中跟a1的相关性,用α表示两个向量关联的程度
-
α的计算方法:
-
其中α1,2为attention score
注意,q1也会跟自己计算关联性(很重要)。 -
接下来,会做一个softmax,α得到一排α’
-
不一定用softmax,比较常见。
-
根据α,已经得出向量之间的关联性。
- 下一步,要根据α’提取出其中重要的信息
- 以上做的事情就是实现下图,从a得到b
- 然后,从矩阵乘法的角度理解
- 最后,输入是I,输出是O
需要学习的矩阵只有Wq、Wk、Wv
multi-head self-attention
- 下图为两个head的情况
- 但是,所有位置的距离都是一样的,self-attention中就缺少了相对位置的信息,所以需要位置编码。
- 给每个位置一个专属的vector ei,将其加到ai上面。
- self-attention vs CNN
CNN是一种简化的特殊的self-attention,receptive filed是人工决定的
self-attention中是学习得到的
transformer
- 输入一个sequence,输出一个sequence,输出的长度由模型决定。
- 硬解:QA、语法剖析、多标签分类
encoder
- 给一排向量,输出另一排向量
- residual connection(残差连接)
- layer normalization
二维中,列表示特征,行表示样本
layer normalization:行归一化,样本归一化
batch normalization:列归一化,特征归一化 - fully connection(全连接)、mlp(多层感知器)
decoder
- autoregressive decoder
-
先给decoder一个begin,经过一个softmax得到一个输出,之后将begin和上一个输出作为decoder的输入,以此循环。encoder也会给decoder一个输入。(所以有可能会一步错步步错)
-
encoder中的b1是根据a1跟其他所有ai的信息共同决定的。decoder中的mask,在产生b1的时候只能考虑a1的信息,产生b2的时候只能考虑a1和a2的信息,产生b3的时候只能考虑a1、a2、a3的信息。
-
为什么要masked?
decoder运行的时候是一个一个的输入和输出,结果是先输入a1,再输入a2,所以在求b2的时候还没有输入b3和b4的信息。 -
怎样决定decoder输出的长度?什么时候停止?
要有一个特殊的符号end来表示结束(也可以跟begin用一个)
- non-autoregressive(NAT)
- 怎么确定NAT的输入长度
①用一个分类器,读入encoder,输出decoder的长度
②输出长度上限,寻找end符号,后面的舍掉 - NAT的优点:NAT比AT速度更快,可以控制输出长度,但是效果差
cross attention
- 连接decoder和encoder
- k、v来自于encoder,q来自于decoder
training
- 希望每次训练得到的ground truth跟distribution越接近越好
- 每个输出都有cross entropy,希望cross entropy的总和越小越好。
- teacher forcing:在训练的时候,会给decoder输入正确答案。
- tips
- copy mechanism
① chat-bot
② summarization - guided attention
- beam search
- exposure bias
训练的时候decoder输入都是正确的,在测试的时候可能结果很离谱,所以在训练的时候就给decoder一些错误的输入,称为scheduled sampling。