目录:
自注意力机制Self-attention(1)
自注意力机制Self-attention(2)
本文是对李宏毅老师的课程进行了整理。
视频地址为:
https://www.bilibili.com/video/BV1Wv411h7kN?p=23
1 问题引入
问:为什么要引入自注意力机制?
答:输入一个向量,经过Model预测后得到一个分类结果/数值型结果;当输入一组向量,经过Model预测后有三种可能的输出,第一种输出是一个分类结果/数值型结果,第二种输出是每个向量输出一个分类结果/数值型结果(有多少个输入向量,就有多少个分类结果),第三种输出是多种分类结果/数值型结果(输入向量个数和输出分类结果个数不相同),例如句子"I saw a saw (我看到了一个锯子)"中判断"saw"的词性,第一个是动词,第二个是名词,如果没有上下文,很难判断"saw"的词性。
问:哪些应用场景会有一组向量的输入呢?
答:
(1)一段文字:
(2)一段语音:
(3)social network:
(4) 药物发现:
2 方法介绍
问:如何利用输入的一组向量a1a^1a1,a2a^2a2,a3a^3a3,a4a^4a4,得到输出b1b^1b1,b2b^2b2,b3b^3b3,b4b^4b4?
答:首先通过目标向量a1a^1a1,找到关联的a2a^2a2,a3a^3a3,a4a^4a4;然后只要知道怎么计算出b1b^1b1,就同理知道b2b^2b2,b3b^3b3,b4b^4b4计算了。
问:如何得到注意力分数?
答:这个模块是自注意力机制的核心模块。
上图介绍了两种方法来计算注意力分数。
左边方法为:用一个矩阵WqW^qWq乘上左边的向量得到一个向量qqq,再用另外一个矩阵WkW^kWk乘上左右边的向量得到向量kkk;注意力分数α=q⋅k\alpha = q \cdot kα=q⋅k。
右边方法为:用一个矩阵WqW^qWq乘上左边的向量得到一个向量qqq,再用另外一个矩阵WkW^kWk乘上左右边的向量得到向量kkk;注意力分数α=Wtanh(q+k)\alpha = W \tanh (q + k)α=Wtanh(q+k)。
李老师在本次课程采用的是左边的方法。
query: q1=Wqa1q^1 = W^q a^1q1=Wqa1(备注:transform)
key:k2=Wka2k^2 = W^k a^2k2=Wka2(备注:transform)
attention score:α1,2=q1⋅k2\alpha_{1,2} = q^1 \cdot k^2α1,2=q1⋅k2
Soft-max:α1,i′=exp(α1,i)∑jexp(α1,j)\alpha_{1,i}^{'} = \frac{\exp(\alpha_{1,i})}{\sum_j \exp(\alpha_{1,j})}α1,i′=∑jexp(α1,j)exp(α1,i)