大模型面试精选20题-2(持续更新中)

本文是大模型面试精选的第二辑,从不同角度精选20道高频面试题,涵盖模型架构、训练技巧、部署优化、Agent、多模态等核心知识点,适合准备大模型相关岗位面试的同学。

字数约 9000,预计阅读 18 分钟
在这里插入图片描述


一、模型架构与设计篇(5题)

01|GPT 和 BERT 的区别是什么?

参考答案:

GPT(Generative Pre-trained Transformer):

  • 架构:Decoder-only(只有解码器)
  • 训练方式:自回归(Autoregressive),从左到右生成
  • 预训练任务:语言建模(Language Modeling),预测下一个 token
  • 特点:擅长生成任务,可以生成连贯的文本
  • 应用:文本生成、对话、代码生成

BERT(Bidirectional Encoder Representations from Transformers):

  • 架构:Encoder-only(只有编码器)
  • 训练方式:双向编码,可以同时看到上下文
  • 预训练任务:掩码语言建模(MLM)+ 下一句预测(NSP)
  • 特点:擅长理解任务,对文本有深度理解
  • 应用:文本分类、命名实体识别、问答

核心区别:

特性 GPT BERT
架构 Decoder-only Encoder-only
注意力 掩码自注意力(只能看前面) 双向自注意力(可以看全部)
训练 自回归 双向编码
优势 生成能力强 理解能力强
应用 生成任务 理解任务

为什么 GPT 用 Decoder-only?

  • 生成任务需要自回归特性
  • 训练时只能看到前面的 token,推理时也如此
  • 保持训练和推理的一致性

为什么 BERT 用 Encoder-only?

  • 理解任务需要双向信息
  • 可以同时利用上下文信息
  • 对文本有更全面的理解

02|什么是 MoE(Mixture of Experts)?它的优势是什么?

参考答案:

MoE(Mixture of Experts,专家混合) 是一种模型架构设计,将模型分成多个"专家"(Expert),每个专家负责处理不同类型的输入。

工作原理:

  1. 专家网络

    • 模型包含多个专家网络(如 8 个、16 个)
    • 每个专家是一个完整的神经网络
    • 不同专家学习不同的特征和模式
  2. 门控网络(Gating Network)

    • 根据输入决定激活哪些专家
    • 输出每个专家的权重(通常是稀疏的)
    • 例如:只激活 Top-2 个专家
  3. 加权组合

    • 将激活的专家输出加权组合
    • 公式:output = Σ w_i * Expert_i(input)

优势:

  1. 参数效率

    • 模型总参数量大,但每次只激活部分参数
    • 例如:1.7T 参数的模型,每次只激活 13B 参数
    • 显存和计算量大幅减少
  2. 可扩展性

    • 可以轻松增加专家数量
    • 模型容量可以非常大(如 1.7T 参数)
  3. 专业化

    • 不同专家可以学习不同的知识领域
    • 提升模型的表达能力
  4. 训练效率

    • 可以并行训练多个专家
    • 训练速度更快

挑战:

  1. 负载均衡

    • 需要确保所有专家都被充分使用
    • 避免某些专家过载,某些专家闲置
  2. 路由学习

    • 门控网络需要学习如何正确路由
    • 训练难度较高
  3. 通信开销

    • 多 GPU 训练时,专家之间的通信开销大

应用:

  • Switch Transformer:Google 的 MoE 模型
  • GShard:大规模 MoE 训练框架
  • Mixtral 8x7B:Mistral AI 的 MoE 模型

03|什么是 Grouped Query Attention(GQA)?它如何优化注意力机制?

参考答案:

GQA(Grouped Query Attention,分组查询注意力) 是 Multi-Head Attention 的一种变体,通过减少 Query 头的数量来优化注意力计算。

标准 Multi-Head Attention:

  • Q、K、V 都有相同数量的头(如 32 个头)
  • 每个头独立计算注意力
  • 参数量:3 × num_heads × head_dim

GQA 的设计:

  • Query 头:减少数量(如 8 个头)
  • Key/Value 头:保持数量(如 32 个头)
  • 分组共享:多个 Query 头共享一组 Key/Value 头
  • 例如:8 个 Query 头,32 个 Key/Value 头,每组 4 个 Query 共享 1 组 Key/Value

优势:

  1. 减少 KV Cache 显存

    • KV Cache 大小与 Key/Value 头数量相关
    • GQA 减少 Key/Value 头数量,显存减少
    • 例如:从 32 头减少到 8 头,KV Cache 减少 75%
  2. 保持模型性能

    • Query 头数量减少,但 Key/Value 头保持
    • 模型表达能力基本不变
    • 性能损失很小(通常 < 5%)
  3. 推理加速

    • 减少注意力计算量
    • 提升推理速度

对比:

方法 Query 头 Key/Value 头 KV Cache 性能
MHA 32 32 100% 100%
MQA 1 1 3% 85%
GQA 8 8 25% 98%

