注意力机制理解
今天学习注意力的时候还是比较蒙,所以先把能想到的地方写出来方便理解
注意力机制的简单理解
注意力机制:就是一种方法,能够让模型在处理大量信息时,能集中注意力在最重要的部分,而不是平均对待所有信息。
翻译成人话:考试前划重点。
举例:
你在上课时,老师肯定讲了很多内容,但聪明的你发现有些内容特别重要,很像考试重点,所以在将这部分时,你偷偷的注意听并记了下来。
你挑出的这部分内容的过程,其实就是赋予了“注意力权重”来进行重点处理。
相关概念
相关性:计算每个词和其他词的关系
注意力分数:为每个词分配一个权重
注意力机制的关键向量
对于每个词,模型会生成三个向量
向量名称 | 英文缩写 | 作用 |
---|---|---|
查询向量 | Query(Q) | 表示“我在找什么信息” |
键向量 | Key(K) | 表示“我提供什么信息” |
值向量 | Value(V) | 表示“我真正包含的信息” |
每个词都有自己的Q、K、V
注意力分数计算公式
我们要计算某个词(Query)对所有其他词(Key)的关注程度。核心公式是:
第一步:计算相似度(打分)
这是 Query 向量和 Key 向量的点积,表示第 i 个词对第 j 个词的关注程度。
为什么要表示表示第 i 个词对第 j 个词的关注程度?
因为在自然语言中,一个词的意义往往依赖于它上下文中其他的词。注意力机制通过计算第i个词对第j个词的关注程度,让模型能够动态的“理解“这个词在上下文中的真实含义。
例如:小明下课要去找小红,因为书还在她手里。
我们不能单独理解这句话里的"她",因为没有其他信息的情况下我们不知道"她"是谁。
所以,我们需要关注前面这个“小红”,让模型通过用"她"这个词更加关注小红“”这个词的信息,从而猜测出“她”指代的是“小红”。
第二步:缩放(防止数值过大)
其中 𝑑𝑘是 Key **向量的维度。**这样做可以避免在 softmax 前出现过大的值,使训练更稳定。
第三步:归一化(softmax)
这一步把所有词的注意力分数转换成概率(加起来为 1),这就是注意力权重。
softmax是做什么的?
就是把一组原始的分数(随便任意实数)转换成一个概率分布,要求值的总和为1,类似于概率。
例如:有三个注意力分数:[2.0,1.0,0.1]
1->对每个值取指数(e的幂):
2->求总和:
3->除以总和(归一化):
可以理解为:
第一个词被关注了66%;
第二个词被关注了24%;
第三个次被关注了10%。
第四步:加权求和 Value 向量
最终输出是对所有 Value 向量的加权求和。权重越大,说明该词对当前词越重要。
一句话:注意力机制 = 对所有词的 Value 进行加权平均,权重由 Query 和 Key 的相似度决定。
其他理解
一.valid_lens:表示每个序列中“有效词”的数量。也就是哪些词是真正有意义的,哪些是填充(padding)进来没用的词。
训练模型时,我们经常用统一长度的句子训练,因为长短不一的情况作为矩阵处理不了,所以会将短的句子用<“pad”>补齐,但我们并不希望在计算注意力时取关注这些**<“pad”>**。
例如:两个句子
1:[“北“,“京”,“欢”,“迎”,“您”]
2:[“天气”,“真”,“好”,<"pad”>,<“pad”>]
统一为5个词长度后,第二个句子用两个pad补齐。
那么此时valid_lens就是:[5,3],也就是每个句子里有效词的数量。