【ML】transform 之 decoder 及其实现细节

news2024/11/24 21:03:37

【ML】transform 之 decoder 及其实现细节

      • 1. decoder
      • 2. encoder 和decoder 之间是如何处理和传递讯息的?self-attention
      • 3. 查询(Query)、键(Key)、值(Value)是三个核心概念及其具体含义和计算方式

1. decoder

在 Transformer 架构中,解码器(Decoder)是负责生成输出序列的部分,例如在机器翻译任务中生成目标语言的句子。解码器由多个相同的层组成,每层都包含几个关键组件,以下是解码器的实现细节:

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

    • 解码器的第一个自注意力层只接收之前生成的输出作为输入,而不是整个输入序列。这确保了解码器在生成每个输出时刻时,只能看到它之前的状态,而不是未来的输出,这是遵循序列生成中的因果关系。
  2. 遮蔽(Masking)

    • 在自注意力层中使用遮蔽技术,确保在计算注意力权重时,仅考虑当前步骤之前的输出,忽略之后的输出。这通常通过在 softmax 操作之前添加一个上三角矩阵的掩码来实现。
  3. 编码器-解码器注意力层(Encoder-Decoder Attention Layer)

    • 紧接着自注意力层的是编码器-解码器注意力层,它允许解码器层关注编码器的输出。这个层通常使用标准的自注意力机制,但只针对编码器的输出序列。
  4. 前馈网络(Feed-Forward Neural Network)

    • 每个自注意力和编码器-解码器注意力层后面都有一个前馈网络,通常包含两个线性变换和一个非线性激活函数(如 ReLU)。
  5. 残差连接(Residual Connection)

    • 每个子层(自注意力层、编码器-解码器注意力层和前馈网络)的输出都通过残差连接与子层的输入相加。这有助于缓解深层网络训练中的梯度消失问题。
  6. 层归一化(Layer Normalization)

    • 在每个子层的输入和输出上应用层归一化,以稳定训练过程并加速收敛。
  7. 可学习的参数

    • 解码器的每个层都包含可学习的参数,如自注意力层和前馈网络的权重,以及层归一化和残差连接的缩放和平移参数。
  8. 输出层

    • 解码器的最后一层通常会有一个线性层,将隐藏状态映射到输出词汇表的大小,然后通过 softmax 函数进行归一化,以预测下一个词的概率分布。
  9. 训练过程

    • 解码器通过最大化给定正确输出序列的似然性来训练,通常使用交叉熵损失函数。
  10. 并行处理

    • 由于自注意力机制的特性,解码器的所有层都可以并行处理,这与循环神经网络(RNN)的序列处理方式形成对比。
  11. 条件生成

    • 在生成任务中,解码器可以条件于编码器的输出以及之前生成的输出序列,以生成下一个词。

Transformer 解码器的设计允许它捕捉长距离依赖关系,并在生成序列时保持高效的并行计算能力。这些特性使得 Transformer 成为许多序列到序列任务的强大模型。

在这里插入图片描述
在这里插入图片描述

对比 decoder 和 encoder 的差异 : 只有下图中红色方框的一点差异,在多头主注意力机制的基础上增加 mask 操作,那么这个操作有什么影响呢?
,

采用masked self-attention 之后a 和b 之间的依赖关系改编成为,b1 的输出只依赖于 a1,而b2的输出依赖与 a1 a2 ,如图所示依次类推,而原来的 self-attention b 则是有赖于所有的 a

在这里插入图片描述
更具体的如下图:
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述

2. encoder 和decoder 之间是如何处理和传递讯息的?self-attention

