首页 > 其他分享 >Transformer细节(六)——详解Transformer各层结构和组成

Transformer细节(六)——详解Transformer各层结构和组成

时间:2024-06-23 11:59:39浏览次数:23  
标签:Transformer 解码器 text 各层 编码器 子层 详解 Layer 注意力

Transformer 模型的架构是由多个编码器(Encoder)和解码器(Decoder)层堆叠而成的。

一、编码器(Encoder)

        编码器由多个相同的编码器层(Encoder Layer)堆叠而成。每个编码器层包含两个主要子层:自注意力(Self-Attention)子层和前馈神经网络(Feed Forward Neural Network,FFN)子层。

1. 自注意力子层(Self-Attention Layer)

        输入与输出维度

         输入张量的形状为 \((N, L, d_{\text{model}})\)

        计算过程

        注意力机制:通过查询(Query)、键(Key)和值(Value)来计算注意力得分,公式为:

\[ \text{Attention}(Q, K, V) = \text{softmax}\left(\frac{QK^T}{\sqrt{d_k}}\right)V \]

        多头注意力(Multi-Head Attention)

        将输入分成多头,每个头独立计算注意力,再将结果拼接并通过线性变换。多头注意力公式为:\[ \text{MultiHead}(Q, K, V) = \text{Concat}(\text{head}_1, \ldots, \text{head}_h)W^O \]
        其中,每个头的计算为:\[ \text{head}_i = \text{Attention}(QW_i^Q, KW_i^K, VW_i^V) \]

        层归一化(Layer Normalization)

        在自注意力操作之后进行归一化,并添加残差连接(Residual Connection)。

2. 前馈神经网络子层(Feed Forward Neural Network, FFN)

        结构

        由两个线性变换和一个激活函数(通常是ReLU)组成,公式为:\[ \text{FFN}(x) = \max(0, xW_1 + b_1)W_2 + b_2 \]

        层归一化(Layer Normalization)

        在前馈神经网络之后进行归一化,并添加残差连接。

3. 输出维度

        每个编码器层的输出维度仍然是 \((N, L, d_{\text{model}})\)。

二、解码器(Decoder)

        解码器也由多个相同的解码器层(Decoder Layer)堆叠而成。解码器层在编码器层的基础上增加了一个编码器-解码器注意力(Encoder-Decoder Attention)子层。

1. 掩码自注意力子层(Masked Self-Attention Layer)

        类似于编码器的自注意力子层,但在计算注意力得分时使用了掩码(mask),以防止当前位置看到未来的信息。

2. 编码器-解码器注意力子层(Encoder-Decoder Attention Layer)

        该子层的输入来自编码器层的输出和解码器层的前一层输出。计算过程与自注意力相同,但查询(Query)来自解码器,键(Key)和值(Value)来自编码器。

3. 前馈神经网络子层(Feed Forward Neural Network, FFN)

        与编码器层中的前馈神经网络相同。

4. 输出维度

        每个解码器层的输出维度也是 \((N, L, d_{\text{model}})\)。

解码器更多细节,参考我之前的博客Transformer细节(五)——详解Transformer解码器的自注意力层和编码器-解码器注意力层数据处理机制-CSDN博客

三、Transformer 模型的整体结构

1. 输入嵌入(Input Embedding)

        输入序列首先通过嵌入层(Embedding Layer)映射为 \((N, L, d_{\text{model}})\) 的张量。
        添加位置编码(Positional Encoding),以便模型捕获序列中的位置信息。

2. 编码器堆叠(Stack of Encoders)

        输入经过多个编码器层的处理,得到编码后的序列表示。

3. 解码器堆叠(Stack of Decoders)

        解码器接收编码器的输出和目标序列的嵌入,经过多个解码器层的处理,生成最终的输出序列。

4. 输出层(Output Layer)

        解码器的输出通过线性变换和 softmax 层,生成每个位置的预测分布。

四、总结

        这种架构设计使得 Transformer 模型可以高效并行地处理序列数据,并且能够捕获序列中的长距离依赖关系。具体如何并行处理数据,参考我之前的博客Transformer细节(三)——Transformer是并行or顺序处理数据?-CSDN博客

