机器学习

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 : 参考博主文章 常用的网络模型

    1. Lenet: 输入层、卷积层、池化层、全连接层、输出层这五个经典部分

    2. Alexnet: Alex 人名命名,在ImageNet的竞赛中,刷新了image classification的记录。
      组成:5个卷积层和3个全连接层组成的,深度总共8层,针对1000类的分类问题。 trick:数据增广、relu激活函数(解决深网络梯度消失问题)、dropout(避免过拟合)、提出LRN层(局部响应归一化)

    3. VGG16: 在AlexNet 基础上每层都做了改进,改进点如下:
      1、使用了更小的卷积核3*3、更深的网络结构16层,更大的感受野。
      2、VGG 采用了pre_training的方式,先训练级别简单(层数较浅)的VGGNet的A级别网络。然后用A网络权重初始化后面模型。加快了收敛速度。
      3、采用Multi-Scale 增加训练数据量,防止模型过拟合

    4. GoogleNet: ImageNet分类任务上击败了VGG
      1、采用了更宽的网络结构,扩增了神经元数量
      2、引入了Inception 让网络更宽。原理是一分四,然后做一些不同大小的卷积,之后再堆叠feature map。残差网络做了相加的操作,而inception做了串联的操作。(前者是add,后者是concat)
      3、1*1 卷积核的作用: 降维、使网络更深、增加Relu等非线形激活函数

    5. Resnet 何凯明团队提出的, 34层残差网络

      1、 引入 Hx = Fx+ x, 认为输入和输出的关系可以按照这种来表示。因此学习残差,更快的优化网络。
      2、 考虑到x和Fx维度不匹配问题: zero_padding projection采用1*1卷积核来增加维度。

    6. DenseNet:2017最佳论文Desenet, 吸收了resnet 精华,在此基础上修改

      1、DenseNet会在每层conv间有一个skip connect。
      2、将每一层都直接与其前面层相连,提高特征的利用率
      3、把网络的每一层设计得很窄,减少卷积的输出通道数,只有几十,该层学习非常少的特征图并与输入concat使用。

    7. MobileNet: 考虑对模型复杂度和硬件性能的衡量

      1、深度可分离卷积: 深度卷积中一个卷积核只有一维,负责一个通道,一个通道只被一个卷积核卷积
      2、逐点卷积: 逐点卷积卷积核大小为1×1xM(M为输入数据的维度),每次卷积一个像素的区域。逐点卷积运算会将上一层的特征图在深度(通道)方向上进行加权组合,生成新的特征图,新的特征图的大小与输入数据大小一致,这种卷积方式以较少的计算量进行降维或升维操作(改变输出数据的维度

      • 模型复杂度
        1、 参数数量 (Params):指模型含有多少参数,直接决定模型的大小,也影响推断时对内存的占用量

      2、 理论计算量(FLOPs):指模型推断时需要多少计算次数,通常只考虑乘加操作(Multi-Adds)的数量,

      • 硬件性能
        1、算力

      2、带宽

    8. 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相关

  1. 文本
  2. 语音
  3. 图片/视频

程序相关

推理侧部署相关

Logo

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

更多推荐