深度学习11——Tokenization、embedding、位置编码
1. Tokenization 与 Embedding文本进入 Transformer 前通常经历以下过程文本 - Tokenizer - Token - Token ID - Embedding - Token 向量TokenizationTokenizer 负责将文本切分成 token。根据词表把每个 token 转换成整数 ID。例如我喜欢猫 - [我, 喜欢, 猫] - [2, 3, 4]词表可以理解为一张映射表PAD - 0 UNK - 1 我 - 2 喜欢 - 3 猫 - 4 狗 - 5Token 不一定是完整的字或单词也可能是子词。具体如何切分取决于 Tokenizer 使用的算法和词表。Token ID 只是 token 在词表中的编号没有大小、距离等数学含义。EmbeddingEmbedding 根据 Token ID 查询对应的向量本质上是一张可训练的向量表Embedding.weight.shape [vocab_size, d_model]其中vocab_size 词表中的 token 数量 d_model 每个 token 的向量维度例如embeddingnn.Embedding(num_embeddings10000,embedding_dim768)Embedding 内部有一个形状为[10000, 768]的参数矩阵。输入input_idstorch.tensor([2,3,4])# shape: [3]经过 Embeddingxembedding(input_ids)# shape: [3, 768]相当于查询xembedding.weight[input_ids]也就是取出参数矩阵的第 2、3、4 行。对于 Batch 输入input_ids: [B, S]经过 Embedding[B, S] - [B, S, D]其中B batch_size S seq_len D d_modelTokenizer 与 Embedding 的区别项目TokenizerEmbedding输入原始文本Token ID输出Token ID浮点向量主要操作文本切分和词表映射根据 ID 查询向量是否属于神经网络参数通常不是是是否通过反向传播更新通常不会会Tokenizer 的词表和切分规则可能在模型训练前通过语料构建但正式训练和使用模型时通常是固定的。2. 为什么不能直接把 Token ID 输入神经网络Token ID 是类别编号不是具有实际数值意义的特征。假设猫 - 4 狗 - 5 苹果 - 6这些编号只是词表中的位置不能说明狗比猫大 苹果比狗大 猫和狗的语义距离是 1 猫和苹果的语义距离是 2如果直接把 ID 当作普通数字输入神经网络模型可能错误地把 ID 的大小和差值当成有效特征例如错误地认为编号 4 和编号 5 比较接近 所以“猫”和“狗”一定相似但词表编号可以任意调整猫 - 800 狗 - 12 苹果 - 13编号改变后数值距离也会改变但词语含义并没有改变。因此正确流程是Token ID - Embedding 查表 - 具有多个特征维度的浮点向量 - 神经网络Embedding 让每个 token 拥有独立的向量表示模型不需要使用 Token ID 的数值大小。3. Embedding 为什么是可学习参数Embedding 本质上是一个参数矩阵Embedding.weight: [vocab_size, d_model]模型刚初始化时每个 token 的向量通常是随机的猫 - [随机数, 随机数, ...] 狗 - [随机数, 随机数, ...]此时这些向量还没有明确含义。训练过程中前向传播 - 计算预测结果 - 计算 Loss - 反向传播 - 更新模型参数Embedding 的weight也参与反向传播因此会被优化器更新loss.backward()optimizer.step()如果输入中出现了“猫”与“猫”对应的 Embedding 向量就可能根据 Loss 获得梯度并被调整。为什么不把 Embedding 固定住不同任务需要模型关注不同的信息情感分析更关注“喜欢”“讨厌”“开心”等情绪信息 机器翻译更关注不同语言之间的语义对应关系 文本生成更关注 token 在上下文中的使用方式 代码模型更关注变量、语法和程序结构让 Embedding 可学习模型就可以根据训练目标自动调整每个 token 的初始表示。经常出现在相似上下文中的 token其向量可能逐渐接近。例如我喜欢猫 我喜欢狗 我养了一只猫 我养了一只狗“猫”和“狗”在这些句子中的使用方式相似训练时可能获得相似的更新方向因此向量可能逐渐接近。不过这种接近不是人工规定的也不保证每个相似词都一定相邻。它表示的是模型认为这些 token 在当前训练任务中的使用方式相似Token Embedding 与上下文表示的区别Embedding 表中每个 Token ID 对应一个固定的初始向量。例如两个句子苹果很好吃 苹果发布了新手机两个“苹果”查询到的初始 Token Embedding 相同。但是经过 Transformer 后模型会结合上下文产生不同的 Hidden State苹果很好吃 - 更接近水果含义 苹果发布了新手机 - 更接近公司含义因此Token Embedding与 Token ID 对应的初始表示 Hidden State经过上下文处理后的动态表示一个词的多种含义主要由 Transformer 根据上下文进一步区分而不是只依赖初始 Embedding。4. 输入 Embedding 与输出 LM Head语言模型的完整处理流程通常是文本 - Tokenizer - Token ID - Token Embedding - Transformer - Hidden State - LM Head - 每个 Token 的预测分数 - Softmax - 下一个 Token 的概率输入 Embedding输入 Embedding 把 Token ID 转换成向量input_ids: [B, S] - Embedding x: [B, S, D]它的参数形状是Embedding.weight: [V, D]其中V vocab_size D d_model输出 LM HeadTransformer 最后输出hidden_states: [B, S, D]语言模型需要预测词表中的下一个 token因此必须把每个D维 Hidden State 转换成V个词表分数lm_headnn.Linear(D,V,biasFalse)形状变化[B, S, D] - [B, S, V]输出的logits[b, s, :]表示第b个样本、第s个位置对整个词表的预测分数。计算过程可以写成logits hidden_states lm_head.weight.T其中hidden_states: [B, S, D] lm_head.weight.T: [D, V] logits: [B, S, V]为什么输入 Embedding 和 LM Head 可以共享权重输入 Embedding 的参数形状是[V, D]LM Head 的权重形状也是[V, D]两者形状相同因此可以共享同一个参数矩阵lm_head.weighttoken_embedding.weight这种做法叫Weight Tying权重绑定或权重共享输入时这个矩阵用于Token ID - 查询对应的 Token 向量输出时这个矩阵用于Hidden State - 与所有 Token 向量计算匹配分数可以理解为输入阶段取出某个 token 的表示 输出阶段判断当前 Hidden State 最接近哪个 token 的表示共享权重的主要好处减少模型参数量。让输入和输出使用一致的 token 表示空间。提高同一组参数的利用率。在很多语言模型中有助于训练和泛化。例如token_embeddingnn.Embedding(vocab_size,d_model)lm_headnn.Linear(d_model,vocab_size,biasFalse)lm_head.weighttoken_embedding.weight权重共享是常见设计但不是所有语言模型都必须采用。5. 为什么 Transformer 需要位置编码Self-Attention 根据 token 内容计算它们之间的关系但它天然不知道 token 的顺序。例如小明喜欢小红 小红喜欢小明两句话包含相似的 token但顺序不同含义也不同。如果没有位置编码Self-Attention 可以知道序列中有哪些 token却无法天然表示哪个 token 在前 哪个 token 在后 两个 token 相距多远因此需要把位置信息加入模型。常见方法包括方法主要思想Sinusoidal Positional Encoding使用固定的正弦、余弦函数表示绝对位置Learnable Positional Embedding为每个绝对位置学习一个向量Relative Position Encoding表示两个 token 之间的相对距离RoPE根据位置旋转 Q、KALiBi给注意力分数添加距离偏置6. 正弦、余弦位置编码原始 Transformer 使用固定的 Sinusoidal Positional EncodingPE(pos, 2i) sin(pos / 10000^(2i / d_model)) PE(pos, 2i1) cos(pos / 10000^(2i / d_model))其中pos token 在序列中的位置 i 维度编号 d_model Token Embedding 的维度基本规则偶数维度使用 sin 奇数维度使用 cos 不同维度使用不同频率正弦位置编码不是训练参数而是通过公式预先计算出来的固定向量。为什么不同维度使用不同频率不同频率可以让位置编码同时表达不同范围的位置变化高频维度变化较快适合区分相邻位置 低频维度变化较慢适合表示较长距离的位置关系可以把它类比为使用多种时间单位记录时间秒、分钟、小时、日期只使用一种频率能够表达的位置模式比较单一使用多种频率组合可以让每个位置拥有更容易区分的编码。为什么可以与 Token Embedding 直接相加Token Embedding 和位置编码具有相同的最后一维Token Embedding: [B, S, D] Position Encoding: [1, S, D]通过广播[B, S, D] [1, S, D] - [B, S, D]相加后每个 token 的向量同时包含这个 token 是什么 这个 token 在什么位置相加确实会把内容和位置信息混合在同一个向量中但模型可以通过训练逐渐学会如何使用这些信息。使用相加而不是拼接还有一个重要好处相加[D] [D] - [D] 拼接[D] 和 [D] - [2D]相加不会扩大模型维度也不需要修改后续 Linear 层的输入大小。7. 可学习位置 Embedding 与相对位置编码可学习的绝对位置 Embedding可学习位置 Embedding 为每个位置准备一个可训练向量position_embeddingnn.Embedding(max_seq_len,d_model)参数矩阵形状[max_seq_len, d_model]例如位置 0 - 一个可学习向量 位置 1 - 一个可学习向量 位置 2 - 一个可学习向量使用时Token Embedding Position Embedding与固定正弦编码相比它可以根据训练任务自动调整但通常受到max_seq_len限制超出已定义的位置范围时不能直接查询。相对位置编码正弦位置编码和可学习位置 Embedding主要表示绝对位置这是序列中的第 10 个 token相对位置编码关注两个 token 的距离和方向另一个 token 在当前 token 前面 2 个位置 另一个 token 在当前 token 后面 1 个位置例如A B C D以B为当前 tokenA 相对 B 的位置-1 B 相对 B 的位置 0 C 相对 B 的位置1 D 相对 B 的位置2语言中的很多关系更依赖相对距离而不是 token 的绝对编号。8. RoPE 与 ALiBiRoPERoPE 全称是Rotary Position Embedding 旋转位置编码RoPE 不把位置向量直接加到 Token Embedding 上而是根据 token 的位置旋转 Q 和 KQ - 按位置旋转后的 Q K - 按位置旋转后的 K V - 通常不旋转多头注意力中的形状通常是Q、K、V: [B, H, S, d]RoPE 会在最后一个维度上将特征两两分组并使用不同角度旋转[x0, x1] [x2, x3] [x4, x5]旋转不会改变张量形状[B, H, S, d] - [B, H, S, d]为什么 RoPE 作用于 Q 和 K注意力分数由 Q 和 K 的内积决定scores Q K.TRoPE 根据位置分别旋转 Q 和 K。两个旋转后向量的内积会受到它们位置差的影响位置 m 的 Q 与 位置 n 的 K计算得到的注意力分数能够反映相对位置 n - m因此 RoPE 不是简单告诉模型“这是第几个位置”而是直接让 Q 和 K 的匹配分数包含相对位置信息。V 主要负责传递被关注 token 的内容不参与注意力分数Q K.T的计算所以通常不需要旋转 V。ALiBiALiBi 不修改输入 Embedding也不旋转 Q 和 K而是直接给注意力分数添加一个与距离有关的偏置scores Q K.T distance_bias通常 token 距离越远加入的惩罚越大距离近 - 惩罚较小 距离远 - 惩罚较大不同注意力头可以使用不同的距离斜率从而学习不同范围的注意力关系。现阶段可以简单记住正弦位置编码把固定位置向量加到输入上 可学习位置 Embedding把可训练位置向量加到输入上 相对位置编码关注 token 之间的相对距离 RoPE旋转 Q 和 K让注意力内积包含相对位置 ALiBi给注意力分数加入与距离有关的偏置

