大语言模型基础!全网最简自注意力机制!
上期聊了 DeepSeek 的投机解码,有粉丝接着问了个更基础的问题:self-attention 到底是怎么知道一个词跟哪个词相关的?公式先放一边,把「两个向量相乘」弄明白就够了。
每个词先被切成 token、转成向量,进入 self-attention 之后,每个向量都有自己的 Q、K、V(这三个值具体怎么算出来的,可以留到以后再讲)。要判断「吃」和「我」有多相关,就拿「吃」的 query 去乘「我」的 key;要判断「吃」和「喜欢」的关系,就拿「吃」的 q 去乘「喜欢」的 k。注意力就是靠这种向量相乘算出来的。
为什么两个向量相乘能表示相似度?点积的意义是:一个向量的长度,乘以另一个向量在它方向上的投影。方向基本一致、几乎没有夹角时,投影接近满值,长度乘得多,数字就快速变大;夹角是 90 度时投影为 0,乘出来也是 0,代表这两个向量没有任何关系;如果方向相反,结果就是负数,代表两个向量想表达的意思刚好是相反的。
回到「吃」这个例子:「吃」的 query 乘「我」的 k,如果两个向量方向基本一样,得到的数就比较大,说明它们比较相关;如果乘出来是 0 或者负数,就说明它们相反或者无关。「喜欢」也是同理,它的 k 乘上「吃」的 query,数字越大就越相关。
当然这是最简的描述,后面还需要做 softmax、做缩放,这些不用管。最后再各自加上对应的 V,就能得到「吃」这个向量在 self-attention 里的输出,再加上位置信息,整个流程就走完了。







