以简单的例子结合数学计算秒懂transformer框架

一个完整的Transformer模型,包括编码器(Encoder)和解码器(Decoder),我将结合自身理解为每个部分提供一个通俗易懂的例子,并结合计算过程来演示其工作原理。在这个示例中,我将使用一个简单的序列到序列任务——英语到法语的翻译,来说明Transformer的每个部分。

假设我们有一个英语到法语的翻译任务。我们希望将英语句子翻译成对应的法语句子。例如,输入的英语句子是:“I love AI.”,我们希望模型输出的法语句子是:“J’aime l’IA.”。

逐步解释Transformer的每个部分:

1、输入编码(Input Encoding):
首先,我们将英语句子中的每个单词转换为词嵌入向量(Word Embedding Vector)。这些向量将作为输入序列的编码。假设我们有一个词嵌入表,其中“I”表示为 [0.2, 0.3, 0.5],“love”表示为 [0.6, 0.1, 0.9],而“AI”表示为 [0.8, 0.2, 0.7]。

2、自注意力计算(Self-Attention Computation):
自注意力机制允许模型在输入序列内部捕捉上下文相关性。它通过对输入序列中的每个位置与其他位置之间的相对重要性进行计算,来获取注意力权重。 假设我们在第一个编码器层中使用了自注意力机制。我们的查询(Query)和键(Key)向量都来自于同一个输入序列(编码后的英语句子)。
模型计算自注意力的过程如下:
假设第一个编码器层的输入是:[ [0.2, 0.3, 0.5], [0.6, 0.1, 0.9], [0.8, 0.2, 0.7] ]
首先,计算查询(Query)、键(Key)和值(Value):

查询(Query)向量:[0.2, 0.3, 0.5]
键(Key)向量:[0.2, 0.3, 0.5], [0.6, 0.1, 0.9], [0.8, 0.2, 0.7]
值(Value)向量:[0.2, 0.3, 0.5], [0.6, 0.1, 0.9], [0.8, 0.2, 0.7]

接下来,计算注意力权重(Attention Weights):

第一个查询向量与每个键向量的点积,然后通过softmax函数得到注意力权重:

注意力权重 = softmax([0.2 * 0.2, 0.2 * 0.6, 0.2 * 0.8])
注意力权重 = softmax([0.04, 0.12, 0.16])
注意力权重 = [0.266, 0.398, 0.336]

最后,根据注意力权重对值向量进行加权求和,得到注意力输出(Attention Output):

注意力输出 = [0.266 * [0.2, 0.3, 0.5] 
+ 0.398 * [0.6, 0.1, 0.9] 
+ + 0.336 * [0.8, 0.2, 0.7]]
= [0.5832, 0.1894, 0.6838]

这样,我们通过自注意力计算得到了输入序列的注意力输出。

3、编码器层(Encoder Layers):

在编码器中,我们将多个编码器层堆叠在一起,每个编码器层包括自注意力计算和前馈神经网络(Feed-Forward Neural Network)。这样,编码器逐渐理解输入序列的语义和结构,并在不同层之间进行信息传递。

3.1 编码器层(Encoder Layer)计算过程:

  • 假设我们已经通过输入编码(Input Encoding)获得了注意力输出(Attention Output)作为编码器的输入。
  • 编码器层包含自注意力计算和前馈神经网络(Feed-Forward Neural Network)。

a. 自注意力计算:

  • 输入:注意力输出(Attention Output)[0.5832, 0.1894, 0.6838]
  • 计算注意力权重和输出:
查询(Query)向量:[0.5832, 0.1894, 0.6838]
键(Key)向量:[0.5832, 0.1894, 0.6838]
值(Value)向量:[0.5832, 0.1894, 0.6838]

注意力权重 = softmax([0.5832 * 0.5832, 0.5832 * 0.1894, 0.5832 * 0.6838])
注意力权重 = softmax([0.3398, 0.1104, 0.5498])
注意力权重 = [0.3688, 0.2106, 0.4206]

注意力输出 = [0.3688 * [0.5832, 0.1894, 0.6838] + 0.2106 * [0.5832, 0.1894, 0.6838] + 0.4206 * [0.5832, 0.1894, 0.6838]]
          = [0.5832, 0.1894, 0.6838]
注意力输出保持不变,
因为自注意力层会捕捉输入序列内部的上下文相关性。

b. 前馈神经网络:

  • 输入:注意力输出(Attention Output)[0.5832, 0.1894, 0.6838]
  • 前馈神经网络计算:
全连接层输出 = [0.5832 * w1 + b1]

假设权重 w1 为 0.5,偏置 b1 为 0.2,那么:

全连接层输出 = [0.5832 * 0.5 + 0.2] = [0.4916]

经过ReLU激活函数:

激活函数输出 = ReLU([0.4916]) = [0.4916]

