【Transformer】transformer模型结构学习笔记

文章目录

      • 1. transformer架构
      • 2. transformer子层解析
      • 3. transformer注意力机制
      • 4. transformer部分释疑

 

图1 transformer模型架构
图2 transformer主要模块简介
图3 encoder-decoder示意图N=6
图4 encoder-decoder子层示意图

1. transformer架构

  • encoder-decoder框架是一种处理NLP或其他seq2seq转换任务中的常见框架, 机器翻译就是典型的seq2seq模型, 两个seq序列长度可以不相等

  • transformer也是encoder-decoder的总体架构, 如上图。transformer主要由4个部分组成:

    • 输入部分(输入输出嵌入与位置编码)
    • 多层编码器
    • 多层解码器
    • 以及输出部分(输出线性层与softmax)
  • 模块介绍

    • Input Embedding: 输入嵌入。将源文本中的词汇数字表示转换为向量表示,捕捉词汇间的关系
    • Positional Encoding: 位置编码。为输入序列的每个位置生成位置向量,以便模型能够理解序列中的位置信息
    • Output Embedding: 输出嵌入。将目标文本中的词汇数字表示转换为向量表示
    • Linear: 线性层。将decoder输出的向量转换为最终的输出维度
    • Softmax: softmax层。将线性层的输出转换为概率分布,以便进行最终的预测
    • encoder架构: encoder由6个相同的encoder层组成,每个层包括两个子层:一个多头自注意力层(multi-head self-attention)和一个逐位置的前馈神经网络(point-wise feed-forward network);每个子层后都会使用残差连接(residual connection)和层归一化(layer normalization)连接,即Add&Norm。如下图
    • decoder架构:decoder包含6个相同的decoder层,每层包含3个子层掩码自注意力层masked self-attention),encoder-decoder交叉注意力层逐位置的前馈神经网络。每个子层后都有残差连接层归一化操作,即Add&Norm。如下图

2. transformer子层解析

  • encoder和decoder的本质区别:self-attention的masked掩码机制
  • muitl-head进行masked的目的:在生成文本时,确保模型只依赖已知的信息,而不是未来的内容,对未来信息进行掩码处理,这样才能学会预测
  • multi-head的目的:让模型关注输入的不同部分或者不同信息,比如一个名词的修饰词,一个名词的分类,一个名词对象的情感、诗意等,从直观的到抽象的,捕获复杂的依赖关系
  • Add:残差连接。缓解梯度消失问题;网络输入x与网络输出F(x)相加,求导时相当于添加常数项1,缓解梯度消失问题
  • Norm:层归一化。在每个层上独立进行,使激活值具有相同的均值和方差,通常是0和1;在transformer中,Norm操作通常紧跟在Add之后,对残差连接结果进行归一化,以加速训练并稳定模型性能
  • 前馈网络:对输入进行非线性变换,提取更高级别的特征/信息
  • 逐位前馈神经网络:是一个简单的全连接神经网络,在模型中起到增加非线性和学习更复杂表示的作用。逐位的意思是逐个元素element或点进行独立且相同的操作,不是跨位置或跨元素来进行的。逐位前馈神经网络通常包括两个全连接层一个ReLU激活层,两个全连接层对应两个线性变换,第一个全连接层之后接ReLU激活函数引入非线性,使模型能够学习更复杂的表示。第一个全连接层通常对输入进行增维表示,第二个全连接层降维到模型输出所需的维度

3. transformer注意力机制

  • transformer的3种注意力层:在transformer架构中有3种不同的注意力层
    • self-attention layer自注意力层:编码器输入序列通过multi-head self-attention计算自注意力权重
    • casual attention layer因果自注意力层:解码器的单个序列通过masked multi-head self-attention计算自注意力权重
    • cross attention layer交叉注意力层:编码器-解码器两个序列通过multi-head cross attention进行注意力转移
  • 注意力机制的过程说明
  • 缩放点积注意力

