位置编码的演进与 RoPE 的几何直觉
Transformer 自身并不知道序列的顺序,位置编码就是语言模型补齐“谁在前谁在后”的手段。
这篇笔记把常见做法与 RoPE(Rotary Positional Embedding)的思路串起来,方便日后复习与引用。
1 为什么位置编码仍然关键
多头注意力的打分只依赖 $QK^\top$,如果不给 token 附加位置信息,模型无法区分 “we know” 与 “know we”。
因此任何大模型都必须解决:如何在保持可泛化性的同时,不破坏注意力的内积结构。
2 三种经典做法回顾
2.1 Sine embeddings(正弦位置编码)
\[PE_{(pos,2i)} = \sin\left(\frac{pos}{10000^{2i/d_{model}}}\right), ...
Gated Activation 与 ReGLU
1 标准前馈层回顾
Transformer 前馈层(Feed-Forward Layer, FFN)是注意力块外的主要非线性单元,通常由两层线性映射加一次激活构成
1.1 基础公式
\[FF(x) = \text{ReLU}(x W_1) W_2 = \max(0, xW_1) W_2\]
1.1.1 关键组件
$x$:来自自注意力或上一层输出的输入向量。
$W_1$:升维线性变换,产生中间隐空间。
$\max(0, \cdot)$:共享阈值的 ReLU 激活。
$W_2$:把激活后的特征投影回原始维度。
ReLU 固定使用零阈值,所有神经元以同一规则开关,难以针对不同 token 动态调节信息流。
2 门控机制的引入
为提升自适应能力,Gated ...
Norm 的两种计算方式, LayerNorm vs RMSNorm
1 LayerNorm(层归一化)
1.1 提出背景
LayerNorm 是 Transformer(Vaswani et al., 2017)原始论文中使用的标准归一化方法
1.2 数学定义
\(y = \frac{x - \mathbb{E}[x]}{\sqrt{\mathrm{Var}[x]} + \epsilon} \times \gamma + \beta\)
其中:
对输入 $x \in \mathbb{R}^{d_{model}}$ 的每个样本(token 向量)进行归一化;
减去均值 $\mathbb{E}[x]$;
除以标准差 $\sqrt{\mathrm{Var}[x]}$;
然后再加上可学习的缩放参数 $\gamma$ 和偏置 $\bet...
Norm 的两种结构, Pre-Norm vs Post-Norm
1 Pre-Norm 与 Post-Norm 结构
所有现代的大语言模型(LMs)都采用 Pre-Norm 结构
左图为 Post-Norm 结构,即 LayerNorm 放在残差连接(addition)之后
也就是说,每个子层(Self-Attention 或 FFN)计算完,再执行 LayerNorm。
这种结构最早由 Vaswani et al., 2017《Attention is All You Need》 提出。
右图为 Pre-Norm 结构,即 先归一化,再执行子层计算,最后加残差。
这是后来为了解决深层网络训练时的 梯度消失 / 爆炸问题 而改进的版本
2 Pre-LayerNorm 的提出背景
“Pre-LayerNorm(预归一化)” 是 Tra...
get_batch:从采样到GPU传输
1 函数目的
def get_batch(data: np.array, batch_size: int, sequence_length: int, device: str) -> torch.Tensor:
该函数的核心功能是从连续序列数据 data 中随机采样若干长度为 sequence_length 的片段,组成一个batch张量并传输到指定设备(通常是GPU)。这是语言模型、RNN、Transformer等模型训练中最常见的mini-batch采样逻辑。
2 随机采样机制
2.1 生成随机起始位置
start_indices = torch.randint(len(data) - sequence_length, (batch_size,))
这个代码:
...
torch的参数处理化特殊处理
1 nn.Parameter 的作用与原理
代码:
w = nn.Parameter(torch.randn(input_dim, output_dim))
1.1 含义
nn.Parameter 是 PyTorch 的特殊张量类型,用来定义 模型的可训练参数;
当你把它放在 nn.Module 中时,model.parameters() 会自动包含它;
它在反向传播时会自动累积 .grad。
等价于一个带标志的 tensor:
param = torch.Tensor(...)
param.requires_grad_(True)
1.2 参数与输入维度的关系
input_dim = 16384
output_dim = 32
x = nn.Para...
训练中使用FP8精度
FP8 精度
如图,
NVIDIA H100 GPU 原生支持两种 FP8(8-bit floating point) 编码格式:
格式
名称含义
指数位 (E)
尾数位 (M)
数值范围
E4M3
4 位指数,3 位尾数
4
3
[-448, 448]
E5M2
5 位指数,2 位尾数
5
2
[-57,344, 57,344]
E4M3 与 E5M2 的差异
E4M3:精度更高、范围更小
...
共计 167 篇文章,21 页。