在 Transformer 架构中,编码器(Encoder)和解码器(Decoder)之间的信息传递是通过一种特殊的自注意力机制实现的,称为交叉注意力(Cross-Attention)或编码器-解码器注意力(Encoder-Decoder Attention)。以下是交叉注意力的实现原理及其细节:

  1. 编码器输出

    • 编码器处理输入序列(如源语言文本)并生成一系列连续的表示,这些表示捕获了输入数据的上下文信息。
  2. 查询(Query)、键(Key)、值(Value)

    • 在交叉注意力中,解码器的当前状态作为查询,而编码器的输出作为键和值。
    • 查询用于与编码器的键进行比较,以确定注意力权重。
  3. 计算注意力得分

    • 通过计算解码器中每个查询与编码器中每个键的兼容性来确定注意力得分。通常使用点积来计算兼容性:
      score = Q ⋅ K T d k \text{score} = \frac{Q \cdot K^T}{\sqrt{d_k}} score=dk QKT
    • 其中 ( Q ) 是查询矩阵,( K ) 是键矩阵,( d_k ) 是键向量的维度,分母中的平方根是缩放因子。
  4. 应用 softmax 函数

    • 使用 softmax 函数对每个查询的注意力得分进行归一化,得到编码器中每个值的注意力权重:
      weights=softmax(score)
  5. 加权值向量

    • 使用归一化的注意力权重对编码器的值向量进行加权求和,得到最终的交叉注意力输出:
      context = ∑ i weights i ⋅ V i \text{context} = \sum_{i} \text{weights}_i \cdot V_i context=iweightsiVi
    • 其中 ( V_i ) 是编码器中与键 ( K_i ) 相关联的值。
  6. 多头注意力

    • 交叉注意力可以扩展为多头注意力,其中查询、键和值被分割成多个头,每个头独立计算注意力输出,然后将这些输出拼接起来,并通过一个线性层进行整合。
  7. 残差连接和层归一化

    • 交叉注意力的输出通常会通过一个残差连接,即将注意力输出与其输入相加,以帮助梯度流动。
    • 然后,输出会通过层归一化来进一步稳定训练过程。
  8. 遮蔽(Masking)

    • 在解码器的自注意力层中使用遮蔽,以防止解码器在未来的步骤中获取信息。在交叉注意力中,遮蔽确保解码器只能看到编码器的输出,而不能访问未来的解码器状态。
  9. 并行处理

    • 交叉注意力允许并行处理解码器的所有步骤,因为每个步骤的输出仅依赖于当前步骤的输入和编码器的输出。
  10. 实现细节

    • 实现交叉注意力时,可以使用现有的自注意力函数,只需将解码器的状态作为查询,将编码器的输出作为键和值。
    • 在多头注意力中,查询、键和值会被分割成多个头,每个头独立计算注意力,然后使用线性层将结果合并。

交叉注意力是 Transformer 解码器的核心部分,它允许解码器在生成每个输出步骤时,有效地利用编码器捕获的输入序列的上下文信息。这种机制使得 Transformer 能够有效地处理序列到序列的任务,如机器翻译、文本摘要等。

在这里插入图片描述

在这里插入图片描述

decoder 与 encoder 的连接部分 cross attention 两个输入来自与 encoder 一个输入来自于 decoder ,具体的形式如下 2图所示
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述

3. 查询(Query)、键(Key)、值(Value)是三个核心概念及其具体含义和计算方式

在 Transformer 架构中使用的自注意力机制以及交叉注意力机制中,查询(Query)、键(Key)、值(Value)是三个核心概念,它们是从输入数据中派生出来的,用于计算注意力权重和聚合信息。以下是它们的具体含义和计算方式:

  1. 查询(Query)

    • 查询是用于表示解码器中当前步骤的状态,或编码器中当前步骤的状态(在自注意力中)。它们是输入数据通过可学习的线性变换得到的向量。
  2. 键(Key)

    • 键是编码器中输入数据的另一种表示,用于与查询进行比较以确定注意力得分。键同样通过可学习的线性变换从输入数据计算得到。
  3. 值(Value)

    • 值是编码器中与每个键相关联的实际数据,它们包含了编码器处理的输入信息。值也是通过可学习的线性变换从输入数据计算得到的。

