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)的向量里。

相关推荐
小许学java13 分钟前
Spring AI快速入门以及项目的创建
java·开发语言·人工智能·后端·spring·ai编程·spring ai
人工智能技术派30 分钟前
Qwen-Audio:一种新的大规模音频-语言模型
人工智能·语言模型·音视频
lpfasd12334 分钟前
从OpenAI发布会看AI未来:中国就业市场的重构与突围
人工智能·重构
春末的南方城市1 小时前
清华&字节开源HuMo: 打造多模态可控的人物视频,输入文字、图片、音频,生成电影级的视频,Demo、代码、模型、数据全开源。
人工智能·深度学习·机器学习·计算机视觉·aigc
whltaoin1 小时前
Java 后端与 AI 融合:技术路径、实战案例与未来趋势
java·开发语言·人工智能·编程思想·ai生态
中杯可乐多加冰1 小时前
smardaten AI + 无代码开发实践:基于自然语言交互快速开发【苏超赛事管理系统】
人工智能
Hy行者勇哥1 小时前
数据中台的数据源与数据处理流程
大数据·前端·人工智能·学习·个人开发
xiaohanbao091 小时前
Transformer架构与NLP词表示演进
python·深度学习·神经网络
岁月宁静2 小时前
AI 时代,每个程序员都该拥有个人提示词库:从效率工具到战略资产的蜕变
前端·人工智能·ai编程
双向332 小时前
Trae Solo+豆包Version1.6+Seedream4.0打造"AI识菜通"
人工智能