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的情况。
transformers中的注意力——Attention is all you need读后感_第1张图片

说这么多就是想帮助理解 ouput是values的加权和,每个value对应的权重是由value对应的key和query计算出来的 这句话。流程就像下面这样
transformers中的注意力——Attention is all you need读后感_第2张图片

多头注意力

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个不同的空间,分别计算注意力。

结构就是下面这样了
transformers中的注意力——Attention is all you need读后感_第3张图片

位置编码

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

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)

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

你可能感兴趣的:(论文阅读,cv,计算机视觉,深度学习)