计算过程如下:

  • 给定输入序列 ( X ),首先将其分别通过三个不同的可学习线性变换 ( W^Q ),( W^K ),和 ( W^V ) 来得到查询 ( Q ),键 ( K ),和值 ( V ):
    Q = X W Q , K = X W K , V = X W V Q = XW^Q, \quad K = XW^K, \quad V = XW^V Q=XWQ,K=XWK,V=XWV
    其中,( W^Q ),( W^K ),和 ( W^V ) 是模型参数。

  • 然后计算查询和键之间的点积来得到初步的注意力得分:
    score = Q ⋅ K T \text{score} = Q \cdot K^T score=QKT

  • 为了使得注意力得分不会因为维度的大小而受到影响,通常会对得分进行缩放,即除以键向量维度 ( d_k ) 的平方根:
    score = Q ⋅ K T d k \text{score} = \frac{Q \cdot K^T}{\sqrt{d_k}} score=dk QKT

  • 使用 softmax 函数对缩放后的注意力得分进行归一化处理,得到注意力权重:
    weights = softmax ( score ) \text{weights} = \text{softmax}(\text{score}) weights=softmax(score)

  • 最后,注意力权重用于加权和聚合值 ( V ),得到加权的输出,这通常在自注意力或交叉注意力中完成:
    output = ∑ i weights i ⋅ V i \text{output} = \sum_{i} \text{weights}_i \cdot V_i output=iweightsiVi

含义上,查询、键、值机制允许模型在处理序列数据时动态地聚焦于当前步骤最相关的信息。在解码器中,查询来自之前步骤的输出,而键和值来自编码器的输出,这样解码器就可以在生成每个词时考虑编码器中的所有信息,但更加关注与当前词最相关的部分。这种机制使得 Transformer 能够有效地处理长距离依赖问题,并提高了模型的灵活性和表现力。

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

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

相关文章

轻松应对大量订单:快递批量查询软件大揭秘

在日常生活和工作中,我们经常会遇到需要查询多个快递单号物流信息的情况,无论是电商卖家需要跟踪大量订单,还是消费者想要及时了解自己包裹的运输状态,手动逐一查询都显得既繁琐又低效。今天,我就向大家推荐一款效果非…

如何使用Alist:多网盘管理神器!一站式挂载、集成管理,支持WebDav

在日常生活中,我们或多或少会使用不同的网盘存储和处理各类文件,这往往导致我们的文件管理繁琐且效率低下。 Alist支持将多种不同的网盘服务集成到一个统一的界面中,让你能够轻松地挂载和管理所有文件。 通过Alist,你可以在一个界…

阿里发布“神笔马良版Sora”:寥寥数笔,动画自成

AI视频生成赛道风起云涌,国内外新颖的文生、图生视频产品层出不穷。在各大厂商的“内卷”之下,当下的视频生成模型各方面已经接近“以假乱真”的效果。例如,OpenAI 的 Sora 和国内的 Vidu、可灵等模型,通过利用 Diffusion Transfo…

structuredClone():JavaScript中深拷贝对象的最简单方法

前端岗位内推来了 深拷贝是传递或存储数据时的一项常规编程任务。 浅拷贝:只复制对象的第一层深拷贝:复制对象的所有层级 const obj { name: Tari, friends: [{ name: Messi }] };const shallowCopy { ...obj };const deepCopy dCopy(obj);console.lo…

C++——多态经典案例(二)制作饮品

案例:制作饮品的步骤是差不多一样的,假设都有四步,打开包装Open、煮水Boil、放杯子里面PutInCup、放佐料PutSomething、喝Drink 利用多态,制作茶和咖啡等饮品 分析:定义一个抽象类,纯虚函数包括Open、Boil…

C++(1):构造函数,复制函数和析构函数

