人工智能导论 第 2 章 · 第五节
课程 › 第 2 章 › 第五节 泛化与约束本节三部分欠拟合与过拟合四种办法L1 正则化L2 正则化本节小结
第 2 章 人工智能数学基础 · 第五节

泛化与约束优化

在做过的题上准不算本事
本 节 知 识 点
  1. 442.5 泛化与约束优化
  2. 452.5 的三个小节
  3. 462.5.1 泛化与拟合
  4. 47抑制过拟合的四种办法
  5. 482.5.2 L1 正则化
  6. 492.5.3 L2 正则化
  7. 50小结
44
第 2 章 · 第五节

2.5 泛化与约束优化

训练误差降到最低不是目的,在没见过的数据上做得好才是。

训练世界 vs 真实世界 训练数据 全答对了 100 分 真实数据 还能答对多少? 泛化 练习册上全对不算本事,考试也对才算

关键术语

泛化Generalization
模型在从未见过的新数据上仍然能给出正确预测的能力,是衡量模型好坏的真正标准。

重 点训练准不等于真正好

训练是用已有的数据来调整参数,但模型最终面对的是从未见过的真实数据。如果一个模型在训练数据上表现完美,却在新数据上错误百出,说明它只是"背下了答案",并没有真正学会规律。

机器学习的终极目标不是让训练误差降到零,而是让模型在未见过的数据上依然可靠。

打个比方

一个学生把练习册的每道题和答案全背下来,做原题满分。但换一张试卷,题目变了数字和问法,他就不会了。这就是训练准但泛化差。真正学会的学生记住的是方法,不是具体答案,所以换了题目照样能做。

想一想

把练习册上每道题的答案都背下来,考试就一定考得好吗?

45
第 2 章 · 第五节

2.5 的三个小节

先看拟合与泛化的矛盾,再看两种最常用的正则化。

本节结构 2.5 泛化与约束优化 泛化与拟合 核心问题 学得太少 vs 学得太多 怎么找到恰好的位置 L1 正则化 约束形状 菱形,有尖角 直接砍掉不要的参数 L2 正则化 约束形状 圆形,没有角 所有参数统一缩小

重 点三个小节的脉络

第一部分讨论泛化与拟合的矛盾。模型太简单,连训练数据的规律都学不到,叫做欠拟合。模型太复杂,连训练数据里的噪声都记下来了,叫做过拟合。两种情况在新数据上都表现不好。

第二部分和第三部分分别介绍 L1 正则化和 L2 正则化,它们是防止过拟合的两种最常见手段,区别在于约束区域的几何形状不同,一个是菱形,一个是圆形。

知道更多正则化的本质

正则化的思路很简单:在"预测要准"这个目标之外,再加一条限制,要求"参数不能太大"。就像给模型下了一道命令,不许走极端。这条限制会牺牲一点训练上的精确度,但能换来在新数据上更稳定的表现。

想一想

一个模型什么都学,和只学个大概,哪个更容易在新数据上出错?

46
第 2 章 · 第五节

2.5.1 泛化与拟合

模型太简单会学不到,太复杂会连噪声一起背下来。

三种拟合程度 (a) 欠拟合 太简单,学不到 (b) 拟合恰当 刚好,学到了规律 (c) 过拟合 太复杂,连噪声都记了 目标:找到 (b) 那样的恰好位置

关键术语

欠拟合Underfitting
模型复杂度不足,连训练数据里的规律都没学好,在训练集和新数据上都表现差。
过拟合Overfitting
模型复杂度过高,把训练数据里的噪声也当成了规律,训练集上表现好而新数据上表现差。

重 点三条曲线说明了什么

图 (a) 用一条直线去拟合弯曲的数据,太简单了,连训练集上的规律都没抓住,这是欠拟合。图 (b) 用一条光滑的曲线穿过数据的中间地带,既不太简单也不太复杂,这是拟合恰当。图 (c) 的曲线扭来扭去把每一个点都串了上去,训练误差几乎为零,但换一批数据就全错了,这是过拟合。

打个比方

三种学生。欠拟合的学生上课没听懂,做过的题也不会。过拟合的学生把每道题连同答案一起背了下来,考原题满分,换个数字就不会。拟合恰当的学生记住的是方法,题目变了照样能做。

想一想

图 (c) 那条曲线穿过了每一个点,训练误差是零。它好在哪,坏在哪?

47
第 2 章 · 第五节

抑制过拟合的四种办法

要么多给数据,要么早点收手,要么让模型别太依赖某几处。

四种防止过拟合的办法 数据增强 旋转、裁剪、镜像 翻倍、噪声 让数据变多变丰富 逼着模型学泛化 早停法 盯着验证误差 开始上升就收手 不等过拟合发生 提前停下训练 丢弃法 Dropout 训练时随机 关掉一部分神经元 谁都不能偷懒 每个人都得学会 正则化 在损失之外加一项 惩罚参数太大 不许走极端 约束参数的范围 四种办法可以组合使用,不是只选一个

重 点四种办法各自的思路