MQA vs GQA:

  • MQA(Multi-Query Attention):所有 Query 共享一组 Key/Value,显存最少但性能损失大
  • GQA:平衡了显存和性能,是更好的选择

应用:

  • LLaMA 2:使用 GQA
  • PaLM 2:使用 GQA
  • 大多数新的大模型都采用 GQA

04|什么是 RMSNorm?它相比 LayerNorm 有什么优势?

参考答案:

RMSNorm(Root Mean Square Layer Normalization) 是 LayerNorm 的简化版本,去掉了均值中心化,只进行缩放。

LayerNorm 公式:

LN(x) = γ * (x - μ) / √(σ² + ε) + β
其中:
μ = mean(x)  # 均值
σ² = var(x)   # 方差

RMSNorm 公式:

RMSNorm(x) = γ * x / RMS(x)
其中:
RMS(x) = √(mean(x²) + ε)

关键区别:

  • LayerNorm:减去均值,再除以标准差
  • RMSNorm:不减去均值,只除以 RMS(均方根)

优势:

  1. 计算更简单

    • 不需要计算均值
    • 只需要计算均方根
    • 计算量减少约 10-15%
  2. 数值稳定性

    • 不涉及减法,数值更稳定
    • 减少浮点误差
  3. 训练速度

    • 计算更快,训练速度提升
    • 在 GPU 上效率更高
  4. 性能相当

    • 在大多数任务上性能与 LayerNorm 相当
    • 有些任务甚至更好

为什么可以去掉均值?

  • 在 Transformer 中,残差连接和 LayerNorm 的组合已经提供了足够的归一化
  • 均值中心化在某些情况下不是必需的
  • RMSNorm 通过缩放已经能够稳定训练

应用:

  • LLaMA:使用 RMSNorm
  • PaLM:使用 RMSNorm
  • 许多新的大模型都采用 RMSNorm

05|什么是 SwiGLU 激活函数?它相比 ReLU 有什么优势?

参考答案:

SwiGLU(Swish-Gated Linear Unit) 是一种激活函数,结合了 Swish 和 GLU(Gated Linear Unit)的特点。

公式:

SwiGLU(x) = Swish(xW + b) ⊙ (xV + c)
其中:
Swish(x) = x * sigmoid(x)
⊙ 是逐元素乘法

GLU(Gated Linear Unit)原理:

  • 将输入分成两部分:[A, B]
  • A 作为主路径,B 作为门控
  • 输出:A ⊙ sigmoid(B)
  • 门控机制可以控制信息流

SwiGLU 的特点:

  • 使用 Swish 作为激活函数(而不是 sigmoid)
  • Swish 是平滑、非单调的函数
  • 在负值区域也有梯度,避免死神经元

优势:

  1. 性能更好

    • 在语言模型任务上表现优于 ReLU
    • 提升模型表达能力
  2. 平滑性

    • Swish 是平滑函数,梯度更稳定
    • 训练更稳定
  3. 门控机制

    • GLU 的门控机制可以控制信息流
    • 提升模型的表达能力

对比:

激活函数 公式 特点 应用
ReLU max(0, x) 简单、快速 广泛使用
GELU x * Φ(x) 平滑、性能好 BERT、GPT-2
Swish x * sigmoid(x) 平滑、非单调 某些模型
SwiGLU Swish(xW) ⊙ (xV) 门控+平滑 LLaMA、PaLM

应用:

  • LLaMA:使用 SwiGLU
  • PaLM:使用 SwiGLU
  • 许多新的大模型都采用 SwiGLU

为什么需要门控?

  • 门控机制可以动态控制信息流
  • 让模型学习何时传递信息,何时抑制信息
  • 提升模型的表达能力

二、训练技巧与优化篇(5题)

06|什么是梯度累积(Gradient Accumulation)?它的作用是什么?

参考答案:

梯度累积(Gradient Accumulation) 是一种训练技巧,通过多次前向传播累积梯度,然后一次性更新参数,从而在有限的显存下模拟更大的 batch size。

工作原理:

  1. 正常训练

    • Batch size = 32
    • 一次前向传播 + 反向传播
    • 更新一次参数
  2. 梯度累积

    • Batch size = 8,累积步数 = 4
    • 4 次前向传播,每次计算梯度
    • 累积 4 次梯度(不更新参数)
    • 第 4 次后,更新参数(相当于 batch size = 32)

伪代码:

optimizer.zero_grad()
for i in range(accumulation_steps):
    loss = model(inputs[i])
    loss = loss / accumulation_steps  # 归一化
    loss.backward()  # 累积梯度
optimizer.step()  # 更新参数

作用:

  1. 模拟大 batch size

    • 显存不足时,可以用小 batch + 梯度累积
    • 效果接近大 batch size
  2. 稳定训练

    • 大 batch size 通常训练更稳定
    • 梯度累积可以达到类似效果
  3. 灵活调整

    • 可以根据显存情况调整累积步数
    • 不需要修改模型结构