前馈神经网络的输出为:[0.4916]

前馈神经网络将自注意力层的输出映射到新的表示空间。

4、解码器层(Decoder Layers):

在解码器中,我们也将多个解码器层堆叠在一起,每个解码器层包括自注意力计算、编码器-解码器注意力计算和前馈神经网络。
解码器通过自注意力机制捕捉到目标语言序列内部的上下文相关性,并通过编码器-解码器注意力机制与编码器输出进行交互。
一个完整的transformer模型包含两个编码器层和两个解码器层。为了方便理解,只展示其中一个编码器层和一个解码器层的计算过程,以便更好地理解。

解码器层(Decoder Layer)计算过程:

  • 假设我们已经通过自注意力计算和编码器-解码器注意力计算获得了注意力输出(Attention Output)作为解码器的输入。
  • 解码器层包含自注意力计算、编码器-解码器注意力计算和前馈神经网络。

a. 自注意力计算:

  • 输入:注意力输出(Attention Output)[0.4916]
  • 自注意力计算与编码器层类似,注意力权重和输出保持不变。

b. 编码器-解码器注意力计算:

  • 输入:注意力输出(Attention Output)[0.4916]
  • 编码器输出:[0.5832, 0.1894, 0.6838](来自编码器的最后一层输出)
  • 编码器-解码器注意力计算:
查询(Query)向量:[0.4916]
键(Key)向量:[0.5832, 0.1894, 0.6838]
值(Value)向量:[0.5832, 0.1894, 0.6838]

注意力权重 = softmax([0.4916 * 0.5832, 0.4916 * 0.1894, 0.4916 * 0.6838])
注意力权重 = softmax([0.2863, 0.0932, 0.3496])
注意力权重 = [0.4141, 0.1925, 0.3934]

注意力输出 = [0.4141 * [0.5832, 0.1894, 0.6838] + 0.1925 * [0.5832, 0.1894, 0.6838] + 0.3934 * [0.5832, 0.1894, 0.6838]]
          = [0.5832, 0.1894, 0.6838]
编码器-解码器注意力输出与查询向量相似,
表明解码器对编码器输出的某些部分进行了关注。

c. 前馈神经网络:

  • 输入:注意力输出(Attention Output)[0.5832, 0.1894, 0.6838]
  • 前馈神经网络计算与编码器层类似,前馈神经网络的计算和激活函数的应用如下:
全连接层输出 = [0.5832 * w2 + b2]

假设权重 w2 为 0.7,偏置 b2 为 0.3,那么:

全连接层输出 = [0.5832 * 0.7 + 0.3] = [0.66124]

经过ReLU激活函数:

激活函数输出 = ReLU([0.66124]) = [0.66124]

前馈神经网络的输出为:[0.66124]

前馈神经网络将编码器-解码器注意力层的输出映射到新的表示空间。

编码器层和解码器层是Transformer模型的核心组件。编码器层通过多个编码器层堆叠,在输入序列内部捕捉上下文相关性。解码器层也通过多个解码器层堆叠,结合自注意力计算和编码器-解码器注意力计算,逐步理解输入序列和目标序列的语义和结构,并生成最终的翻译结果。前馈神经网络在每个层中负责将注意力层的输出映射到新的表示空间。通过多层堆叠和层间的交互,Transformer模型能够有效地进行序列到序列的任务,如机器翻译。上述例子是一个简化版本,实际的Transformer模型中可能有更多的编码器层和解码器层,并且可能使用更大的词汇表和更高维度的词嵌入向量。

5、输出生成(Output Generation):
在解码器的最后一层,我们使用输出层将模型内部表示转换为最终的目标语言词汇。在序列到序列任务中,解码器的输出是一个概率分布,表示每个位置上可能的目标语言词汇。
假设我们的法语词汇表中有3个词:“J’aime”表示为 [0.1, 0.8, 0.2],“l’IA”表示为 [0.7, 0.2, 0.5],“.”表示为 [0.3, 0.5, 0.9]。
我们的解码器输出为:[0.6, 0.3, 0.1]

为了得到最终的翻译结果,我们选择概率最高的词汇。在这个例子中,第一个位置的概率最高,所以我们选择法语词汇表中索引为0的词:“J’aime”。接着,我们继续选择概率最高的词汇,直到遇到结束符号或达到最大输出长度。

最终的翻译结果是:“J’aime l’IA.”

6、总结:
Transformer是一个强大的序列到序列模型,通过自注意力机制在输入序列内部建模上下文相关性,并通过编码器-解码器结构实现从源语言到目标语言的翻译。通过堆叠多个编码器层和解码器层,Transformer逐渐理解输入序列和目标序列的语义和结构,并生成最终的翻译结果。

你可能感兴趣的:(transformer,深度学习,人工智能)