从cv的角度看transformers中的注意力——Attention is all you need读后感

论文地址
transfomer基本元素

  • 注意力(Scaled Dot-Product Attention)
  • 多头注意力(Multi-Head Attention)
  • 位置编码(Position Encoding)

注意力

Attention is all you need中最能解释注意力的话

An attention function can be described as mapping a query and a set of key-value pairs to an output, where the query, keys, values, and output are all vectors. The output is computed as a weighted sum of the values, where the weight assigned to each value is computed by a compatibility function of the
query with the corresponding key.

表述了几个意思

  • 注意力函数是 a query 和 a set of key-value pairs 到 an output的映射

    • key和value一一对应

    • 一个query需要和一组key-value对计算

  • ouput是values的加权和,每个value对应的权重是由value对应的key和query计算出来的

    • o = ∑ i w i ⋅ v i o = \sum_i w_i \cdot v_i o=iwivi (1)

    • w i = f ( q , k i ) w_i=f(q, k_i) wi=f(q,ki) (2)

怎么跟论文里的公式那么不像?

A t t e n t i o n ( Q , K , V ) = s o f t m a x ( Q K T d k ) ⋅ V Attention(Q, K, V) = softmax(\frac{QK^T}{\sqrt{d_k}})\cdot V Attention(Q,K,V)=softmax(dk QKT)V (3)

下边分别是QKV矩阵,假设Q中有100个query(q),每个q维度为256, 假设序列长度为850, 即V有850个value(v), 每个v的维度也是256, K中是和V中的v一一对应的850个key(k), k的维度是256。每个矩阵中的黑线分别代表q,k,v向量, q和矩阵 K T K^T KT做矩阵乘法得到 q K T qK^T qKT是一个1x850的向量,再套一个softmax其实就是上边公式(2) , s o f t m a x ( q K T d k ) softmax(\frac{qK^T}{\sqrt{d_k}}) softmax(dk qKT)中的元素就是公式(1)(2)中的 w i w_i wi, 对应850个v的权重。它再和V做矩阵乘法,按分块矩阵乘法的角度看,就是每个元素 w i wi wi和V的每个value做点积,就是公式(1)。 只看一个query, 论文里的attension公式是可以和(1)(2)对上的。矩阵乘法表述的时多个query的情况。
在这里插入图片描述

说这么多就是想帮助理解 ouput是values的加权和,每个value对应的权重是由value对应的key和query计算出来的 这句话。流程就像下面这样
在这里插入图片描述

多头注意力

Instead of performing a single attention function with d m o d e l d_{model} dmodel-dimensional keys, values and queries, we found it beneficial to linearly project the queries, keys and values h times with different learned linear projections to d k d_k dk, d k d_k dk and d v d_v dv
dimensions, respectively. On each of these projected versions of queries, keys and values we then perform the attention function in parallel, yielding d v d_v dv-dimensional output values. These are concatenated and once again projected, resulting in the final values.

表述了几个意思

  • qkv向量的维度不需要相等,只需要qk的维度相等即可

  • ouput向量的维度和v相等,output的序列长度和query的个数相等(这两点从矩阵乘法就可以看出)

  • 把q, k, v线性投影到 d k d_k dk d k d_k dk d v d_v dv, 投影h个版本,每个投影版本的qkv可以并行计算注意力,共有h个输出,(multi-heads多头的意思)

  • 最后需要把h个输出concat到一起再做线性投影

  • we found it beneficial …

  • Attension本身没有可学习的参数,那几个qkv的投影肯定是要加的。多个输入要融合到一起,为了多层stack, 再加一个投影把维度降下来也是必然。创新的地方是把qkv投影多个版本并行地计算注意力。它把qkv投影到h个不同的空间,分别计算注意力。

结构就是下面这样了
在这里插入图片描述

位置编码

在全序列上学习注意力,没有信息表达序列的间元素的位置关系,因此引入一种和位置相关的编码,用正弦余弦的好处是不管序列有多长值域都是有限的。

P E ( p o s , 2 i ) = s i n ( p o s / 1000 0 2 i / d m o d e l ) PE_{(pos, 2i)}=sin(pos/10000^{2i/d_{model}}) PE(pos,2i)=sin(pos/100002i/dmodel)

P E ( p o s , 2 i + 1 ) = c o s ( p o s / 1000 0 2 i / d m o d e l ) PE_{(pos, 2i+1)}=cos(pos/10000^{2i/d_{model}}) PE(pos,2i+1)=cos(pos/100002i/dmodel)

我感觉引入位置编码是重要的,而具体采用什么样的位置编码(绝对的相对的,固定的,可学习的)的影响要小一些。

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 1
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值