【大模型面试题(自学版)】
2、VGG采用了pre_training的方式,先训练级别简单(层数较浅)的VGG Net的A级别网络。: Alex 人名命名,在ImageNet的竞赛中,刷新了image classification的记录。组成:5个卷积层和3个全连接层组成的,深度总共8层,针对1000类的分类问题。trick:数据增广、: 输入层、卷积层、池化层、全连接层、输出层这五个经典部分。激活函数(解决深网络梯度消失问
机器学习
1. mcp: **AI Agent 与 AI Tools 之间**的工具发现、注册和调用协议。
2. Function calling: **AI Agent 与 AI Model 之间**的工具调用协议
3. A2A: **AI Agent 与 AI Agent 之间**的发现与任务分配协议
4. 交叉熵:H(p), H(p,q),用模型的概率分布来编码真实分布,需要多少信息量?
5. KL 散度:对于离散随机变量,分布p和q的KL散度的定义如下:**H(p,q) - H(p)**。**模型分布和真实分布相差多远?**
| 交叉熵 | KL散度 |
|---|---|
| 用 Q 的编码方式 去编码 P 的数据 | KL是距离,交叉熵是“编码代价” |
| 不可以为0 | 可以为0 |
| 非对称 | 非对称 |
| 常做loss | 不常做 |
| 不依赖真实分布熵 | 依赖真实分布熵 |
| 在大模型中的应用:分类 / 意图识别中的交叉熵损失, | 在大模型中的应用:知识蒸馏,用 KL 让 student 学 teacher 分布;SFT / RLHF,SFT:token-level CE、RLHF:KL 约束防止模型漂移 |
agent相关:
- 定义:Agent,表示能自主感知环境,自主规划并执行行动,以完成某项任务的智能系统。
- 组成: 一个完整的AI Agent,除了LLM(大脑)还包括、感知模块(外部的api、文件、搜索引擎)、工具集(tools)、记忆模块(短期和长期)
- 实战:
cv相关
-
分类
常用分类backbone : 参考博主文章 常用的网络模型-
Lenet: 输入层、卷积层、池化层、全连接层、输出层这五个经典部分
-
Alexnet: Alex 人名命名,在ImageNet的竞赛中,刷新了image classification的记录。
组成:5个卷积层和3个全连接层组成的,深度总共8层,针对1000类的分类问题。 trick:数据增广、relu激活函数(解决深网络梯度消失问题)、dropout(避免过拟合)、提出LRN层(局部响应归一化) -
VGG16: 在AlexNet 基础上每层都做了改进,改进点如下:
1、使用了更小的卷积核3*3、更深的网络结构16层,更大的感受野。
2、VGG 采用了pre_training的方式,先训练级别简单(层数较浅)的VGGNet的A级别网络。然后用A网络权重初始化后面模型。加快了收敛速度。
3、采用Multi-Scale 增加训练数据量,防止模型过拟合 -
GoogleNet: ImageNet分类任务上击败了VGG
1、采用了更宽的网络结构,扩增了神经元数量
2、引入了Inception 让网络更宽。原理是一分四,然后做一些不同大小的卷积,之后再堆叠feature map。残差网络做了相加的操作,而inception做了串联的操作。(前者是add,后者是concat)
3、1*1 卷积核的作用: 降维、使网络更深、增加Relu等非线形激活函数 -
Resnet 何凯明团队提出的, 34层残差网络
1、 引入 Hx = Fx+ x, 认为输入和输出的关系可以按照这种来表示。因此学习残差,更快的优化网络。
2、 考虑到x和Fx维度不匹配问题: zero_padding projection采用1*1卷积核来增加维度。 -
DenseNet:2017最佳论文Desenet, 吸收了resnet 精华,在此基础上修改
1、DenseNet会在每层conv间有一个skip connect。
2、将每一层都直接与其前面层相连,提高特征的利用率
3、把网络的每一层设计得很窄,减少卷积的输出通道数,只有几十,该层学习非常少的特征图并与输入concat使用。 -
MobileNet: 考虑对模型复杂度和硬件性能的衡量
1、深度可分离卷积: 深度卷积中一个卷积核只有一维,负责一个通道,一个通道只被一个卷积核卷积
2、逐点卷积: 逐点卷积卷积核大小为1×1xM(M为输入数据的维度),每次卷积一个像素的区域。逐点卷积运算会将上一层的特征图在深度(通道)方向上进行加权组合,生成新的特征图,新的特征图的大小与输入数据大小一致,这种卷积方式以较少的计算量进行降维或升维操作(改变输出数据的维度- 模型复杂度
1、 参数数量 (Params):指模型含有多少参数,直接决定模型的大小,也影响推断时对内存的占用量
2、 理论计算量(FLOPs):指模型推断时需要多少计算次数,通常只考虑乘加操作(Multi-Adds)的数量,
- 硬件性能
1、算力
2、带宽
- 模型复杂度
-
EfficientNet:
-
-
检测
大模型微调方法
前缀调优
提示调优
P-Tuningv2
Lora
DyLora
AdaLora
Qlora
QA-Lora
LongLora
Vera
S-lora
大模型网络模型
transformer
bert
gpt
vit
- 当拥有足够多的数据进行预训练的时候,ViT的表现就会超过CNN,突破transformer缺少归纳偏置的限制,可以在下游任务中获得较好的迁移效果
clip
blip
diffusion
损失函数
平方误差损失函数
交叉熵损失函数
优化器
| 类别 | 是否自适应学习率 | 是否有动量 | 是否正则化 | 优点 | 缺点 | 适用场景 | |
|---|---|---|---|---|---|---|---|
| Momentum SGD 引入“惯性”,让更新方向考虑过去梯度趋势 | 否❌ | 是✅ | 支持✅ | 收敛更快,能跳出局部最优,梯度震荡小 | 学习率仍需精细调整,对非平稳数据不友好 | 图像分类(ResNet、DenseNet), Transformer类模型中不常用| | |
| RMSProp 在 Adagrad 基础上引入指数滑动平均,防止学习率快速衰减: | 是 ✅ | 类似动量 | 支持✅ | 学习率动态调整更平滑;稳定性强,特别适合 非平稳任务(如序列、时序) | 超参数多,仍需经验调参 | RNN、LSTM、时间序列预测;强化学习 | |
| Adam 结合 Momentum 和 RMSProp: | 是✅ | 是 ✅ | 支持✅ | 收敛快;自动调整每个参数的学习率;对梯度尺度不敏感; | 可能过快收敛到局部最优;泛化能力略差;对 weight_decay 不敏感(正则化效果差) | NLP、Transformer;小样本学习;迁移学习、fine-tuning。 | |
| AdamW 把权重衰减(weight decay)从动量中分离出来,更接近真正的L2正则 | 是 ✅ | 是✅ | 支持✅ | 正则化更有效;收敛更平滑;泛化更好;Transformer首选 | 内存占用略高,对学习率仍需微调 | BERT、ViT、LLM、Diffusion 等现代大模型;绝大多数 Transformer 结构都用 AdamW。 | |
| AdaBelief 用 “(梯度 - 其一阶动量)” 的平方,衡量梯度的“不确定性”: | 是✅ | 是✅ | 支持✅ | 收敛速度快;泛化能力接近 SGD,精度高于 Adam,更稳定,对学习率不敏感 | 稍慢于纯 Adam,实现稍复杂 | 复杂视觉/NLP模型,Transformer 微调,GAN、生成模型 | |
| SGD 每次用一个 batch 的样本计算梯度并更新参数: | 否❌ | 可选✅ | 支持✅ | 理论基础扎实,泛化性最好;适合大规模图像数据(如 ImageNet);控制简单,学习率调优可解释性强。 | 收敛慢;对学习率敏感;容易陷入局部极小值或震荡。 | CV任务(图像分类、检测);数据分布稳定、梯度平滑;想获得更好泛化性能时(如 ResNet、VGG)。 | |
| Adagrad 对每个参数维护一个自适应学习率:梯度越大,学习率越小(自动调节) | 是✅ | 否❌ | 支持✅ | 适合稀疏特征(如 NLP 的词嵌入),无需手动调学习率 | 学习率单调递减,后期趋于0,模型停滞,不能长期训练 | 稀疏输入特征:NLP(词向量)、推荐系统,不建议用于深层 CNN| |
生成对抗网络 GAN
- 生成器G: 负责生成
- 判别器D: 负责判定
- 改进版:
LSTM
- 组成:
1、遗忘门:决定遗忘多少旧信息
2、输入门:决定接受多少新信息
3、输出门:决定“输出”多少当前信息
4、候选记忆(Candidate):生成新的候选信息内容 - 优缺点:
Peephole连接机制是LSTM的改进,通过让门控单元访问细胞状态来更精确控制记忆和遗忘,能有效缓解长期依赖问题。
深度学习中的一些计算
- 某层训练参数数量:【(卷积核宽 * 卷积核高 * 输入通道数 + 1)* 输出通道数 】卷积层参数只与卷积核大小、输入通道数、卷积核个数及是否含偏置有关
- keras MLP,计算一共训练多少参数: (输入维度*输出维度+输入维度)
深度学习一些概念
-
过拟合 :在训练集上表现很好,但是测试集上表现很差
原因:
1、数据太少
2、模型太复杂
3、正则化不足(没有 dropout / weight decay)
4、 过多 epoch
5、数据分布偏差 (训练集测试集分布偏差)
过拟合解决办法:数据增强、加正则化(L1/L2/dropout)、使用早停(Early Stopping)、降低模型复杂度、使用更多数据 -
欠拟合:在训练集和测试集上表现不好
原因:
1、模型太简单
2、特征不足
3、学习率太低(优化太慢,没收敛)
4、训练不充分
5、正则化太强 (dropout、L2 过重)
6、数据噪声大 (模型学不到规律)
欠拟合解决办法:增加模型容量(更多层/神经元)、提高学习率、训练更久、减少正则化
-
**学习率对模型训练的影响:**太小会导致陷入局部最优点,太大会导致一步跳过山谷,对面再跳回来,震荡
-
梯度消失:链式乘积指数收缩 → 用 ReLU/GELU、良好初始化、残差/归一化/LSTM/短序列 或 使用注意力替代。
原因:
1、激活函数饱和(sigmoid/tanh 在远离 0 区域导数接近 0
2、权重初始化不当(导致雅可比谱远小于1)
3、网络太深(链式乘法多)
4、RNN 长序列(重复乘相同矩阵)
解决方法:
1、使用非饱和激活函数:relu、 leaykyRelu
2、良好初始化:Xavier(Glorot)或 He 初始化
# He 初始化 + BatchNorm + Residual
class Block(nn.Module):
def __init__(self, in_ch, out_ch):
super().__init__()
self.conv = nn.Conv2d(in_ch, out_ch, 3, padding=1)
self.bn = nn.BatchNorm2d(out_ch)
nn.init.kaiming_normal_(self.conv.weight, nonlinearity='relu')
self.shortcut = nn.Identity() if in_ch==out_ch else nn.Conv2d(in_ch,out_ch,1)
def forward(self, x):
out = F.relu(self.bn(self.conv(x)))
out = out + self.shortcut(x) # residual
return out
3、使用批归一化/层归一化(BatchNorm / LayerNorm):稳定激活分布,缓解消失
nn.BatchNorm1d(num_features)
nn.LayerNorm(normalized_shape)
4、残差连接(ResNet、Skip connections):让梯度有捷径直接回流
out = x + F.relu(self.conv(x))
5、改用门控 RNN(LSTM / GRU):专门设计来保存远程信息,解决RNN梯度消失
rnn = nn.LSTM(input_size, hidden_size, num_layers)
6、缩短序列或使用注意力/Transformer:避免长时间递归依赖
7、 合适的学习率与优化器:使用 Adam/AdamW 并调小 lr ,或 LR warmup
- 梯度爆炸:链式乘积/学习率/初始化太大 → 用梯度裁剪、降低学习率、正则化、正交/合适初始化、架构改造、AMP+GradScaler。
原因:
1、权重初始化过大(雅可比谱>1)
2、 学习率过大导致参数更新剧烈
3、RNN 长序列时矩阵特征值 > 1 导致指数增大
4、混合精度下缩放/反缩放错误(loss scaling)
解决办法:
1、梯度裁剪(Gradient Clipping):最直接、常用
# 梯度裁剪
for data in dataloader:
loss = model_step(data)
optimizer.zero_grad()
loss.backward()
# clip by global norm
torch.nn.utils.clip_grad_norm_(model.parameters(), max_norm=1.0)
optimizer.step()
2、降低学习率或使用学习率调度scheduling(或 warmup)
3、改进初始化(使谱半径接近1 或 小于1但不太小)
4、使用更稳定的架构:LSTM/GRU 或 Transformer(相对稳定,但仍需注意 lr/scheduling)
5、正则化 / 权重衰减(适度):避免权重迅速变大
6、检查数值(NaN/inf), mixed precision 注意 loss scaling(AMP)
观察 loss/grad: 若 loss 突然变 NaN 或剧烈波动,可能是爆炸。若 loss 长时间不变或训练/验证都差,怀疑消失或欠拟合。
- OOD数据: 指 “分布外数据”,即 测试或推理阶段遇到的数据分布,与模型训练时的数据分布不同。
# softmax 判定是否为ood数据
import torch
import torch.nn.functional as F
def is_ood(model, x, threshold=0.8):
with torch.no_grad():
logits = model(x)
probs = F.softmax(logits, dim=1)
max_conf = probs.max(dim=1)[0]
ood_mask = max_conf < threshold
# ood_mask 为True,表示该样本为ood数据
return ood_mask, max_conf
llm相关
- 文本
- 语音
- 图片/视频
程序相关
推理侧部署相关
更多推荐


所有评论(0)