解锁Transformer核心!手把手带你看懂自注意力机制:三个输入一步步算到底

发布于 2025-4-15 00:01
浏览
0收藏

 很多课程都会通过公式来说明Transformer,但是没有给你算过数,也没让你明白一件更重要的事:

“自注意力给出来的输出,实际上表示了什么?”

            本文就想用一个质化、好懂、可实际运算的例子,带你真正看懂 Self-Attention 是怎么工作的,并解释它的输出真正意义!

1. 让我们再来回顾下什么是“注意力机制”?

你看一段文字时,总会下意识的想:我要看哪些词?哪些字是我目前理解这句话的关键?

注意力机制就是这样一种方法,它允许模型根据“当前信息”,自动地从全文里找到最关键的部分来作为参考,并给他们分配权重。

不是每个词均分重,而是“重要的看一眼,不重要的算个数”。

但是“自注意力”比较特殊:

每个输入,都在想“我该看谁?” 每个输出,都是它看完周围后,自己新生出的表示

2.自注意机制是怎么计算的?

    我们用 3 个 2D 向量(比如词嵌入)作为输入序列:

            x₁ = [1, 0]    # 可能是词“我”

            x₂ = [0, 1]    # 可能是词“爱”

            x₃ = [1, 1]     # 可能是词“你”

    把它组成矩阵

            X = [[1, 0],

                 [0, 1],

                 [1, 1]]

    我们手动设定 Q、K、V 的权重矩阵:

            W_Q = [[1, 0],

                   [1, 1]]

            W_K = [[1, 2],

                   [0, 1]]

            W_V = [[2, 0],

                   [0, 1]]

    接下来计算QKT:

            Q = X · W_Q

            K = X · W_K

            V = X · W_V

    比如计算Q

Q = 

[[1, 0],  => [1*1 + 0*1, 1*0 + 0*1] =  [1, 0]

[0, 1],       [0*1 + 1*1, 0*0 + 1*1]   = [1, 1]

[1, 1]]       [1*1 + 1*1, 1*0 + 1*1]    = [2, 1]

    由此可得K和V:

K = [[1, 2],    V = [[2, 0],

     [0, 1],           [0, 1],

     [1, 3]]           [2, 1]]

接下来计算计算 Attention Score(Q·Kᵀ)

计算 Q·Kᵀ(点积)再除以 √2(d=2):

我们用 Q₁ 和所有 K 做 dot product,Q₂ 和所有 K 做 dot product,依此类推:

解锁Transformer核心!手把手带你看懂自注意力机制:三个输入一步步算到底-AI.x社区

缩放除以 √2 ≈ 1.414:

S_scaled ≈ [[0.71, 0, 0.71],

            [2.12, 0.71, 2.83],

            [2.83, 0.71, 3.54]]

计算每一行的 softmax:

softmax([0.71, 0, 0.71]) = [0.401, 0.198, 0.401]

softmax([2.12, 0.71, 2.83]) ≈ [0.289, 0.075, 0.636]

softmax([2.83, 0.71, 3.54]) ≈ [0.288, 0.057, 0.655]

Attention Weight × V:

output₁ = 0.401*[2,0] + 0.198*[0,1] + 0.401*[2,1]

        = [0.802 + 0.802, 0 + 0.198 + 0.401] = [1.604, 0.599]

output₂ = 0.289*[2,0] + 0.075*[0,1] + 0.636*[2,1]

        = [0.578 + 1.272, 0.075 + 0.636] = [1.85, 0.711]

output₃ = 0.288*[2,0] + 0.057*[0,1] + 0.655*[2,1]

        = [0.576 + 1.31, 0.057 + 0.655] = [1.886, 0.712]

我们可以得到最后的输出:

Output =

[[1.604, 0.599],

 [1.85,  0.711],

 [1.886, 0.712]]

3. 输出到底表示啥?(热点论坛)

它已经不仅仅是原始的词向量了,而是:

1. 考虑了当前词的内容(通过 Query)

2. 也考虑了它和所有其他词的关系(通过与 Key 的点积)

3. 最后通过注意力权重,把相关的词信息从 Value 中“加权融合”了进来

比如:

第一个词“我”,原来是 [1, 0],输出是 [1.604, 0.599]

它在融合了“爱”“你”的信息后,变成了一个更富语义的表示

总结一句话:自注意力输出 = 原词向量 + 上下文理解 = 更聪明的表示!

这就是为什么 Transformer 模型可以强大到理解复杂语义、做翻译、对话、生成等任务。

本文转载自​​人工智能训练营​​,作者:人工智能训练营

收藏
回复
举报
回复
相关推荐