Attention 机制

作者: LCG22 | 来源:发表于2019-12-11 18:00 被阅读0次

Attention 机制

人类视觉系统会对被观察对象的不同地方,分配不同的注意力,而 Attention 机制正是基于这种现象,从中得到启发所研发的

Attention 机制实现了类似的功能。例如在机器翻译中,A 语言被翻译为 B 语言时,在被翻译为 B 语言中的某个单词时,对 A 语言中的不同单词是需要分配不同的注意力的。

Attention 机制可以通过下述公式来简单地描述。

y = \sum_{i}^n\alpha _{i}  x_{i} ,其中的 \alpha _{i}  就是权重,是个常量,常被叫做注意力得分;x_{i} 是个向量,表示第 i 个输出;y 也是个向量,表示加权后的第 i 个输出。

Attention 机制可以更加地抽象为 Q、K、V ,其中的 Q 和 K 用来计算 \alpha _{i} ,V 则是 x,且 Q 和 V 可以相同。

而 Q、K、V 又可以由输入 X (此时的 X 是批量输入的,故是个二维矩阵,相对应的计算得到的 Q、K、V 也是矩阵形式,跟上面提到的 Q、K、V  是不一样的,特别是在维度上)经过线性转换得到,如:

Q = X\cdot W_{q}

K = X\cdot W_{k}

V = X\cdot W_{v}

由 Q 和 K 计算得到 \alpha _{i}  的过程叫做分配注意力,而分配注意力的方法则有很多种,下面列出常用的几种:

①点积

S(Q, K_{i} ) = Q\cdot K_{i}

②cosine 相似性

S(Q, K_{i} ) = \frac{Q\cdot K_{i} }{||Q||||K_{i} ||}

③MLP 网络

S(Q, K_{i})  = MLP(Q, K_{i})

④加性模型

S(Q, K_{i} ) = V^T tanh(WK_{i} + UQ)

⑤缩放点积

S(Q, K_{i} ) = \frac{K_{i}^T\cdot Q}{\sqrt{d_{k}} } ,d 为 K 的维度

⑥双线性模型

S(Q, K_{i}) = K_{i}^TWQ,相比加性模型的好处是,双线性模型的 K_{i}  和 Q 的维度可以不同

而最终的 Attention 层的输出为:

A(Q, K, V) = \sum_{i}^nS(Q, K_{i})V _{i}

self-Attention 机制

self-Attention 机制指的是 Q、K、V 来自同一个分布

多头 self-Attention 机制

图 1

所谓的多头 self-Attention 就是指使用多个不同的 W_{q}、W_{k}、W_{v}  来获得多个不同的 Q、K、V ,再将计算得到的不同的结果 y 进行叠加。图示如下:

图 2

y = \sum_{i}^n\alpha _{i}  x _{i} 的注意力机制的代码实现

编程语言及版本:python3.6.4

Tensorflow 版本:1.13.1

# att: [hidden_size, 1]

att = tf.Variable(initial_value=tf.random_normal(shape=[hidden_sizes[-1], 1]), dtype=tf.float32,

                  name="attention")

# att_score: [batch_size, step_size, 1]

att_score = tf.tensordot(a=output, b=att, axes=1)

# att_score: [batch_size, step_size]

att_score = tf.squeeze(input=att_score)

# att_score: [batch_size, step_size]

att_score = tf.nn.softmax(logits=att_score)

# tmp_output: [batch_size, hidden_size, step_size]

tmp_output = tf.transpose(a=output, perm=[0, 2, 1])

# tmp_att_output: [batch_size, step_size, 1]

tmp_att_score = tf.reshape(tensor=att_score, shape=[batch_size, x_step_size, 1])

# att_score: [batch_size, hidden_size, 1]

att_output = tf.matmul(a=tmp_output, b=tmp_att_score)

# att_score: [batch_size, hidden_size]

att_output = tf.squeeze(input=att_output)

output = att_output

维度变化:

参见文章 Transformer 模型相关疑问以及解答

相关文章

  • Attention机制概念整理

    深度学习中的注意力机制(Attention Macheanism): Attention机制较为广泛的应用是为了解...

  • 理论汇总

    1 多任务学习 (1)多任务学习在推荐算法中的应用 2 attention机制 (1)Attention机制在深度...

  • attention机制

    当前的embedding向量cur_f1 和 历史的embedding向量his_f1 计算相似性; 对相似性权重...

  • Attention 机制

    Attention 机制 人类视觉系统会对被观察对象的不同地方,分配不同的注意力,而 Attention 机制正是...

  • Attention 机制

    记录一下自己所理解的 Attention 机制:首先先从 Encoder-Decoder 框架来宏观角度的看 At...

  • Attention机制

    用Attention机制的原因是考虑到RNN(或者LSTM,GRU等)的计算限制为是顺序的,也就是说RNN相关算法...

  • Attention机制

    历史 2014年google mind团队,在RNN模型上使用了attention机制来进行图像分类,然后取得了很...

  • Attention 机制

    An Attention Function can be described as mapping a query...

  • attention机制

    1. 增强型attention算法的理解 上图中的softmax(QT)为attention权重,具体过程为:  ...

  • attention机制

    虽然一直在改进ABCNN,但是对于attention总是看了又忘,忘了又看,今天总结一下(方便自己日后复习即可)。...

网友评论

    本文标题:Attention 机制

    本文链接:https://www.haomeiwen.com/subject/xevggctx.html