Transformer解析——(四)Decoder

news2025/2/22 22:29:10

 本系列已完结,全部文章地址为:

Transformer解析——(一)概述-CSDN博客

Transformer解析——(二)Attention注意力机制-CSDN博客

Transformer解析——(三)Encoder-CSDN博客

Transformer解析——(四)Decoder-CSDN博客

Transformer解析——(五)代码解析及拓展-CSDN博客

Decoder与Encoder的结构非常类似,下面具体解析。

1 整体结构

与Encoder相比,Decoder增加了一个交叉注意力的模块,其他模块的结构与Encoder类似。

2 Decoder的训练和预测过程

注意,Decoder的训练和预测差别很大。

在训练时,将目标序列(比如在英译中任务里,目标序列就是中文)通过Input Embedding和Positional Encoding后,并行输入到自注意力模块中,注意使用Look Ahead Mask避免训练第i个词时使用了i以后的词。自注意力的输出作为Q,Encoder输出作为K和V,一并输入到交叉注意力模块中,随后经过ResNet等模块,得到最终的输出。

在预测时,交叉注意力模块的K和V依然来自于Encoder,Decoder的输入先从开始标志<BEGIN>开始,输出第一个词后,将<BEGIN>,第一个词合在一起重新输入到Decoder,序贯地输出每一个词,直到输出<END>结束标志位停止。

至于这么设计的原因,可见"Look Ahead Mask"小节。

3 交叉注意力

交叉注意力将Encoder的输出传入Attention作为Key和Value,为什么这么设计呢?因为Decoder在生成目标序列时不止要考虑已生成的序列,还要考虑源序列的信息。正是交叉注意力模块连接了Encoder和Decoder。

通过使用Encoder输出的 K 和 V,Decoder可以知道源序列中哪些部分与当前正在生成的目标位置最相关。例如,在英译汉任务"I want to go to school"中,假设现在已经输出了"我想去",在输出下一个词时,如果只考虑已输出的“我想去”,肯定是没法输出学校的。通过将"我想去"与原始序列"I want to go to school"计算Attention,最终识别出和"school"的关注度更高,输出"学校"。交叉注意力机制保证了在翻译每一个中文词时,都需要参考英文原文中的相关内容,以确保翻译的准确性。

4 Look Ahead Mask

在预测时,模型是从左到右的顺序依次生成每个位置的输出的,通过第一个token预测第二个token,通过第一个和第二个token预测第三个token,以此类推,不能提前获取未来位置的信息。因此在训练时,也要遵守同样的行为,否则训练和预测的行为逻辑不一致会影响效果。

就像军事演习时如果每次都提前告知敌人方位,那么真正走上战场就抓瞎了。

在训练时,虽然我们是可以提前获取目标序列的,但是也要人为控制模型在输出某个位置的token时不可以参考后文,防止模型作弊提前得到未来的信息。

在代码实现上,Look Ahead Mask表现为一个上三角矩阵(实际上是方阵),该矩阵右上部分都是1,对角线及左下部分都是0。1代表需要掩盖的位置,0代表不需要掩盖的位置。该矩阵乘一个无穷小的数字,如果矩阵中元素是1,则乘无穷小的数字后将变为无穷小;如果矩阵元素是0,则乘无穷小的数字后将变为0。

该矩阵将叠加到计算好的注意力矩阵,因此在1的位置注意力将是无穷小,在0的位置注意力将不变,从而掩盖了元素是1的位置。与注意力矩阵一样,m行n列元素代表第m个token对第n个token的注意力,比如我们看第3行,前3列都是0,表示它只能利用前3个token(包含自身,因此对角线是0)的信息,第4个token及以后位置都是1。

训练时不需要串行地将目标序列逐个输入到Decoder,而是可以一次性输入全部target,通过Look Ahead Mask控制Decoder的多头注意力不使用未来信息。

以汉译英为例,串行是指先用“<BEGIN>”预测“I”,更新权重,然后用“<BEGIN> I”预测“have”,以此类推。Transformer是直接将目标输出“<BEGIN> I have a cat <END>”全部输入到Decoder中,并行训练参数。

注意,预测时Transformer并不是并行的,必须等上一个token输出完,再拿着已生成的token预测下一个词。

5 线性输出

将输出线性变换,将词向量维度升格为词汇表维度,便于从词汇表维度中通过概率选词。

6 Temperature温度

Temperature控制了选词的创新性。Temperature即Creativity,温度越大,概率会更加平均,选择次高概率词的可能性更大,多样性大;温度越低,概率最高的词概率将更高,选择次高概率词的可能性更小,多样性小。

具体计算上,在softmax运算前先对样本除以了温度。

原始的softmax公式为

softmax(z_i)=e^{z_i}/\sum_j{e^{z_j}}

其中z为原始分数,通过softmax将各输出的分数之和固定为1,将分数转化为概率。

