2021李宏毅机器学习之Self-attention(矩阵角度)

本文从矩阵运算的角度解析Self-Attention机制的工作原理。详细介绍了输入向量序列如何通过矩阵乘法转换为Query、Key和Value,进而计算注意力权重,并最终生成Self-Attention层的输出。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

从矩阵的角度讲解Self-Attention的过程

下来我们从矩阵乘法的角度,再重新讲一次我们刚才讲的,Self-attention 是怎麼运作的。我们现在已经知道每一个 a 都产生 q k v。如果要用矩阵运算表示这个操作的话,是什么样子呢在这里插入图片描述
我们每一个 a,都乘上一个矩阵,我们这边用 Wq 来表示它,得到 qi,每一个 a 都要乘上 Wq,得到qi,这些不同的 a 你可以把它合起来,当作一个矩阵来看待
在这里插入图片描述
 一样a2a3a4也都乘上Wq得到q2q3跟q4 ,那你可以把 a1 到 a4 拼起来,看作是一个矩阵,这个矩阵我们用 I 来表示,这个矩阵的四个 column 就是a1到a4,I乘上Wq 就得到另外一个矩阵,我们用 Q来表示它,这个Q 就是把q1到q4这四个 vector 拼起来,就是Q的四个 column.
 所以我们从 a1a^1a1a4a^4a4,得到 q1q^1q1q4q^4q4这个操作,其实就是把 I 这个矩阵,乘上另外一个矩阵 WqW^qWq,得到矩阵QQQIII 这个矩阵它裡面的 column就是我们 Self-attention 的 input是 a1a^1a1a4a^4a4WqW^qWq其实是 network 的参数,它是等一下会被learn出来的QQQ 的四个 column,就是 q1q^1q1q4q^4q4
 接下来產生 k 跟 v 的操作跟 q 是一模一样的
在这里插入图片描述
 所以每一个 a 得到 q k v ,其实就是把输入的这个,vector sequence 乘上三个不同的矩阵,你就得到了 q,得到了 k,跟得到了 v
 下一步是,每一个 q 都会去跟每一个 k,去计算这个 inner product,去得到这个 attention 的分数,那得到 attention 分数这一件事情,如果从矩阵操作的角度来看,它在做什麼样的事情呢?
在这里插入图片描述
 你就是把 q1q^1q1k1k^1k1 做 inner product,得到 α1,1α_{1,1}α1,1,所以 α1,1α_{1,1}α1,1就是 q1q^1q1k1k^1k1 的 inner product,那这边我就把这个,k1k^1k1它背后的这个向量,把它画成比较宽一点代表说它是 transpose.
 同理 α1,2α_{1,2}α1,2 就是 q1q^1q1k2k^2k2,做 inner product, α1,3α_{1,3}α1,3 就是 q1q^1q1k3k^3k3 做 inner product,这个 α1,4α_{1,4}α1,4 就是 q1q^1q1k4k^4k4 做 inner product,那这个四个步骤的操作,你其实可以把它拼起来,看作是矩阵跟向量相乘
在这里插入图片描述
 这四个动作,你可以看作是我们把 k1k^1k1k4k^4k4 拼起来,当作是一个矩阵的四个 row,那我们刚才讲过说,我们不只是 q1q^1q1,要对k1k^1k1k4k^4k4 计算 attention,q2,q3,q4q^2,q^3,q^4q2,q3,q4也要对 k1k^1k1k4k^4k4 计算 attention,操作其实都是一模一样的

