all_lessons/数学的逻辑/28第 29 课 / 共 44 课

第八部分 · 学习就是优化

凸优化:什么时候保证能到全局最优

上一课我们学会了沿着坡往下走。可一路走到底,到的真是全世界最低点,还是只是脚下这个小坑的坑底?这一课要回答的,是梯度下降最致命的一个问题:它什么时候有保证、什么时候只是碰运气。

线性回顾
上一课:我们造出了梯度下降——站在损失曲面上,每一步沿着 −∇f(读作"负梯度",即最陡下降方向)挪一小步,学习率太大就震荡发散、太小就龟速,再加上动量帮它冲过平地。
留下的问题:保证能走到全局最优吗?下坡的规矩只看脚下这一小块,它根本"看不见"远处有没有更低的谷。要是地形坑坑洼洼,它很可能滚进一个局部最优的小坑就再也出不来,把那里误当成世界最低点。
本课新增:凸集与凸函数——一类特殊的"地形",在这种地形上,局部最优必然就是全局最优,梯度下走到底就是真到底。我们还要给优化加上约束,用拉格朗日乘子处理"必须满足某些条件"的最优化(这会在第 37 课的支持向量机里再次登场)。
本课路线
(1) 先把上一课的恐惧具体化:局部最优到底坏在哪。(2) 凸集:一个集合"不凹进去"是什么意思。(3) 凸函数:一条曲线"像个碗"的两种等价说法。(4) 核心定理:凸问题里局部最优 = 全局最优,于是梯度下降终于有了铁保证。(5) 约束优化与拉格朗日乘子:在边界上找最优。(6) 现实里损失大多非凸——那为什么深度学习还是 work?

局部最优:下坡法的噩梦

想象你被蒙上眼睛,丢在一片丘陵里,任务是找到海拔最低的地方。你的策略只能是"摸摸脚下哪边更低,就往哪边迈一步"——这正是梯度下降。如果这片地是一个单一的大碗,无论从哪起步,一路下坡都会汇到同一个碗底,那是真正的最低点。

可如果地形是连绵的丘陵,处处是小坑小谷呢?你很可能滚进离起点最近的那个小坑,坑底四周都比你高——脚下告诉你"已经到底了",于是你停下。但翻过一道山梁,也许有个深得多的峡谷你永远不会知道。这个让你停下的小坑底,就是局部最优(local optimum);那个真正最低的峡谷底,才是全局最优(global optimum)。

问题的核心
梯度下降是个局部方法——它只读得懂脚下这一小块地形的斜率,对远方一无所知。所以它能保证带你到某个局部最优,却无法保证那就是全局最优。换起点、换学习率,可能落进完全不同的坑。这不是算法不够聪明,而是信息根本不够:你不可能靠只看脚下,就断言全世界没有更低的地方。

那有没有一种地形,能让"只看脚下"这件事突然变得足够?答案是有的,而且它有一个精确的名字:。一旦地形是凸的,"脚下到底了"就严格等价于"全世界到底了"。这一课剩下的部分,就是把这个"凸"字一层层讲清楚。

凸集:从任意两点连线都不出界

先说最基础的"凸"——一个集合(一块区域)的凸。定义朴素得惊人:

凸集
一个集合是凸的,如果在里面任取两点,连接它们的整条线段都还落在这个集合里。用符号写:对集合里任意两点 xy,以及任意 t ∈ [0,1](读作"t 是 0 到 1 之间的数"),它们的混合点 t·x + (1−t)·y(读作"x 和 y 的加权平均",t 从 0 滑到 1,这个点就从 y 滑到 x)也仍在集合里。

翻译成图像:一个实心圆、一个实心矩形、一整条直线、整个平面——都是凸的,因为你怎么在里面挑两点,连线都老老实实待在内部。而一个月牙形、一个甜甜圈(中间有洞)、或者一个"凹"进去一块的形状,就不是凸的:你能找到两点,它们的连线会穿过外面的"缺口"。"凸"这个字取得极准——边界向外鼓、绝不向内凹。

为什么先关心区域?因为优化问题常常带约束:"参数必须非负""权重之和必须等于 1""解必须落在某个范围里"。这些约束圈出了一块可行域——你只能在这块地里找最低点。如果这块可行域是凸的,后面的好性质才立得住。

凸函数:长得像一只碗

真正决定优化命运的,是函数的凸。直觉就一句话:它的图像像一只朝上的碗,处处向上弯,没有任何起伏的小坑。把这句直觉精确化,有两种等价说法,都很好懂。

说法一(弦在曲线上方):在曲线上任取两点,用一条直线段(叫"弦")把它们连起来。如果这条弦永远不低于它们之间的曲线,函数就是凸的。写成不等式:

f( t·x + (1−t)·y ) ≤ t·f(x) + (1−t)·f(y)

左边是"先把两点的位置混合,再看函数值";右边是"把两点的函数值按同样比例混合"。这个 (读作"小于等于")说的就是:曲线本身总是在弦的下面。碗形函数满足它,倒扣的山包则反过来(那叫凹函数)。

说法二(切线在曲线下方 / 二阶导非负):对一条光滑曲线,凸还等价于——它的斜率一路只增不减。回想第 07 课的导数是斜率,第 25 课的梯度是多维的斜率;那么凸就是说二阶导数处处 ≥ 0(读作"二阶导非负",多维里对应"海森矩阵半正定")。曲线越走越陡峭地往上翘,自然形成一只碗。