上图是缩放点积注意力示意图,计算公式

其中,softmax内部是注意力分数,softmax整个是注意力权重,乘以缩放因子 1 d k \frac{1}{\sqrt{d_{k} } } dk 1是为了缓解可能的梯度消失问题(softmax值过大时), d k d_{k} dk是Q或者K的维度大小

  • 多头注意力机制

上图是多头注意力机制示意图,多个注意力头并行运行,每个头都会独立地计算注意力权重和输出,这里采用的是缩放点积注意力来计算;

然后将所有头的输出拼接concat起来得到最终的输出;

多头其实是为了提取不同维度的信息,捕获复杂的依赖关系,增强模型的表示能力;最后多个头结果进行拼接,避免单个计算的误差,即避免只关注单方面维度信息的误差

计算公式:

在transformer原文中,head_num = 8,d_k=d_v=64

  • 交叉注意力机制

    • 自注意力机制,QKV都来自同一序列,如下
    • 交叉注意力机制,输入来自两个不同的序列,一个序列用作查询Q(来自decoder states的queries),另一个序列提供键K和值V(来自encoder states的keys和values),实现跨序列的交互和注意力转移,如下
  • 因果注意力机制

    • 为了确保模型在生成序列时只依赖于之前的输入信息,而不会受到未来信息的影响。casual self-attention通过掩码未来位置来实现这一点;使模型在预测某个位置的输出时,只看到该位置及之前的输入。如下图所示
    • 其中掩码未来位置的原因通过下图说明:
    • 掩码机制通过下图说明,加一个很大的负数,softmax之后就是0,如下