在这里插入图片描述
 所以这些 attention 的分数可以看作是两个矩阵的相乘,一个矩阵它的 row,就是 k1k^1k1k4k^4k4,另外一个矩阵它的 column。我们会在 attention 的分数,做一下 normalization,比如说你会做 softmax,你会对这边的每一个 column,每一个 column 做 softmax,让每一个 column 裡面的值相加是 1。
 之前有讲过说 其实这边做 softmax不是唯一的选项,你完全可以选择其他的操作,比如说 ReLU 之类的,那其实得到的结果也不会比较差,通过了 softmax 以后,它得到的值有点不一样了,所以我们用 A′A'A,来表示通过 softmax 以后的结果
 我们已经计算出 A′A'A那我们把这个v1v^1v1v4v^4v4乘上这边的 α 以后,就可以得到 b
在这里插入图片描述
 你就把v1v^1v1v4v^4v4 拼起来,你v1v^1v1v4v^4v4当成是V 这个矩阵的四个 column,把它拼起来,然后接下来你把 v 乘上,A′A'A 的第一个 column 以后,你得到的结果就是 b1b^1b1
 如果你熟悉线性代数的话,你知道说把这个 A′A'A 乘上 V,就是把 A′A'A的第一个 column,乘上 V 这一个矩阵,你会得到你 output 矩阵的第一个 column。而把 A 的第一个 column乘上 V 这个矩阵做的事情,其实就是把 V 这个矩阵裡面的每一个 column,根据第 A′A'A 这个矩阵裡面的每一个 column 裡面每一个 element,做 weighted sum,那就得到 b1b^1b1
 那就是这边的操作,把 v1v^1v1v4v^4v4 乘上 weight,全部加起来得到 b1b^1b1,
 如果你是用矩阵操作的角度来看它,就是把$ A’$ 的第一个 column 乘上 V,就得到 b1b^1b1,然后接下来就是以此类推
在这里插入图片描述
 就是以此类推,把 A′A'A 的第二个 column 乘上 V,就得到 b2b^2b2,A′A'A 的第三个 column 乘上 V 就得到 b3b^3b3,A′A'A 的最后一个 column 乘上 V,就得到 b4b^4b4。所以我们等於就是把 A′A'A 这个矩阵,乘上 V 这个矩阵,得到 O 这个矩阵,O 这个矩阵裡面的每一个 column,就是 Self-attention 的输出,也就是 b1b^1b1b4b^4b4

矩阵角度小结

 所以其实整个 Self-attention,我们在讲操作的时候,我们在最开始的时候 跟你讲的时候我们讲说,我们先產生了 q k v,然后再根据这个 q 去找出相关的位置,然后再对 v 做 weighted sum,其实这一串操作,就是一连串矩阵的乘法而已
 我们再复习一下我们刚才看到的矩阵乘法
在这里插入图片描述

  • I 是 Self-attention 的 input,Self-attention 的 input 是一排的vector,这排 vector 拼起来当作矩阵的 column,就是 I

  • 这个 input 分别乘上三个矩阵,WqW^qWq WkW^kWk 跟$ W^v$,得到 Q K V

  • 这三个矩阵,接下来 Q 乘上 K 的 transpose,得到 A 这个矩阵,A 的矩阵你可能会做一些处理,得到 A′A'A,那有时候我们会把这个 A′A'A,叫做 Attention Matrix生成Q矩阵就是为了得到Attention的score

  • 然后接下来你把 A′A'A 再乘上 V,就得到 O,O 就是 Self-attention 这个 layer 的输出,生成V是为了计算最后的b,也就是矩阵O

 所以 Self-attention 输入是 I,输出是 O,那你会发现说虽然是叫 attention,但是其实 Self-attention layer 裡面,唯一需要学的参数,就只有 WqW^qWq WkW^kWk 跟$ W^v$ 而已,只有WqW^qWq WkW^kWk 跟$ W^v$是未知的,是需要透过我们的训练资料把它找出来的。
 但是其他的操作都没有未知的参数,都是我们人為设定好的,都不需要透过 training data 找出来,那这整个就是 Self-attention 的操作,从 I 到 O 就是做了 Self-attention

以上内容都是参考自:https://github.com/unclestrong/DeepLearning_LHY21_Notes

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值