相关新闻

VMware Workstation / Fusion 安装与使用

VMware Workstation / Fusion 安装与使用

一、引言 在软件开发、系统测试或技术学习过程中,我们常常需要在同一台计算机上运行多个操作系统环境。例如,在 Windows 宿主机上运行 Linux 发行版进行开发测试,或在 macOS 上运行旧版 Windows 以兼容特定软件。传统解决方案是安装双系统&a…

2026/7/29 18:52:15阅读更多 →
基于S7-300 PLC的宾馆热水系统自动化控制方案

基于S7-300 PLC的宾馆热水系统自动化控制方案

1. 项目背景与需求分析宾馆热供水系统是酒店基础设施中的关键环节,直接关系到住客体验和运营成本。传统手动控制方式存在水温波动大、能耗高、故障响应慢等问题。采用S7-300 PLC与组态王搭建自动化控制系统,可实现以下核心功能:24小时恒温供水…

2026/7/29 18:52:15阅读更多 →
Gemini 3.1 Pro国内合规使用指南与API实战

Gemini 3.1 Pro国内合规使用指南与API实战

1. Gemini 3.1 Pro 是什么?Gemini 3.1 Pro 是谷歌最新推出的一款人工智能大模型,属于 Gemini 系列的最新版本。作为一款多模态 AI 模型,它能够处理文本、图像、音频等多种形式的数据输入,并生成高质量的响应内容。相比前代版本&am…