注意事项:

  • 需要将 loss 除以累积步数,保证梯度大小正确
  • 学习率可能需要调整(因为有效 batch size 变了)
  • 训练时间会增加(需要多次前向传播)

应用场景:

  • 显存不足,无法使用大 batch size
  • 需要大 batch size 来稳定训练
  • 多 GPU 训练时,每个 GPU 的 batch size 较小

07|什么是学习率调度(Learning Rate Scheduling)?常见的策略有哪些?

参考答案:

学习率调度(Learning Rate Scheduling) 是在训练过程中动态调整学习率的方法,可以提升训练效果和模型性能。

为什么需要学习率调度?

  • 训练初期:需要大学习率快速收敛
  • 训练后期:需要小学习率精细调整
  • 固定学习率可能导致训练不稳定或收敛慢

常见策略:

  1. 固定学习率(Constant)

    • 整个训练过程使用固定学习率
    • 优点:简单
    • 缺点:可能收敛慢或不稳定
  2. 线性衰减(Linear Decay)

    • 学习率线性减少
    • 公式:lr(t) = lr_0 * (1 - t/T)
    • 适用:大多数场景
  3. 余弦退火(Cosine Annealing)

    • 学习率按余弦函数衰减
    • 公式:lr(t) = lr_min + (lr_max - lr_min) * (1 + cos(πt/T))/2
    • 优点:平滑衰减,效果好
    • 适用:长时间训练
  4. 阶梯衰减(Step Decay)

    • 在特定 epoch 降低学习率
    • 例如:每 10 个 epoch 降低 10 倍
    • 适用:需要快速调整的场景
  5. Warmup + Decay

    • 训练初期逐渐增加学习率(Warmup)
    • 然后逐渐减少(Decay)
    • 优点:训练更稳定
    • 适用:大模型训练
  6. OneCycleLR

    • 学习率先增后减,形成一个周期
    • 优点:可以找到更好的学习率
    • 适用:需要快速实验的场景

Warmup 的作用:

  • 训练初期,模型参数随机初始化
  • 大学习率可能导致训练不稳定
  • Warmup 让学习率从 0 逐渐增加到目标值
  • 通常 Warmup 10% 的训练步数

最佳实践:

  • 大模型训练:Warmup + Cosine Annealing
  • 小模型训练:Linear Decay 或 Step Decay
  • 快速实验:OneCycleLR
  • 根据验证集性能调整策略

08|什么是标签平滑(Label Smoothing)?它的作用是什么?

参考答案:

标签平滑(Label Smoothing) 是一种正则化技术,将硬标签(one-hot)转换为软标签,减少模型过度自信的问题。

问题背景:

  • 标准分类使用 one-hot 标签:[0, 0, 1, 0]
  • 模型会过度自信,对正确类别输出接近 1 的概率
  • 可能导致过拟合,泛化能力差

标签平滑方法:

  • 原始标签:[0, 0, 1, 0]
  • 平滑后:[ε/K, ε/K, 1-ε+ε/K, ε/K]
  • 其中:ε 是平滑系数(通常 0.1),K 是类别数

例如(4 类,ε=0.1):

  • 原始:[0, 0, 1, 0]
  • 平滑:[0.025, 0.025, 0.925, 0.025]

作用:

  1. 防止过度自信

    • 模型不会对正确类别输出接近 1 的概率
    • 提升模型的校准度(Calibration)
  2. 提升泛化能力

    • 减少过拟合
    • 模型对相似类别有更好的区分能力
  3. 训练更稳定

    • 梯度更平滑
    • 训练过程更稳定

数学原理:

  • 原始损失:L = -log(p_correct)
  • 平滑后损失:L = -(1-ε)log(p_correct) - ε/K * Σlog(p_i)
  • 第二项鼓励模型对所有类别都有一定的概率

参数选择:

  • ε = 0.1:常用值,适合大多数场景
  • ε = 0.05:轻微平滑,适合简单任务
  • ε = 0.2:强平滑,适合复杂任务

应用场景:

  • 图像分类
  • 文本分类
  • 大模型训练(如 GPT、BERT)

注意事项:

  • 不适合所有任务(如需要高置信度的任务)
  • 需要根据任务调整平滑系数

09|什么是 Dropout?它在 Transformer 中如何使用?

参考答案:

Dropout 是一种正则化技术,在训练时随机丢弃部分神经元,防止过拟合。

工作原理:

  • 训练时:以概率 p 随机将神经元输出设为 0
  • 推理时:保留所有神经元,但输出乘以 (1-p)

数学表示:

  • 训练:y = x * mask / (1-p),其中 mask 是随机二值矩阵
  • 推理:y = x * (1-p)

