2.5 泛化与约束优化
训练误差降到最低不是目的,在没见过的数据上做得好才是。

想一想
把练习册上每道题的答案都背下来,考试就一定考得好吗?
训练误差降到最低不是目的,在没见过的数据上做得好才是。

把练习册上每道题的答案都背下来,考试就一定考得好吗?
先看拟合与泛化的矛盾,再看两种最常用的正则化。

一个模型什么都学,和只学个大概,哪个更容易出错?
模型太简单会学不到,太复杂会连噪声一起背下来。

(a) 是 θ₀ + θ₁x,一条直线,太简单,点在两边散着,这是欠拟合。(b) 加到二次项,曲线穿过点群中间,这是拟合恰当。(c) 一路加到 x 的 n 次方,曲线扭来扭去把每个点都串上了,这是过拟合。
模型复杂度就藏在这三个式子的项数里。项越多,曲线能扭得越厉害。
三种学生。欠拟合的学生上课没听懂,做过的题也不会。过拟合的学生把每道题连同答案一起背了下来,考原题满分,换个数字就不会。拟合恰当的学生记住的是方法,题目变了照样能做。
机器学习的终极目标不是让训练误差无限下降,而是让模型在未见过的真实数据上表现良好,即让真实风险保持可控。回到第 11 页那对概念:能算的是经验风险,真正在意的是期望风险。
图 (c) 那条曲线穿过了每一个点,训练误差是零。它好在哪,坏在哪?
要么多给数据,要么早点收手,要么让模型别太依赖某几处。

数据增强通过旋转、裁剪、扰动、噪声等方式让模型看到更多等价变化,近似扩大经验分布。早停法在验证误差开始上升时停止训练。丢弃法在训练中随机屏蔽部分神经元。正则化在经验风险之外加入复杂度惩罚项,约束参数空间。
横轴是模型复杂度或训练轮数,纵轴是误差。蓝线是训练误差,一路往下。红线是验证误差,先降后升。两条线开始分开的那个位置,就是过拟合的起点。
图上标着“控制复杂度的目标”的那条竖虚线,正是早停法要停在的地方。
数据增强像把同一张照片旋转、裁剪、调亮,当成好几个新样本,逼着模型学会“换个角度也是同一只猫”。
丢弃法像小组作业时随机让几个人请假。谁都可能被抽走,于是每个人都得把活学会,不能全指望某一个人。这样整个小组反而更稳。
验证误差已经开始上升,你还继续训练,会发生什么?
菱形的尖角戳在坐标轴上,所以它会把一部分参数压成零。

J(θ) = ED(θ) + λ‖θ‖₁。前一项 ED 是原来的经验损失,管“预测准不准”。后一项是所有参数绝对值之和,管“参数别太大”。λ 决定后一项的分量有多重。
加了这一项之后,模型不能只顾把训练误差降到最低,还得付出参数变大的代价。
约束区域 ‖θ‖₁ ≤ c 在平面上画出来是一个菱形,它的四个尖角正好落在坐标轴上。而坐标轴上的点,意味着某一个参数恰好等于零。
损失函数的等高线从外面往里缩,最先碰到菱形的地方大概率是那几个尖角。碰到尖角,就等于把某些参数直接压成了零。
把一个圆往一个方形木框里塞,最先顶住的一定是四个角。菱形有角,所以最优解容易落在角上,而角上某些坐标是零。
这正是图上标注“稀疏解/顶点”的含义。参数为零,等于这个特征被自动剔除了,所以 L1 有自动特征选择的效果。
一千个特征里只有几十个真正有用,你希望模型把其余的处理成什么?
圆形边界处处光滑,没有角,所以参数只被缩小而不归零。

J(θ) = ED(θ) + λ‖θ‖²₂。惩罚项从绝对值之和换成了平方和。改动看着微小,几何形状却完全变了。
‖θ‖²₂ ≤ C 画出来是一个圆。圆没有角,边界处处光滑,等高线碰上去的切点通常不在坐标轴上。所以参数会被整体缩小,但很少正好等于零。
把两张图并排看最清楚。L1 的菱形有四个尖角戳在轴上,L2 的圆一圈都是弧。往里缩的等高线,碰菱形容易碰到角,碰圆则哪里都可能碰到。
一个像用剪刀,直接剪掉不要的。一个像统一降薪,谁都少拿一点,但谁也没被辞退。
特征很多而真正有用的很少,想让模型自动筛掉无关特征,用 L1。特征普遍都有点用,只是想防止某几个权重过大,用 L2。两者也可以按比例混用。
剪掉一部分和整体减小一点,你觉得哪种做法更保险?
拟合与泛化的博弈,靠约束参数空间来调停。

模型复杂度存在拟合与泛化的博弈,过于简单导致欠拟合,过于复杂导致过拟合。L1 正则化的菱形约束边界具有尖锐顶点,最优参数容易落在坐标轴上,产生稀疏解,实现自动特征选择。L2 正则化的圆形约束边界处处光滑,参数均匀收缩至原点附近,产生稠密解,实现权重衰减。
第一条是表示,用张量把现实变成可计算的对象。第二条是建模与求解,把问题写成目标函数,再用梯度下降算出参数。第三条是泛化,防止模型只在做过的题上有效。三条线合起来,就是训练一个模型的完整流程。
这一章里出现过两次“能算的东西不是真正想要的东西”,你记得是哪两处吗?
三问,都围绕约束边界的几何形状。

第一问回到第 48 和第 49 页,差别在菱形有尖角而圆没有。第二问是应用题,一千个特征里只有少数有用,要的是自动剔除,答案指向 L1。第三问看 λ 增大时约束区域会怎么变,区域缩小意味着参数被压得更狠。
如果把 λ 一直调大下去,最后所有参数会变成什么?
第 2 章到这里。

下一章进入机器学习基础,会把这一章的框架用到具体方法上:逻辑回归、支持向量机、决策树、聚类,以及多层感知机和主流神经网络结构。这一章学的目标函数与梯度下降,是那些方法共同的地基。
完成本章课后习题。另外结合一个简单的回归或分类案例,把损失函数、参数更新和模型泛化这三件事串起来想一遍。
这一章里,哪一个公式你现在能用大白话讲出来?