引用 ref这里是对i起了一个别名 引用和指针区别区别1.引用直接绑定2.引用必须初始化 auyo a 10;自动匹配a的类型,但是初始化必须给值 内联函数放头文件 不传参形参有默认值 默认形参b有b后面的都必须有默认 函数重载:同名不同参(返回值不能作…

浅学 Pytorch

(一)Dataset Dataset 是一个抽象类,用于表示数据集。它封装了数据的加载和预处理逻辑,使得数据的读取和处理更加灵活和易于管理。在PyTorch中,torch.utils.data.Dataset 是一个基类,用户可以继承并实现自己…

软件渗透测试详细介绍,专业软件测评机构分享

随着信息技术的飞速发展,软件应用已成为我们生活和工作中不可或缺的一部分。然而,与此,信息安全问题也日益凸显,网络攻击的频繁发生让企业和用户面临前所未有的风险。为了更好地保护软件产品的安全性,渗透测试应运而生…

Mysql执行计划(上)

1、执行计划的概念 执行计划是什么:使用EXPLAIN关键字可以模拟优化器执行SQL查询语句,从而知道MySQL是如何处理你的SQL语句的。 作用:分析你的查询语句或是表结构的性能瓶颈 语法:Explain SQL语句 执行计划输出内容介绍&#…

记录一次网关无响应的排查

1. 使用jstack pid > thread.txt 打印进 thread.txt 文件里 去观察线程的状态。 我发现,一个线程在经过 rateliter的prefilter后, 先是调用 consume方法,获取到锁。 接着在执行 jedis的 evalsha命令时 一直卡在socket.read()的状态。 发现jedis官…

【iOS】OC关键字总结及底层原理(上)

目录 线程安全相关的关键字atomic&nonatomic 作用域相关的关键字static、extern、const&auto 读写权限相关和指定方法名的关键字内存管理相关的关键字(或方法)1. 引用计数的存储SideTableretain方法源码分析release方法源码分析dealloc方法源码分…

无缝融入,即刻智能[4]:MaxKB知识库问答系统[进一步深度开发调试,完成基于API对话,基于ollama大模型本地部署等]

无缝融入,即刻智能[4]:MaxKB知识库问答系统[进一步深度开发调试,完成基于API对话,基于ollama大模型本地部署等] 1.简介 MaxKB(Max Knowledge Base)是一款基于 LLM 大语言模型的开源知识库问答系统, 1.1 产品优势 开箱即用:支持直接上传文档、自动爬取在线文档,支持文本…

计算机网络 6.3Internet组成6.4Internet地址

第三节 Internet组成 一、基本结构及特点 1.Internet结构类型:分层网络互联群体。 2.主要构成:①主干网;②中间层网;③底层网。 3.结构特点: ①对用户隐藏网间连接的底层节点。 ②不指定网络互联的拓扑结构。 ③…

【时时三省】(C语言基础)数组作为函数参数

山不在高,有仙则名。水不在深,有龙则灵。 ——csdn时时三省 排序为升序-冒泡排序 冒泡排序的思想: 两两相邻的元素进行比较。并且可能得话需要交换 示例: 数组名 数组名是数组首元素的地址 但是有两个例外 1.sizeof(数组名)-数组名表示整个数组-计…

VMware虚拟机上网

一、VMware Network Adapter VMnet8配置 ①打开VMware软件:点击菜单栏→编辑→虚拟网络编辑器 ②点击NAT模式,使用管理员权限对子网IP和网关进行配置 ③子网IP和掩码就是这样,这里可以自行配置 ④点击上图中的NAT设置,配置网关 …

Rider中修改默认文件关联,自定义打开方式

问题描述 想用Qt designer打开.ui文件,但是在Rider中,IDE会默认通过text进行打开 解决方法 1,允许用户将特定的文件类型与一个应用程序关联起来 File -> Settings -> Editor -> File Types -> Recognized File Types下&…

uniapp微信小程序 canvas绘制圆形半透明阴影 createCircularGradient函数不支持透明度部分解决方案

背景 我需要在微信小程序中,用canvas绘制一个圆形钟表,在ui设计图中,有一部分阴影,这里我节选一下: 即深色发黑的部分 canvas通用阴影绘制 由于canvas中并不支持css那样简单的方式为圆形添加阴影或高光&#xff0c…

Spring Boot 默认可以同时处理多少个请求?

微信中阅读,欢迎关注 CodeFit。 创作不易,如果你觉得这篇文章对您有帮助,请不要忘了 点赞、分享 和 关注,为我的 持续创作 提供 动力! 解析 Spring Boot 的请求处理能力 目前,Spring Boot 是 Java 开发中不可或缺的框…

【大模型从入门到精通9】openAI API 提升机器推理:高级策略3

这里写目录标题 理论问题实践问题理论实践实践 理论问题 什么是链式思考推理(Chain of Thought Reasoning),它是如何增强人工智能模型在解决问题任务中的表现的? 链式思考推理提供的透明度如何使用户受益并建立对AI模型的信任&am…

基于python和aiohttp实现的web请求管理分发服务

想实现一个web请求管理分发服务,需要有如下功能: 1、第三方服务上报心跳,管理服务能监控第三方服务是否存活 2、管理服务支持http和ws服务的转发 3、管理服务支持最基础的转发策略,比方说轮询 直接上代码 一、网络和路由接口…