AI | Transformer-李宏毅
⚔️

AI | Transformer-李宏毅

AI custom autofill
李宏毅教授讲Transformer课程相关笔记,包括自注意力机制等
Tags
CS
Transformer
Network
Published
August 14, 2024

一 Self-attention

1.1 引入

1 Vector Set as Input

💡
向量(Vector)是一个数学和物理学中的概念,它可以表示为具有大小(magnitude)和方向(direction)的量。
如果输入是一排向量,且长度是可以改变的。需要自注意力机制。
有什么是这种情况:
  1. 一个句子
将每个单词进行one-hot编码或者Word Embedding后,每个单词就是一个向量,一个句子就是一排长度为1的向量。
notion image
  1. 声音信号
将一段声音信号,通过一个25ms长度、10ms步频的滑动窗口,将其转换为多个向量。
  1. Graph-图
比如一个社交网络,图上每个节点,可以看成一个向量。

2 Output

输出有三种可能情况,主要是输入的向量与输出label的对应关系。
  1. Each vector has a label. 一对一,每个向量输入都有一个对应的label输出。eg:词性分析
  1. The whole sequence has a label. 多对一,整个输入对应一个label输出。eg:情感分析、分子亲水性。
  1. Model decides the number of labels itself. (seq2seq) 由模型自己决定输出的label为多少。
 

2.1 Sequence Labeling(Each vector has a label)

这里主要对输入输出一一对应的情况进行分析。
 
notion image
每个输入的向量通过一个FC得到一个label输出。
但是这样没有前后关系可以参考,所以第一步想到的是开一个window,多输入一些前后的输入向量。
这样同样有一个问题,在input输入向量不定长时,window不能确定。且当window较大时,FC的参数也会很多。
所以这里引入自注意力机制。

1.2 Self-attention

notion image
通过self-attention层后,每个向量都携带了所有向量的部分信息。所以FC可以考虑整个seq的信息进行判断。
同时,self-attention可以使用多次,可以将Self-attention和FC交替使用。
所以self-attention的输入可以是input,也可以是hidden的output。
 

1. 原理

💡
α是两个向量之间的关联性
notion image
a. 如何计算α值?
dot-product。将两个输入向量分别乘一个矩阵,得出两个向量然后点积,得出两向量相关性。
notion image
 
 
b. 如何在self-attention中使用?
notion image
要计算向量a1与其他向量的关系时:
  1. 计算q1:使用a1乘矩阵Wq
  1. 计算k值:其他向量乘矩阵Wk,可以的一系列k值
  1. 计算α:dot-product(q,kn)可以得到a1与an之间的α值。
  1. a1也需要和自己计算相关性,即α1,1 = q1·k1 。可以见下图。
 
c. 通过soft-max
通过该步,将计算值进行一个缩放。
notion image
 
d. 根据向量相关性(α)抽取信息
notion image
第二三步已经知道向量a1与其他的向量的关联性。根据与每个向量的相关性,抽取信息。
向量a1乘以对应的Wv矩阵,求得对应的每个向量的V值。然后根据前面计算的相关性乘v值,每个向量的v值相加,即为b1。
 
总结:
  1. an乘不同的矩阵得出对应的qn、kn、vn
  1. dot-product(q1,kn)求得向量a1与每个向量的关联性,然后做soft-max
  1. vn*α1,n就是每个向量取相关性后的信息,相加即为对应的b1.
以上就是如何从a1-an的向量中,求出a1对应的输出b1.
 

2. 从矩阵乘法理解

notion image
每一个a1-a4都要乘以Wq得到q1-q4,因此可以把a1-a4拼接起来得到一个矩阵 I ,矩阵I乘以Wq得到Q,Q的四个列向量(column)就是q1-q4,Wq是学习参数;同理算出4个k1-k4和v1-v4。总结来说就是将输入的矩阵乘以三个不同的矩阵得到Q、K、V
notion image
这里α1,1是有k1和q1两个向量进行点乘,所以可以进行进一步的结合。然后对每个q进行相城,就可以得出一个α矩阵。对该矩阵的每个column进行softmax
notion image
b1 = v1v2v3v4 * A`的第一列。所以b1-n就是v*A`。
所以整体的流程用矩阵乘法表示如下:
notion image
整个模型需要学习的参数是Wq、Wk、Wv三个矩阵。

3 Multi-head Self-attention

自注意力机制本质是找q与其他k的相关性。但是这种相关性只有一个评判维度(因为只有一组矩阵)
而多投注意力机制则可以有多组qkv矩阵,可以表示不同评价体系下的相关性。
notion image
在多头注意力下,先以自注意力机制算出每个不同评价体系的bi,n(n为head数)。就是1的一类一起做,忽略2的一类,2的一类一起做,有多个head也是一样的操作。然后将多个head算出的b组成一个矩阵进行Wo相乘,得到最终结果。
notion image
notion image

1.3 Positional Encoding(位置编码)

目前self-attention是没有每个向量的位置顺序的,而且每个向量是并行做相同的操作,所以丢掉了位置信息。
 
notion image
为每一个位置设定一个唯一的vector (ei,上标i表示位置),称为pisitional vector,不同的位置有专属的ei,把ei加上ai就结束了。
目前这个e是人为设置的,且仍然待研究。可以提出其他的方案。

1.4 一些Self-attention的应用

  1. 声音模型用于缩减模型矩阵大小
  1. 图形模型,将图像转换为一个较大的向量set
  1. 图应用(Graph),在Graph中,向量关联性不用再计算,可以使用图上节点间相连信息来判断。
 

二 Transformer

2.1 Seq2seq

1. 什么是 Seq2seq

Sequence-to-Sequence(Seq2seq):
输入的长度和输出的长度无关联关系,由模型自己决定输出长度。如:语音翻译、语音辨识。
输入和输出中间从逻辑来说可能还有一些其他环节,但是在 seq2seq 中可以忽略中间环节,直接对端到端的数据进行训练。
 
很多 NLP 任务都可以理解为 QA模式,很适合 seq2seq 模式。
eg1: seq2seq模型做文法解析输
notion image
 
eg2:multi-label Classification
 

2. 基本结构(encoder & decoder)

notion image
seq2seq 主要包括一个 encoder 和一个 decoder 结构,如左上。
 
Encoder
notion image
encoder 主要功能是将一排向量输入进行,输出一排向量。
在 transformer 中encoder 结构如下:
notion image
tips:
  1. 每个 block 不是神经网络里的一层。其中包含很多层结构
  1. 在 transformer 中,通过 self-attention 后不是直接输出,而是需要经过一个 residua残差l 过程(输出结果+输入)