优化理论——寻找最优解
兔狲教授的提示:优化是人工智能的核心。从神经网络的权重调整到强化学习的策略优化,从推荐系统的个性化到物流调度的路径规划,优化理论为我们提供了在约束条件下寻找最佳解决方案的数学工具。理解优化,就是理解AI如何'学习'和'决策'。
词条1:优化问题基础
官方解释
优化问题:最小化(或最大化)目标函数 f(x),满足约束条件。
一般形式:\min_{x\in\mathbb{R}^n} f(x),s.t. g_i(x) \le 0,h_j(x) = 0。
分类:
- 无约束优化:没有约束条件
- 约束优化:有等式或不等式约束
- 线性规划:目标函数和约束都是线性的
- 非线性规划:目标函数或约束是非线性的
- 凸优化:目标函数凸,约束凸集
最优解类型:
- 全局最优:整个定义域上的最优
- 局部最优:某个邻域内的最优
- 驻点:梯度为零的点(临界点)
兔狲老师解释
优化是'在可能性中找最好'。
小小猪举了个例子:寻找最短路径:
- 变量:路径选择
- 目标:总距离最小
- 约束:必须从A到B,可能避开某些区域
- 解:最短路径
机器学习中的优化:
- 变量:模型参数 \theta
- 目标:损失函数 L(\theta) 最小
- 约束:正则化项(如 \|\theta\| \le C)
- 解:最优参数
优化视角:
- 建模:将实际问题转化为优化问题
- 求解:用算法找到(近似)最优解
- 分析:理解解的性质和敏感性
思考题1:动手题
问题:将以下问题形式化为优化问题:
- 线性回归:最小化平方误差
- 支持向量机:最大化间隔
- 聚类:最小化簇内距离
问题:判断以下函数的凸性:
- f(x) = x^2
- f(x) = e^x
- f(x) = \log(x)(x > 0)
- f(x) = |x|
思考题2:动脑题
问题:为什么凸优化特别重要?凸性保证了什么?
思考方向:
- 局部最优 = 全局最优
- 高效算法存在性
- 对偶理论的美妙性
- 在实际问题中的近似
词条2:梯度下降法
官方解释
梯度:\nabla f(x) = \left(\frac{\partial f}{\partial x_1}, \ldots, \frac{\partial f}{\partial x_n}\right)^T,指向函数增长最快的方向。
梯度下降:x_{k+1} = x_k - \eta \nabla f(x_k),其中 \eta > 0 是学习率。
收敛条件:
- 凸函数:收敛到全局最优
- L-光滑:\|\nabla f(x) - \nabla f(y)\| \le L\|x-y\|
- \mu-强凸:f(y) \ge f(x) + \nabla f(x)^T(y-x) + \mu\|y-x\|^2/2
收敛速度:
- 强凸光滑:线性收敛 O\!\left((1-\mu/L)^k\right)
- 一般凸:次线性收敛 O(1/k)
- 非凸:收敛到驻点
兔狲老师解释
梯度下降是'沿着最陡的下山方向走'。
小海豹打了个比喻:想象你在雾中下山:
- 你看不清整座山(不知道全局地形)
- 但能感觉脚下的坡度(梯度)
- 你沿着最陡的下坡方向走一步(梯度下降)
- 重复直到感觉不到坡度(梯度接近零)
学习率选择:
- 固定学习率:简单但需要调参
- 衰减学习率:如 \eta_k = \eta_0/\sqrt{k}
- 自适应学习率:如AdaGrad、Adam
- 线搜索:每步选择最优学习率
思考题1:动手题
问题:用梯度下降法最小化 f(x) = x^2:
- 推导更新公式
- 分析收敛性(给定学习率 \eta)
- 编程实现,观察不同 \eta 的效果
问题:证明:对 L-光滑函数,如果 \eta \le 1/L,则 f(x_{k+1}) \le f(x_k) - (\eta/2)\|\nabla f(x_k)\|^2。
思考题2:动脑题
问题:梯度下降法有哪些局限性?如何改进?
思考方向:
- 陷入局部最优
- 峡谷问题(震荡收敛)
- 病态条件数
- 随机梯度下降的解决方案
词条3:随机梯度下降(SGD)
官方解释
经验风险最小化:\min_\theta \frac{1}{n}\sum_{i=1}^n L(\theta; x_i, y_i)
批量梯度下降:用所有样本计算梯度,计算量大。
随机梯度下降:每次随机选一个样本计算梯度。
\theta_{k+1} = \theta_k - \eta_k \nabla L(\theta_k; x_{i_k}, y_{i_k})
小批量梯度下降:每次用一小批样本(如32、64、128个)。
收敛性:在凸情况下,期望意义下收敛到最优。
兔狲老师解释
SGD是'用噪声换速度'。
兔狲教授举例说:训练神经网络:
- 数据集:100万个图像
- 批量梯度下降:每步需要计算100万个梯度,太慢!
- SGD:每步只计算1个图像的梯度,快但噪声大
- 小批量:折中方案,用128个图像,平衡速度和稳定性
SGD优势:
- 计算效率:每步计算量小
- 内存效率:不需要存储所有梯度
- 逃离局部最优:噪声帮助跳出浅局部最优
- 在线学习:可以处理流式数据
SGD变体:
- 动量法:积累历史梯度方向
- AdaGrad:自适应学习率,适合稀疏数据
- RMSProp:改进的AdaGrad,解决学习率衰减问题
- Adam:结合动量和自适应学习率
思考题1:动手题
问题:实现SGD训练逻辑回归:
- 生成合成数据
- 实现SGD更新
- 比较SGD和批量梯度下降的收敛速度
- 观察不同批量大小的影响
问题:推导动量法更新公式:
v_{k+1} = \beta v_k + \nabla L(\theta_k)
\theta_{k+1} = \theta_k - \eta v_{k+1}
分析 \beta 的作用。
思考题2:动脑题
问题:为什么SGD的噪声有时是有益的?从优化和泛化两个角度分析。
思考方向:
- 优化角度:逃离局部最优、平坦区域
- 泛化角度:隐式正则化、尖锐最小化
- 理论解释:随机近似、Robbins-Monro条件
词条4:凸优化与对偶理论
官方解释
凸集:集合 C 是凸的,如果对任意 x, y \in C,\lambda x + (1-\lambda)y \in C(0 \le \lambda \le 1)。
凸函数:f(\lambda x + (1-\lambda)y) \le \lambda f(x) + (1-\lambda)f(y)。
拉格朗日函数:L(x,\lambda,\nu) = f(x) + \sum_i \lambda_i g_i(x) + \sum_j \nu_j h_j(x),\lambda_i \ge 0。
对偶函数:g(\lambda,\nu) = \inf_x L(x,\lambda,\nu)。
对偶问题:\max_{\lambda \ge 0,\nu} g(\lambda,\nu)。
强对偶:原问题最优值 = 对偶问题最优值(凸问题通常成立)。
兔狲老师解释
对偶是'换个角度看问题'。
小小猪举了个例子:资源分配问题:
- 原问题:用有限资源最大化利润
- 对偶问题:给资源定价,最小化成本
- 对偶变量 \lambda_i:资源 i 的影子价格
- 强对偶:最大利润 = 最小成本
KKT条件(最优性条件):
- 原始可行性:g_i(x^*) \le 0,h_j(x^*) = 0
- 对偶可行性:\lambda_i^* \ge 0
- 互补松弛:\lambda_i^* g_i(x^*) = 0
- 梯度为零:\nabla f(x^*) + \sum_i \lambda_i^* \nabla g_i(x^*) + \sum_j \nu_j^* \nabla h_j(x^*) = 0
思考题1:动手题
问题:求解以下凸优化问题:
\min x^2+y^2,s.t. x+y \ge 1
- 写出拉格朗日函数
- 求对偶函数
- 求解对偶问题
- 验证强对偶和KKT条件
问题:证明:线性规划的原问题和对偶问题:
原:\min c^T x,s.t. Ax=b,x \ge 0
对偶:\max b^T y,s.t. A^T y \le c
思考题2:动脑题
问题:对偶理论为什么强大?它在优化和机器学习中有什么应用?
思考方向:
- 敏感性分析:参数变化对最优值的影响
- 分解方法:解大规模问题
- 支持向量机的对偶形式
- 内点法的基础
词条5:约束优化方法
官方解释
投影梯度下降:x_{k+1} = \text{Proj}_C(x_k - \eta\nabla f(x_k)),其中 \text{Proj}_C 是到凸集 C 的投影。
惩罚函数法:将约束问题转化为无约束问题:\min f(x) + \rho\cdot p(x),其中 p(x) 惩罚约束违反。
增广拉格朗日法:
\min_x \max_{\lambda,\nu} L_\rho(x,\lambda,\nu) = f(x) + \sum_i \lambda_i g_i(x) + \sum_j \nu_j h_j(x) + \frac{\rho}{2}\sum_i [g_i(x)]_+^2 + \frac{\rho}{2}\sum_j [h_j(x)]^2
内点法:在可行域内部寻优,用障碍函数处理约束。
兔狲老师解释
处理约束是'在围栏内找最优'。
小海豹举了个例子:投资组合优化:
- 变量:资金分配比例
- 目标:最大化期望收益
- 约束:总和为1(全投),非负(不能卖空),风险限制
- 方法:投影梯度下降(投影到单纯形)
方法比较:
- 投影法:简单,但投影可能复杂
- 惩罚法:容易实现,但需要调惩罚参数
- 增广拉格朗日:更稳定,对偶变量有经济解释
- 内点法:理论性质好,适合大规模问题
ADMM(交替方向乘子法):
- 适用于可分离问题
- 交替更新变量和对偶变量
- 分布式计算友好
- 在图像处理、统计学习中广泛应用
思考题1:动手题
问题:用投影梯度下降求解:
\min (x-2)^2+(y-3)^2,s.t. x^2+y^2 \le 1
- 推导投影公式(到单位圆)
- 实现算法
- 可视化迭代过程
问题:实现增广拉格朗日法求解等式约束问题:
\min x^2+y^2,s.t. x+y=1
思考题2:动脑题
问题:为什么内点法比单纯形法更适合大规模线性规划?从计算复杂度和数值稳定性分析。
思考方向:
- 单纯形法:沿着多面体顶点移动,可能遍历很多顶点
- 内点法:从内部逼近最优解,迭代次数与问题规模弱相关
- 现代优化软件(如CVX、MOSEK)的实现
词条6:优化在AI中的应用
官方解释
神经网络训练:用(随机)梯度下降最小化损失函数。
支持向量机:凸优化问题,可用对偶方法求解。
矩阵分解:如推荐系统中的协同过滤。
稀疏优化:如LASSO、压缩感知。
贝叶斯优化:用于超参数调优。
元学习:学习如何优化(学习优化器)。
兔狲老师解释
优化是AI的'学习引擎'。
兔狲教授举例说:深度学习训练:
- 前向传播:计算预测和损失
- 反向传播:计算梯度(链式法则)
- 优化更新:用Adam等算法更新参数
- 循环:直到收敛
优化挑战:
- 非凸性:神经网络损失函数高度非凸
- 鞍点:高维空间中的常见障碍
- 病态条件数:不同方向曲率差异大
- 过拟合:需要正则化
现代优化技巧:
- 批量归一化:改善优化地形
- 残差连接:缓解梯度消失
- 学习率调度:如余弦退火
- 梯度裁剪:防止梯度爆炸
思考题1:动手题
问题:实现神经网络训练:
- 构建简单神经网络(如2层MLP)
- 实现反向传播
- 用SGD/Adam训练
- 可视化训练过程(损失曲线、权重分布)
问题:用贝叶斯优化调超参数:
- 定义超参数空间
- 选择代理模型(如高斯过程)
- 选择采集函数(如EI)
- 迭代优化
思考题2:动脑题
问题:优化理论和深度学习实践之间有什么差距?理论保证 vs 实践经验。
思考方向:
- 为什么SGD能训练非凸神经网络?
- 深度学习中的隐式正则化
- 过参数化的好处
- 双下降现象
总结:优化的艺术
兔狲教授总结道:优化理论是连接数学和AI的桥梁:
- 问题建模:将现实问题转化为数学优化
- 算法设计:开发高效求解方法
- 理论分析:理解算法为什么有效
- 实践调优:在实际系统中实现和调试
在AI中,优化不仅是工具,更是思维:
- 学习即优化:训练是损失函数最小化
- 推理即优化:如MAP推断、结构化预测
- 决策即优化:如强化学习、博弈论
掌握优化思维,你就掌握了:
- 系统性思考:看到问题的整体结构
- 算法思维:设计有效解决方案
- 理论直觉:预测算法行为
- 实践智慧:在复杂现实中应用理论
小小猪的体会:原来AI的学习过程就是不断优化的过程!
小海豹的反思:优化理论让我理解了为什么有些算法有效,有些无效。
下一章预告:我们将学习信息论,这是度量信息、理解学习和通信的数学基础。