修改后的softmax公式为

softmax(z_i)=e^{z_i/T}/\sum_j{e^{z_j}/T}

若T等于1,则等价于原始的softmax;若T>1,则“强者更弱,弱者更强”,概率更平滑;若T<1,则"强者更强,弱者更弱",概率更尖锐,更偏向于概率高的结果。

下面简要说明T可以控制概率分布平滑还是尖锐。

可以考虑两个样本1和2,原始分数分别为a和b。a>b,因此样本1与样本2的概率之比为(e^a)/(e^b)=e^(a-b),记为d1。概率之比越大,表示分布越尖锐。比如概率之比是2,则概率分别是66%和33%;概率之比是9,则概率分别是90%和10%。

当除以T后,两个样本的概率之比为e^[(a-b)/T],记为d2。

若T>1,d2<d1,即两样本概率之比缩小,因此概率分布更平滑;

若T=1,d2=d1,即两样本概率之比不变;

若T<1,d2>d1,即两样本概率之比变大,因此概率分布更尖锐。

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

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

毕业项目推荐:基于yolov8/yolov5/yolo11的番茄成熟度检测识别系统(python+卷积神经网络)

文章目录 概要一、整体资源介绍技术要点功能展示&#xff1a;功能1 支持单张图片识别功能2 支持遍历文件夹识别功能3 支持识别视频文件功能4 支持摄像头识别功能5 支持结果文件导出&#xff08;xls格式&#xff09;功能6 支持切换检测到的目标查看 二、数据集三、算法介绍1. YO…

Blaze RangePartitioning 算子Native实现全解析

引言&#xff1a;本文将全面且深入地解析Blaze RangePartitioning算子的Native实现过程。相较于原生Spark&#xff0c;RangePartitioning的Native实现在执行时间上达到了30%的显著下降&#xff0c;同时在资源开销方面节省了高达76%。这一改进大幅降低了运行成本&#xff0c;展现…

1、Window Android 13模拟器 将编译的映像文件导入Android Studio

1、环境准备 编译环境&#xff1a;Ubuntu-18.04.5编译版本&#xff1a;android13-release下载地址&#xff1a;清华大学开源软件镜像站AOSP # 下载repo # 同步代码&#xff1a;repo init -u https://mirrors.tuna.tsinghua.edu.cn/git/AOSP/platform/manifest -b android13-r…

MTK-Android13-包安装器PackageInstaller 静默安装实现

目的 我们最终是为了搞明白安装的整个流程。一方面通过安卓系统自带的包安装器来了解PMS 安装流程&#xff1b;另一方面熟悉框架层Framework 针对Android apk 安装流程。 前两篇文章分析了PackagerInstaller 安装流程。 Android13-包安装器PackageInstaller-之apk安装跳转 An…

基于ffmpeg+openGL ES实现的视频编辑工具-opengl相关逻辑(五)

在我们的项目中,OpenGL ES 扮演着至关重要的角色,其主要功能是获取图像数据,经过一系列修饰后将处理结果展示到屏幕上,以此实现各种丰富多样的视觉效果。为了让大家更好地理解后续知识,本文将详细介绍 OpenGL 相关代码。需要注意的是,当前方案将对 OpenGL 的所有操作都集…

【数据库系统概论】第第12章 并发控制

12.1 并发控制概述 并发控制是指数据库管理系统&#xff08;DBMS&#xff09;通过控制多个事务同时执行&#xff0c;保证数据的一致性和隔离性&#xff0c;避免事务间的相互干扰。 事务串行执行不能充分利用系统资源 并发执行的优点&#xff1a;能够减少处理机的空闲 时间&a…

HTML应用指南:利用GET请求获取全国泸溪河门店位置信息

随着新零售业态的快速发展,门店位置信息的获取变得越来越重要。作为新兴烘焙品牌之一,泸溪河自2013年在南京创立以来,一直坚持“健康美味,香飘世界”的企业使命,以匠人精神打造新中式糕点。为了更好地理解和利用这些数据,本篇文章将深入探讨GET请求的实际应用,并展示如何…

基于 JavaWeb 的 Spring Boot 调查问卷管理系统设计和实现(源码+文档+部署讲解)

技术范围&#xff1a;SpringBoot、Vue、SSM、HLMT、Jsp、PHP、Nodejs、Python、爬虫、数据可视化、小程序、安卓app、大数据、物联网、机器学习等设计与开发。 主要内容&#xff1a;免费功能设计、开题报告、任务书、中期检查PPT、系统功能实现、代码编写、论文编写和辅导、论…

Unity shader glsl着色器特效之 模拟海面海浪效果