在 Transformer 中的应用:

  1. Attention Dropout

    • 在注意力权重上应用 Dropout
    • 位置:softmax(QK^T / √d) 之后
    • 作用:防止注意力过度集中在某些位置
  2. FFN Dropout

    • 在前馈网络的激活函数之后应用 Dropout
    • 位置:FFN(x) = Dropout(Activation(Linear(x)))
    • 作用:防止前馈网络过拟合
  3. Embedding Dropout

    • 在词嵌入层应用 Dropout
    • 位置:输入嵌入之后
    • 作用:防止嵌入层过拟合

Dropout 率的选择:

  • Attention Dropout:通常 0.1-0.2
  • FFN Dropout:通常 0.1-0.3
  • Embedding Dropout:通常 0.1

为什么 Transformer 需要 Dropout?

  • Transformer 参数量大,容易过拟合
  • Dropout 可以提升泛化能力
  • 训练更稳定

注意事项:

  • 推理时必须关闭 Dropout
  • Dropout 率不能太大,否则影响训练
  • 不同层可以使用不同的 Dropout 率

现代趋势:

  • 一些新模型(如 LLaMA)不使用 Dropout
  • 依赖其他正则化方法(如权重衰减、标签平滑)
  • 大模型训练时,Dropout 的影响较小

10|什么是梯度裁剪(Gradient Clipping)?为什么需要它?

参考答案:

梯度裁剪(Gradient Clipping) 是一种训练技巧,限制梯度的大小,防止梯度爆炸问题。

问题背景:

  • 深度网络训练时,梯度可能变得非常大
  • 梯度爆炸会导致训练不稳定,甚至发散
  • 特别是在 RNN/Transformer 等序列模型中

两种裁剪方式:

  1. 按值裁剪(Clip by Value)

    • 将梯度限制在 [-threshold, threshold] 范围内
    • 公式:grad = clip(grad, -threshold, threshold)
    • 简单直接
  2. 按范数裁剪(Clip by Norm)

    • 如果梯度范数超过阈值,按比例缩放
    • 公式:grad = grad * min(1, threshold / ||grad||)
    • 保持梯度方向不变

为什么需要梯度裁剪?

  1. 防止梯度爆炸

    • 限制梯度大小,避免参数更新过大
    • 训练更稳定
  2. 提升训练稳定性

    • 特别是在训练初期,梯度可能很大
    • 裁剪后训练更平滑
  3. 允许更大的学习率

    • 梯度被限制后,可以使用更大的学习率
    • 训练速度更快

参数选择:

  • 按值裁剪:通常 threshold = 1.0 或 0.5
  • 按范数裁剪:通常 threshold = 1.0 或 5.0
  • 需要根据模型和任务调整

应用场景:

  • RNN/Transformer 训练
  • 大模型训练
  • 训练不稳定时

注意事项:

  • 不要裁剪过度,否则可能影响训练
  • 如果经常裁剪,可能需要降低学习率
  • 现代优化器(如 Adam)对梯度爆炸有更好的处理

三、Agent 与工具调用篇(4题)

11|什么是 AI Agent?它的核心组件有哪些?

参考答案:

AI Agent(智能体) 是一个能够感知环境、做出决策并执行行动的自主系统,可以理解用户意图、规划任务、调用工具并完成任务。

核心组件:

  1. 规划模块(Planning)

    • 理解用户意图,分解复杂任务
    • 制定执行计划
    • 例如:将"帮我订机票"分解为"查询航班"→"选择航班"→"填写信息"→"支付"
  2. 工具调用(Tool Calling)

    • 调用外部工具和 API
    • 例如:搜索、计算器、数据库查询
    • 扩展模型的能力边界
  3. 记忆管理(Memory)

    • 短期记忆:当前对话的上下文
    • 长期记忆:历史对话、用户偏好
    • 工作记忆:当前任务的状态
  4. 反思与修正(Reflection)

    • 评估执行结果
    • 发现错误并修正
    • 优化执行策略

工作流程:

用户输入 → 理解意图 → 规划任务 → 调用工具 → 执行行动 → 评估结果 → 返回用户

类型:

  1. ReAct Agent

    • 结合推理(Reasoning)和行动(Acting)
    • 交替进行思考和行动
  2. Plan-and-Execute Agent

    • 先制定完整计划,再执行
    • 适合复杂、多步骤任务
  3. AutoGPT Agent

    • 自主执行任务,持续运行
    • 可以自我反思和修正

应用场景:

  • 代码生成和执行
  • 数据分析
  • 自动化工作流
  • 智能助手

挑战:

  • 工具调用的准确性
  • 长期记忆管理
  • 错误处理和恢复
  • 安全性问题

12|什么是 ReAct?它的工作原理是什么?

参考答案:

ReAct(Reasoning + Acting) 是一种 Agent 框架,通过交替进行推理(Reasoning)和行动(Acting)来完成任务。

