一句话定义:非凸优化(Non-convex Optimization)就是在形状崎岖的目标函数上找最低点——通常找不到全局最低,只能找到一个"足够好"的低点,而深度学习恰恰是靠它运转的。
为什么叫"非凸"
把优化想象成在山地里找最低处。凸优化(Convex Optimization)的地形像一只碗:不管从碗里哪个位置出发,顺着下坡走,最后一定落到唯一的碗底,而且这个碗底就是全局最优。非凸则像一片真实山脉——有深谷、有浅坑、有鞍部、有高原,你从哪儿出发、迈多大步子,都会影响最后停在哪个坑里。
深度学习要最小化的损失函数(loss function)就是这样一片山脉。模型参数动辄百万到上万亿个,每个参数是一个方向,曲面在超高维空间里的形状既画不出来也解不出来。所以实践中靠的是梯度下降(Gradient Descent)及其变体:算出当前点的梯度(最陡的下坡方向),迈一小步,如此反复。既然没法保证走到谷底,为什么效果还不错?
- 高维空间里"坏坑"很少。随机初始化后,梯度为零的点大多是鞍点(saddle point),而鞍点在至少一个方向上仍有下坡路可走,不会被卡死。
- 坑与坑之间差别不大。很多局部最优的损失值彼此接近,甚至与全局最优接近;而模型真正需要的是泛化(generalization),不是数值上的绝对最低。
- 噪声在帮忙。随机梯度下降(SGD)每次只看一小批数据,天然的抖动会把参数从浅坑里晃出来;动量、学习率调度也是同样的作用。
- 过参数化(over-parameterization)反而好走。参数多到远超样本量时,可通行的路径变多,"能不能拟合"不再是瓶颈。
和相邻概念的区别
| 凸优化 | 非凸优化 | |
|---|---|---|
| 曲面形状 | 一只碗,唯一最低点 | 千沟万壑,多个局部最优与鞍点 |
| 能否保证最优 | 能,可在多项式时间内求全局最优 | 一般不能,只求"够好"的解 |
| 典型问题 | 线性规划、最小二乘、逻辑回归 | 神经网络训练、矩阵分解、聚类 |
| 真正的难点 | 规模与约束处理 | 初始化、学习率、逃离鞍点 |
对从业者的意义
调参时不必执念于"找到全局最优",更该关心初始化、学习率、批大小和正则化——它们决定你会掉进哪个坑,以及从坑里出来的模型泛不泛化。对普通职场人,这解释了为什么训练模型看起来像"玄学":换一个随机种子,结果就不同;同一个流程重跑一遍,指标未必复现。这种不确定性不是工程没做好,而是问题本身的性质。想彻底消除它,就得退回凸问题,但那样能表达的东西会少得多。各家框架的具体算法实现与默认参数,以官方文档为准。
