Transformer模型-2-整体架构

总架构图

下图为Transformer模型架构图

原文描述

简单理解为它是一个盒子:

graph LR A[输入:机器学习] --> B[模型:Transformer:包含Encoder与Decoder两部分]--> C[输出:machine learning]

【举例】: 输入中文,输出英语

graph LR A[我爱你] --> B[Transformer模型] --> C[I love you]

每个EncoderDecoder 都包含 6 个 block,上例可分解为:

这6个block结构相同,但参数各自随机初始化, 分别是:

  • 第一层:多头自注意机制,有两子层
  • 第二层:一个简单的、位置方向的全连接前馈(神经)网络,有两子层
  • Add & Norm 层: 每个编码器的每个子层(Self-Attention 层和 FFN 层)都有一个残差连接和特征归一层,再执行一个层标准化操作

事实上,只是Transformer采用了6层结构,事实上可配置多层

Transformer的词向量维度是512

BERT为768维

编码器:Encoder

Encoder由三个部分组成: 输入多头注意力前馈神经网络

输入:Inputs

Transformer 中单词的输入表示 xWord EmbeddingPosition Embedding相加得到。

词嵌入:Word Embedding

词嵌入层 负责将自然语言转化为与其对应的独一无二的词向量表达。

位置编码器:Position Embedding

Transformer 中除了Word Embedding,还需要使用Position Embedding 表示单词出现在句子中的位置。因为 Transformer 不采用 RNN 的结构,而是使用全局信息,因此是无法捕捉到序列顺序信息的

注意力机制

我们再来看一下这个图,图中红色圈中的部分为 Multi-Head Attention,是由多个 Self-Attention组成的,可以看到 Encoder 包含一个 Multi-Head Attention,而 Decoder 包含两个 Multi-Head Attention (其中有一个用到 Masked)。

Multi-Head Attention 上方还包括一个 Add & Norm 层

  • Add: 表示残差连接 (Residual Connection) 用于防止网络退化
  • Norm: 表示 Layer Normalization,用于对每一层的激活值进行归一

自注意力机制:Self-Attention

自注意力机制是注意力机制的变体,其减少了对外部信息的依赖,更擅长捕捉数据或特征的内部相关性。自注意力机制的关键点在于,Q、K、V是同一个东西,或者三者来源于同一个X,三者同源。

多头注意力机制:Multi-Head Attention

与其只使用单独一个注意力汇聚, 我们可以用独立学习得到的h 组(一般h=8)不同的线性投影来变换Q、K和V。

然后,这h组变换后的Q、K和V将并行地送到注意力汇聚中。 最后,将这h个注意力汇聚的输出拼接在一起, 并且通过另一个可以学习的线性投影进行变换, 以产生最终输出。 这种设计被称为多头注意力(multihead attention)

残差连接

每个编码器的每个子层(Self-Attention 层和 FFN 层)都有一个残差连接,再执行一个层标准化操作。

LN和BN

  • LN: Layer Normalization,LN是"横"着来的,对同一个样本,不同的特征做归一化。
  • BN: Batch Normalization,BN是"竖"着来的,对不同样本,同一特征做归一化。

tips: 二者提出的目的都是为了加快模型收敛,减少训练时间 在NLP任务中,一般选用的都是LN,不用BN。因为句子长短不一,每个样本的特征数很可能不同,造成很多句子无法对齐,所以不适合用BN。

维度 为了便于这些剩余连接,模型中的所有子层以及嵌入层都产生维度dmodel=512的输出(来自原文,如上图)。

前馈神经网络:FeedForward

在进行了Attention操作之后,Encoder和Decoder中的每一层都包含了一个全连接前向网络 ,对每个position的向量分别进行相同的操作,包括两个线性变换和一个ReLU激活输出
<math xmlns="http://www.w3.org/1998/Math/MathML" display="block"> s u b l a r y e r o u t p u t = L a y e r N o r m a l ( x + S u b L a y e r ( x ) ) \\ sub_laryer_output = LayerNormal(x+SubLayer(x)) \\ </math>sublaryeroutput=LayerNormal(x+SubLayer(x))

解码器:Decoder

Decoder结构与Encoder相似,但是存在一些区别。

  • Decoder 包含两个 Multi-Head Attention 层。
    1. 第一个 Multi-Head Attention 层采用了 Masked 操作。
    2. 第二个 Multi-Head Attention 层的K, V矩阵使用 Encoder 的编码信息矩阵C进行计算,而Q使用上一个 Decoder的输出计算。
  • 最后有一个 Softmax 层计算下一个翻译单词的概率。

第一个 Multi-Head Attention

掩码: Mask

Mask 表示掩码,它对某些值进行掩盖,使其在参数更新时不产生效果。Transformer 模型里面涉及两种 mask,分别是 Padding Mask 和 Sequence Mask。其中,Padding Mask 在所有的 scaled dot-product attention 里面都需要用到,而 Sequence Mask 只有在 Decoder 的 Self-Attention 里面用到。

第二个 Multi-Head Attention

其实这块与上文 Encoder 中 的 Multi-Head Attention 具体实现细节上完全相同,区别在于Encoder的多头注意力里的Q、K、V是初始化多个不同的,矩阵得到的。而Decoder的K、V是来自于Encoder的输出,Q是上层Masked Self-Attention的输出。

Encoder 中 的 Multi-Head Attention只有一个输入,把此输入经过三个linear映射成Q 、K 、V , 而这里的输入有两个:

  • 一个是Decoder的输入经过第一个大模块传过来的值。
  • 一个是Encoder最终结果。是把第一个值通过一个linear映射成了Q,然后通过两个linear把第二个值映射成K、V ,其它的与上文的完全一致。这样做的好处是在 Decoder 的时候,每一位单词都可以利用到 Encoder 所有单词的信息。

Linear和softmax

Decoder最后会输出一个实数向量。那我们如何把浮点数变成一个单词?这便是线性变换层Linear层要做的工作,它之后就是Softmax层。

Linear层是一个简单的全连接神经网络,它可以把Decoder产生的向量投射到一个比它大得多的、被称作对数几率(logits)的向量里。

相关推荐
槑槑紫18 分钟前
深度学习pytorch整体流程
人工智能·pytorch·深度学习
盼小辉丶31 分钟前
TensorFlow深度学习实战——去噪自编码器详解与实现
人工智能·深度学习·tensorflow
胖达不服输39 分钟前
「日拱一码」020 机器学习——数据处理
人工智能·python·机器学习·数据处理
吴佳浩1 小时前
Python入门指南-番外-LLM-Fingerprint(大语言模型指纹):从技术视角看AI开源生态的边界与挑战
python·llm·mcp
吴佳浩1 小时前
Python入门指南-AI模型相似性检测方法:技术原理与实现
人工智能·python·llm
kebijuelun2 小时前
百度文心 4.5 大模型详解:ERNIE 4.5 Technical Report
人工智能·深度学习·百度·语言模型·自然语言处理·aigc
算家计算2 小时前
ComfyUI-v0.3.43本地部署教程:新增 Omnigen 2 支持,复杂图像任务一步到位!
人工智能·开源
新智元2 小时前
毕业 7 年,身价破亿!清北 AI 天团血洗硅谷,奥特曼被逼分天价股份
人工智能·openai
新智元2 小时前
刚刚,苹果大模型团队负责人叛逃 Meta!华人 AI 巨星 + 1,年薪飙至 9 位数
人工智能·openai
Cyltcc2 小时前
如何安装和使用 Claude Code 教程 - Windows 用户篇
人工智能·claude·visual studio code