核心思想:

  • 传统方法:先推理再行动,或先行动再推理
  • ReAct:推理和行动交替进行,动态调整策略

工作流程:

  1. 观察(Observation)

    • 获取当前环境状态
    • 例如:搜索结果、工具返回结果
  2. 思考(Thought)

    • 分析当前情况
    • 决定下一步行动
    • 例如:“我需要搜索更多信息”
  3. 行动(Action)

    • 执行具体行动
    • 例如:调用搜索工具
  4. 观察结果

    • 获取行动结果
    • 继续思考下一步

示例:

用户:北京的天气怎么样?

Agent:
Thought: 用户想知道北京的天气,我需要调用天气API。
Action: search_weather(city="北京")
Observation: 北京今天晴天,温度25度
Thought: 我已经获得了天气信息,可以回答用户了。
Action: answer("北京今天晴天,温度25度")

优势:

  1. 动态调整

    • 根据观察结果动态调整策略
    • 不需要预先制定完整计划
  2. 可解释性

    • 思考过程可见,易于理解
    • 便于调试和优化
  3. 错误恢复

    • 可以及时发现错误
    • 通过思考修正策略
  4. 灵活性

    • 适合各种类型的任务
    • 可以处理意外情况

实现方式:

  • 使用大模型的工具调用能力
  • 通过 prompt 引导模型进行思考和行动
  • 使用 LangChain、AutoGPT 等框架

应用:

  • 问答系统
  • 代码生成和执行
  • 数据分析
  • 自动化任务

13|什么是 Function Calling?它如何实现工具调用?

参考答案:

Function Calling(函数调用) 是大模型调用外部工具和函数的能力,让模型可以执行搜索、计算、数据库查询等操作。

工作原理:

  1. 定义工具

    • 描述工具的功能、参数、返回值
    • 使用 JSON Schema 格式
    {
      "name": "search_weather",
      "description": "查询天气",
      "parameters": {
        "type": "object",
        "properties": {
          "city": {"type": "string", "description": "城市名称"}
        }
      }
    }
    
  2. 模型选择工具

    • 模型根据用户输入,决定调用哪个工具
    • 生成符合 Schema 的参数
    • 返回工具调用请求
  3. 执行工具

    • 系统执行工具,获取结果
    • 将结果返回给模型
  4. 模型生成回答

    • 模型基于工具结果生成最终回答

示例流程:

用户:北京的天气怎么样?

模型输出:
{
  "function_call": {
    "name": "search_weather",
    "arguments": {"city": "北京"}
  }
}

系统执行:search_weather("北京") → "晴天,25度"

模型最终回答:北京今天晴天,温度25度。

优势:

  1. 扩展能力

    • 模型可以调用任意工具
    • 突破训练数据的限制
  2. 准确性

    • 使用实时数据,而不是训练时的数据
    • 减少幻觉问题
  3. 灵活性

    • 可以定义各种工具
    • 适应不同场景

实现方式:

  • OpenAI API:支持 function calling
  • Anthropic Claude:支持 tool use
  • LangChain:提供工具调用框架
  • 自定义实现:通过 prompt 引导模型

最佳实践:

  • 工具描述要清晰准确
  • 参数 Schema 要完整
  • 处理工具调用失败的情况
  • 验证工具返回结果

14|什么是 Tool-Use?它和 Function Calling 有什么区别?

参考答案:

Tool-Use(工具使用) 是 Anthropic Claude 的工具调用机制,类似于 OpenAI 的 Function Calling,但有一些设计差异。

相同点:

  • 都是让大模型调用外部工具
  • 都需要定义工具 Schema
  • 工作流程类似:定义工具 → 模型选择 → 执行工具 → 生成回答

区别:

  1. API 设计

    • Function Calling:使用 functions 参数定义工具
    • Tool-Use:使用 tools 参数定义工具
  2. 返回格式

    • Function Calling:返回 function_call 对象
    • Tool-Use:返回 tool_use 对象,包含 id 字段
  3. 多工具调用

    • Function Calling:一次只能调用一个工具
    • Tool-Use:可以同时调用多个工具(并行)
  4. 工具结果处理

    • Function Calling:需要将结果作为消息传入
    • Tool-Use:使用 tool_result 消息,通过 id 关联

Tool-Use 的优势:

  1. 并行调用

    • 可以同时调用多个工具
    • 提升效率
  2. 更好的关联

    • 使用 id 关联工具调用和结果
    • 支持多轮工具调用
  3. 更灵活

    • 支持更复杂的工具调用场景

示例(Tool-Use):

# 定义工具
tools = [{
    "name": "search_weather",
    "description": "查询天气",
    "input_schema": {
        "type": "object",
        "properties": {
            "city": {"type": "string"}
        }
    }
}]

# 模型调用
response = model.messages.create(
    messages=[{"role": "user", "content": "北京和上海的天气"}],
    tools=tools
)