数据增强通过旋转、裁剪、加噪声等方式让模型看到更多变化,相当于给练习册加了更多不同角度的题目。早停法盯着验证误差,一旦验证误差开始往上走就停止训练,不让模型继续"钻牛角尖"。丢弃法在训练时随机关掉一部分神经元,逼着每个神经元都要有用。正则化在目标函数里加一项惩罚,不允许参数变得过大。

打个比方

数据增强像把同一张照片旋转、裁剪、调亮,当成好几个新样本,逼着模型学会"换个角度也是同一只猫"。

丢弃法像小组作业时随机让几个人请假。谁都可能被抽走,于是每个人都得把活学会,不能全指望某一个人。这样整个小组反而更稳。

知道更多怎么判断有没有过拟合

最直观的方法是画两条线。横轴是训练轮数,纵轴是误差。一条线记训练误差,一条线记验证误差。训练误差一直往下走,验证误差先降后升。两条线开始分叉的那个位置,就是过拟合的起点。早停法要停下来的地方,正好就是分叉点之前。

想一想

验证误差已经开始上升,你还继续训练,会发生什么?

48
第 2 章 · 第五节

2.5.2 L1 正则化

直接裁员:砍掉不需要的参数,只留真正有用的。

L1 正则化 = 裁员 砍掉不需要的,留下真正有用的 加 L1 之前 加 L1 之后 θ₁ θ₂ θ₃ θ₄ θ₅ L1 θ₁ 0 θ₃ 0 0 结果:稀疏解 很多参数变成零,只剩少数在起作用

关键术语

L1 正则化L1 Regularization
在目标函数上加一项惩罚,倾向于把不重要的参数直接压成零,只保留少数真正有用的参数。

重 点L1 做了什么

L1 正则化在原有的损失函数之外,加了一项对参数大小的惩罚。这个惩罚的效果是:不重要的参数会被直接压成零,相当于模型自己把没用的特征丢掉了。

最后只有少数参数还有值,其余全是零。这种结果叫做稀疏解。

打个比方

一家公司要节省开支。L1 的做法是裁员:直接砍掉几个不必要的部门,留下来的人继续正常工作。裁掉的岗位彻底消失,不再占编制。

模型也一样。一千个特征里可能只有几十个真正有用,L1 会把没用的那些对应的参数全部压成零,相当于自动帮你筛选了特征。

想一想

你在整理房间,有一百样东西但行李箱只装得下二十样。你会怎么取舍?

49
第 2 章 · 第五节

2.5.3 L2 正则化

统一降薪:所有参数一起缩小,谁也不被开除。

L2 正则化 = 统一降薪 每个参数都缩小,但谁也不归零 加 L2 之前 加 L2 之后 θ₁ θ₂ θ₃ θ₄ θ₅ L2 θ₁ θ₂ θ₃ θ₄ θ₅ 结果:稠密解 每个参数都还在,只是都变小了

关键术语

L2 正则化L2 Regularization
在目标函数上加一项惩罚,让所有参数整体缩小,但不会把任何一个压成零。

重 点L2 做了什么

L2 正则化也给损失函数加了一项惩罚,但效果不同:所有参数都会变小,但不会变成零。每个参数都保留着,只是没有原来那么大了。

这种结果叫做稠密解。适用于特征普遍都有点用的场合,只需要防止某些参数过大就好。

打个比方

同样是节省开支,L2 的做法是统一降薪:不裁任何人,但所有人一起少拿一点。谁也没被开除,只是总支出变小了。

L1 像用剪刀,直接剪掉不要的。L2 像转旋钮,把音量统一调低。该用哪个取决于特征的情况:有用的特征很少就用 L1 去筛选,特征普遍都有用就用 L2 来控制大小。

想一想

裁员和统一降薪,哪种方式损失的信息更多?

50
第 2 章 · 第五节

小结

拟合与泛化的博弈,靠约束参数空间来调停。

本节要点回顾 核心矛盾 模型复杂度的拟合与泛化之间的博弈 L1 = 裁员 砍掉不要的 → 稀疏解 L2 = 降薪 统一缩小 → 稠密解 这一章的三条线 第一条:表示(张量把现实变成可计算的对象) 第二条:求解(目标函数 + 梯度下降算参数) 第三条:泛化(防止模型只在训练集上有效)

重 点

模型复杂度存在拟合与泛化的博弈。过于简单导致欠拟合,过于复杂导致过拟合。防止过拟合有四种常见手段:数据增强、早停法、丢弃法和正则化。其中 L1 正则化像裁员,直接砍掉不需要的参数,产生稀疏解。L2 正则化像统一降薪,让所有参数一起变小,产生稠密解。

知道更多这一章的三条线

第一条是表示,用张量把现实变成可计算的对象。第二条是建模与求解,把问题写成目标函数,再用梯度下降算出参数。第三条是泛化,防止模型只在做过的题上有效。三条线合起来,就是训练一个模型的完整流程。

想一想

这一章里出现过两次"能算的东西不是真正想要的东西",你记得是哪两处吗?

保山学院·人工智能教研室·曹鼎鼎