Transformer核心
不错,正是Transformer架构开创了LLM时代。
但我们已经非常清楚了,真正的第一性原理是自注意力机制这个计算范式被产业采纳。Transformer架构更多是一种落地实现,粗略了解即可。
一、第一性原理
新人去理解Transformer概念一定是懵逼的。
- 残差连接 → 让模型推理可以堆到100+层
- 层归一化 → 训练稳定性
- FFN → 提供非线性变换和记忆容量
- 位置编码 → 补偿自注意力丢失的位置信息
堆叠
首先需要建立一个基本认知,Transformer本质上是一个堆叠的 编码器/解码器层,整个架构就是不断堆叠这些“计算积木”,最后来面向计算任务,接合适的输入输出。
在理解 Transformer 或 LLM 架构时,比起单独去研究每个功能概念,更核心的问题是:为什么需要堆叠这些层。从第一性原理来讲,这里的“堆叠”是为了 提升模型容量、表达能力和训练稳定性,每个机制都是为了支撑这个目标而设计的。
这个项目的**计算**生命周期管理比上个项目的**计算**资源调度更复杂
对于这样一个只有17个token的用户输入,假如只有一层,即便是全连接,O(n²) = O(17²) = 289个关系,在面向深度推理时必然是能力不足的,这是由原始信息容量决定的。而Transformer的N层叠堆,可以实现递进推理、局部捕捉、多视角观察,最终表现为用户所能感知的泛化、深度推理能力。
计算
在堆叠增强能力的基础上,才是各种计算策略,来确保训练推理过程的效率、计算量、稳定性,以及对自注意力机制天然缺失位置的补偿性增强包装。
二、核心功能
以下概念粗略了解第一性原理即可,因为即便是DeepSeek,也只是Transformer的应用者,没有研究到这一层。
残差连接
这里理解一个核心的原理概念,训练是借助的数学目标是最小化“损失函数”。训练过程就是不断计算梯度,调整参数,让损失越来越小。而损失函数的数学本质就是计算各层的梯度,这个所谓的梯度就是所有中间层的连乘。很显然,无论是0.9 × 0.9 × 0.9 × ... (100次) ≈ 0.00003,还是1.1 × 1.1 × 1.1 × ... (100次) ≈ 13780,都是不可接受的。
动机:当模型堆得很深时,梯度会在反向传播中逐渐衰减或爆炸,导致训练难以收敛。
做法:每个子层(如 Self-Attention、FFN)都不是孤立的,而是输入直接绕一条“捷径”加到输出上:
效果:
- 保留了原始输入特征 → 防止信息丢失。
- 训练时更像在学习“残差修正”,优化更容易。
- 使 Transformer 可以堆到 100+ 层而不会轻易崩溃(和 ResNet 思路类似)。
梯度是什么意思?
数学定义:梯度就是函数在某一点处,对每个自变量的偏导数组成的向量。 比如函数
,在点 的梯度是: 直观理解:梯度告诉你“函数往哪个方向变化最快”。
- 想象你在一座山上,梯度就是坡最陡的方向。如果你想往山谷里走,就沿着梯度的反方向走。
层归一化
问题背景:不同层、不同位置的输入分布差异大,可能造成训练不稳定。
做法:对每个样本的每一层进行归一化(不是像 BatchNorm 那样对整个 batch,而是对单个样本内部的维度):
效果:
- 缓解梯度消失/爆炸。
- 使学习率可以设得更大,收敛更快。
- 与残差连接配合,使深层 Transformer 训练稳定。
归一化是什么概念?
数学定义:把数据缩放或变换到某种“标准化”的范围或分布。
常见目的:
- 让数值落在一个合理的范围(比如 0–1 或 -1–1),避免某些值太大主导训练。
- 让不同特征的尺度一致,便于比较和计算。
具体归一化算法不去关心
直观理解:如果梯度是“方向”,归一化就是“尺子”。梯度告诉你怎么走,归一化保证你走的步子不会忽大忽小。
前馈网络
结构:每个位置单独经过一个两层的 MLP:
通常隐藏层维度比输入维度大,比如
,中间层 。 作用:
- 非线性变换:补充自注意力是线性操作的不足。
- 记忆容量:通过更高维度空间增强表示能力。
- 位置独立处理:每个 token 都独立经过同一个 FFN,相当于对所有位置做一次共享的“特征变换”。
位置编码
Transformer需要位置信息参与运算。
传统的位置编码是通过简单(1,2,3...)标量索引来处理的,但是对于LLM这样的计算工具来说,硬编码是丑陋的,关键无法参与到统一的核心运算。无法与高维向量做点积运算。解决方案是将位置编码标量为与词向量同维度的向量,通过相加的方式融入每个token的表示中,使得Self-Attention在计算相似度时能同时感知"语义"和"位置"。
对CML的启发
目前CML的显式语义结构标记,只能在上下文外围支持,如果能设计结构感知的编码,让模型不仅知道"第几个token",还直接知道"在语义树的哪个位置",那么才可能带来内核层的革命性。
问题背景:自注意力机制只关心 token 两两之间的相关性,但没有“先后顺序”的概念。
做法:给每个位置加上一个固定或可学习的向量。原始 Transformer 用的是 正余弦函数编码:
效果:
- 让模型能够区分“第 1 个词”和“第 10 个词”。
- 支持不同长度的输入(因为是函数式编码,而不是固定表)。
- 现代变体有 可学习位置嵌入、相对位置编码(如 Transformer-XL、T5、RoPE),效果更好。