AI-Agent 面试题汇总 - 深度学习篇

1. 谈谈深度学习中的归一化问题

深度学习中的归一化,核心目的是让不同层、不同特征的数值分布更稳定,从而加速训练并提高收敛稳定性。常见归一化包括输入归一化(如像素缩放到[0,1])、BatchNorm、LayerNorm、GroupNorm。BatchNorm在mini-batch维度统计均值方差,适合CNN场景;LayerNorm在特征维度统计,常用于NLP和Transformer。归一化可以缓解梯度消失/爆炸、允许更大学习率、降低参数初始化敏感性。

import torch.nn as nn

# CNN里常见 BatchNorm2d
cnn_block = nn.Sequential(
    nn.Conv2d(3, 64, 3, padding=1),
    nn.BatchNorm2d(64),
    nn.ReLU()
)

# Transformer里常见 LayerNorm
ln = nn.LayerNorm(768)

2. LSTM结构推导,为什么比RNN好?

LSTM在RNN基础上引入“门控机制”和“细胞状态”:

  • 遗忘门:控制历史信息保留多少
  • 输入门:控制当前输入写入多少
  • 输出门:控制输出多少状态它通过加法路径维护长期记忆,能显著缓解普通RNN在长序列上的梯度消失问题。因此在长文本、语音等时序任务中,LSTM通常比基础RNN记忆能力更强、训练更稳定。
import torch.nn as nn

rnn = nn.RNN(input_size=128, hidden_size=256, batch_first=True)
lstm = nn.LSTM(input_size=128, hidden_size=256, batch_first=True)

3. Sigmoid、Tanh、ReLU这三个激活函数有什么优点或不足?

  • Sigmoid:输出(0,1),适合概率建模;缺点是两端饱和导致梯度接近0,且输出非零中心。
  • Tanh:输出(-1,1),零中心,通常比sigmoid收敛好;但仍有饱和区梯度消失问题。
  • ReLU:正半轴梯度恒定、计算简单、收敛快;缺点是负半轴梯度为0,可能出现“神经元死亡”。工程上隐藏层多用ReLU族(ReLU/LeakyReLU/GELU),输出层按任务选择sigmoid或softmax。
import torch
import torch.nn.functional as F

x = torch.tensor([-2.0, -0.5, 0.0, 1.0, 3.0])
print(torch.sigmoid(x))
print(torch.tanh(x))
print(F.relu(x))

4. 为什么引入非线性激励函数?

如果网络每层都只做线性变换,多层叠加后仍等价于一层线性变换,模型表达能力有限,无法拟合复杂非线性关系。引入激活函数后,网络可以逼近复杂函数,实现高层语义抽象,这是深度学习有效的核心原因之一。

5. 为什么在神经网络中 ReLU 往往优于 Tanh 和 Sigmoid?

ReLU的正区间梯度不衰减,能减少深层网络训练时的梯度消失;同时计算仅需阈值操作,速度快。相比Sigmoid/Tanh,ReLU在深层网络中通常收敛更快、效果更稳。但ReLU也有“死亡神经元”问题,因此很多场景会用LeakyReLU、PReLU、GELU改进。

import torch.nn as nn

act1 = nn.ReLU()
act2 = nn.LeakyReLU(0.1)
act3 = nn.GELU()

6. 为什么LSTM里既有Sigmoid又有Tanh,而不是统一一种?

Sigmoid输出0~1,天然适合作“门控开关”(保留/过滤信息比例);Tanh输出-1~1,适合作状态候选值,便于表达正负语义。两者分工明确:Sigmoid负责“控制流量”,Tanh负责“表达内容”。统一成一种会削弱门控机制或表达能力。

7. 如何解决RNN梯度爆炸和梯度消失问题?

常见手段:

  1. 使用LSTM/GRU替代基础RNN
  2. 梯度裁剪(gradient clipping)防止爆炸
  3. 合理初始化(如Xavier/He)
  4. 调整学习率与优化器
  5. 序列截断BPTT
  6. 引入归一化与残差结构(在可用场景)
# PyTorch 训练时做梯度裁剪
torch.nn.utils.clip_grad_norm_(model.parameters(), max_norm=1.0)

8. 什么样的数据集不适合用深度学习?

通常不太适合:

  • 数据量很小,且难以做迁移学习/增强
  • 特征关系简单,传统模型已足够好
  • 对可解释性要求极高且必须规则透明
  • 算力、时延、部署资源极其受限
  • 标签噪声很大且无法清洗此时可优先试LR、树模型、规则系统或小模型方案。

9. 广义线性模型是怎样被应用在深度学习中的?

广义线性模型(GLM)的思想体现在深度网络输出层设计中:

  • 二分类输出层常用 sigmoid + BCE,本质接近逻辑回归
  • 多分类输出层常用 softmax + 交叉熵,对应多项分布建模可以理解为“深层网络提特征 + GLM风格输出头做决策”。
import torch.nn as nn

