ARTICLE DETAIL

资讯详情

深耕网站建设与运营推广的一线实战洞察。

位置嵌入Position Embedding:Transformer如何感知词序?(train-llm-from-scratch)

位置嵌入Position Embedding:Transformer如何感知词序?(train-llm-from-scratch) 位置嵌入Position EmbeddingTransformer如何感知词序train-llm-from-scratch【免费下载链接】train-llm-from-scratchA straightforward method for training your LLM, from downloading data to generating text.项目地址: https://gitcode.com/GitHub_Trending/tr/train-llm-from-scratch在大语言模型LLM训练中位置嵌入Position Embedding是让 Transformer 感知词序的关键机制。本项目 train-llm-from-scratch 用一个极简的 GPT 式模型从数据下载到生成文本完整展示了 LLM 的训练全流程其中位置嵌入的实现只用了两行核心代码——是新手理解模型如何区分『我爱你』和『你爱我』的绝佳切入点。为什么 Transformer 天生看不见词序Transformer 的核心运算——自注意力Self-Attention——本质上是 token 向量之间的点积打分。它只看内容不看位置把输入词的顺序打乱注意力算出的结果只是跟着打乱输出完全等价学术上叫置换等变性。这意味着如果没有位置信息模型会把「今天天气真好」和「真好天气今天」看成同一句话。上图是项目中单个注意力头的数据流Q/K/V 投影 → 打分 → 因果掩码 → 加权求和可以看到整个过程只涉及 token 向量本身没有任何位置参与——这就是为什么必须额外注入位置信息。train-llm-from-scratch 如何实现位置嵌入本项目采用的是最经典的方案可学习的绝对位置嵌入Learnable Absolute Position Embedding。核心实现位于 src/models/transformer.py只有两个关键部分# 位置嵌入表为上下文中的每个位置 t0 ~ context_length-1 # 分配一个独立的可学习向量维度与 token 嵌入相同 self.position_embed nn.Embedding(context_length, n_embed) # 前向时取出 0..T-1 的位置索引出位置向量 pos_embedding self.position_embed(self.pos_idxs[:T]) return tok_embedding pos_embedding # 直接相加送进 Transformer 块整个过程可以总结为三步词嵌入把 token id 查表成向量e_t表示这个词是什么意思位置嵌入按位置 t 查表得到向量表示这个词出现在第几个位置相加融合h_t e_t pos_t两个信息叠加后送入每一层 Transformer 块。官方文档 docs/foundations/transformer.md 中对此有完整的公式推导明确指出位置嵌入是必要的因为注意力本身是置换等变的——没有位置信息模型无法知道一个 token 是出现在句首、句尾还是句中。多层的注意力头会在这些带位置信息的向量上继续加工位置嵌入带来的两个重要特性上下文长度的天然上限位置嵌入表的行数固定为context_length因此模型最多认识这么长的序列。超过上限的输入会被截断见 src/models/transformer.py 中generate方法对idx[:, -self.context_length:]的裁剪。这也是为什么长上下文能力一直是 LLM 的重要指标。相对位置是被学出来的位置向量本身没有预设为距离训练过程中模型会自动学会利用位置向量的差异来表达两个词相隔多远。本项目在 docs/foundations/transformer.md 的架构决策表中记录了这一选择设计选择项目实现结果绝对位置编码nn.Embedding(context_length, n_embed)简单、易读上下文长度固定其他常见的位置编码方案了解了本项目的做法后再看业界其他方案会一目了然正弦/余弦位置编码原始 Transformer 论文用固定公式生成不增加参数理论上可外推到更长序列可学习绝对位置嵌入✅ 本项目采用效果稳定、实现最简单RoPE旋转位置编码把位置信息以旋转角度的形式融入 Q/K 向量是当前主流大模型Llama 等的首选。对新手而言本项目选择可学习方案正是为了易读性——你能在 src/models/transformer.py#L48-L61 的_pre_attn_pass方法里一眼看懂词嵌入 位置嵌入是如何融合的。动手实践跑通训练验证你的理解读完原理后建议直接跑一遍预训练脚本验证python scripts/pretrain_base.py训练完成后的损失曲线长这样——模型正在同时学习词嵌入、位置嵌入和全部注意力参数配套学习材料推荐按此顺序阅读docs/foundations/transformer.md — 前向传播与嵌入层详解docs/foundations/attention.md — 注意力、因果掩码与多头机制docs/foundations/README.md — 全部基础概念总览源码入口src/models/transformer、attention、mlp、transformer_block 四个文件一句话总结位置嵌入就像给每个 token 发了一张座位号牌注意力机制负责谁能看到谁位置嵌入负责你坐在第几个座位。两者缺一不可——这正是 train-llm-from-scratch 用两行代码[src/models/transformer.py#L42](https://link.gitcode.com/i/278f9dd62b9fce28de748e6af55ae417#L42)讲清楚的 Transformer 核心秘密也是你从零训练 LLM 时绕不开的第一课 【免费下载链接】train-llm-from-scratchA straightforward method for training your LLM, from downloading data to generating text.项目地址: https://gitcode.com/GitHub_Trending/tr/train-llm-from-scratch创作声明:本文部分内容由AI辅助生成(AIGC),仅供参考
返回列表