# 模型可能同时调用两个工具
# tool_use_1: search_weather(city="北京")
# tool_use_2: search_weather(city="上海")

选择建议:

  • 使用 OpenAI:Function Calling
  • 使用 Claude:Tool-Use
  • 需要并行调用:Tool-Use
  • 简单场景:两者都可以

四、多模态与部署篇(3题)

15|什么是多模态大模型?它的架构特点是什么?

参考答案:

多模态大模型(Multimodal Large Language Model) 是能够理解和处理多种模态(文本、图像、音频、视频等)信息的大模型。

核心能力:

  • 文本理解:理解自然语言
  • 图像理解:理解图像内容
  • 跨模态理解:理解文本和图像的关系
  • 多模态生成:根据一种模态生成另一种模态

架构特点:

  1. 多模态编码器

    • 文本编码器:Transformer Encoder(如 BERT)
    • 图像编码器:Vision Transformer(ViT)或 CNN
    • 音频编码器:音频 Transformer
    • 将不同模态转换为统一表示
  2. 模态对齐(Modality Alignment)

    • 将不同模态映射到同一语义空间
    • 使用对比学习(如 CLIP)对齐文本和图像
    • 让模型理解跨模态的语义关系
  3. 融合机制

    • 早期融合:在输入层融合
    • 晚期融合:在特征层融合
    • 交叉注意力:使用 Cross-Attention 融合
  4. 统一解码器

    • 使用 Transformer Decoder 生成文本
    • 可以生成图像描述、回答图像相关问题

典型架构:

  1. CLIP(Contrastive Language-Image Pre-training)

    • 文本编码器 + 图像编码器
    • 对比学习对齐两种模态
    • 应用:图像检索、零样本分类
  2. GPT-4V(Vision)

    • 图像编码器 + 文本编码器
    • 统一到 Transformer 架构
    • 应用:图像理解、视觉问答
  3. LLaVA(Large Language and Vision Assistant)

    • 图像编码器(CLIP) + 大语言模型(LLaMA)
    • 投影层连接两种模态
    • 应用:视觉对话、图像理解

训练方式:

  1. 预训练

    • 大规模多模态数据
    • 图像-文本对对比学习
    • 图像描述生成
  2. 指令微调

    • 多模态指令数据
    • 视觉问答、图像理解任务

应用场景:

  • 图像描述生成
  • 视觉问答
  • 图像检索
  • 多模态对话

挑战:

  • 模态对齐困难
  • 计算成本高
  • 需要大量多模态数据

16|大模型部署时需要考虑哪些因素?

参考答案:

大模型部署 是将训练好的模型部署到生产环境,需要考虑多个因素:

1. 性能优化

  • 推理速度

    • 使用量化(INT8/INT4)
    • 使用推理框架(vLLM、TensorRT)
    • 优化 KV Cache
    • 批处理优化
  • 延迟要求

    • 实时对话:< 1 秒
    • 批量处理:可以接受更长延迟
    • 根据场景调整优化策略

2. 资源管理

  • 显存优化

    • 模型量化
    • KV Cache 优化
    • 动态批处理
  • 计算资源

    • GPU 选择(A100、H100 等)
    • 多 GPU 部署
    • CPU 推理(量化模型)

3. 可扩展性

  • 水平扩展

    • 多实例部署
    • 负载均衡
    • 自动扩缩容
  • 垂直扩展

    • 使用更强的 GPU
    • 增加显存

4. 成本控制

  • 硬件成本

    • 选择合适的 GPU
    • 使用云服务还是自建
  • 运营成本

    • 电力消耗
    • 维护成本

5. 可靠性

  • 容错机制

    • 多实例备份
    • 故障自动切换
    • 健康检查
  • 监控告警

    • 性能监控
    • 错误监控
    • 资源使用监控

6. 安全性

  • 数据安全

    • 输入输出过滤
    • 防止注入攻击
    • 数据加密
  • 访问控制

    • API 密钥管理
    • 速率限制
    • 权限控制

7. 易用性

  • API 设计

    • RESTful API
    • 清晰的文档
    • 错误处理
  • SDK 支持

    • Python SDK
    • 其他语言 SDK

部署方案:

  1. 云端部署

    • AWS、Azure、GCP
    • 阿里云、腾讯云
    • 优点:灵活、易扩展
    • 缺点:成本较高
  2. 边缘部署

    • 本地服务器
    • 边缘设备
    • 优点:低延迟、数据安全
    • 缺点:资源有限
  3. 混合部署

    • 云端 + 边缘
    • 根据场景选择

推荐框架:

  • vLLM:高性能推理框架
  • TensorRT:NVIDIA 优化框架
  • ONNX Runtime:跨平台推理
  • Triton:模型服务框架

17|什么是模型量化?常见的量化方法有哪些?

参考答案:

模型量化(Quantization) 是将模型参数从高精度(如 FP32、FP16)转换为低精度(如 INT8、INT4)的技术,可以大幅减少模型大小和显存占用。

