拓冰建站拓冰建站
首页 / 资讯中心 / 正文

AI技术总监带你吃透大模型|05|训练集99%,为什么模型上线却可能失效

《现代 AI 原理与系统工程》· 第05讲前两讲已经把训练的前半段接起来了第03讲Logits → Softmax → Cross-Entropy → Loss 第04讲Loss → Gradient → Backpropagation → Optimizer → 参数更新这一讲再往后走一步参数更新了这么多轮怎么判断模型是真的学到了规律而不是只把训练数据记熟了这就是机器学习最核心的一个问题泛化Generalization全文尽量从程序员能直接接受的方式讲。先用例子再上概念需要公式的地方给公式但不把公式当门槛。一、先看一个很现实的问题训练准确率99%为什么还可能没用假设你训练一个异常检测模型。训练结束以后Training Accuracy 99%第一反应很容易是模型已经很好了。但上线以后真实环境 Accuracy 72%为什么最常见的一种情况就是模型把训练数据学得太熟它在训练数据上表现非常好但遇到没见过的数据就掉下来了。所以机器学习真正关心的不是“我把训练集做得多漂亮”而是“遇到新数据我还能不能做对”这就是泛化能力。可以先记一句训练是为了学规律泛化是为了证明学到的不是只属于训练集的规律。二、机器学习到底在“学”什么先看一个特别简单的例子。训练数据x y 1 3 2 5 3 7 4 9模型最后学到y 2x 1训练时根本没有x 5但现在给它x 5它仍然可以预测y 11这才叫真正学到了一点规律。如果模型只是“背答案”呢它也可以记住1 → 3 2 → 5 3 → 7 4 → 9但碰到5完全不知道。那么训练集很好 新数据很差这就是最直观的过拟合。所以记住样本 ≠ 学到规律当然真实模型并不是简单地“记忆”和“理解”二选一。现代深度学习的泛化机制更加复杂但这个例子足够建立第一层直觉。三、什么叫 Generalization最简单的定义模型在没有直接参与参数学习的新数据上仍然能够保持有效表现。可以画成训练数据 ↓ 模型学习参数 ↓ 得到模型 新的、没参与训练的数据 ↓ 模型预测 ↓ 看还能不能做好如果Train 好 New Data 也好说明泛化不错。如果Train 非常好 New Data 很差就要重点检查Overfitting四、为什么一定要把数据分成 Train、Validation、Test这是整个机器学习实验最重要的基础之一。1. Training Set拿来学训练集真正参与Forward ↓ Loss ↓ Backward ↓ Gradient ↓ Optimizer ↓ 修改参数也就是说模型直接拿训练集学习参数。2. Validation Set拿来选验证集一般不直接参与参数梯度更新。它主要拿来做选择模型 选择超参数 观察是否过拟合 决定什么时候停止训练例如你有learning rate 1e-2 learning rate 1e-3 learning rate 1e-4哪一个更合适可以看 Validation Set。所以Train → 学参数 Validation → 选配置3. Test Set最后验收测试集最重要的原则尽量不要在开发过程中反复拿它调模型。正确思路Train ↓ 训练模型 Validation ↓ 调模型、调超参数 模型确定 ↓ Test ↓ 最终评估为什么因为如果你不断看 Test → 改模型 → 再看 Test → 再改模型Test Set 事实上已经参与了模型选择。它就不再是真正的“最终未知数据”。五、用程序员最容易接受的方式理解 Train / Val / Test可以先类比成软件开发Training Set ≈ 开发时反复调试的数据 Validation Set ≈ 开发阶段独立测试的数据 Test Set ≈ 最终验收数据这个类比不是严格数学定义但非常适合第一层理解。最关键的一点验收数据不能一边验收一边拿来改程序。机器学习里也是一样。六、什么叫 Overfitting一句话模型在训练集上越来越好但在新数据上的表现开始变差。最典型的训练曲线Training Loss ↓ ↓ ↓ ↓ ↓ ↓ Validation Loss ↓ ↓ ↓ ↑ ↑ ↑也就是Train Loss 继续下降 Validation Loss 开始上升这通常是非常典型的过拟合信号。为什么会过拟合常见原因1. 数据太少 2. 模型容量相对过大 3. 数据噪声较多 4. 训练时间过长 5. 正则化不足 6. 数据划分方式不合理 7. 训练数据和目标数据分布存在差异这里最重要的不是把原因背下来。要理解的是模型的自由度太高而训练数据对它的约束不够时它更容易把训练样本里的偶然细节也学进去。七、什么叫 Underfitting过拟合的另一边是欠拟合。最简单地说模型连训练数据都没学明白。典型表现Training Loss高 Validation Loss也高例如真实规律很复杂你却使用了一个过于简单的模型。结果Train 都做不好 Val 更做不好所以可以先形成这张表情况TrainValidation常见含义欠拟合差差模型/训练不足泛化较好好好学到可迁移规律过拟合很好变差对训练集适应过度注意这是一张帮助建立直觉的简化表不是对所有训练问题的绝对诊断规则。八、模型复杂到底意味着什么很多人会把“复杂”理解成代码很多机器学习里更重要的是模型有多大的能力去表示不同的函数和模式。可以粗略理解成模型容量小 → 能表达的模式较少 模型容量大 → 能表达的模式更多容量太小可能学不到真实规律 → Underfitting容量很大既可能学到复杂真实规律 也可能把训练数据里的噪声一起学进去所以真正的问题不是模型越大越坏。也不是模型越小越好。真正要看的是模型容量 数据规模 数据质量 训练方式 正则化这些东西是否匹配。现代深度学习里模型规模和泛化之间的关系也比传统的“复杂度越高过拟合越严重”直觉更加复杂。后面的 Scaling Law 会专门讲这一点。九、Bias 和 Variance到底是什么这两个词很容易把刚开始学机器学习的人吓住。先别看复杂公式。Bias可以先理解成模型对真实规律存在比较稳定的系统性偏差。例如模型太简单 → 很多真实规律根本表达不了常和Underfitting联系起来。Variance可以先理解成模型对训练数据中的细小变化过于敏感。训练集稍微变一点模型结果就变化很大这通常和Overfitting联系起来。所以先记成高 Bias → 模型太简单 → 容易欠拟合 高 Variance → 模型太敏感 → 容易过拟合这是经典分析框架但不要把现实中的所有问题都机械地塞进“Bias 或 Variance”两个桶。十、正则化到底是干什么的遇到过拟合最常见的方向之一就是Regularization正则化。核心思想很简单不要只要求模型把训练数据做对还要给模型增加一些约束。原来目标 Training Loss可以变成目标 Training Loss Complexity Penalty也就是既要拟合数据 又不能过度自由十一、L2 正则化怎么理解经典形式L_total L_data λ × Σ(w²)不用害怕这个公式。直接拆L_data → 原来的训练损失 Σ(w²) → 对参数过大的情况加惩罚 λ → 控制惩罚强度所以它在做的事情可以粗略理解成不希望模型为了死死贴住训练数据把参数推到非常极端。十二、L1 正则化又是什么形式L_total L_data λ × Σ|w|区别L1 → 惩罚 |w| L2 → 惩罚 w²L1 一个经典特点是它更容易产生很多接近 0、甚至等于 0 的参数。因此经常和稀疏联系起来。但不要直接记成L1 一定删除参数实际效果还取决于数据、模型和优化过程。十三、Weight Decay 和 L2 是不是一回事初学时经常直接写L2 Weight Decay这个说法不够严谨。在一些简单优化设置下两者关系非常接近。但在 Adam 这类自适应优化器下把 L2 惩罚加进梯度和独立执行参数衰减并不完全等价。这也是 AdamW 出现的重要原因之一。先记成L2 Regularization → 从损失角度增加参数惩罚 Weight Decay → 从参数更新角度让参数衰减不要把两个概念永远画成完全相同。十四、Dropout 是什么Dropout 也是经典的正则化方法。训练时● ● ● ● ●随机让一部分激活暂时变成● 0 ● 0 ●直觉就是不让模型长期过度依赖某几个固定神经元。训练阶段Dropout 开启推理阶段通常Dropout 关闭但具体模型是否使用 Dropout、放在哪里要看具体架构和训练配置。十五、Early Stopping 是什么假设训练过程中Epoch 1 Val 0.80 Epoch 2 Val 0.84 Epoch 3 Val 0.87 Epoch 4 Val 0.89 Epoch 5 Val 0.90 Epoch 6 Val 0.88 Epoch 7 Val 0.85第5轮最好。继续训练Train 可能还会继续变好但是Validation 开始变差于是可以保存验证集上表现最好的模型后面不再继续无意义地训练。这就是 Early Stopping。十六、Data Augmentation 为什么也能帮助泛化例如图像原始图片 ↓ 裁剪 旋转 翻转 加噪声 ...只要这些变化不会破坏标签它们就可以让模型看到更多合理的数据变化。核心思想不要只记住训练样本的表面形式而是学习对合理变化仍然有效的模式所以Data Augmentation也常常被用于增强泛化。十七、数据量大是不是就不会过拟合不是。更准确地说更多高质量、覆盖合理分布的数据通常有利于泛化但不是自动免疫过拟合。还要看数据质量 数据分布 标签质量 模型容量 噪声 训练方法例如100万条重复的脏数据和10万条高质量、覆盖充分的数据没有必要机械地认为前者一定更好。十八、机器学习里一个特别危险的问题Data Leakage这是科研和工程里都非常重要的一类错误。一句话本来不应该提前看到的信息进入了训练或模型选择流程。例如Train和Test里出现高度重复甚至完全重复的样本。那么模型等于已经提前见过测试数据。最后Test Accuracy 99%这个结果就不可信了。十九、时间序列为什么特别容易数据泄漏假设你的数据2025-01 2025-02 2025-03 ... 2025-12真实任务是用过去预测未来但你直接随机80% Train 20% Test那么2025-11可能被放到 Train而2025-10反而被放到 Test。模型训练的时候已经接触了未来时期的数据。这和真实部署场景不一致。所以时间序列更自然的做法通常是过去 → Train 较新的时间段 → Validation 最后时间段 → Test关键不是死记这个比例。关键是数据划分必须符合真实任务发生的时间顺序。二十、IoT、网络安全为什么更需要注意这个问题假设你做IoT设备异常检测或者网络攻击检测如果同一个设备设备A的高度相似数据同时出现在Train Test那么测试结果可能非常漂亮。但你真正想研究的问题可能是模型能不能泛化到新的设备这两个实验问题完全不同。所以实验设计前先问部署时真正“未知”的是什么可能是新的时间 新的设备 新的用户 新的攻击类型 新的环境然后再决定怎么切数据二十一、还有一种很隐蔽的数据泄漏标准化假设你做x_norm (x - mean) / std如果你把Train Validation Test全部混起来计算mean std然后再划分。那么Test的数据统计信息已经参与了预处理。更规范的是只用 Train 计算 mean / std 然后 Train Validation Test 全部使用 Train 得到的统计量这个细节很小但在科研实验里非常重要。二十二、Accuracy 为什么有时候非常会骗人看一个极端例子。1000 个样本正常 990 异常 10如果模型全部预测成正常那么预测对 990Accuracy990 / 1000 99%99% 看起来非常高。但对于“异常检测”这个任务10 个异常 全部漏掉模型几乎没有完成任务。所以Accuracy 高不等于模型对这个任务有用。二十三、Precision、Recall、F1 到底是什么假设是二分类。先记四个缩写TP真实正预测正 TN真实负预测负 FP真实负预测正 FN真实正预测负PrecisionPrecision TP / (TP FP)人话我预测为正的这些样本里有多少是真的RecallRecall TP / (TP FN)人话所有真正的正类我抓到了多少F1F1 2 × Precision × Recall / (Precision Recall)人话希望 Precision 和 Recall 都不能太差时用一个指标把两者综合起来。二十四、Precision 和 Recall 为什么经常互相拉扯还是安全检测。很激进地报警稍微可疑就报警可能Recall ↑因为漏掉的异常更少。但FP ↑所以Precision ↓反过来非常确定才报警可能Precision ↑但漏报变多Recall ↓所以不是Precision 永远更重要或者Recall 永远更重要而是取决于任务更怕误报还是更怕漏报。二十五、阈值为什么会影响 Precision / Recall很多分类模型最终给的是概率P(positive) 0.73如果threshold 0.5那么0.73 0.5 → 预测正类如果改成threshold 0.9那么0.73 0.9 → 预测负类所以你改变threshold就会改变TP FP FN TN自然也会改变Precision Recall F1因此做分类实验时不能只看一个默认阈值然后把结果当成唯一真相。二十六、Confusion Matrix 为什么值得看只看Accuracy 95%你不知道到底错在哪里混淆矩阵可以直接告诉你Pred A B C Real A ? ? ? Real B ? ? ? Real C ? ? ?例如你可能发现A 经常被预测成 B B 几乎没有问题 C 最容易漏掉这类信息对后续模型优化非常有价值。所以评估不仅是报一个数字还包括理解错误发生在哪里。二十七、为什么 Baseline 非常重要假设你的模型Accuracy 95%单独看95%没法判断提升有多大。如果 Baseline94.8%那么提升非常有限。如果 Baseline80%那么情况完全不同。所以实验报告至少应该告诉读者我的方法 vs 什么基准这就是Baseline。二十八、Ablation Study 又是在干什么假设你的方法有三个模块A B C最终模型A B C性能很好。但B到底有没有贡献可以做A AB AC ABC然后比较。这就是Ablation Study消融实验。它解决的问题是你加进去的每一个模块到底有没有真正发挥作用对于论文尤其重要。“堆了很多模块以后结果变好”不等于“每个模块都有效”。二十九、为什么 Random Seed 也值得记录深度学习训练通常带有随机因素参数初始化 数据打乱 Dropout 采样所以同样的代码可能Seed 1 → F1 0.91 Seed 2 → F1 0.89 Seed 3 → F1 0.92如果你只跑一次0.92可能会高估真实稳定水平。因此研究型实验经常报告Mean ± Std或者说明运行了多少个随机种子当然大模型训练成本很高不是每个实验都能无限重复。关键是把实验波动本身当成实验信息。三十、Error Analysis为什么“看错样本”很重要假设F1 0.91还有 9% 错误。这 9% 到底是什么可能集中在某种设备 某种攻击 某个时间段 某个类别 某个边界情况把错误样本拿出来看经常能发现数据问题 标签问题 特征问题 阈值问题 模型盲区 分布变化所以模型评估不是测试结束就结束了错误分析往往是下一轮改进最有价值的入口。三十一、为什么不能把所有任务都用 Accuracy 评价因为任务不同。分类可能看Accuracy Precision Recall F1 ROC-AUC PR-AUC回归可能看MAE MSE RMSE R²语言模型可能关注Cross-Entropy Perplexity生成任务可能还需要任务指标 人工评估 模型评估 安全性 事实性 ...所以评价指标的原则不是指标越多越专业。而是指标必须回答你的任务到底关心什么。三十二、为什么“测试集得分高”仍然不能保证上线一定没问题因为真实世界可能发生Distribution Shift例如训练数据白天 晴天 设备A上线夜晚 雨天 设备B新数据分布已经变化。也就是说训练 / 测试环境 ≠ 真实部署环境因此Test Performance只能说明在这套测试数据和测试设计下模型表现如何。它不能自动证明任何未来环境都能表现一样。三十三、什么叫 In-Distribution 和 Out-of-Distribution可以先简单理解In-Distribution → 和训练数据分布比较接近 Out-of-Distribution → 和训练数据分布存在明显差异例如训练 同一类 IoT 设备 测试 同一类设备的新的正常样本可能属于比较接近的分布。而训练 设备A、B 测试 完全没见过的设备C泛化问题就更严格。所以“泛化”到底多难取决于你说的“新数据”究竟新到什么程度。三十四、为什么机器学习实验本质上是“设计一个可信的测量系统”你可以把实验想成一个测量仪器。如果数据切错 指标选错 存在泄漏 Baseline 不合理 Test 被反复调参那么最终得到一个非常漂亮的数字也可能只是一个测量错误。所以科研里真正重要的不只是模型结构还包括实验设计 数据划分 评价指标 对比方法 重复实验 误差分析三十五、一个比较完整的机器学习实验流程以后自己做项目可以直接拿这个当检查表① 明确任务 ↓ ② 明确真实部署场景 ↓ ③ 确认数据来源 ↓ ④ 设计 Train / Validation / Test ↓ ⑤ 检查 Data Leakage ↓ ⑥ 选择评价指标 ↓ ⑦ 建立 Baseline ↓ ⑧ 训练模型 ↓ ⑨ 用 Validation 调超参数 ↓ ⑩ 确定最终模型 ↓ ⑪ 在 Test 上做最终评估 ↓ ⑫ Confusion Matrix / Error Analysis ↓ ⑬ Ablation Study ↓ ⑭ 多随机种子 / 稳定性分析 ↓ ⑮ 报告实验条件与结果这套流程以后做论文 项目 IoT 网络安全 联邦学习 时间序列都能直接用上。三十六、为什么你的研究方向尤其需要这一讲假设做IoT 安全检测你必须先明确我想证明什么可能是1. 对已经见过的设备能识别新样本。 2. 对完全没见过的设备也能识别。 3. 对未来时间段的数据也能识别。 4. 换一批网络环境仍然有效。这四个问题难度完全不同。因此Accuracy 95%本身没有意义。你得先告诉别人在哪种数据划分下 用什么指标 对什么未知情况 得到了95%这才是完整的实验结论。三十七、联邦学习为什么会让泛化问题更复杂联邦学习里除了Train / Validation / Test还会有Client A Client B Client C ...不同客户端的数据可能不是同一个分布。例如Client A智能家居设备 Client B工业传感器 Client C车联网设备于是会出现Non-IID也就是不同客户端的数据分布存在明显差异。这时又会产生新的问题模型在参与训练的客户端上表现如何 模型在没参与训练的新客户端上表现如何 模型在未来时间段上表现如何所以联邦学习里的“泛化”往往不止一个维度。三十八、把第0305讲彻底接起来现在前三讲已经形成了完整链条。第03讲 模型怎么衡量“错多少” ↓ Cross-Entropy ↓ Loss 第04讲 Loss 怎么让参数改变 ↓ Gradient ↓ Backpropagation ↓ Optimizer ↓ Parameter Update 第05讲 参数改了这么多轮怎么知道真的学到了 ↓ Train / Validation / Test ↓ Generalization ↓ Overfitting / Underfitting ↓ Evaluation ↓ 可信实验可以把它压缩成预测 ↓ 衡量错误 ↓ 修改参数 ↓ 验证泛化这才是机器学习基础真正完整的一条线。三十九、现在再看一段训练代码forx,yintrain_loader:optimizer.zero_grad()predmodel(x)losscriterion(pred,y)loss.backward()optimizer.step()这是Train再看验证model.eval()withtorch.no_grad():forx,yinval_loader:predmodel(x)losscriterion(pred,y)这里已经不是修改参数而是在检查当前模型表现所以你以后看到model.train()和model.eval()不要认为只是两个开关。它们代表训练模式 vs 评估模式某些层在这两种模式下行为不同例如 Dropout、BatchNorm。四十、为什么 Validation 也不能无限“看着调”如果你反复看 Validation ↓ 改模型 ↓ 看 Validation ↓ 再改 ↓ 再看久而久之模型选择过程也可能越来越适应 Validation。所以实验里最终仍然需要Test Set承担最后的独立评估。你可以把它理解成Train → 让模型学 Validation → 让研究者做选择 Test → 检查最终方案四十一、为什么一篇论文里的“提升0.5%”不能直接说明方法一定更强例如Baseline 95.0% Ours 95.5%看起来0.5%但如果不同随机种子95.0 94.8 95.6 95.2本身就在波动。那么95.5和95.0之间的差异就需要更谨慎地解释。所以研究实验最好提供多次运行 平均值 标准差或者至少说明实验重复方式。四十二、以后看论文先别只看最后一张表看到Method A 91.2 Method B 92.6 Ours 94.1先问数据是什么 怎么划分 有没有泄漏 Baseline 是否合理 训练预算一样吗 有没有额外数据 指标为什么选这个 跑了几次 有没有消融然后再看94.1这个数字才有上下文。四十三、本讲最重要的 15 个结论1. Training Loss 下降不等于模型一定泛化好。 2. Generalization 是模型面对新数据仍然有效的能力。 3. Train 用来学参数。 4. Validation 用来选模型和调超参数。 5. Test 用来做最终评估。 6. 不应该反复用 Test 调模型。 7. Train 好、Validation 变差常见于 Overfitting。 8. Train 和 Validation 都差常见于 Underfitting。 9. Regularization 的核心是给模型增加约束。 10. Accuracy 在类别严重不平衡时可能非常误导。 11. Precision 关心预测为正的样本里有多少是真的。 12. Recall 关心真正的正类有多少被找到。 13. 数据泄漏会让结果虚高。 14. 时间序列必须特别关注时间顺序和未来信息泄漏。 15. 一个漂亮的实验数字首先要保证实验设计可信。四十四、本讲最终知识树机器学习 │ ├── 数据 │ ├── Train │ ├── Validation │ ├── Test │ ├── Data Leakage │ └── Distribution Shift │ ├── 泛化 │ └── Generalization │ ├── 拟合 │ ├── Underfitting │ └── Overfitting │ ├── 误差分析 │ ├── Bias │ ├── Variance │ └── Spurious Correlation │ ├── 正则化 │ ├── L1 │ ├── L2 │ ├── Weight Decay │ ├── Dropout │ ├── Data Augmentation │ └── Early Stopping │ ├── 评价 │ ├── Accuracy │ ├── Precision │ ├── Recall │ ├── F1 │ ├── Confusion Matrix │ ├── Threshold │ └── ROC / PR │ └── 科研实验 ├── Baseline ├── Ablation ├── Random Seed ├── Error Analysis └── Reproducibility四十五、一张图把第05讲记下来数据 │ ┌──────────┼──────────┐ ↓ ↓ ↓ Train Val Test │ │ │ ↓ ↓ │ 学参数 选配置 │ │ │ │ └─────┬────┘ │ ↓ │ 最终模型 │ │ │ └──────→ Test ───┘ ↓ 最终评估训练过程中Train Loss ↓ Val Loss ↓通常说明当前仍在改善。如果Train Loss ↓ Val Loss ↑开始重点怀疑Overfitting如果Train Loss 高 Val Loss 也高开始检查Underfitting四十六、最终把这五讲压缩成一句话第01讲 AI 为什么会发展成今天这样 第02讲 模型拿什么计算 第03讲 模型怎么知道自己错多少 第04讲 模型知道错了以后怎么改 第05讲 改完以后怎么证明它真的学到了所以AI 基础 模型 计算 Loss Gradient Generalization Evaluation到了这里前五讲已经把机器学习最基础的闭环搭起来了。下一讲才真正把这些东西全部放进神经网络内部Input ↓ Linear ↓ Activation ↓ Linear ↓ Output ↓ Loss ↓ Backward ↓ Update第06讲神经网络、参数、激活函数、Forward、Backward 与 BP。也就是正式回答一个神经网络本身到底是由什么组成的参考资料Ian Goodfellow, Yoshua Bengio, Aaron Courville,Deep Learning.Christopher M. Bishop,Pattern Recognition and Machine Learning.Trevor Hastie, Robert Tibshirani, Jerome Friedman,The Elements of Statistical Learning.Andrew Ng, Machine Learning / Deep Learning materials.PyTorch 官方文档Training、Evaluation、Autograd、Optimizers 等相关内容。系列导航01现代 AI 为什么会走到今天 02向量、矩阵与线性变换 03概率、信息论与损失函数 04导数、梯度与优化 05机器学习、泛化、过拟合与评估 06神经网络、Forward、Backward 与 BP 07表示学习与 Embedding 08CNN 09RNN、LSTM、Seq2Seq 10Attention 与 Transformer ……#人工智能 #AI #大模型 #机器学习 #深度学习 #神经网络 #机器学习入门 #过拟合 #泛化 #模型评估 #Python #PyTorch #程序员 #计算机 #人工智能学习
分享:

看完干货,该让你的企业上线了

免费需求沟通 · 48 小时内出具建站方案 · 河南本地可上门