4. transformer部分释疑

  • 问题1:transformer相对RNN能处理长序列数据, 同时能进行并行计算, LSTM相对RNN进行改进的, 解决长时依赖问题, 那么transformer相对于LSTM有什么优势
    • (1)LSTM在解决长时依赖仍有局限。LSTM依赖cell state来传递长时信息,限制了其全局信息捕获能力;而transformer的自注意力机制可以考虑任意两个位置之间的依赖关系,能更好的捕捉全局的、长距离的依赖信息
    • (2)transformer的可解释性更强:transformer计算每个位置与所有位置的依赖关系,使得模型的预测结果更易于解释,LSTM的解释性相对较弱
    • (3)并行计算能力:transformer不用像LSTM等待上一时间步的输出作为下一时间步的输入,可以实现完全并行的计算,更容易进行分布式计算和加速
    • (4)扩展性和灵活性:transformer结构相对灵活,可以轻松扩展到更大的数据集和更复杂的任务中

 

  • 问题2:同问题1, transformer通过怎样的设计能够实现并行计算的?

    • 参考这个图,可以并行计算一个位置和其他所有位置的依赖关系
  • 问题3:层归一化Norm和batch normalization的区别

    • 都是归一化,但层归一化不是批量归一化;
    • LN是对每个样本的每个层进行的归一化,即对每个样本的所有特征做归一化;
    • 而BN是对每个batch数据进行归一化,即对batch_size内的每个特征做归一化;
    • LN保留了不同特征之间的大小关系,抹平了不同样本之间的大小关系,所以LN更适合NLP领域任务;
    • 而BN保留了不同样本之间的大小关系,抹平了不同特征之间的大小关系,所以BN更适合于依赖不同样本之间关系的任务,如CV领域
    • LN可以缓解梯度消失问题、改善系统对缩放摆幅变化的鲁棒性、更适用于小样本数据情况
    • 而BN旨在提高模型的训练速度和稳定性,使模型学习效率更高,降低测试错误率和泛化误差

 

  • 问题4:encoder和decoder的本质区别self-attention是否masked,如何理解
    • encoder中每个元素都能管住整个序列中的所有其他元素,生成新的输出表示。处理整个输入序列,不需要掩码未来的信息
    • decoder在生成序列时,只能依赖已经生成的部分,而不能依赖未来的信息。masked处理的是输出序列,将未来位置的注意力权重设置为0,从而限制模型的关注点在已生成的序列上,实现了类似条件语言模型的功能
    • decoder和encoder交叉注意力层,decoder允许关注encoder的输出,从而融合encoder中的信息到生成过程

 

  • 问题5:transformer训练的过程参数有哪些,除了W_Q/K/V这几个参数矩阵以外
    • (1)嵌入维度:输入和输出嵌入的维度,词嵌入和位置编码的维度。比如词嵌入矩阵大小为词汇表大小如50000 * d_词嵌入向量的维度
    • (2)multi-head attention的num_heads:注意力头数,决定模型并行关注输入序列不同部分的能力,每个头都会产生一个独立的注意力权重矩阵。论文中num_heads = 8
    • (3)隐藏层层数:每个encoder层和decoder层都保持一致
    • (4)前馈神经网络隐藏层大小:神经元个数,通常比层数大很多,以便能学习复杂的特征表示
    • (5)encoder和decoder的层数:定义了模型中encoder和decoder各自包含的层数,论文中n_layers = 6,即6个encoder层和6个decoder层
    • (6)位置编码的维度:输入输出序列进入encoder/decoder层时都要进行位置编码,通常与嵌入维度相同,以便和嵌入向量直接相加
    • (7)训练参数:像学习率,选用的优化器,batch_size,epoches等
    • (8)正则化参数:如dropout rate随机失活的神经元比例防止过拟合,L2正则化等
    • (9)权重初始化方法:如随机初始化,Xavier初始化,He初始化等,合理的初始化能加快训练的过程尽快找到最优解

 

  • 问题6:QKV计算的过程,W矩阵都是可以训练的

  • 问题7:self-attention和(cross)attention的区别

    • self-attention设置source=target,即query=key=value,然后计算内部依赖关系

 

  • 问题8:预训练模型BERT和transformer是什么关系
    • BERT(Bidirectional Encoder Representations from Transformers)使用transformer的encoder结构来构建的,输入与transformer类似,包括token/segment/position embedding等,这些embedding将输入文本序列转换为模型可以理解的向量表示;
    • 在BERT中可以选择encoder层的数量,轻量级模型通常使用12层,重量级模型通常使用24层;transformer的自注意力机制使BERT能够关注双向上下文的信息

 

  • 问题9:transformer模型训练的时候采用了什么损失函数
    • transformer训练过程主要采用了交叉熵损失函数(负对数似然损失函数)来衡量模型预测的概率分布真实分布之间的差异,也可以采用KL散度;
    • 并且可以计算向量空间距离MSE,即两组概率向量的空间距离

 


 
创作不易,如有帮助,请 点赞 收藏 支持
 


 

[参考文章]
[1]. transformer注意力机制解析
[2]. Seq2Seq的注意力机制
[3]. attention机制图示
[4]. LN与BN的区别
[5]. Seq2Seq的注意力机制
[6]. transformer的decoder结构
[7]. decoder-only和编解码器区别
[8]. Attention is All You Need翻译
[9]. transformer结构详解,推荐

created by shuaixio, 2024.06.23

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.rhkb.cn/news/371312.html

如若内容造成侵权/违法违规/事实不符,请联系长河编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

strcpy,srtcmp,strlen函数漏洞利用

strcpy,srtcmp,strlen函数漏洞利用 strcpy strcpy函数用于将字符串复制到另一个指针指向的空间中,遇到空字符 **b’x\00’**时停止,: 所以可以利用 strcpy不检查缓冲区 的漏洞(构造的字符串要以\0结尾),…

Android平台崩溃和 ANR 问题进行符号化解析、解析崩溃日志的内存地址