量化原理:

  • FP32:32 位浮点数,精度高但占用空间大
  • INT8:8 位整数,精度降低但占用空间减少 75%
  • 通过映射函数将浮点数映射到整数范围

量化公式:

Q = round((F - zero_point) / scale)
其中:
F:原始浮点数
Q:量化后的整数
scale:缩放因子
zero_point:零点偏移

常见方法:

  1. 训练后量化(Post-Training Quantization)

    • 静态量化:使用校准集确定量化参数
    • 动态量化:运行时动态确定量化参数
    • 优点:不需要重新训练
    • 缺点:可能损失精度
  2. 量化感知训练(Quantization-Aware Training, QAT)

    • 训练时就考虑量化
    • 模拟量化过程,让模型适应量化
    • 优点:精度损失小
    • 缺点:需要重新训练
  3. 权重量化(Weight Quantization)

    • 只量化权重,激活值保持 FP16
    • 优点:简单、速度快
    • 缺点:显存减少有限
  4. 激活量化(Activation Quantization)

    • 量化激活值
    • 优点:显存大幅减少
    • 缺点:可能影响精度
  5. 全量化(Full Quantization)

    • 权重和激活值都量化
    • 优点:显存减少最多
    • 缺点:精度损失可能较大

量化位数:

  • INT8 量化

    • 显存减少 50%
    • 精度损失通常 < 5%
    • 最常用
  • INT4 量化

    • 显存减少 75%
    • 精度损失可能 5-10%
    • 需要特殊硬件支持
  • 混合精度

    • 关键层保持 FP16,其他层量化
    • 平衡精度和效率

量化工具:

  • GPTQ:训练后量化,效果好
  • AWQ:激活感知量化
  • LLM.int8():Hugging Face 的量化方法
  • TensorRT:NVIDIA 的量化工具

选择建议:

  • 追求极致速度:INT4 量化
  • 平衡精度和速度:INT8 量化
  • 精度要求高:量化感知训练
  • 快速部署:训练后量化

五、评估与评测篇(3题)

18|如何评估大模型的性能?常见的评估指标有哪些?

参考答案:

大模型评估 是衡量模型性能的关键,需要从多个维度评估:

1. 语言能力评估

  • 困惑度(Perplexity, PPL)

    • 衡量模型对文本的预测能力
    • 越低越好
    • 公式:PPL = exp(cross_entropy)
  • BLEU 分数

    • 评估生成文本的质量
    • 比较生成文本和参考文本的 n-gram 重叠
    • 范围:0-1,越高越好
  • ROUGE 分数

    • 评估摘要质量
    • ROUGE-L:基于最长公共子序列
    • ROUGE-N:基于 n-gram 重叠

2. 任务特定评估

  • 分类任务

    • 准确率(Accuracy)
    • F1 分数
    • 精确率、召回率
  • 问答任务

    • EM(Exact Match):完全匹配率
    • F1:token 级别的 F1
    • BLEU:生成质量
  • 代码生成

    • Pass@K:K 个生成中至少一个通过测试的比例
    • 代码执行正确率

3. 综合评估基准

  • MMLU(Massive Multitask Language Understanding)

    • 57 个任务,涵盖多个领域
    • 评估模型的综合能力
  • HellaSwag

    • 常识推理任务
    • 评估模型的推理能力
  • HumanEval

    • 代码生成任务
    • 164 个编程问题
  • GSM8K

    • 数学问题求解
    • 评估模型的数学能力

4. 安全性评估

  • 毒性检测

    • 评估模型生成有害内容的比例
    • 使用 RealToxicityPrompts 等数据集
  • 偏见检测

    • 评估模型是否存在性别、种族等偏见
    • 使用 BOLD 等数据集

5. 效率评估

  • 推理速度

    • Tokens/秒
    • 延迟(Latency)
  • 资源占用

    • 显存占用
    • 模型大小

评估方法:

  1. 零样本评估(Zero-shot)

    • 不提供示例,直接评估
    • 评估模型的泛化能力
  2. 少样本评估(Few-shot)

    • 提供少量示例
    • 评估模型的上下文学习能力
  3. 微调后评估(Fine-tuned)

    • 在特定任务上微调后评估
    • 评估模型的适应能力

最佳实践:

  • 使用多个评估指标
  • 在多个数据集上评估
  • 考虑实际应用场景
  • 关注模型的弱点和优势

19|什么是数据泄露(Data Leakage)?如何避免?

参考答案:

数据泄露(Data Leakage) 是指测试集中的数据在训练时被模型看到,导致评估结果虚高,不能反映模型的真实性能。

