Transformer详解之:Encoder Attention的公式化理解

Transformer Encoder Attention

  • 回顾一下,在上一篇文章中我们说了 Encoder 端的 attention

  • 我们的结论是, q ⃗ , k ⃗ , v ⃗ \vec{q}, \vec{k}, \vec{v} q ,k ,v 三个向量是对当前的某个词向量 v i ⃗ \vec{v_i} vi 投影到另外一个空间,然后和其他的词向量(包括自己)计算相似度。通过 q ⃗ , k ⃗ \vec{q},\vec{k} q ,k 计算出的是标量值,代表某个词向量与当前词向量的近似度;这些标量值与当前词 v i ⃗ \vec{v_i} vi 分别相乘最后相加,得到的一个新的向量 o ⃗ \vec{o} o 这个向量就是编码了 v i v_i vi 和当前句子其他词(包括自己)的关系的编码向量。

  • 下面我尽可能简洁清晰地给大家一个场景来更好地理解这个过程。

  • 假设一句话中每个 token 用 x x x 表示,当前这句话包含 s s s 个 token, X X X 表示当前这句话; X = { x 1 , x 2 , . . . x i , . . . x s } X=\{x_1,x_2,...x_i,...x_{s}\} X={x1,x2,...xi,...xs},每个 token 的维度是 m m m

  • q ⃗ , k ⃗ , v ⃗ \vec{q},\vec{k},\vec{v} q ,k ,v 是通过线性层(linear)获得的 5 5 5 维向量(将 m m m 维信息在 5 5 5 维空间中进行投影,至于为什么这么投影,请参考上一篇文章 )

  • q ⃗ , k ⃗ , v ⃗ ∈ R 5 \vec{q}, \vec{k}, \vec{v} \in \mathbb{R}^{5} q ,k ,v R5;对于一个 token x i x_i xi 他的 q i q_i qi 首先与所有的 k 1 ⃗ , . . . k s ⃗ \vec{k_1},...\vec{k_{s}} k1 ,...ks 进行点积,即:
    q i K T = q i [ k 1 ⃗ k 2 ⃗ . . . k ⃗ s ] T = q i ⃗ [ k 1 ⃗ k 2 ⃗ . . . k s ⃗ ] = w i ⃗ ∈ R 1 × s (1) q_i K^T= q_i\begin{bmatrix} \vec{k_1} \\ \vec{k_2} \\ ...\\ \vec{k}_{{s}} \end{bmatrix}^T \tag{1}=\vec{q_i} \begin{bmatrix} \vec{k_1} & \vec{k_2} & ... & \vec{k_{s}} \end{bmatrix}=\vec{w_i} \in \mathbb{ R^{1 \times s}} qiKT=qi k1 k2 ...k s T=qi [k1 k2 ...ks ]=wi R1×s(1)

  • 如果一句话中的所有 token 都重复这个过程,也就是把 s s s 个词就可以表示成一个矩阵 Q Q Q,矩阵 Q Q Q 中的每一行都是一个 q i q_i qi 完成相同的操作:
    Q = [ q 1 ⃗ q 2 ⃗ . . . q ⃗ s ] Q=\begin{bmatrix} \vec{q_1} \\ \vec{q_2} \\ ...\\ \vec{q}_{{s}} \end{bmatrix} Q= q1 q2 ...q s
    Q K T = Q [ k 1 ⃗ k 2 ⃗ . . . k ⃗ s ] T = [ q 1 ⃗ q 2 ⃗ . . . q ⃗ s ] [ k 1 ⃗ k 2 ⃗ . . . k s ⃗ ] = W = [ w 1 ⃗ w 2 ⃗ . . . w ⃗ s ] ∈ R s × s (2) Q K^T= Q\begin{bmatrix} \vec{k_1} \\ \vec{k_2} \\ ...\\ \vec{k}_{{s}} \end{bmatrix}^T \tag{2}=\begin{bmatrix} \vec{q_1} \\ \vec{q_2} \\ ...\\ \vec{q}_{{s}} \end{bmatrix} \begin{bmatrix} \vec{k_1} & \vec{k_2} & ... & \vec{k_{s}} \end{bmatrix}=W = \begin{bmatrix} \vec{w_1} \\ \vec{w_2} \\ ...\\ \vec{w}_{{s}} \end{bmatrix} \in \mathbb{ R^{s \times s}} QKT=Q k1 k2 ...k s T= q1 q2 ...q s [k1 k2 ...ks ]=W= w1 w2 ...w s Rs×s(2)

  • 其中 W W W 中的每一行的 w i w_i wi 代表的都是第 i i i 个词和其他所有 token 的权重向量(即,组成 w i ⃗ \vec{w_i} wi 向量中的每个维度上的标量值 w i ⃗ = [ w i 1 , w i 2 , . . . w i 5 ] \vec{w_i}=[w_{i1}, w_{i2}, ... w_{i5}] wi =[wi1,wi2,...wi5] 都代表当前的 token 到其他某个 token 的权重值。)

  • 如果我们看其中的一个权重向量 w i ⃗ \vec{w_i} wi 当他与所有的 v 1 ⃗ , . . . v s ⃗ \vec{v_1},...\vec{v_{s}} v1 ,...vs 进行相乘时,我们想让 w i ⃗ ∈ R s \vec{w_i} \in \mathbb{R^{s}} wi Rs 中每个维度的标量值对应地乘到每个 v i v_{i} vi 向量上 (强调:是 w i ⃗ \vec{w_i} wi 中的每个标量值与对应的一整个 v i ⃗ \vec{v_i} vi 相乘,而不是 v i ⃗ \vec{v_i} vi 中的某个标量,只有这样才能体现这个权重对 v i ⃗ \vec{v_i} vi 整体的影响。)
    w i ⃗ V = w i ⃗ [ v 1 ⃗ v 2 ⃗ . . . v ⃗ s ] ∈ R ( 1 × s ) × ( s × 5 ) → 1 × 5 (3) \vec{w_i} V= \vec{w_i} \begin{bmatrix} \vec{v_1} \\ \vec{v_2} \\ ...\\ \vec{v}_{{s}} \end{bmatrix}\tag{3}\in \mathbb{R^{(1\times s) \times (s \times 5) \rightarrow 1\times 5}} wi V=wi v1 v2 ...v s R(1×s)×(s×5)1×5(3)

  • 这样就实现了给每一个token v i ⃗ \vec{v_i} vi 一个权重值,并将他们加权求和,最终构成的向量 o i ⃗ \vec{o_i} oi 还是一个 R 5 \mathbb{R^{5}} R5

  • 截止目前我们终于将一个 q i ⃗ \vec{q_i} qi 和其他所有 token 的权重关系表示在了这个 5 5 5 维的向量空间中。

  • 因此当这个过程从一个 w i ⃗ \vec{w_i} wi 向量扩展到 W ∈ R s × 5 W \in \mathbb{R^{s \times 5}} WRs×5 矩阵也就可以得到:
    W V = Q K T V = W [ v 1 ⃗ v 2 ⃗ . . . v ⃗ s ] ∈ R ( s × s ) × ( s × 5 ) → s × 5 (3) W V =QK^TV=W \begin{bmatrix} \vec{v_1} \\ \vec{v_2} \\ ...\\ \vec{v}_{{s}} \end{bmatrix}\tag{3}\in \mathbb{R^{(s\times s) \times (s \times 5) \rightarrow s\times 5}} WV=QKTV=W v1 v2 ...v s R(s×s)×(s×5)s×5(3)

  • 这个最中结果的矩阵可以表示为 O O O O O O 的每一行都是一个 q i q_i qi 与其他的 q k ( k ≠ i ) q_k (k\neq i) qk(k=i) 的关系的向量。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

暖仔会飞

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值