大白话简要介绍Transformer注意力


Transformer 是一种神经网络结构,现在特别火,主要用来做文本生成、机器翻译之类的任务。但在 Transformer 之前,大家用的是 RNN 和 LSTM 这种模型来处理序列数据(比如一句话)。不过,这些模型有个问题:它们不太擅长处理长距离的依赖关系。因为它们是按顺序处理数据的,很难并行计算,也很难捕捉到序列中距离较远的部分之间的关系(上下文)。

Transformer解决了这个问题,它用了一种叫注意力机制(Attention Mechanism)的方法。这个机制可以让模型根据输入的不同部分的重要性来分配注意力,不管这些部分在序列中的位置有多远。


那么,注意力机制到底是什么?为什么需要它?

注意力机制其实就是一种计算加权和的方法。这里的“值”(Value)来自输入数据,而“权重”是由“查询”(Query)和“键”(Key)之间的相关性决定的。

怎么实现的呢?

在一句话里,每个词(或标记)都有一个 Query、Key 和 Value 向量。一个词的 Query 会和其他所有词的 Key 进行比较,看看应该给每个词多少注意力。然后,根据这些注意力权重,把 Value 向量加权求和。

这些 Query、Key 和 Value 向量是怎么生成的呢?

它们通常是通过输入嵌入(Input Embedding)的线性变换得到的。每个输入词会被嵌入成一个向量,然后分别乘以三个权重矩阵 W_q、W_k 和 W_v,得到 Query、Key 和 Value 向量。接着,通过计算 Query 和 Key 向量的点积,得到注意力分数。为了防止点积太大导致梯度消失,这些分数会被除以 Key 向量维度的平方根。

之后,用 Softmax 函数把这些分数转换成概率(权重),这些权重的总和是 1。最后,用这些权重对 Value 向量进行加权平均,得到每个位置的注意力输出。这个过程叫自注意力(Self-Attention),因为序列中的每个位置都会关注序列中的所有位置,包括自己。


多头注意力(Multi-Head Attention):

Transformer 不仅用一个注意力机制,它用了多头注意力。模型会把输入分成多个“头”,每个头分别计算自己的注意力。这样,模型可以从不同角度关注输入的不同部分。每个头的输出会被拼接起来,然后再进行一次线性变换,得到最终输出。

为什么要这么做?

可能是为了捕捉数据中不同类型的关系或依赖。这样,模型可以同时关注数据中的多种关系,让它变得更灵活、表达能力更强。


自注意力(Self-Attention):

在 Transformer 中,最常见的注意力是自注意力,也就是 Query、Key 和 Value 都来自同一个输入序列。这意味着序列中的每个词都可以关注到其他所有词,包括它自己。比如:

“The cat slept because it was tired”

自注意力会让 “it” 这个词重点关注 “cat”,从而理解它指代的是什么。

这种双向(或非单向)的注意力机制,让 Transformer 特别擅长捕捉上下文信息。不像 RNN,它只能往前或往后看。


Transformer 结构中的注意力:

Transformer 由编码器(Encoder)和解码器(Decoder)组成,每部分都有多层(比如 6 层或 12 层)。

注意力在这两部分中的作用不同:

  • - 编码器:用自注意力处理输入序列(比如一句英文)。每一层都会优化表示,然后传给下一层。
  • - 解码器:用掩码自注意力(Masked Self-Attention)处理输出序列(比如一句法文翻译)。“掩码”意味着它只能关注前面的词,防止训练时偷看未来的词。解码器还会用交叉注意力(Cross-Attention)连接编码器,让输出关注输入(比如把法文词和英文词对齐)。


直观理解:注意力就像聚光灯

最能让我理解注意力的一句话是:

把注意力想象成剧院里的聚光灯。  

  • - Query 是导演说:“把光打在主角身上!”  
  • - Key 是所有舞台上的演员。  
  • - Value 是他们的台词。  
  • - 聚光灯(注意力)会根据谁最相关来调整光束,随着剧情发展动态照亮场景。