Attention机制,是根据目标给输入分配权重,并加权求和的操作。
标准的输入为三部分,即Query, Key, Value。(下面简写为Q,K,V)
标准的操作是根据Query和Key计算出一个score,并使用该score作为权重,对Value进行加权求和。
即 step1, score = F(Q, K)
step2, attention_weight = softmax(score)
step3, output = sum(attention_weight * V)

  • F是计算权重分数所使用的函数,根据不同的F会实现不同的Attention。比如tf2里的attention layer就是Dot-product attention。
  • 也可以使用Value作为Key,这样输入只需要Query和Value两部分。
  • 当Query,Key,Value全部来自同一个输入时,即为Self-Attention。
  • 当使用多个不同的F进行attention时,即为Multi-head attention。

下面以tf代码给出简单例子:

import tensorflow as tf
import numpy as np

# input as shape (batch_size, seq_len, embedding_size)
batch_size =10
seq_len = 20
embedding_size = 30
data =  tf.constant(np.random.rand(batch_size, seq_len, embedding_size), dtype=tf.float32)

attlayer = tf.keras.layers.Attention()

out = attlayer([data, data])

print(out.shape)
# (10, 20, 30)

Reference:
[1] https://www.tensorflow.org/api_docs/python/tf/keras/layers/Attention

本文地址:https://blog.csdn.net/weixin_43378751/article/details/107156565