在大模型学习过程中,我整理了一些常见但核心的概念,对于很多刚入门大模型的同学,这些基础知识往往看似简单,却在理解模型行为、优化性能以及阅读论文时起着关键作用。
1、权重 weight & 激活 Activations
- 权重是“参数”,是模型真正需要学习和更新的参数。是模型在训练完成后固定下来的数值,存储在模型文件中。在全参数微调中,我们通过反向传播算法和梯度下降来更新模型中的所有权重,使其适应新的任务数据。
- 如线性层 W、偏置项 b、注意力矩阵的投影矩阵、层归一化参数等
- 激活是“数据”或“计算结果”,是模型在前向传播时产生的中间结果。激活不是模型参数,不会被更新,但激活在反向传播需要被保存下来(否则无法计算梯度),所以激活是显存开销的主要来源。
- 如某一层的输出向量、注意力矩阵、中间隐藏状态等
2、模型是分训练过程和推理过程的,直觉上理解,训练过程就是得到权重的过程;而微调就是在已有权重基础上继续训练,来适应特定的任务;推理过程则是根据训练得到的权重来进行任务的执行,这个过程不涉及权重的更新;
3、激活值在训练和推理都有,推理中激活只需要短暂存在。因为模型在推理过程的步骤是
- 前向传播;
- 计算每一层的输出(激活);
- 完成当前token的预测,此时就可以释放激活值。
因此,推理过程的显存主要来源于权重和少量的激活。
4、训练过程的流程:
输入文本 → 前向传播(计算预测) → 计算损失 → 反向传播 → 更新权重
- 前向传播:数据流经模型 L 层,计算每一层的输出;得到预测 token。产出:激活值 (需存储)、预测。
- 计算损失:比较预测与真实标签 之间的差异,计算损失值。产出:损失值。
- 反向传播:从 L 层向第一层回传损失的梯度,计算损失 L 对所有权重的梯度。产出:梯度。
- 更新权重:使用优化器(如 AdamW)根据梯度更新所有权重。产出:权重。
5、微调过程的流程:
输入任务数据 → 前向传播(计算预测) → 计算损失 → 反向传播 → 更新部分或全部权重
和训练过程类似,区别是:数据规模小且特定、损失函数可能更侧重特定任务、反向传播过程中只计算需要更新的权重(如 LoRA )的梯度、权重更新过程中只更新部分或全部权重。
6、推理过程的流程:输入 → 前向传播 → 输出结果
使用固定的、训练好的权重 来生成或预测结果。
7、Transformer架构是由 Encoder 和 Decoder 两个积木组成的框架,具体模型根据任务需要,只使用需要的积木。目前90% 的大模型不是完整的 Transformer。
| 应用 | 使用模块 | 模型例子 |
|---|---|---|
| 文本理解 | 仅 Encoder | BERT, RoBERTa |
| 文本生成(LLM) | 仅 Decoder | GPT, Llama, Qwen |
| 机器翻译 | Encoder + Decoder | T5, BART, Whisper |
8、大模型推理过程分为预填充(Pre-fill) 和 解码(Decoding/Generation)阶段,主要发生在现代主流的仅解码器(Decoder-only)架构的 LLM 推理过程中。
这两个阶段都只使用 解码器 结构进行前向传播:
- 预填充:解码器并行处理整个 Prompt 的所有 Token。
- 解码:解码器反复执行,每次只处理一个 Token,并生成下一个 Token。
9、Transformer的每一层(Layer)由两个主要模块组成:输入 → Attention → FFN → 输出
- 注意力模块:负责横向(序列内)理解上下文关系。
- FFN 模块:负责纵向(特征处理)储存和应用知识。
MoE 是对 FFN 模块的替代或增强。FFN 模块被换成多个专家(多个 FFN),每个 token 动态选择其中几个。