生成式人工智能的基本原理

x → f(x):中间通过函数 f 进行转换

找出 f 函数 就是机器学习的内容

找出函数的步骤(3+1)

第一步:确认目标

  • 给一个函数,评估这个函数是否满足需求
  • 参考第四课:模型能力评估
  • 用给定的函数观察表现,根据得分判断(如 MSE 分数)
  • Loss 越小越好,Objective 越大越好
  • 确定优化目标(例如:让 Loss 最小)

第二部:我有哪些选择

  • 确定可选的函数范围
  • 函数由人决定,可以选择各种各样的函数

第三步:选择最优函数

目标:找到让 Loss 最低(或最高)的函数

步骤:

  1. 先写出 Loss 的方程式

  1. 找到让 Loss 最小/最大的参数
优化方法

方法

原理

缺点

暴力求解

遍历所有可能,找最小值

参数增加时, 速度太慢

梯度下降法 (Gradient Descent)

利用微积分斜率判断方向和平衡点(计算微积分可以直接使用相关的封装方法,pytorch有相应的方法)

可能陷入局部最优 (Local Minimum)

梯度下降法详解

  • 类似高等数学微积分知识
  • 斜率可判断是否到达平衡点
  • 斜率指示移动方向(左/右)

多参数通用方法

注意点

学习率不能太小也不能太大,需要设置一个合适的值。

还有一点是参数更新的时间可能很长,因为每一次都要计算Loss的值,并且这个值是根据所有资料计算得到的,所以会很久。

加速训练:Batch 技术

问题:每次计算 Loss 都要用所有资料(N),耗时太长

解决方案:将资料切片成 Batch(B)

  • 一个 Batch 更新一次参数(而非看完所有资料)
  • 一个 Epoch = 所有 Batch 都使用过一次

batch size也是需要调的,不能太大或者太小,二者都不行

Shuffle 技术: 并且我们要用到这个技术的时候,需要用到shuffle的技术,可以增加更多的随机性,让模型看到不同的结果,增加更多的随机性。

模型验证与测试流程

当我们通过上述的步骤得到函数的时候,我们需要先进行验证(模拟考),最后再进行测试(大考)。

训练 → 验证(模拟考)→ 测试(大考)

进行验证的时候,我们需要先有一个用于验证的资料集,然后进行比较。验证结果不好时,逐步回溯检查

逐步排查

步骤

可能问题

解决方案

步骤一

训练资料错误

更新训练资料,确保与测试内容匹配

步骤二

函数选择太少

扩大函数集合范围

比如我们的函数可能是下图中的曲线状的,我们应该怎么去确定函数呢?方法是取函数上的多个点,用直线连接,分段线性逼近 (Piecewise Linear),后续用ReLu的方法去拟合函数,并且ReLu的操作可以多次进行,这就是类神经网络,如果进行多次的ReLu那就是深度学习

深度学习训练:同样使用梯度下降法,下面的视频是讲述更加有效的方法:

训练中的问题

问题1:陷入局部最优或鞍点

后续如果Loss依旧不满意,有可能是步骤三的问题,我们可能训练的时候,没有训练到更好的函数,而是卡在了某些平衡点(山谷),也有可能是卡到了Saddle Point,此处的微分是0,但是实际上函数可能是左边是向下的,这个点是平的,后续的一部分函数也是平的,这时候模型会以为已经到达了平衡点,我们一旦往右边多跨一点,就有可能让loss更低。

  • 局部最优 (Local Minimum):微分为0,但不是全局最低
  • 鞍点 (Saddle Point):微分为0,但一侧仍可下降

实践建议

从简单模型开始 → 获取 baseline 结果 → 逐步增加复杂度

  • 若复杂模型表现更差 → 优化做得不够好
  • 若相同 x 对应相同 y → 需要增加更多变量

同时,我们画出了函数以及数据点,可以看到相同的x,有着相同的y,根据这个特征,我们可以发现我们当前函数的变量取的还不够准确,应该找到更多的变量。

问题二:过拟合 (Overfitting)

现象
  • 训练 Loss 很低
  • 验证分数很高(表现差)
原因

这种现象的原因是:划定的函数集合范围越大,越容易发生这种现象,找到一个不好的函数。比如有这样一个函数,在训练资料上,直接根据输入,输出标准答案,而对于在训练集外的输入,则直接输出为0。这样的函数我们得到的loss是很低的,但是放到验证上,loss就会很大。

拓展:可以去看下面的链接,给定了为什么划定范围越大,越容易发生overfitting的理论分析

发生了这种现象,我们就需要去调整步骤二,调整函数的划分范围。而且在实际的时候,我们可以在更新参数的时候,也进行验证的步骤,去看看当前训练是否合适。

具体看下图:并且我们发现当epoch次数少一些的时候,就达到了一个很不错的结果,我们就可以进行early stopping,去避免overfitting。

Early Stopping(早停)

  • 训练时同步验证
  • 发现 Epoch 较少时已达不错结果,提前停止

⚠️ 警告:多次调整可能导致验证集过拟合,最终测试表现不佳

但是如果我们进行了很多次去调整函数,发生了很多overfitting现象,我们最终也有可能得到了一个在验证资料上也overfitting的函数,当我们一旦把这个函数放到了测试资料上,就会出错。但是也没有问题,我们还可以重新开始。但是如果最后我们也在测试资料上overfitting.........这也是为什么有些模型在实际使用的时候,可能表现的不如测试的时候那样。

完整解决策略

Logo

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

更多推荐