2026/7/29 18:52:15阅读更多 →
PixiJS Live2D插件技术解析:解决Web端2D模型交互的5大核心挑战

PixiJS Live2D插件技术解析:解决Web端2D模型交互的5大核心挑战

PixiJS Live2D插件技术解析:解决Web端2D模型交互的5大核心挑战 【免费下载链接】pixi-live2d-display A PixiJS plugin to display Live2D models of any kind. 项目地址: https://gitcode.com/gh_mirrors/pi/pixi-live2d-display PixiJS Live2D插件是一个专…

2026/7/29 20:13:36阅读更多 →
Java反混淆终极指南:如何使用Java-Deobfuscator轻松还原被混淆的代码

Java反混淆终极指南:如何使用Java-Deobfuscator轻松还原被混淆的代码

Java反混淆终极指南:如何使用Java-Deobfuscator轻松还原被混淆的代码 【免费下载链接】deobfuscator The real deal 项目地址: https://gitcode.com/gh_mirrors/de/deobfuscator Java-Deobfuscator是一款功能强大的Java反混淆工具,专门用于对抗市…

2026/7/29 20:13:36阅读更多 →
猫抓插件终极指南:零门槛掌握免费网页资源嗅探

猫抓插件终极指南:零门槛掌握免费网页资源嗅探

