Transformer 学习与解读

news/2025/1/22 11:29:00/文章来源:https://www.cnblogs.com/mercurystraw/p/18685332

LLM学习笔记

注意力机制

sequence to sequence (seq2seq)输入N个向量,输出任意可能数量的向量(由机器决定);如果输出N个向量的任务就叫做Sequence Labeling

李沐课程讲义:https://zh-v2.d2l.ai/chapter_attention-mechanisms/self-attention-and-positional-encoding.html

image-20250118131939176

在注意力机制的背景下,自主性提示被称为查询(query)。 给定任何查询,注意力机制通过注意力汇聚(attention pooling) 将选择引导至感官输入(sensory inputs,例如中间特征表示)。 在注意力机制中,这些感官输入被称为(value)。 更通俗的解释,每个值都与一个(key)配对, 这可以想象为感官输入的非自主提示。 如 图10.1.3所示,可以通过设计注意力汇聚的方式, 便于给定的查询(自主性提示)与键(非自主性提示)进行匹配, 这将引导得出最匹配的值(感官输入)。

image-20250118133040764

注意力分数是衡量 querykey 之间相似度的值。它表示在注意力机制中,模型应该“关注”哪些部分的信息。注意力分数越高,表示 query 和 key 之间的相关性越强。

注意力权重是注意力分数经过 softmax 函数归一化后的结果。softmax 将分数转换为概率分布,确保所有权重的总和为 1。注意力权重决定了每个 key 对最终输出的贡献程度。

两种常见的注意力分数计算方法

使用单层 MLP(多层感知机) (查询和键是不同长度的矢量时)

  • querykey 拼接起来,输入到一个单隐藏层的 MLP 中。
  • MLP 输出一个标量值,作为 query 和 key 的注意力分数。
  • 这种方法可以捕捉 query 和 key 之间的非线性关系

直接计算内积 (查询和键具有相同的长度)

  • 直接计算 querykey 的内积(点积),作为注意力分数。
  • 这种方法假设 query 和 key 在同一个向量空间中,内积越大表示相似度越高。
  • 内积计算简单高效,常用于 Transformer 等模型中。

自注意力机制

有了注意力机制之后,我们将词元序列输入注意力池化中, 以便同一组词元同时充当查询 query、键key和值value(而将a变为q k v则需要Wq Wk Wv矩阵进行变换)。 具体来说,每个查询都会关注所有的键-值对并生成一个注意力输出。 由于查询、键和值来自同一组输入,因此被称为 自注意力(self-attention)

下图:首先使用q2和ki计算注意力分数(dot product点积或者加性),接着可以对注意力分数进行softmax归一化,得到α'。通过注意力权重α'和值向量vi进行加权求和,得到输出向量b2。表示模型在生成第 2 个位置的输出时,对所有输入位置的信息的加权整合。

image-20250118162253648

image-20250118163454812

image-20250118165006864

image-20250118165237789

只有Wq Wk Wv 未知,需要通过训练数据计算

多头自注意力机制(Multi-head Self-attention)

  • 多头机制是指并行地使用多个自注意力机制(称为“头”),每个头学习不同的表示子空间。
  • 不同的头可以关注输入序列中不同的部分,例如一个头关注局部信息,另一个头关注全局信息。
  • 通过并行计算多个注意力头,模型可以学习到更丰富的特征表示。

image-20250118210204317

得到b(i,1)和b(i,2)再进行矩阵连接传入到下一层。

位置编码 positional encoding

在处理词元序列时,循环神经网络是逐个的重复地处理词元的, 而自注意力则因为并行计算而放弃了顺序操作(对所有的输入操作,从而位置信息不重要了)。 为了使用序列的顺序信息,通过在输入表示中添加 位置编码(positional encoding)来注入绝对的或相对的位置信息。

自注意力机制失去了位置信息,如果位置信息比较重要,可以加入位置信息,只需要为每个位置添加一个位置向量e^i,输入变为:

\[e^{i}+a^{i} \]

image-20250118213754184

在图像识别中,训练资料较少时CNN效果比较好,因为采用接受域,相较于全局计算的自注意力训练量较大;训练资料较大时自注意力效果更好

Transformer

基于编码器-解码器架构来处理序列对,纯基于self-attention的(没有RNN的)

Encoder:输入一个vector sequence,输出另外一个vector sequence

image-20250119140810873

residual 残差(原输入加到输出上)

不能用Batch Norm 要用Layer Norm。

Batch Norm:对不同样本的同一维度特征进行正则化 ,不适合序列长度会变得NLP应用