把两个层次合起来,一个凸优化问题就是:在一个凸的可行域上,最小化一个凸函数。这是整个优化世界里最"乖"的一类问题,而它乖在哪,下面这条定理一锤定音。

核心定理:局部最优就是全局最优

这是本课的心脏,也是凸性值得我们大费周章的唯一理由:

凸优化的黄金保证
对一个凸函数(在凸可行域上),任何局部最优点,必定也是全局最优点。因此"脚下到底了"就等于"全世界到底了"——梯度下降只要老老实实下坡,走到一个停不下来的地方,那里保证是真正的最低(凸碗里这样的点还唯一)。再也不用担心被骗进小坑。

为什么会这样?用反证法,一句话就懂:假设有个局部最优点 a,它脚下四周都比它高;又假设别处藏着一个更低的点 bf(b) < f(a)。现在把弦的不等式用在 ab 上:从 ab 挪一丁点,落在弦上的那一点,函数值不会高于 ab 函数值的加权平均,而这个平均已经比 f(a)了(因为 b 更低)。也就是说,就在 a 旁边、朝 b 那个方向,立刻能找到比 a 更低的点——这直接戳穿了"a 四周都比它高"的前提。矛盾。所以根本不可能存在一个比局部最优更低的点。凸性把"局部"和"全局"这道天堑,神不知鬼不觉地填平了。

这就是为什么工程师如此偏爱凸问题:把一个学习任务设计成凸的(线性回归、逻辑回归、支持向量机都是),就等于买了一份保险——优化一定收敛到那个唯一的、可复现的、绝对最优的解,跟起点无关、跟运气无关。下面的小实验会让你直接看到凸碗与非凸丘陵的天壤之别。

凸 vs 非凸:从不同起点放小球,看它落到哪
切换地形:凸碗只有一个最低点,非凸丘陵有好几个坑。点画面任意位置放一个小球(或用按钮一次撒一排),让它们沿梯度下降滚到停。凸地形上所有球都汇到同一个全局最低;非凸地形上,球会卡在离它最近的那个局部坑里——这就是上一课留下的噩梦,被亲眼看见。
地形
凸碗
球数
0
都到全局最优?

带约束的最优:拉格朗日乘子

到这里我们默认可以"在整片地里随便走"。但很多问题不行——它带着约束:求最优时必须同时满足某个等式条件。比如"在所有总和为 1 的概率分配里,使损失最小",约束就是 g(x) = 0(读作"约束函数 g 等于零",把可行的点圈在一条曲线/曲面上)。这时最优点往往不在"开阔地的碗底",而恰恰卡在约束这条边界上,普通的"梯度 = 0"不再成立。

拉格朗日(Lagrange)的洞见极漂亮:在约束边界上的最优点,目标函数的等高线必定和约束曲线"相切"。想象你沿着约束这条小路走,想让海拔尽量低;当你走到路与某条等高线相切的地方,再沿路往任何方向走都不会更低了——那就是约束下的最优。相切,在数学上意味着两者的梯度方向平行

∇f = λ · ∇g

读作"目标 f 的梯度,等于某个倍数 λ 乘以约束 g 的梯度"。这个 λ(希腊字母 lambda)就叫拉格朗日乘子。它把一个"带约束"的问题,巧妙地转写成一个"不带约束"的方程组来解——这是约束优化的万能钥匙。

你现在不必记住推导。只要记住这把钥匙的存在,以及它能干什么:它让我们在"必须守规矩"的前提下,依然找得到最优。第 37 课的支持向量机正是它的高光时刻——"找一条间隔最大的分界线"会被写成一个带约束的凸问题,再用拉格朗日乘子翻成漂亮的对偶形式,把几何、代数与优化拧成一股。那时你会回头感谢今天埋下的这颗种子。

可现实里损失大多非凸——为什么深度学习还能 work?

说了半天凸的好,得诚实面对一个尴尬事实:神经网络的损失函数几乎从不凸。几百万个参数、层层非线性叠起来的损失曲面,是一片高维的、坑坑洼洼的崇山峻岭,局部最优多如牛毛。按本课的逻辑,梯度下降在这种地形上根本没有全局最优的保证——那今天的深度学习凭什么 work?

这是一个仍在研究的深刻问题,但已有几个让人安心的答案,值得在这里点一句:

常见误解

一句话带走
是优化世界里最珍贵的好运气:在凸的可行域上最小化凸函数,任何局部最优都自动是全局最优,于是梯度下降"下到底"就等于"找到最好",解还唯一、可复现;带约束时用拉格朗日乘子∇f = λ·∇g)在边界上找最优。现实的深度损失多非凸,没有这份铁保证,但凸性正是判断"何时有把握、何时在赌运气"的标尺。
下一步
我们已经把"学习就是优化"这条线走完了:有了梯度(24)、反向传播(25)、梯度下降(26),又用凸性(27)弄清了"什么时候这套办法靠得住"。可这一整部分,我们都假装损失函数是确定、已知的,只管把它降到最低。然而真实的数据从骨子里就是随机的——它是从某个我们看不见的分布里抽出来的样本,带着噪声与偶然。要给这种"不确定"本身建模、并据此学习,纯优化的语言就不够用了。我们必须请回概率第 10 课我们已经为单次随机讲清了道理(样本空间、期望、贝叶斯);现在要把它升级成机器学习真正用的工具——把每一个不确定的量,变成一个能写公式、能算、能学的随机变量。→ 第 29 课《随机变量与分布:给不确定性建模》。