一个简单的海浪效果&#xff0c;通过波的叠加实现水面起伏的动效&#xff0c;根据波峰斜率来为浪花着色&#xff0c;再根据法线贴图和水花贴图来和调整uv的平滑移动来增强海浪移动的细节。如果需要更逼真的效果可以考虑在满足浪花触发的地方添加粒子系统 前置效果图 因为是很久…

在VSCode中接入deepseek

注册就送14元2000万tokens。 https://cloud.siliconflow.cn/i/rnbA6i6U各种大模型 下面介绍我是如如接入vscode的 左边生成一个key&#xff0c;呆会vscode要用&#xff0c;不然401. 打开vscod&#xff0c;电脑能上网。下插件。 下好要配置 点它一下。 要配置&#xff0c;全…

爱普生 SG-8101CE 可编程晶振在笔记本电脑的应用

在笔记本电脑的精密架构中&#xff0c;每一个微小的元件都如同精密仪器中的齿轮&#xff0c;虽小却对整体性能起着关键作用。如今的笔记本电脑早已不再局限于简单的办公用途&#xff0c;其功能愈发丰富多样。从日常轻松的文字处理、网页浏览&#xff0c;到专业领域中对图形处理…

神经网络剪枝技术的重大突破:sGLP-IB与sTLP-IB

神经网络剪枝技术的重大突破:sGLP-IB与sTLP-IB 在人工智能飞速发展的今天,深度学习技术已经成为推动计算机视觉、自然语言处理等领域的核心力量。然而,随着模型规模的不断膨胀,如何在有限的计算资源和存储条件下高效部署这些复杂的神经网络模型,成为了研究者们亟待解决的…

STM32MP157A单片机移植Linux驱动深入版

需求整理 在Linux设备树中新增leds节点&#xff0c;其有3个gpio属性&#xff0c;分别表示PE10对应led1&#xff0c;PF10对应led2&#xff0c;PE8对应led3&#xff0c;设备树键值对如下&#xff1a; leds { led1-gpio <&gpioe 10 0>; led2-gpio &l…

[大模型笔记]扣子-知识库搭建,并用Java-SDK调用的笔记

记录一下学习coze官方提供的java-sdk的过程 官方参考文档 一、搭建知识库 1、登录coze后&#xff0c;点击工作空间-资源库&#xff0c;点击右上角的资源&#xff0c;点击知识库 2、输入知识库名词以及知识库的描述 3、选择要上传的文档类型&#xff0c;点击创建并导入&…

Unity学习笔记-Unity了解,安装,简单配置(一)

Unity 是什么&#xff1f; Unity 是一款广受欢迎的跨平台游戏开发引擎&#xff0c;由 Unity Technologies 公司开发并推出。它以强大的功能和易用性&#xff0c;在游戏开发领域占据着举足轻重的地位&#xff0c;甚至可以说&#xff0c;它改变了游戏开发的格局。凭借其出色的跨…

LLaMA-Factory|微调大语言模型初探索(3),qlora微调deepseek记录

前言 上篇文章记录了使用lora微调llama-1b,微调成功,但是微调llama-8b显存爆炸,这次尝试使用qlora来尝试微调参数体量更大的大语言模型,看看64G显存的极限在哪里。 1.Why QLora? QLoRA 在模型加载阶段通过 4-bit 量化大幅减少了模型权重的显存占用。QLoRA 通过 反量化到 …

JEEWMS cgFormBuildController.do 方法mobileForm存在SQL注入

一:登录扫描 JeeWMS是一款免费开源的仓库管理系统,支持3PL和厂内物流,涵盖订单管理,仓储管理,计费管理,现场作业,RFID,AGV等功能。本文介绍了系统的简介,功能,安装,截图和链接,适合仓储企业和开发者参考。厦门市灵鹿谷科技有限公司JEEWMS jeecgFormDemoController…

python面试题整理

Python 如何处理异常&#xff1f; Python中&#xff0c;使用try 和 except 关键字来捕获和处理异常 try 块中放置可能会引发异常的代码&#xff0c;然后在except块中处理这些异常。 能补充一下finally的作用吗&#xff1f; finally 块中的代码无论是否发生异常都会执行&#xf…

深度学习之图像回归(二)

前言 这篇文章主要是在图像回归&#xff08;一&#xff09;的基础上对该项目进行的优化。&#xff08;一&#xff09;主要是帮助迅速入门 理清一个深度学习项目的逻辑 这篇文章则主要注重在此基础上对于数据预处理和模型训练进行优化前者会通过涉及PCA主成分分析 特征选择 后…

中文Build a Large Language Model (From Scratch) 免费获取全文

中文pdf下载地址&#xff1a;https://pan.baidu.com/s/1aq2aBcWt9vYagT2-HuxdWA?pwdlshj 提取码&#xff1a;lshj 原文、代码、视频项目地址&#xff1a;https://github.com/rasbt/LLMs-from-scratch 翻译工具&#xff1a;沉浸式翻译&#xff08;https://app.immersivetrans…