Skip to content
YK Blog
Go back

生成式 AI (5):机器学习与深度学习原理

整理自李宏毅 2025「生成式 AI 导论」第 5 讲。前 4 讲讲的是”训练好的模型怎么用”,这一讲讲的是”模型怎么训练出来的”。


1. 核心问题:通过数据找函数

前面我们知道 LLM 是一个函数 f(x) → 概率分布。但这个函数是怎么找到的?

机器学习 = 通过数据,自动找到一个好用的函数。

为了讲清楚原理,用一个简单案例:“给定一份 PPT,预测老师要讲多久”。


2. 三步流程

步骤 1: 定义目标 → Loss Function(怎么判断好坏)
步骤 2: 画定范围 → Model(可选的函数有哪些)
步骤 3: 寻找最优 → Optimization(怎么找到最好的那个)

2.1 定义目标:Loss Function

准备训练数据(输入 + 标准答案),定义”预测值和真实值的差距”。

MSE(均方误差)

L = (1/N) × Σ (预测值 - 真实值)²

L 越小 → 函数越好。

2.2 画定范围:Model

特征工程:把非数值输入转成数字。PPT → [页数, 总字数, 标题长度…]

线性模型Y = W₁×页数 + B

神经网络

Y = B + Σ Cᵢ × max(0, Wᵢ×X + Bᵢ)

2.3 寻找最优:Gradient Descent

目标:找到让 Loss 最小的参数组合。

梯度下降

1. 随机初始化参数
2. 计算当前点的梯度(Loss 对参数的偏导数)
3. 参数 = 参数 - Learning Rate × 梯度
4. 重复 2-3 直到收敛

关键超参数:

参数太大太小
Learning Rate学习暴走,跳过最优点收敛极慢
Batch Size更新慢但方向稳定更新快但方向震荡

Batch Gradient Descent:不用全量数据算 Loss,每次用一小批(Batch)就更新一次。所有 Batch 过一遍 = 1 个 Epoch。


3. 验证 + 过拟合

训练完要做第 4 步:验证——用模型没见过的数据测试。

过拟合(Overfitting)

训练 Loss 很低,验证 Loss 暴涨。

本质:模型把训练数据的”噪音”都记住了,而不是学到通用规律。

比喻:驾校里学会了”看这个贴纸就向右打”,上路后没有贴纸就完蛋。

解决方法

方法做什么
换训练数据确保训练数据和实际使用场景一致
特征工程用更有信息量的特征(如”每页平均字数”比”总字数”更好)
Early Stopping训练中持续监测验证 Loss,开始上升时停止
缩小模型减少参数量/层数,限制函数空间

测试集泄露

反复在测试集上调参 → 最终对测试集过拟合 → Benchmark 分数高但实际不行。

这就是为什么 Benchmark 不等于真实能力(呼应第 4 讲)。


4. 对 Java 开发者的类比

ML 概念Java 类比
训练数据单元测试用例(input + expected output)
Loss Function断言失败的计数
Modelinterface 定义(约束了实现的形状)
参数实现类里的成员变量
梯度下降自动调参,让所有测试通过
Overfitting为每个测试用例写了 if-else 硬编码,换数据就崩
Validation集成测试(用不同于单测的数据验证)
Early Stopping发现集成测试开始失败就停止改代码

5. 要点总结

找函数三步:
  1. Loss(好坏标准)
  2. Model(搜索空间)
  3. Optimization(怎么搜)

+ 验证(防止过拟合)

深度学习为什么强:神经网络理论上能表示任意函数,搜索空间足够大。代价是训练难度高(容易卡住、过拟合)。


参考



Previous Post
Playwright 实战指南:从 E2E 测试到浏览器自动化
Next Post
生成式 AI (4):评估 AI 能力的坑