# 二分类头
binary_head = nn.Sequential(
    nn.Linear(768, 1),
    nn.Sigmoid()
)

# 多分类头
multi_head = nn.Linear(768, 10)  # 后接 softmax 在loss里处理

10. 如何解决梯度消失和梯度膨胀?

通用方案:

  • 激活函数用ReLU/GELU替代Sigmoid深堆叠
  • 使用BatchNorm/LayerNorm
  • 残差连接(ResNet思想)
  • 合理初始化 + 学习率策略
  • 梯度裁剪(尤其RNN)
  • 使用AdamW等稳定优化器
  • 混合精度时关注loss scale设置
optimizer = torch.optim.AdamW(model.parameters(), lr=2e-4, weight_decay=0.01)

11. 深度学习有哪些熟悉的优化算法?

常见优化器:

  • SGD
  • SGD + Momentum
  • AdaGrad
  • RMSProp
  • Adam
  • AdamW面试上可补一句:工业中AdamW常作为默认起点,视觉大模型和NLP任务普遍使用。
import torch.optim as optim

opt_sgd = optim.SGD(model.parameters(), lr=0.1, momentum=0.9)
opt_adamw = optim.AdamW(model.parameters(), lr=1e-3, weight_decay=0.01)

12. Adam怎么更新的?(Adam怎么优化?)

Adam结合了Momentum(一阶矩)和RMSProp(二阶矩)思想:

  • 一阶矩估计梯度均值,减少震荡
  • 二阶矩估计梯度平方均值,自适应学习率
  • 再做偏置校正,得到更稳定更新步长优点是收敛快、对稀疏梯度友好、调参相对容易。常见改进是AdamW,把权重衰减与梯度更新解耦。

13. 讲讲学习率衰减

学习率衰减用于训练后期更精细搜索最优点,避免在最优附近震荡。常见策略:Step Decay、Exponential、Cosine Annealing、Warmup + Cosine。大模型训练常用“前期warmup,后期余弦衰减”。

import torch.optim as optim

optimizer = optim.AdamW(model.parameters(), lr=1e-3)
scheduler = optim.lr_scheduler.CosineAnnealingLR(optimizer, T_max=50)

for epoch in range(50):
    # train...
    scheduler.step()

14. PyTorch里怎么从CPU迁移到GPU?

核心是把模型和数据都迁移到同一device:

  1. device = torch.device("cuda" if torch.cuda.is_available() else "cpu")
  2. model.to(device)
  3. 每个batch的输入和标签也.to(device)
import torch

device = torch.device("cuda" if torch.cuda.is_available() else "cpu")
model = model.to(device)

for x, y in dataloader:
    x = x.to(device)
    y = y.to(device)
    out = model(x)

15. 激活函数Sigmoid的梯度最大点在哪,等于多少?

Sigmoid函数:(\sigma(x)=1/(1+e^{-x}))其导数:(\sigma'(x)=\sigma(x)(1-\sigma(x)))。当(\sigma(x)=0.5)时导数最大,对应(x=0),最大值为(0.25)。

16. batch_size对训练的影响(你图里是“对训练的影响过拟合,怎么处理”)

batch_size影响梯度估计噪声、显存占用和收敛特性:

  • 小batch:噪声大,泛化可能更好,但训练不稳定、速度可能慢
  • 大batch:训练吞吐高、更稳定,但可能泛化略差,且吃显存过拟合处理不只靠batch_size,还应结合正则化、数据增强、早停、dropout等。
from torch.utils.data import DataLoader
train_loader = DataLoader(train_dataset, batch_size=32, shuffle=True)

17. GELU函数和ReLU函数的区别?

  • ReLU:(f(x)=\max(0,x)),硬阈值,简单高效
  • GELU:按概率保留输入,曲线更平滑,负值区域并非全截断GELU在Transformer/BERT中非常常见,通常在NLP预训练模型里效果优于ReLU;ReLU在很多CNN与轻量部署场景仍有优势。
import torch.nn as nn

relu = nn.ReLU()
gelu = nn.GELU()
AI-Agent面试实战专栏 文章被收录于专栏

本专栏聚焦 AI-Agent 面试高频考点,内容来自真实面试与项目实践。系统覆盖大模型基础、Prompt工程、RAG、Agent架构、工具调用、多Agent协作、记忆机制、评测、安全与部署优化等核心模块。以“原理+场景+实战”为主线,提供高频题解析、标准答题思路与工程落地方法,帮助你高效查漏补缺.

全部评论
LSTM门控细节
点赞 回复 分享
发布于 昨天 23:37 河北
蹲个面经
点赞 回复 分享
发布于 昨天 23:03 河北
这些基本都会问吗
点赞 回复 分享
发布于 昨天 22:17 云南
感谢分享 我发现自学很多没接触过的东西
点赞 回复 分享
发布于 昨天 21:42 黑龙江

相关推荐

评论
2
5
分享

创作者周榜

更多
牛客网
牛客网在线编程
牛客网题解
牛客企业服务