标签:Transformer,解码器,text,各层,编码器,子层,详解,Layer,注意力
From: https://blog.csdn.net/weixin_47129891/article/details/139883769

相关文章

  • 学懂C#编程:常用高级技术——委托(Delegate)应用场景——委托与Lambda表达式的结合使用详
            在C#中,委托与Lambda表达式的结合使用是现代编程实践中的一个重要且强大的特性,它极大地提高了代码的简洁性和可读性。下面将详细讲解这两个概念如何协同工作,以及如何在实际编程中有效利用它们。委托基础        委托是C#中的一种引用类型,它允许封装一......
  • Java数据类型详解
    Java作为一种静态类型语言,在编译时就需要确定变量的数据类型。Java的数据类型可以分为两大类:基本数据类型和引用数据类型。本文将详细介绍这些数据类型,并通过代码示例展示如何使用它们。一、基本数据类型Java中的基本数据类型包括四类八种:整数类型、浮点数类型、字符类型......
  • Transformer细节(五)——详解Transformer解码器的自注意力层和编码器-解码器注意力层数
    一、自注意力层(Self-AttentionLayer)并行处理目标序列        自注意力层的任务是计算输入序列中每个位置之间的关系,并生成每个位置的表示。这一过程可以并行处理,因为它并不依赖于前一个位置的计算结果。自注意力机制的具体步骤1.输入嵌入与位置编码      ......
  • 大模型基本概念学习 - Checkpoint、PyTorch、 TensorFlow、Transformers、ModelScope
    文章目录前言一、checkpoint二、TensorFlow1.简介2.主要特点3.示例代码三、PyTorch1.简介2.主要特点3.示例代码四、TensorFlow和PyTorch区别五、Transformers六、Transformers通过配置或自动检测来决定使用PyTorch或TensorFlow1.自动检测2.通过环境变量配......
  • Redis-数据结构-跳表详解
    Redis概述Redis-数据结构-跳表详解跳表(SkipList)是一种基于并联的链表结构,用于在有序元素序列中快速查找元素的数据结构。Redis中广泛使用跳表来实现有序集合(SortedSet)这一数据结构。1.跳表的基本概念和特点跳表的核心思想是通过在不同层级(level)上增加指针来加速查......
  • Transformers是SSMs:通过结构化状态空间对偶性的广义模型和高效算法(一)
    文章目录摘要1、引言2、背景与概述2.1、结构化状态空间模型2.2、注意力机制2.3、结构化矩阵2.4、概述:结构化状态空间对偶性2.5、符号3、状态空间模型是结构化矩阵3.1、状态空间模型的矩阵变换形式3.2、半可分离矩阵3.2.1、顺序半可分离(SSS)表示3.2.2、1-半可分矩阵:标量SS......
  • OSPF 3类LSA详解 / 区域间防环
    概述3类LSA的名称为NetworkSummaryLSA,Summary也就是总结的意思,注意3类LSA的背景,在多区域的场景下才有3类LSA(多区域的背景在OSPF区域文章中有详细说明),其中区域之间的设备被称为ABR,最主要的2个信息,LinkStateID:在3类LSA中为网段IPNetworkMask:......
  • C++ 结构体对齐详解
    目录前言一、为什么要对结构体进行对齐操作?二、基本概念三、对齐规则四、示例讲解1.简单的变量对齐2.结构体包含有结构体的对齐结构体成员详细解析五、使用指令改变对齐方式__attribute__((packed))#pragmapack(push,n)#pragmapack(pop)六、总结前......
  • ThreadLocal详解
    在做项目时发现项目中一般都会把用户信息存入ThreadLocal中,方便后续使用用户信息。但是ThreadLocal的原理是什么呢?这里结合网上的资料记录一下我自己的理解。ThreadLocal是什么?网上有的说法是ThreadLocal是线程本地变量,如果创建了一个ThreadLocal变量,那么访问这个变量的每......
  • FastJson使用详解
    FastJson文章目录第一章FastJson使用详解这一篇就够了第二章FastJsonHttpMessageConverter类的作用与使用详解第三章Jackson使用详解文章目录FastJson文章目录前言一、FastJson是什么?二、使用步骤1.引入库2.序列化和反序列化Java对象3解析JSON字符串4使用注解......