猫抓插件终极指南:零门槛掌握免费网页资源嗅探 【免费下载链接】cat-catch 猫抓 浏览器资源嗅探扩展 / cat-catch Browser Resource Sniffing Extension 项目地址: https://gitcode.com/GitHub_Trending/ca/cat-catch 还在为无法下载网页上的视频、音频而烦恼…

2026/7/29 20:13:36阅读更多 →
猫抓浏览器插件:5分钟掌握免费资源嗅探的终极技巧

猫抓浏览器插件:5分钟掌握免费资源嗅探的终极技巧

猫抓浏览器插件:5分钟掌握免费资源嗅探的终极技巧 【免费下载链接】cat-catch 猫抓 浏览器资源嗅探扩展 / cat-catch Browser Resource Sniffing Extension 项目地址: https://gitcode.com/GitHub_Trending/ca/cat-catch 猫抓浏览器插件是一款强大的免费资源…

2026/7/29 20:13:36阅读更多 →
信号与系统:从傅里叶变换到数字滤波,掌握信息处理的底层逻辑

信号与系统:从傅里叶变换到数字滤波,掌握信息处理的底层逻辑

1. 从“信号”与“系统”的日常误解谈起如果你问一个非电子或通信专业的朋友,听到“信号与系统”这个词会想到什么,大概率会得到“手机信号”、“Wi-Fi信号”或者“操作系统”这类答案。这很正常,因为“信号”和“系统”这两个词在我们的日常…

2026/7/29 20:13:36阅读更多 →
5分钟上手BeeRef:创作者必备的参考图管理神器

5分钟上手BeeRef:创作者必备的参考图管理神器

5分钟上手BeeRef:创作者必备的参考图管理神器 【免费下载链接】beeref BeeRef Reference Image Viewer 项目地址: https://gitcode.com/gh_mirrors/be/beeref BeeRef是一款专为创作者打造的参考图管理工具,能够帮助设计师、插画师和摄影师高效组织…

2026/7/29 20:11:31阅读更多 →
覆盖国产 + 海外 + 开源模型,OpenClaw 2.7.9 Windows/Mac 双端部署详解

覆盖国产 + 海外 + 开源模型,OpenClaw 2.7.9 Windows/Mac 双端部署详解

🔹 工具基础介绍 OpenClaw 是开源生态中一款实用性较强的本地智能工具,凭借本地离线运行、可视化图形操作和任务自动化三大核心特性,赢得了众多用户的青睐。与普通在线对话AI工具不同,它属于能够直接操控本机软硬件的智能数字员工…

2026/7/29 9:47:45阅读更多 →
伺服阀焊完微漏毁整机?精密激光焊接三关锁住高压