Layter Norm:对同一样本的不同维度特征进行正则化

image-20250119141123612

残差网络

  1. 残差网络(避免梯度消失w3(w2(w1x+b1)+b2)+b3,如果 w1,w2,w3 特别小,0.000000……1,x 就没了,所以改为【w3(w2(w1x+b1)+b2)+b3+x】)
  2. x1作为残差结构的直连向量,直接和 z1 相加,之后进行 Layer Norm 操作,得到浅粉色向量 z1,z1 经过前馈神经网络(Feed Forward)层,经过残差结构与自身z1相加,之后经过 LN 层,得到一个输出向量 r1;
  3. Add & Norm 就是 Residual残差网络和标准化
  4. 残差结构的作用:避免出现梯度消失的情况
  5. Layer Norm 的作用:为了保证数据特征分布的稳定性,并且可以加速模型的收敛

image-20250119142945222

Decoder

Auto-Aggressive(自回归)

输入时加一个特殊的标志BEGIN符号。

V 是 中文词汇表,3000常用汉字,根绝Encoder中KQ输出的softmax函数的概率值,选择分数最高的对应汉字

image-20250119143233933

Decoder接着会把自己的输出当做下一个输入。

image-20250119143618989

Decoder中的Masked,即在算bi时,不考虑i之后的aj。这样更接近于decoder的运作方式。(在解码时候是a1 a2……一个一个产生的,要计算b2时,没有a3 a4)

image-20250119144129584

Decoder如何决定输出序列的长度?

用特殊符号END表示"断"。让机器产生END的概率最大时表示结束。

image-20250119144545944

AT VS NAT

Non-Auto-Aggressive(非自回归)

不依赖于之前生成的步骤,所有步骤可以并行生成。

NAT会给多个BEGIN,一次性生成完成完整的句子(注意位置嵌入的作用)。要由特殊方法判断终止。

NAT可以并行化,可以控制输出长度(在语音中可以据此控制说话速度)。但NAT质量通常不如AT。

  • 自回归模型
    • 文本生成(如 GPT)、对话系统、长文本翻译。
  • 非自回归模型
    • 实时翻译、语音合成、图像生成。

image-20250119145130059

Decoder架构相较于Encoder就加了一块Cross attention模块。

Decoder中间的 Cross attention (交叉注意力机制)三个input,K和V来自于Encoder,Q来自于Decoder

image-20250119150526600

如下图 Cross attention :可以理解为 Decoder 产生的Q 查询 从Encoder KV 键值对 里查询信息

image-20250119150809655

How to train?

每产生一个字就是从几千个字中进行的分类问题。训练时希望所有的字(含END)的交叉熵 之和(cross entropy)最小。

训练的时候有正确答案ground truth

测试的时候没有正确答案

image-20250119152249011

训练和测试不一致(Exposure Bias):

Exposure Bias 的定义

  • 训练阶段
    • 自回归模型在训练时,通常使用 Teacher Forcing 方法,即每一步生成时,模型的输入是真实的上一时刻的目标词(Ground Truth)。
    • 例如,生成句子 "I love you" 时,模型在生成 "love" 时,输入是真实的 "I"。
  • 推理阶段
    • 在推理时,模型没有真实的目标词作为输入,只能使用自己生成的上一时刻的词作为输入。
    • 例如,生成句子 "I love you" 时,模型在生成 "love" 时,输入是自己生成的 "I"。
  • 问题
    • 如果模型在生成过程中出现错误(如生成一个不准确的词),这个错误会作为输入传递给下一步,导致错误累积,最终影响生成结果。

在训练的时候,给 Decoder 一些错误的信息,反倒会提升模型精确度。

这个方法叫 “Scheduled Sampling” 计划采样

  • 在训练过程中,逐渐从使用真实数据(Ground Truth)过渡到使用模型生成的数据作为输入。
  • 例如,训练初期使用 100% 的真实数据,后期逐渐增加使用模型生成数据的比例。

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

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

相关文章

JDK中的可视化故障处理工具

JDK提供了几个功能集成度更高的可视化工具,我们可以使用这些可视化工具以更加便捷的方式进行进程故障诊断和调试工作。 今天就简单介绍一些JDK中的可视化故障处理工具。 JHSDB:基于服务性代理的调试工具 在说JHSDB之前,先来了解一下JCMD和JHSDB这两个集成式的多功能工具箱,…

ExKMP Z函数

