self-attention学习笔记
记录摸鱼时候的学习笔记–self-attention篇
笔记来源于2021李宏毅机器学习视频中self-attention & transformer课程。
self-attention笔记目录
(1)基础知识
两种词编码方式:One-hot(0/1 稀疏)、word embedding(具有相关性)
可以作为向量输入:声音信号(使用滑动窗口)、图(比如social network、分子)
输出:一个向量输出一个类别(例如词性—每个单词对应一个词性)、一个序列(多个向量组成)输出一个类别(例如情感分析)、模型决定输出类别数量–seq2seq
(2)一个向量输出一个类别–sequence labeling(self-attention的引子)
:
Model – FC层。情形1,每个word用fc预测类别且每个word的预测相互独立,问题:相同的单词用不同的fc层,不合理。情形2,相邻的word和FC层相互连接 with a window,问题:无法反应整个序列,如果window把整个sequence盖住–>运算量太大。
(3)self-attention
用矩阵求self-attention。
step1:计算Q、K、V。
由输入a得到Q、K、V,如下图所示。将输入的vector–a1-a4拼成一个矩阵I,分别乘上上三个矩阵Wq、Wk、Wv得到Q、K、V。注:只有Wq、Wk、Wv为可学习参数。
step2:计算attention分数。
每个q和每个k计算点乘得到attention分数,如下图所示。拆分做法,例如将k1的转置和q1做点乘得到α1,1,同理可得到α1,2、α1,3、α1,4,而后,将k1-k4组成一个矩阵和q1做点乘,可得到α1,1、α1,2、α1,3、α1,4组成的矩阵,同理点乘q2、q3、q4可得到一个大的α矩阵–A。矩阵做法,K的转置点乘Q,得到A。最后softmax/relu,可得到A’。
step3:计算输出O。
求O。V点乘A’,如下图所示。
(4)multi-head self-attention
视频以2个head为例子,如下图所示。和self-attention做类别,相当于t个head就多了t组可学习的参数W,也相当于做了t次self-attention。
(5)位置编码(positional encoding)
每个位置a对应有个专门的位置向量ei,如下图所示。