使用Android Logcat Stacktrace Utility | Android Logcat | 1.2.3 1.设置so库路径 2.打开Stacktrace Utility工具 3.在Original粘贴报错内存地址 4.点击Resolve Stacktraces,就会解析出内存地址 如果是红色,解析失败了,缺少原生so库,可以在第一步添加so库文件再次尝试…

freemarker生成pdf,同时pdf插入页脚,以及数据量大时批量处理

最近公司有个需求&#xff0c;就是想根据一个模板生成一个pdf文档&#xff0c;当即我就想到了freemarker这个远古老东西&#xff0c;毕竟freemarker在模板渲染方面还是非常有优势的。 准备依赖&#xff1a; <dependency><groupId>org.springframework.boot</gr…

【植物大战僵尸杂交版】获取+存档插件

文章目录 一、还记得《植物大战僵尸》吗&#xff1f;二、在哪下载&#xff0c;怎么安装&#xff1f;三、杂交版如何进行存档功能概述 一、还记得《植物大战僵尸》吗&#xff1f; 最近&#xff0c;一款曾经在15年前风靡一时的经典游戏《植物大战僵尸》似乎迎来了它的"文艺复…

EN-SLAM:Implicit Event-RGBD Neural SLAM解读

论文路径&#xff1a;https://arxiv.org/pdf/2311.11013.pdf 目录 1 论文背景 2 论文概述 2.1 神经辐射场&#xff08;NeRF&#xff09; 2.2 事件相机&#xff08;Event Camera&#xff09; 2.3 事件时间聚合优化策略&#xff08;ETA&#xff09; 2.4 可微分的CRF渲染技术…

CosyVoice多语言、音色和情感控制模型,one-shot零样本语音克隆模型本地部署(Win/Mac),通义实验室开源

近日&#xff0c;阿里通义实验室开源了CosyVoice语音模型&#xff0c;它支持自然语音生成&#xff0c;支持多语言、音色和情感控制&#xff0c;在多语言语音生成、零样本语音生成、跨语言声音合成和指令执行能力方面表现卓越。 CosyVoice采用了总共超15万小时的数据训练&#…

学习笔记——动态路由——OSPF(邻接/邻居)

十、OSPF的邻接/邻居 1、OSPF路由器之间的关系 (1)基本介绍 在OSPF网络中&#xff0c;为了交换链路状态信息和路由信息&#xff0c;邻居设备之间首先要建立邻接关系&#xff0c;邻居(Neighbors)关系和邻接(Adjacencies)关系是两个不同的概念。 OSPF路由器的两种关系&#x…

创建线程的五种方式