讲解Z函数(ExKMP),附模板及例题更新日志 20250122:开工。思路 我们定义 \(z_i\) 表示从 \(i\) 开始的后缀与整个字符串的最长公共前缀长度。 考虑它的作用,假如我们要字符串匹配,将模式串接在前面并以特殊字符分隔,然后 \(O(n)\) 遍历原串,当 \(z_i=|T|\)(\(T\) 为模式…

【资产梳理】 攻击面资产梳理可视化工具

免责声明: ⽂中所涉及的技术、思路和⼯具仅供以安全为⽬的的学习交流使⽤,任何⼈不得将其⽤于⾮法⽤途以及盈利等⽬的,否则后果⾃⾏承担。所有渗透都需获取授权!确定攻击面对于防御和进攻网络安全团队都至关重要。毫无疑问,可视化映射比简单的列表更有效。专家可以快速掌握…

OpenWRT24.10旁路由挂载USB移动硬盘,配置Samba4,作为NAS使用,解决中文不显示,乱码,解决断电重启后挂载失败问题

1. 为何选择OpenWRT 24.10,及如何配置旁路由,或者IPv6地址 看这篇:参OpenWRT24.10配置作为旁路由,并配置获取IPv4和IPv6地址 使用的OpenWRT固件是从这里下载的:https://openwrt.ai/ 2.挂载大容量USB移动硬盘 2.1 安装必备插件 kmod-fs-ntfs3 kmod-fs-ext4 kmod-fs-exfat…

如何迅速并识别处理MDL锁阻塞问题

TaurusDB推出MDL锁视图功能,帮助用户迅速识别并处理MDL锁阻塞问题,从而有效减少对业务的负面影响,提升数据库管理效率。摘要:TaurusDB推出MDL锁视图功能,帮助用户迅速识别并处理MDL锁阻塞问题,从而有效减少对业务的负面影响,提升数据库管理效率。本文分享自华为云社区《…

运维职业要求

摘抄知乎@Hi峰兄运维技能导图量化自己的技能深度 级别 水平 0   啥都不懂 1   理解基本概念,应用场景 2   基本的安装,配置,使用,常用配置修改,定位基本问题 3 根据实际情况定位、优化服务,了解服务核心模块运行机制,熟悉服务的各种使用方法 4 深…

关于RNN (循环神经网络)相邻采样为什么在每次迭代之前都需要将参数detach

转自:https://www.cnblogs.com/catnofishing/p/13287322.htmldetach到底有什么作用呢 首先要明确一个意识:pytorch是动态计算图,每次backward后,本次计算图自动销毁,但是计算图中的节点都还保留。 ​ 方向传播直到叶子节点为止,否者一直传播,直到找到叶子节点 我的答案是…

网站后台上传商品功能失效,如何排查和修复?

网站后台上传商品功能失效会影响正常的业务运营,因此需要尽快排查并修复。以下是详细的排查步骤和解决方案:确认前端页面加载情况: 首先,在浏览器中打开网站后台,检查页面是否完全加载,特别是上传商品相关的JavaScript和CSS文件。如果存在资源加载失败的情况,可能是由于…

云服务器频繁出现大流量提醒及访问异常

您好,当您频繁收到关于服务器流量过大的提醒,并且站点访问出现异常(如502 Bad Gateway或504 Gateway Timeout)时,这可能是由以下几个方面的原因造成的。下面我们将详细介绍这些问题及其对应的解决方案:流量来源分析:首先,确定流量来源是否合法。使用流量分析工具(如(网…

云服务器未预装网站管理系统

您好,当您购买新的云服务器时发现未预装网站管理系统,这通常是因为不同服务商提供的初始镜像有所不同。以下是一些常见原因及其解决方案:操作系统选择:在选择操作系统时,请注意某些版本可能默认不包含网站管理助手。如果您希望获得预装的建站工具,建议选择带有集成环境的…

IDEA如何快速回到上一次编辑的地方

前言 大家好,我是小徐啊。我们在使用IDEA开发Java应用的时候,经常是需要在不同的代码文件里面来回编辑的,这个是开发的常态。 如果小伙伴们不清楚IDEA如何快捷地切换代码文件,就会极大地影响开发效率。今天,小徐就来介绍其中的一种切换方式:回到上一次编辑的地方。 如何回…

织梦网站修改后台:掌握织梦CMS的后台管理

问题描述 织梦CMS是一款流行的CMS系统,用户可以通过后台管理系统进行网站内容和模板的修改。了解如何使用织梦CMS进行后台修改是提升网站管理能力的关键。 解决方案登录后台管理使用管理员账号登录织梦CMS后台管理系统。编辑内容在“内容管理”模块中编辑或添加新的文章、产品…