第一章 优化基础
前言优化(Optimization) 是在给定条件下寻找“最佳”决策的数学过程,广泛应用于机器学习、工程设计、经济学、运筹学等领域。本文系统讲解优化问题的基本要素(目标函数、变量、约束)、局部最优 vs 全局最优、无约束与约束优化方法,并提供完整的 Python(SciPy / CVXPY / Matplotlib)代码实现与可视化。
一、优化问题的基本形式一个标准的优化问题可表示为:
$$ \begin{aligned} \min{\mathbf{x} \in \mathbb{R}^n} \quad & f(\mathbf{x}) \\ \text{s.t.} \quad & gi(\mathbf{x}) \leq 0, \quad i = 1, \dots, m \quad \text{(不等式约束)} \\ & h_j(\mathbf{x}) = 0, \quad j = 1, \dots, p \quad \text{(等式约束)} \end{aligned} $$
其中:
$ \mathbf{x} = (x1, x2, \dots, x_n)^\top $:决策变量$ f(\mathbf{x}) $:目标函数(Objective Function),需最小化(或最大化)$ gi, hj $:约束函数(Constraints)✅ 若无约束($ m = p = 0 $),称为无约束优化;否则为约束优化。
二、关键概念解析1. 可行解与可行域可行解:满足所有约束的 $ \mathbf{x} $可行域(Feasible Set):所有可行解的集合$$ \mathcal{F} = \{ \mathbf{x} \mid gi(\mathbf{x}) \leq 0, \, hj(\mathbf{x}) = 0 \} $$
2. 局部最优解(Local Minimum)存在 $ \delta > 0 $,使得对所有 $ \mathbf{y} \in \mathcal{F} \cap B_\delta(\mathbf{x}^*) $(邻域内可行点),有:
$$ f(\mathbf{x}^*) \leq f(\mathbf{y}) $$
3. 全局最优解(Global Minimum)对所有 $ \mathbf{y} \in \mathcal{F} $,有:
$$ f(\mathbf{x}^*) \leq f(\mathbf{y}) $$
重要区别:
局部最优 ≠ 全局最优(除非目标函数是凸函数且可行域是凸集)非凸问题可能有多个局部最优解
三、无约束优化:必要与充分条件设 $ f: \mathbb{R}^n \to \mathbb{R} $ 二阶连续可微。
1. 一阶必要条件(驻点)若 $ \mathbf{x}^* $ 是局部极小值点,则:
$$ \nabla f(\mathbf{x}^*) = \mathbf{0} 即梯度为零(驻点)。 $$
2. 二阶充分条件若 $ \nabla f(\mathbf{x}^) = \mathbf{0} $且 Hessian 矩阵$\mathbf{H}_f(\mathbf{x}^) $正定,则 $ \mathbf{x}^* $ 是严格局部极小值点。
✅ 正定:所有特征值 > 0
四、约束优化:KKT 条件(Karush–Kuhn–Tucker)对于凸优化问题(目标函数凸、不等式约束函数凸、等式约束线性),KKT 条件是全局最优的充要条件。
设拉格朗日函数:
$$ \mathcal{L}(\mathbf{x}, \boldsymbol{\lambda}, \boldsymbol{\mu}) = f(\mathbf{x}) + \sum{i=1}^m \lambdai gi(\mathbf{x}) + \sum{j=1}^p \muj hj(\mathbf{x}) $$
则最优解 $ \mathbf{x}^* $ 满足:
稳定条件:$ \nabla_x \mathcal{L} = \mathbf{0} $原始可行性:$ gi(\mathbf{x}^*) \leq 0,\ hj(\mathbf{x}^*) = 0$对偶可行性:$ \lambda_i \geq 0 $互补松弛性:$ \lambdai gi(\mathbf{x}^*) = 0 $互补松弛性:若约束不起作用($ gi < 0 $),则对应乘子 $\lambdai = 0 $
五、Python 代码实现1. 导入库import numpy as npimport matplotlib.pyplot as pltfrom mpl_toolkits.mplot3d import Axes3Dfrom scipy.optimize import minimize, Bounds, LinearConstraint, NonlinearConstraintimport cvxpy as cp # 需安装:pip install cvxpynp.random.seed(42)2. 无约束优化:寻找局部/全局最优示例1:单峰函数(凸)→ 全局最优def f1(x): return x[0]**2 + x[1]**2 # 凸函数,全局最小值在 (0,0)res1 = minimize(f1, x0=[2, 2], method='BFGS')print("凸函数优化:")print(f"解: {res1.x}, 目标值: {res1.fun:.6f}, 成功? {res1.success}")示例2:多峰函数(非凸)→ 局部最优依赖初值def f2(x): return (x[0]**2 - 1)**2 + (x[1] - x[0]**2)**2 # Rosenbrock 函数(非凸)# 不同初值x0_list = [[0, 0], [-1, 1], [2, 2]]for i, x0 in enumerate(x0_list): res = minimize(f2, x0=x0, method='BFGS') print(f"初值 {x0} → 解: {res.x}, f={res.fun:.6f}")输出显示:不同初值可能收敛到不同局部最优(Rosenbrock 全局最小在 (1,1))
3. 可视化:目标函数与最优解# 定义非凸函数def f_vis(x, y): return (x**2 - 1)**2 + (y - x**2)**2x = np.linspace(-2, 2, 200)y = np.linspace(-1, 3, 200)X, Y = np.meshgrid(x, y)Z = f_vis(X, Y)plt.figure(figsize=(10, 4))# 等高线图plt.contour(X, Y, Z, levels=30, cmap='viridis')# 标出全局最优 (1,1)plt.plot(1, 1, 'r*', markersize=15, label='全局最优 (1,1)')plt.xlabel('x'); plt.ylabel('y')plt.title('非凸函数的等高线(多个局部最优)')plt.legend(); plt.grid(True)plt.show()4. 约束优化:使用 SciPy场景:最小化 $ f(x, y) = x^2 + y^2 $,满足$ x + y \geq 1 $def obj(x): return x[0]**2 + x[1]**2# 不等式约束:g(x) <= 0 → -(x + y - 1) <= 0def cons_ineq(x): return x[0] + x[1] - 1 # 要求 >=1 → 改写为 -cons_ineq <= 0nonlinear_cons = NonlinearConstraint(cons_ineq, lb=0, ub=np.inf) # cons_ineq >= 0res_con = minimize(obj, x0=[0, 0], method='SLSQP', constraints=[nonlinear_cons])print("\n约束优化结果:")print(f"解: {res_con.x}, f={res_con.fun:.6f}")print(f"约束值: x+y = {res_con.x.sum():.4f} (应 ≥1)")线性约束示例:投资组合优化# 最小化风险:x^T Σ x,满足 sum(x)=1, x≥0Sigma = np.array([[0.1, 0.02], [0.02, 0.2]]) # 协方差矩阵def portfolio_risk(x): return x @ Sigma @ x# 约束:sum(x) = 1linear_cons = LinearConstraint([[1, 1]], lb=1, ub=1)bounds = Bounds([0, 0], [1, 1]) # 0 ≤ x_i ≤ 1res_port = minimize(portfolio_risk, x0=[0.5, 0.5], method='SLSQP', constraints=[linear_cons], bounds=bounds)print("\n投资组合优化:")print(f"最优权重: {res_port.x}, 风险: {res_port.fun:.6f}")5. 凸优化:使用 CVXPY(声明式建模)CVXPY 允许以数学形式直接编写优化问题,自动选择求解器。
示例:二次规划(QP)$$ \min \frac{1}{2} x^\top P x + q^\top x \quad \text{s.t. } Gx \leq h, \ Ax = b $$
# 定义变量x = cp.Variable(2)# 参数P = np.array([[2, 0], [0, 2]])q = np.array([-2, -5])G = np.array([[-1, 0], [0, -1], [1, 1]]) # -x1 ≤ 0, -x2 ≤ 0, x1+x2 ≤ 1h = np.array([0, 0, 1])A = None # 无等式约束# 构建问题objective = cp.Minimize(0.5 * cp.quad_form(x, P) + q.T @ x)constraints = [G @ x <= h]prob = cp.Problem(objective, constraints)# 求解prob.solve()print("\nCVXPY 二次规划:")print(f"状态: {prob.status}")print(f"最优解: {x.value}")print(f"最优值: {prob.value:.6f}")凸优化优势:保证全局最优# 验证:目标函数是凸的(P 正定)eigvals = np.linalg.eigvals(P)print(f"P 的特征值: {eigvals} → 全部 >0 ⇒ 凸问题 ⇒ 全局最优")6. 全局优化:避免陷入局部最优对于非凸问题,可使用全局优化算法:
from scipy.optimize import differential_evolutiondef nonconvex_obj(x): return np.sin(x[0]) * np.cos(x[1]) + 0.1 * (x[0]**2 + x[1]**2)# 全局搜索范围bounds = [(-5, 5), (-5, 5)]result_global = differential_evolution(nonconvex_obj, bounds)result_local = minimize(nonconvex_obj, x0=[0, 0])print("\n全局 vs 局部优化:")print(f"全局最优: x={result_global.x}, f={result_global.fun:.6f}")print(f"局部最优: x={result_local.x}, f={result_local.fun:.6f}")六、常见优化问题类型总结类型
目标函数
约束
求解方法
是否保证全局最优
无约束优化
任意
无
梯度下降、牛顿法、BFGS
否(除非凸)
线性规划(LP)
线性
线性
单纯形法、内点法
是
二次规划(QP)
二次(凸)
线性
QP 求解器
是
凸优化
凸
凸集
内点法、CVXPY
是
非线性规划(NLP)
非线性
非线性
SLSQP、IPOPT
否
全局优化
非凸
任意
遗传算法、模拟退火
近似
七、在机器学习中的应用线性回归:最小化 MSE(无约束凸优化)$$
\min_{\mathbf{w}} \|\mathbf{y} - \mathbf{X}\mathbf{w}\|^2 $$
支持向量机(SVM):带约束的凸二次规划神经网络训练:非凸无约束优化(使用 SGD、Adam)Lasso 回归:带 L1 约束的凸优化$$
\min{\mathbf{w}} \|\mathbf{y} - \mathbf{X}\mathbf{w}\|^2 \quad \text{s.t. } \|\mathbf{w}\|1 \leq t $$
八、总结目标函数定义了“最优”的标准;约束条件限定了可行决策的范围;局部最优是邻域内最好,全局最优是整体最好;凸优化是“好问题”——任何局部最优即全局最优;KKT 条件是约束优化的理论基石;SciPy 适合一般优化,CVXPY 适合凸优化建模;全局优化算法用于逃离局部最优陷阱。实践建议:
先分析问题是否为凸优化;优先使用专业建模工具(如 CVXPY);对非凸问题,尝试多个初值或全局优化器;始终验证解的可行性和合理性。
后续python过渡项目部分代码已经上传至gitee,后续会逐步更新。
资料关注:咚咚王 gitee:https://gitee.com/wy18585051844/ai_learning
《Python编程:从入门到实践》 《利用Python进行数据分析》 《算法导论中文第三版》 《概率论与数理统计(第四版) (盛骤) 》 《程序员的数学》 《线性代数应该这样学第3版》 《微积分和数学分析引论》 《(西瓜书)周志华-机器学习》 《TensorFlow机器学习实战指南》 《Sklearn与TensorFlow机器学习实用指南》 《模式识别(第四版)》 《深度学习 deep learning》伊恩·古德费洛著 花书 《Python深度学习第二版(中文版)【纯文本】 (登封大数据 (Francois Choliet)) (Z-Library)》 《深入浅出神经网络与深度学习+(迈克尔·尼尔森(Michael+Nielsen)》 《自然语言处理综论 第2版》 《Natural-Language-Processing-with-PyTorch》 《计算机视觉-算法与应用(中文版)》 《Learning OpenCV 4》 《AIGC:智能创作时代》杜雨+&+张孜铭 《AIGC原理与实践:零基础学大语言模型、扩散模型和多模态模型》 《从零构建大语言模型(中文版)》 《实战AI大模型》 《AI 3.0》
转载请注明来自海坡下载,本文标题:《优化的基础(人工智能之数学基础 优化理论第一章 优化基础)》
京公网安备11000000000001号
京ICP备11000001号
还没有评论,来说两句吧...