LogoCookLLM文档
LogoCookLLM文档
首页CookLLM

原理精讲

词元化
Tokenization 基础BPE 算法详解GPT 系列 TokenizerBPE 训练工程化
模型架构
Transformer LM
从 token ids 到 logitsEmbedding 与 LM Head
Attention 机制
Self-Attention 到 GQAAttention Sink
位置编码
位置编码基础RoPE 数学推导RoPE 代码实现长度外推
GPU 编程基础
GPU 架构基础张量布局Triton 入门:向量加法
FlashAttention
Flash Attention 原理详解从朴素实现到 Auto-TuningBlock Pointer 与多维支持Causal Masking 优化Grouped Query Attention反向传播实现
分布式训练
数据并行ZeRO 优化器全分片数据并行张量并行流水线并行多维混合并行
推理优化
KV CacheContinuous BatchingPagedAttention

动手训练

概述
预训练
预训练数据Tokenizer 训练模型架构数据流水线训练循环监控与验证
X (Twitter)
基础知识模型架构位置编码

位置编码基础

会员专享

为什么 Transformer 需要位置信息,以及绝对位置编码的方案与局限

在权益中心获取代码

Transformer 的排列不变性

我们先来看一个有趣的事实:标准的 Self-Attention 完全不关心输入的顺序。

回顾 Attention 的计算过程:

Attention(Q,K,V)=softmax(QKTd)V\text{Attention}(Q, K, V) = \text{softmax}\left(\frac{QK^T}{\sqrt{d}}\right)VAttention(Q,K,V)=softmax(d​QKT​)V

其中 Q=XWQQ = XW_QQ=XWQ​,K=XWKK = XW_KK=XWK​,V=XWVV = XW_VV=XWV​。如果我们打乱输入 XXX 中 token 的顺序,每个 token 的 QQQ、KKK、VVV 向量本身不会改变,只是它们在序列中的位置变了。而 Attention 计算的是所有 token 之间的两两点积,这个操作对顺序是不敏感的。

换句话说,"我 喜欢 猫" 和 "猫 喜欢 我" 对 Attention 来说是一样的。这显然不行,语言的意义高度依赖词序。

这就是为什么我们需要位置编码:在输入中注入位置信息,让模型知道每个 token 在序列中的位置。

登录以继续阅读

这是一篇付费内容,请登录您的账户以访问完整内容。

旋转位置编码

从位置编码基础到 RoPE 的数学推导、代码实现与长度外推

RoPE 数学推导

从复数旋转到高维推广,理解旋转位置编码的核心数学原理

目录

Transformer 的排列不变性
绝对位置编码
Sinusoidal 位置编码
为什么是 sin/cos?
Learned 位置编码
绝对位置编码的使用方式
Sinusoidal PE 的隐藏性质
内积只取决于相对位置
远程衰减性
绝对位置编码的局限
总结