伺服阀焊完微漏毁整机?精密激光焊接三关锁住高压

所谓液压伺服阀体的精密激光焊接,是用激光束对阀座壳体(通常为不锈钢或铝合金)进行密封焊接,使阀体在21-35MPa的高压液压油或压缩气体中长期运行而不发生介质泄漏。液压伺服阀是高端液压系统的"大脑"。从航空航天飞行控…

2026/7/29 7:00:19阅读更多 →
D2DX:三步实现《暗黑破坏神2》高清宽屏体验的终极指南

D2DX:三步实现《暗黑破坏神2》高清宽屏体验的终极指南

D2DX:三步实现《暗黑破坏神2》高清宽屏体验的终极指南 【免费下载链接】d2dx D2DX is a complete solution to make Diablo II run well on modern PCs, with high fps and better resolutions. 项目地址: https://gitcode.com/gh_mirrors/d2/d2dx 你是否还在…

2026/7/29 7:58:51阅读更多 →
28. Agent 执行到一半想暂停?用 interrupt 给它设个“关卡“!

28. Agent 执行到一半想暂停?用 interrupt 给它设个“关卡“!

28. Agent 执行到一半想暂停?用 interrupt 给它设个“关卡“! 在构建复杂的 Agent 系统时,我们经常会遇到这样的场景:Agent 正在执行一个多步骤的任务,比如“下单购买商品”,但执行到一半时,我们…

2026/7/29 0:01:46阅读更多 →
自律同行,突破无界!NANK南卡正式官宣曾舜晞成为品牌代言人

自律同行,突破无界!NANK南卡正式官宣曾舜晞成为品牌代言人

近日,国际专注开放式技术研发的声学品牌Nank南卡,正式官宣实力艺人曾舜晞担任品牌代言人。消息一经发出便轰动全网。为什么耳机品牌不选择流量明星、老牌歌手?而且是选择曾舜晞?让我们一起来探索一下!比起短期的流量&a…

2026/7/29 0:01:46阅读更多 →
【RT-DETR多模态创新改进】CVPR 2025 | 独家特征融合创新改进篇 | 引入RLAB残差线性注意力模块,有效融合并强调多尺度特征,多种改进点,适合红外与可见光融合目标检测任务,有效涨点

【RT-DETR多模态创新改进】CVPR 2025 | 独家特征融合创新改进篇 | 引入RLAB残差线性注意力模块,有效融合并强调多尺度特征,多种改进点,适合红外与可见光融合目标检测任务,有效涨点

一、本文介绍 🔥本文在RT-DETR多模态融合目标检测中引入RLAB残差线性注意力模块,可在不同模态特征交互阶段进行多次残差细化,使可见光、红外等特征在尺度、语义和空间位置上更好对齐;随后将细化特征与解码器输出拼接并生成Q、K、V,通过线性注意力自适应强化关键通道、目…

2026/7/29 0:01:46阅读更多 →
YOLOv8推理性能优化:从1.2FPS到35FPS的全链路加速实践

YOLOv8推理性能优化:从1.2FPS到35FPS的全链路加速实践

如果你在部署 YOLOv8 时,发现推理速度只有可怜的 1-2 FPS,而别人的演示视频却能跑到 30 FPS 以上,那么问题很可能不在模型本身,而在于你的整个处理链路。很多开发者拿到一个训练好的 YOLOv8 模型后,会直接使用官方示例…

2026/7/28 20:22:24阅读更多 →
Coze与Dify对比指南:低代码AI应用开发从入门到实战

Coze与Dify对比指南:低代码AI应用开发从入门到实战

1. 从零到一:为什么你需要了解 Coze 和 Dify?如果你对 AI 应用开发感兴趣,但一看到“大模型”、“智能体”、“工作流”这些词就头疼,觉得门槛太高,那这篇文章就是为你准备的。很多开发者,包括我自己&#…

2026/7/29 4:31:51阅读更多 →
AI生图工具怎么选?2026年6月版实测对比

AI生图工具怎么选?2026年6月版实测对比

做自媒体的朋友应该都有体会:配图一直是个让人头疼的问题。2026年,AI生图工具已经非常成熟了,但工具太多反而不知道怎么选。以下是截至2026年6月我对主流AI生图工具的实测对比。Midjourney V8.1:速度之王2026年6月11日&#xff0c…

2026/7/29 14:26:42阅读更多 →