一.继承Thread ,重写run class MyThread extends Thread{Overridepublic void run() {//这里的内容就是该线程要完成的工作while(true) {System.out.println("hello thread");try {Thread.sleep(1000);} catch (InterruptedException e) {throw new RuntimeExceptio…

【CUDA】

笔者在学习Softmax实现时遇到了一个问题&#xff0c;很多文章直接将softmax的计算分成了五个过程&#xff0c;而没有解释每个过程的含义&#xff0c;尤其是在阅读这篇文章时&#xff0c;作者想计算最基本的softmax的效率&#xff0c;以展示可行的优化空间&#xff1a; 贴一个g…

windows 服务器安装svn服务端、迁移svn

svn服务器版本 因为要把旧svn迁移到新的svn&#xff0c;为了保证迁移后的稳定性&#xff0c;安装包使用的旧服务器的svn服务器版本 VisualSVN-Server-3.6.1-x64.msi 安装 配置仓库路径等 其他没截图的就默认配置下一步即可。安装完成先不要启动 迁移 旧的svn服务器直接把…

软件工程(上)

目录 软件过程模型&#xff08;软件开发模型&#xff09; 瀑布模型 原型模型 V模型 构件组装模型 螺旋模型&#xff08;原型瀑布&#xff09; 基于构件的软件工程&#xff08;CBSE&#xff09; 快速应用开发模型&#xff08;RAD&#xff09; 统一过程&#xff08;UP&a…

论文复现-基于决策树算法构建银行贷款审批预测模型(金融风控场景)

作者Toby&#xff0c;来源公众号&#xff1a;Python风控模型&#xff0c;基于决策树算法构建银行贷款审批预测模型 目录 1.金融风控论文复现 2.项目背景介绍 3.决策树介绍 4.数据集介绍 5.合规风险提醒 6.技术工具 7.实验过程 7.1导入数据 7.2数据预处理 7.3数据可…

SpringBoot3+Vue3开发园区管理系统

介绍 在当今快速发展的城市化进程中&#xff0c;高效、智能的园区管理成为了提升居民生活品质、优化企业运营环境的关键。为此&#xff0c;我们精心打造了全方位、一体化的园区综合管理系统&#xff0c;该系统深度融合了园区管理、楼栋管理、楼层管理、房间管理以及车位管理等…

基于S32K144驱动NSD8381

文章目录 1.前言2.芯片介绍2.1 芯片简介2.2 硬件特性2.3 软件特性 3.测试环境3.1 工具3.2 架构 4.软件驱动4.1 SPI4.2 CTRL引脚4.3 寄存器4.4 双极性步进电机驱动流程 5.测试情况6.参考资料 1.前言 最近有些做电磁阀和调光大灯的客户需要寻找国产的双极性步进电机驱动&#xf…

mysql 命令 —— 查看表信息(show table status)

查询表信息&#xff0c;如整个表的数据量大小、表的索引占用空间大小等 1、查询某个库下面的所有表信息&#xff1a; SHOW TABLE STATUS FROM your_database_name;2、查询指定的表信息&#xff1a; SHOW TABLE STATUS LIKE your_table_name;如&#xff1a;Data_length 显示表…

郭明錤:苹果将为Vision Pro推出红外摄像头款AirPods

在科技界,苹果公司的每一次创新都备受瞩目。近日,著名苹果分析师郭明錤透露了一个令人振奋的消息:苹果计划在2026年推出配备红外摄像头的新款AirPods,这款耳机将特别优化与Apple Vision Pro头显的空间体验。这一消息不仅预示着苹果在音频设备领域的又一次技术飞跃,也进一步…

记录第一次使用air热更新golang项目

下载 go install github.com/cosmtrek/airlatest 下载时提示&#xff1a; module declares its path as: github.com/air-verse/air but was required as: github.com/cosmtrek/air 此时&#xff0c;需要在go.mod中加上这么一句&#xff1a; replace github.com/cosmtrek/air &…

【项目管理】常见的敏捷实践:Scrum框架

【项目管理】常见的敏捷实践&#xff1a;Scrum框架 精益、敏捷与Scrum框架Scrum框架实践Sprint&#xff08;冲刺&#xff09;Scrum角色Scrum工件Scrum会议 精益、敏捷与Scrum框架 敏捷与精益思想、看板、Scrum等概念的关系如下图所示&#xff1a; Lean 精益 Kanban 看板 Ag…

QT入门笔记-自定义控件封装 30

具体代码如下: QT core guigreaterThan(QT_MAJOR_VERSION, 4): QT widgetsCONFIG c17# You can make your code fail to compile if it uses deprecated APIs. # In order to do so, uncomment the following line. #DEFINES QT_DISABLE_DEPRECATED_BEFORE0x060000 …

Kyutai 推出了 Moshi Chat,这是一种既可以实时收听又可以说话的 AI

Kyutai 是一家专注于开放式 AI 研究的非营利性实验室&#xff0c;它推出了开源的 Moshi Chat 项目 Kyutai 是一家致力于推进人工智能 &#xff08;AI&#xff09; 开放研究的非营利性实验室&#xff0c;其最新创新 Moshi Chat 取得了重大进展。这种尖端的实时原生多模态基础模…