类型:

  1. 直接泄露

    • 测试集数据直接出现在训练集
    • 例如:同一篇文章出现在训练和测试集
  2. 时间泄露

    • 未来数据出现在训练集
    • 例如:用 2024 年的数据训练,用 2023 年的数据测试
  3. 分布泄露

    • 训练集和测试集分布不一致
    • 例如:训练集是新闻,测试集是社交媒体
  4. 标签泄露

    • 测试标签信息泄露到训练集
    • 例如:测试集的答案出现在训练文本中

影响:

  • 评估结果虚高,不能反映真实性能
  • 模型可能过拟合到测试集
  • 部署到真实场景时性能下降

如何避免:

  1. 数据划分

    • 严格划分训练集、验证集、测试集
    • 测试集只在最终评估时使用
    • 使用时间顺序划分(时间序列数据)
  2. 去重处理

    • 检查训练集和测试集是否有重复
    • 使用去重工具(如 MinHash)
  3. 时间顺序

    • 时间序列数据按时间划分
    • 训练集时间 < 验证集时间 < 测试集时间
  4. 分布一致性

    • 确保训练集和测试集分布一致
    • 使用分层采样
  5. 交叉验证

    • 使用 K-fold 交叉验证
    • 多次划分,取平均结果
  6. 外部测试集

    • 使用完全独立的外部测试集
    • 例如:使用其他来源的数据

检测方法:

  1. 相似度检测

    • 计算训练集和测试集的相似度
    • 使用 TF-IDF、Embedding 等
  2. 性能异常

    • 如果测试集性能异常高,可能存在泄露
    • 对比验证集和测试集性能
  3. 人工检查

    • 随机抽样检查
    • 查找重复内容

最佳实践:

  • 数据划分要早,避免后续处理导致泄露
  • 使用版本控制管理数据集
  • 记录数据来源和处理过程
  • 定期检查数据质量

20|什么是 Chain-of-Thought(CoT)?它如何提升模型性能?

参考答案:

Chain-of-Thought(CoT,思维链) 是一种提示技术,通过引导模型展示推理过程来提升复杂推理任务的性能。

核心思想:

  • 传统方法:直接给出答案
  • CoT:先展示推理步骤,再给出答案
  • 让模型"思考"过程可见

示例:

传统提示:

问题:一个篮子里有 5 个苹果,吃掉 2 个,还剩几个?
答案:3 个

CoT 提示:

问题:一个篮子里有 5 个苹果,吃掉 2 个,还剩几个?
推理:
1. 初始有 5 个苹果
2. 吃掉 2 个,所以减少 2 个
3. 剩余 = 5 - 2 = 3 个
答案:3 个

为什么有效?

  1. 分解复杂问题

    • 将复杂问题分解为简单步骤
    • 每一步都更容易解决
  2. 减少错误

    • 展示推理过程,更容易发现错误
    • 可以逐步验证
  3. 利用模型能力

    • 大模型擅长逐步推理
    • CoT 激活了这种能力

类型:

  1. Zero-shot CoT

    • 直接要求模型展示推理过程
    • 提示:“让我们一步步思考”
  2. Few-shot CoT

    • 提供几个 CoT 示例
    • 模型学习推理模式
  3. Self-Consistency

    • 生成多个推理路径
    • 选择最一致的答案

应用场景:

  • 数学问题求解
  • 逻辑推理
  • 常识推理
  • 复杂问答

效果:

  • 在数学问题上提升 20-50%
  • 在逻辑推理上提升 10-30%
  • 在复杂任务上效果显著

进阶技术:

  1. Tree of Thoughts

    • 探索多个推理路径
    • 选择最佳路径
  2. ReAct

    • 结合推理和行动
    • 动态调整策略
  3. Self-Correct

    • 模型自我纠正
    • 发现并修正错误

最佳实践:

  • 根据任务复杂度选择 CoT 类型
  • 提供清晰的推理示例
  • 鼓励模型展示完整推理过程
  • 验证推理步骤的正确性

总结

这 20 道面试题(第二辑)涵盖了大模型的不同维度:

模型架构:GPT vs BERT、MoE、GQA、RMSNorm、SwiGLU 等
训练技巧:梯度累积、学习率调度、标签平滑、Dropout、梯度裁剪等
Agent 技术:AI Agent、ReAct、Function Calling、Tool-Use 等
多模态与部署:多模态模型、部署考虑、模型量化等
评估与评测:性能评估、数据泄露、Chain-of-Thought 等

学习建议:

  1. 结合第一辑和第二辑,全面掌握大模型知识
  2. 理解每个技术的原理和应用场景
  3. 关注最新研究进展(如 MoE、GQA 等新架构)
  4. 动手实践,加深理解

推荐资源:

  • 论文:GPT、BERT、LLaMA、MoE 等经典论文
  • 开源项目:LangChain、vLLM、LLaMA 等
  • 实践:实现简单的 Agent、RAG 系统等

以上是今天的分享,如果对你有帮助的话,欢迎点亮【在看】,【收藏】和【点赞】

Logo

有“AI”的1024 = 2048,欢迎大家加入2048 AI社区

更多推荐