大模型面试基础知识
针对 Agent/大模型开发岗位,提取最小化必备知识点
第一部分:机器学习基础概念
机器学习就是去找一个\(function\),输入数据,输出对应的,预期的结果,比如说:分类任务,输入一张图像,输出该图像对应的类别。
深度学习是机器学习的一个子领域,核心是通过多层神经网络自动提取特征,尤其适用于图像、语音、文本等非结构化数据。
1、机器学习与深度学习的区别
| 对比项 | 传统机器学习 | 深度学习 |
|---|---|---|
| 特征工程 | 需人工设计 | 自动提取 |
| 模型结构 | 简单模型(SVM、决策树) | 多层神经网络 |
| 适用数据 | 小规模、结构化数据 | 大规模、非结构化数据 |
学习类型:
- 监督学习:数据有标签,用于分类/回归
- 无监督学习:数据无标签,用于聚类/降维
- 半监督学习:部分数据有标签
2、模型、损失函数、优化器
模型(Model):带有未知参数的函数,\(y = wx + b\)
损失函数(Loss Function) 是用来衡量模型预测结果与真实值之间差距的函数,是训练过程中的优化目标。
| 损失函数 | 适用场景 | 公式 |
|---|---|---|
| MSE | 回归 | \(\frac{1}{n}\sum(y - \hat{y})^2\) |
| Cross-Entropy | 分类 | \(-\sum y_i \log(\hat{y}_i)\) |
梯度下降(Gradient Descent)
梯度下降是用来训练模型的一种优化算法。它的作用是找到让损失函数最小的参数值。每次迭代时,计算损失函数对参数的梯度,然后沿着梯度相反的方向调整参数,就像下山一样,一步步走到最低点。实际训练中常用 Mini-batch 梯度下降,配合 Adam 优化器效果更好。
直观理解:想象你在山上,想快速下山,每一步都沿着当前最陡的方向往下走。
更新公式:
其中 \(\eta\) 是学习率,\(\nabla L\) 是损失函数对参数的梯度。
三种梯度下降:
| 类型 | 每次用多少数据 | 特点 |
|---|---|---|
| BGD(批量) | 全部数据 | 稳定但慢,内存消耗大 |
| SGD(随机) | 1 个样本 | 快但震荡,容易跳出局部最优 |
| Mini-batch | 一小批数据 | 平衡速度与稳定性,实际最常用 |
学习率的影响:
- 太大:震荡甚至发散
- 太小:收敛太慢
| 优化器 | 特点 |
|---|---|
| SGD | 简单,但收敛慢,易震荡 |
| Adam | 动量 + 自适应学习率,收敛快且稳定 |
3、过拟合与欠拟合
| 问题 | 表现 | 解决方案 |
|---|---|---|
| 欠拟合 | 训练集表现差 | 增加模型复杂度、添加特征 |
| 过拟合 | 训练好但测试差 | 正则化、Dropout、数据增强 |
正则化
正则化是用来防止过拟合的一种技术。过拟合就是模型把训练数据"学得太死",对训练集表现很好,但遇到新数据就不行了。正则化通过在损失函数里加一个惩罚项,限制模型参数的大小,让模型不能太"任性",从而提高泛化能力。
三种常见方法:
-
L1 正则化:损失函数加上权重绝对值惩罚项 \(L = L_{loss} + \lambda \sum|w|\) 会让部分权重变成 0,可以做特征选择
-
L2 正则化:损失函数加上权重平方惩罚项 \(L = L_{loss} + \lambda \sum w^2\) 让权重整体变小,防止过拟合,最常用
-
Dropout:训练时随机丢弃一部分神经元,强迫模型不依赖某些神经元,增强鲁棒性
4、评估指标(分类任务)
基于混淆矩阵(TP/FP/TN/FN):
| 指标 | 公式 | 适用场景 |
|---|---|---|
| Accuracy | \(\frac{TP+TN}{ALL}\) | 类别均衡 |
| Precision | \(\frac{TP}{TP+FP}\) | 关心误报(垃圾邮件) |
| Recall | \(\frac{TP}{TP+FN}\) | 关心漏报(医疗诊断) |
| F1 | \(2\frac{P \times R}{P+R}\) | 综合评估 |
| AUC | ROC曲线下面积 | 模型整体区分能力 |
第二部分:深度学习核心
1、激活函数
激活函数的作用是给神经网络引入非线性。如果没有激活函数,不管网络有多少层,最后都等价于一个线性变换,那就没法处理复杂的问题了。
常用激活函数:
| 函数 | 公式 | 特点 |
|---|---|---|
| ReLU | \(\max(0, x)\) | 简单高效,收敛快,但易死神经元 |
| Sigmoid | \(\frac{1}{1+e^{-x}}\) | 输出(0,1),易梯度消失 |
| Softmax | \(\frac{e^{z_i}}{\sum e^{z_j}}\) | 多分类输出层,转为概率分布 |
2、梯度消失与梯度爆炸
反向传播时,梯度是按链式法则一层层乘过去的。如果每层的梯度都很小(比如用 Sigmoid,导数最大才 0.25),乘到最后就越乘越小,接近 0,这就是梯度消失,深层网络就没法学习了。反过来,如果每层梯度都很大,乘到最后就爆炸了,参数更新太猛,训练就不稳定。
| 问题 | 原因 | 影响 | 解决方案 |
|---|---|---|---|
| 梯度消失 | 链式法则乘积趋近0 | 深层网络无法学习 | ReLU、BN、残差结构 |
| 梯度爆炸 | 链式法则乘积过大 | 训练不稳定 | 梯度裁剪、权重初始化 |
3、归一化技术
归一化的目的是让每层输出的数值分布更稳定,别忽大忽小,这样训练收敛更快、更稳定。
BatchNorm 是对同一个 batch 里所有样本的同一个特征做归一化,适合 CNN。LayerNorm 是对单个样本内部的所有特征做归一化,适合 Transformer,因为 NLP 任务每个样本长度不一样,BatchNorm 不好用。两者的目的都是让数值分布稳定,加速收敛。
| 类型 | 归一化维度 | 适用场景 |
|---|---|---|
| BatchNorm | 跨 batch 对每个特征 | CNN、图像任务 |
| LayerNorm | 对每个样本的所有特征 | Transformer、NLP |
第三部分:大模型
1、Self-Attention 自注意力机制
输入是一个vector set,假设序列长度为T,也就是T个token,每个token的嵌入是固定的,而这个嵌入的维度就是\(d_{model}\),
Self-Attention 机制的核心思想是:每一个位置的表示都由序列中所有位置的信息加权得到,权重由输入本身计算得出,因此叫做“自注意力”。
计算流程:
Step 1: 输入 X → 线性变换得到 Q、K、V
其中:
- \(W^Q, W^K, W^V \in \mathbb{R}^{d \times d_k}\) 是可学习的参数矩阵。
- \(Q, K, V \in \mathbb{R}^{n \times d_k}\)。
Step 2: 计算注意力权重
通过点积计算注意力权重:
- \(\frac{QK^\top}{\sqrt{d_k}} \in \mathbb{R}^{n \times n}\):表示每个位置之间的相似度(缩放点积)。
- 使用
softmax保证权重归一化。
为什么除以 \(\sqrt{d_k}\):防止点积过大导致 softmax 进入饱和区(梯度消失)。
2、Multi-Head Attention 多头注意力
将 Q、K、V 拆成 h 个头,分别计算注意力,最后拼接融合: $\(\text{MultiHead} = \text{Concat}(\text{head}_1, ..., \text{head}_h)W^O\)$
作用:从不同子空间捕捉不同类型的关系。
3、Transformer 架构
编码器结构:Multi-Head Attention → Add & Norm → Feed Forward → Add & Norm
解码器结构:
- Masked Self-Attention(只能看到当前位置之前的信息)
- Cross-Attention(Decoder 的 Q 与 Encoder 的 K、V 计算)
- Feed Forward
关键点:
- 位置编码(Positional Encoding):Transformer 无顺序概念,需要加入位置信息
- 残差连接 + LayerNorm:稳定深层网络训练
4、Self-Attention vs RNN
| 对比 | Self-Attention | RNN |
|---|---|---|
| 并行性 | 可并行计算整个序列 | 顺序计算,慢 |
| 长距离依赖 | 直接建模任意两个位置 | 信息逐层传递,易丢失 |
| 计算复杂度 | \(O(n^2)\) | \(O(n)\) |
5. 大模型的结构
当前主流的大语言模型大多基于 Transformer 架构构建,其中很多模型(如 GPT、DeepSeek、Qwen)采用 Decoder-only 结构。
从整体上看,一个典型的大语言模型可以简单分为三层:输入层 → Transformer Block 堆叠层 → 输出层。这些层内部包含大量矩阵,矩阵中的数值就是模型的参数。
5.1 输入层
输入层负责把用户输入的文本转换成模型可以计算的数字表示。模型不能直接理解文字,因此会:
- 先把文本切分成一个个
token - 再把每个 token 通过词嵌入(Embedding)和矩阵运算,转换成表示 token 初始语义信息的向量
作用:把"文字"变成"模型能处理的数字",为后续 Transformer Block 提供初始的语义信息。
5.2 Transformer Block(堆叠层)
Transformer Block 是大模型中最核心的计算部分,通常会堆叠很多层(从几十层到上百层不等)。每一层内部主要包含:
- 多头注意力机制(Multi-Head Attention)
- 前馈神经网络(FFN)
- 残差连接 + LayerNorm
核心思想:token 进入 Transformer Block 后,会不断和前文中的 token 建立联系,模型会根据上下文更新它的表示,使这个表示不仅包含 token 本身的信息,也包含它在当前句子或对话中的语义关系。
5.3 输出层
经过多层 Transformer Block 计算后,每个 token 都会得到一个新的向量表示。对于文本生成任务来说:
模型通常会使用最后一个位置对应的向量,经过输出层的线性变换 + softmax,得到下一个 token 在整个词表上的概率分布。
举例:假设模型隐藏维度是 1024,词表大小是 50000,输出层会把 1024 维向量转换成 50000 维向量,每个位置的值对应下一个 token 是该词表项的概率。
模型在生成文本时,会根据这个概率分布选择或采样出下一个 token,然后把新生成的 token 加到原来的输入后面,继续预测下一个 token。这个过程不断重复,就形成了完整的句子或回答。
三种主流架构
目前大模型主要有三种架构路线:
| 架构 | 特点 | 代表模型 |
|---|---|---|
| Encoder-only | 仅编码器,适合理解任务(分类、抽取) | BERT |
| Encoder-Decoder | 编解码结构,适合翻译、摘要 | T5、BART |
| Decoder-only | 仅解码器,自回归生成 | GPT、Qwen、DeepSeek |
当前大语言模型生成场景,Decoder-only 是绝对主流。
6. 大模型训练三阶段范式⭐⭐
自 GPT-1 以来,大语言模型的发展推动了训练范式逐步成熟,目前业界主流是 "预训练 → 监督微调 → 对齐" 三阶段开发框架。
第一阶段:预训练(Pre-training)
基于超大规模无标注语料进行自监督学习(主要是"预测下一个 token"),目标是让模型获得:
- 通用语言建模能力
- 广泛的世界知识
- 基本的推理与泛化能力
预训练是大模型"智能"的来源,成本最高,通常由大厂完成。
第二阶段:监督微调(Supervised Fine-tuning, SFT)
利用人工构建的指令—响应示例或高质量对话数据进一步对模型进行训练。目的是使模型能够更好地理解人类指令,并输出更加规范、稳定且贴合任务需求的内容。
第三阶段:对齐(Alignment)
通过引入人类偏好、行为规范、安全约束与价值观等因素,使模型的行为更符合用户期望。
对齐阶段目标:让模型在真实应用场景中表现得更有帮助、更安全、更可靠。
常见对齐方法:
| 方法 | 思路 | 特点 |
|---|---|---|
| RLHF | 奖励模型训练 + PPO 强化学习 | 经典方案,但训练复杂,成本高 |
| DPO | 直接偏好优化,不需要训练奖励模型和RL | 训练简单,效果接近RLHF,越来越流行 |
| ORPO | odds ratio 偏好优化,进一步简化 | 一个阶段完成,不需要单独SFT |
| KTO | 知识对齐偏好优化,同时考虑知识和偏好 | 较新,兼顾质量和多样性 |
7. 什么是知识蒸馏? ⭐⭐⭐
知识蒸馏(Knowledge Distillation) 是一种模型压缩技术,核心思想是:用一个效果好但体积大的教师模型(Teacher Model)"教"一个体积小、速度快的学生模型(Student Model),让小模型尽可能逼近大模型的效果。
核心思路:软标签 vs 硬标签
- 硬标签:就是普通的监督标签(比如分类任务中,正确类别是 1,其他都是 0)
- 软标签:教师模型输出的概率分布(比如
[0.001, 0.9, 0.05, 0.049]),不仅包含"哪个是正确答案",还包含"错误答案和正确答案有多相似"这种更多信息
为什么软标签有用? 比如分类"猫"和"狗",大模型知道"老虎"长得更像猫而不是狗,这个"相似性知识"是硬标签没有的,但软标签能传递给学生模型。
蒸馏流程
- 第一步:训练好一个大的教师模型(通常是预训练大模型或ensemble)
- 第二步:用教师模型对所有样本输出软概率(温度 T 放大概率分布,让相对差异更明显)
- 第三步:训练学生模型,让学生模型的输出同时逼近:
- 真实硬标签(监督学习)
- 教师模型的软概率(蒸馏损失)
总的损失函数通常是: $\(\text{Loss} = \alpha \cdot \text{HardLoss} + (1-\alpha) \cdot \text{DistillLoss}\)$
一句话总结:知识蒸馏就是让好学生(小模型)向老师(大模型)学习,不仅学标准答案,还学老师做题的"感觉",最终考出接近老师的分数,但体型小跑得快。