news 2026/5/1 11:47:25

人工智能之数学基础 优化理论:第四章 凸函数与非凸函数

作者头像

张小明

前端开发工程师

1.2k 24
文章封面图
人工智能之数学基础 优化理论:第四章 凸函数与非凸函数

人工智能之数学基础 优化理论

第四章 凸函数与非凸函数----公式关注公众号


文章目录

  • 人工智能之数学基础 优化理论
  • 前言
  • 一、凸函数的数学定义
    • 1. 凸集(Convex Set)
    • 2. 凸函数(Convex Function)
      • 3. 严格凸 & 强凸
  • 二、凸函数的判别方法
    • 1. 一阶条件(可微函数)
    • 2. 二阶条件(二阶可微)
    • 三、常见凸函数 vs 非凸函数
  • 四、AI 中的非凸优化:挑战与应对
    • 1. 为什么 AI 问题是非凸的?
    • 2. 非凸优化的典型地貌
    • 3. AI 中处理非凸优化的策略
  • 五、Python 代码实现
    • 1. 导入库
    • 2. 凸性判别:符号计算(SymPy)
    • 3. 可视化:凸 vs 非凸函数
      • (a) 一维函数
      • (b) 二维函数:Rosenbrock(非凸) vs 二次型(凸)
    • 4. 优化行为对比:凸 vs 非凸
    • 5. 神经网络:非凸损失的优化(PyTorch 简例)
    • 6. 鞍点检测:Hessian 特征值分析
  • 六、总结:凸性在 AI 中的意义
  • 补充
  • 后续
  • 资料关注

前言

在优化理论中,凸性(Convexity)是决定问题“难易程度”的核心属性。凸优化问题具有全局最优解可高效求解的优良性质,而非凸问题则充满局部极小值、鞍点等挑战。本文系统讲解凸函数的定义与判别方法常见凸/非凸函数示例AI 中非凸优化的典型场景与应对策略,并提供完整的Python(NumPy / Matplotlib / SciPy / SymPy)代码实现与可视化


一、凸函数的数学定义

1. 凸集(Convex Set)

集合 $ \mathcal{C} \subseteq \mathbb{R}^n $ 是凸集,若对任意 $ \mathbf{x}, \mathbf{y} \in \mathcal{C} $ 和 $ \theta \in [0,1] $,有:

θ x + ( 1 − θ ) y ∈ C \theta \mathbf{x} + (1 - \theta) \mathbf{y} \in \mathcal{C}θx+(1θ)yC

✅ 直观:集合内任意两点连线仍在集合内(如球、多面体;非凸如月牙形)

2. 凸函数(Convex Function)

函数 $ f: \mathbb{R}^n \to \mathbb{R} $ 是凸函数,若其定义域为凸集,且对任意 $ \mathbf{x}, \mathbf{y} \in \text{dom}(f) $ 和 $ \theta \in [0,1] $,有:

f ( θ x + ( 1 − θ ) y ) ≤ θ f ( x ) + ( 1 − θ ) f ( y ) f(\theta \mathbf{x} + (1 - \theta) \mathbf{y}) \leq \theta f(\mathbf{x}) + (1 - \theta) f(\mathbf{y})f(θx+(1θ)y)θf(x)+(1θ)f(y)

🔑几何意义:函数图像上任意两点连线位于图像上方

3. 严格凸 & 强凸

  • 严格凸:不等式严格成立($ < $),当 $ \mathbf{x} \ne \mathbf{y}, \theta \in (0,1) $
  • 强凸:存在 $ \mu > 0 $ 使得
    f ( y ) ≥ f ( x ) + ∇ f ( x ) ⊤ ( y − x ) + μ 2 ∥ y − x ∥ 2 → 保证唯一全局最小值,加速收敛 f(\mathbf{y}) \geq f(\mathbf{x}) + \nabla f(\mathbf{x})^\top (\mathbf{y} - \mathbf{x}) + \frac{\mu}{2} \|\mathbf{y} - \mathbf{x}\|^2 → 保证唯一全局最小值,加速收敛f(y)f(x)+f(x)(yx)+2μyx2保证唯一全局最小值,加速收敛

二、凸函数的判别方法

1. 一阶条件(可微函数)

$ f $ 是凸函数 ⇔ 对所有 $ \mathbf{x}, \mathbf{y} \in \text{dom}(f) $:

f ( y ) ≥ f ( x ) + ∇ f ( x ) ⊤ ( y − x ) f(\mathbf{y}) \geq f(\mathbf{x}) + \nabla f(\mathbf{x})^\top (\mathbf{y} - \mathbf{x})f(y)f(x)+f(x)(yx)

✅ 即:函数始终在其切平面之上

2. 二阶条件(二阶可微)

$ f $ 是凸函数 ⇔Hessian 矩阵半正定($ \nabla^2 f(\mathbf{x}) \succeq 0 $)对所有 $ \mathbf{x} \in \text{dom}(f) $

  • 半正定:所有特征值 $ \lambda_i \geq 0 $
  • 正定(强凸):所有 $\lambda_i > 0 $

💡 对标量函数 $ f: \mathbb{R} \to \mathbb{R} $,即 $ f’'(x) \geq 0 $


三、常见凸函数 vs 非凸函数

函数类型表达式凸性说明
二次函数$ f(x) = ax^2 + bx + c $$ a \geq 0 $ 时凸$ a > 0 $强凸
指数函数$ f(x) = e^{ax} $凸(任意 $ a $)Hessian = $ a^2 e^{ax} \geq 0 $
负熵$ f(x) = x \log x $$( x > 0 $)信息论基础
范数$ f(\mathbf{x}) = |\mathbf{x}|_p $凸($ p \geq 1 $)$ p=1,2 $ 常用
最大值函数$ f(\mathbf{x}) = \max_i x_i $分段线性
Log-sum-exp$ f(\mathbf{x}) = \log \sum_i e^{x_i} $softmax 的平滑近似
ReLU$ f(x) = \max(0, x) $神经网络激活函数
正弦函数$ f(x) = \sin x $非凸振荡,多极值
Rosenbrock 函数$f(x,y) = (a-x)^2 + b(y-x2)2 $非凸经典测试函数
神经网络损失$ \mathcal{L}(\mathbf{W}) $非凸参数耦合导致

四、AI 中的非凸优化:挑战与应对


1. 为什么 AI 问题是非凸的?

  • 神经网络:多层非线性变换 → 损失函数高度非凸
  • 矩阵分解:如推荐系统中的 $ \min_{U,V} |X - UV\top|_F2 $ → 双线性项非凸
  • 聚类:K-means 目标函数非凸

2. 非凸优化的典型地貌

  • 局部极小值(Local Minima):邻域内最小,但非全局
  • 鞍点(Saddle Points):某些方向上升,某些下降(高维中更常见)
  • 平坦区域(Plateaus):梯度接近零,优化停滞

📌关键发现(深度学习):
大多数“坏”临界点是鞍点而非局部极小;随机梯度噪声有助于逃离


3. AI 中处理非凸优化的策略

策略原理工具/算法
随机初始化从不同起点开始,增加找到好解概率多次训练取 best
动量 & 自适应学习率加速穿越平坦区,逃离鞍点Adam, RMSProp
批量归一化(BN)平滑损失景观,减少内部协变量偏移torch.nn.BatchNorm
残差连接缓解梯度消失,改善优化地形ResNet
课程学习从简单样本开始,逐步增加难度Curriculum Learning
二阶方法近似利用曲率信息(计算昂贵)K-FAC, Shampoo
全局优化启发式探索整个空间遗传算法、贝叶斯优化(超参调优)

实践共识
尽管非凸,现代深度学习优化器(如 Adam)在实践中表现惊人地好——“优化容易,泛化难”


五、Python 代码实现

1. 导入库

importnumpyasnpimportmatplotlib.pyplotaspltfrommpl_toolkits.mplot3dimportAxes3Dimportsympyasspfromscipy.optimizeimportminimize np.random.seed(42)

2. 凸性判别:符号计算(SymPy)

# 定义符号变量x,y=sp.symbols('x y')# 示例1:凸函数 f(x) = x^2f1=x**2f1_hessian=sp.diff(f1,x,2)print(f"f1(x) = x², f''(x) ={f1_hessian}→ 凸(≥0)")# 示例2:非凸函数 f(x) = sin(x)f2=sp.sin(x)f2_hessian=sp.diff(f2,x,2)print(f"f2(x) = sin(x), f''(x) ={f2_hessian}→ 非凸(符号不定)")# 示例3:二元函数 f(x,y) = x^2 + y^2(凸)f3=x**2+y**2hess_f3=sp.hessian(f3,(x,y))eigvals_f3=hess_f3.eigenvals()print(f"f3(x,y) = x²+y², Hessian 特征值:{list(eigvals_f3.keys())}→ 正定 ⇒ 强凸")# 示例4:Rosenbrock 函数(非凸)a,b=1,100f4=(a-x)**2+b*(y-x**2)**2hess_f4=sp.hessian(f4,(x,y))# 在 (0,0) 处计算 Hessianhess_at_0=hess_f4.subs({x:0,y:0})eigvals_f4=[ev.evalf()forevinhess_at_0.eigenvals().keys()]print(f"Rosenbrock 在 (0,0) 处 Hessian 特征值:{eigvals_f4}→ 一正一负 ⇒ 鞍点")

3. 可视化:凸 vs 非凸函数

(a) 一维函数

x=np.linspace(-2,2,400)plt.figure(figsize=(12,4))# 凸函数:x²plt.subplot(1,3,1)plt.plot(x,x**2,'b-',label=r'$f(x)=x^2$')plt.title('凸函数(开口向上)')plt.grid(True);plt.legend()# 非凸函数:sin(x)plt.subplot(1,3,2)plt.plot(x,np.sin(x),'r-',label=r'$f(x)=\sin x$')plt.title('非凸函数(振荡)')plt.grid(True);plt.legend()# 非凸函数:x^4 - x^2plt.subplot(1,3,3)plt.plot(x,x**4-x**2,'g-',label=r'$f(x)=x^4 - x^2$')plt.title('非凸函数(多极值)')plt.grid(True);plt.legend()plt.tight_layout()plt.show()

(b) 二维函数:Rosenbrock(非凸) vs 二次型(凸)

# 定义函数defrosenbrock(xy,a=1,b=100):x,y=xyreturn(a-x)**2+b*(y-x**2)**2defquadratic(xy):x,y=xyreturnx**2+2*y**2# 凸(椭圆等高线)# 网格x=np.linspace(-2,2,200)y=np.linspace(-1,3,200)X,Y=np.meshgrid(x,y)Z_rosen=np.array([rosenbrock([xi,yi])forxi,yiinzip(X.ravel(),Y.ravel())]).reshape(X.shape)Z_quad=np.array([quadratic([xi,yi])forxi,yiinzip(X.ravel(),Y.ravel())]).reshape(X.shape)plt.figure(figsize=(12,5))# Rosenbrock(非凸)plt.subplot(1,2,1)contour1=plt.contour(X,Y,Z_rosen,levels=np.logspace(-0.5,3.5,20),cmap='viridis')plt.clabel(contour1,inline=True,fontsize=8)plt.plot(1,1,'r*',markersize=15,label='全局最小 (1,1)')plt.title('Rosenbrock 函数(非凸,峡谷地形)')plt.xlabel('x');plt.ylabel('y')plt.legend();plt.grid(True)# 二次型(凸)plt.subplot(1,2,2)contour2=plt.contour(X,Y,Z_quad,levels=20,cmap='plasma')plt.clabel(contour2,inline=True,fontsize=8)plt.plot(0,0,'r*',markersize=15,label='全局最小 (0,0)')plt.title('二次型函数(凸,椭圆等高线)')plt.xlabel('x');plt.ylabel('y')plt.legend();plt.grid(True)plt.tight_layout()plt.show()

4. 优化行为对比:凸 vs 非凸

# 使用不同初值优化 Rosenbrockinitial_points=[[-1,1],[0,0],[2,2]]results=[]forx0ininitial_points:res=minimize(rosenbrock,x0,method='BFGS')results.append((x0,res.x,res.fun,res.success))print("Rosenbrock 优化结果(非凸):")forx0,x_opt,f_opt,successinresults:print(f"初值{x0}→ 解{x_opt}, f={f_opt:.6f}, 成功?{success}")# 优化凸函数(应总成功)res_convex=minimize(quadratic,x0=[2,-1],method='BFGS')print(f"\n凸函数优化: 解{res_convex.x}, f={res_convex.fun:.6f}")

📌 输出显示:非凸问题对初值敏感,可能失败或陷入局部最优;凸问题稳定收敛。


5. 神经网络:非凸损失的优化(PyTorch 简例)

importtorchimporttorch.nnasnnimporttorch.optimasoptim# 构造简单非线性回归np.random.seed(0)X=np.random.randn(100,1).astype(np.float32)y=(X.squeeze()**3+0.5*X.squeeze()).astype(np.float32)# 两层神经网络(非凸)model=nn.Sequential(nn.Linear(1,10),nn.ReLU(),nn.Linear(10,1))criterion=nn.MSELoss()optimizer=optim.Adam(model.parameters(),lr=0.01)losses=[]forepochinrange(200):optimizer.zero_grad()outputs=model(torch.tensor(X))loss=criterion(outputs.squeeze(),torch.tensor(y))loss.backward()optimizer.step()losses.append(loss.item())# 绘制损失曲线plt.figure(figsize=(8,4))plt.plot(losses,'b-')plt.title('神经网络训练损失(非凸优化)')plt.xlabel('Epoch');plt.ylabel('Loss')plt.grid(True)plt.show()print(f"最终损失:{losses[-1]:.6f}")

✅ 尽管损失函数非凸,Adam 仍能有效降低损失。


6. 鞍点检测:Hessian 特征值分析

# 在 Rosenbrock 的 (0,0) 处计算数值 Hessiandefnumerical_hessian(func,x,eps=1e-5):n=len(x)hess=np.zeros((n,n))foriinrange(n):forjinrange(n):dx=np.zeros(n);dx[i]=eps dy=np.zeros(n);dy[j]=eps hess[i,j]=(func(x+dx+dy)-func(x+dx)-func(x+dy)+func(x))/(eps**2)returnhess x_saddle=np.array([0.0,0.0])hess_num=numerical_hessian(rosenbrock,x_saddle)eigvals_num=np.linalg.eigvals(hess_num)print(f"Rosenbrock 在 (0,0) 处数值 Hessian 特征值:{eigvals_num}")print("→ 一正一负 ⇒ 鞍点")

六、总结:凸性在 AI 中的意义

属性凸优化非凸优化(如深度学习)
全局最优可保证通常不能
算法收敛理论保证实践有效,理论有限
初值敏感
典型问题SVM、Lasso、LP/QPDNN、GAN、强化学习
求解工具CVXPY、MOSEKPyTorch、TensorFlow

💡关键洞见

  • 凸性是“好问题”的标志,但现实世界多是非凸的;
  • 深度学习的成功部分源于其损失景观的“良性”非凸性(鞍点多,局部极小少);
  • 理解凸性有助于设计更好的模型和正则化(如使用凸代理损失);
  • 非凸 ≠ 不可解:现代优化器 + 良好实践 = 实用解。

补充

没有其他机器学习相关基础的,只需要理解理论部分内容,知道其含义是什么就足够了,后续会逐渐补充机器学习到大模型的整个过程,从理论部分到整体的实现,理论部分相当于理解其原理过程,其数学为解决更多的问题提供解决问题的基础以及模型的构建基础。

后续

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》

版权声明: 本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若内容造成侵权/违法违规/事实不符,请联系邮箱:809451989@qq.com进行投诉反馈,一经查实,立即删除!
网站建设 2026/4/23 12:32:04

ArcGIS大师之路500技---045最小外接矩形

文章目录前言一、需求说明二、操作步骤总结前言 本文介绍在 ArcMap 软件中&#xff0c;为面图层绘制最小外接矩形、最小外接圆等几何图形的方法。 一、需求说明 首先说明本文要实现的需求&#xff1a;现有一个面要素图层&#xff0c;其中包含多个面要素&#xff0c;如下图所示…

作者头像 李华
网站建设 2026/4/24 9:59:00

Pydantic-DeepAgents:基于 Pydantic-AI 的轻量级生产级 Agent 框架

DeepAgents的灵感源自 LangChain deepagents&#xff0c;但在设计上更做减法&#xff0c;它强调类型安全且内置了 Docker 沙箱 2025 年的Autonomous AI Agents早就不是实验室里的花架子了。在现实世界的自动化流程、代码生成工具、数据管道以及各类智能助手中都能看到它们的身…

作者头像 李华
网站建设 2026/4/27 12:44:14

电流误差权重占70%,转矩波动占30

永磁同步电机模型预测控制&#xff0c;电流预测控制&#xff0c;单矢量双矢量三矢量模型预测控制&#xff0c;pi控制&#xff0c;foc控制&#xff0c;转矩控制玩过电机控制的都知道&#xff0c;FOC&#xff08;磁场定向控制&#xff09;那套PI调参大法简直堪称玄学——调得好是…

作者头像 李华
网站建设 2026/4/22 22:15:05

Step-Audio-2 API 中转调用解决方案:2025 年版

引言 随着官方step-audio-2大模型的正式发布&#xff0c;其在推理效率、多模态融合处理、长上下文理解等核心维度实现跨越式升级&#xff0c;迅速成为国内开发者落地AI项目的优选模型。然而&#xff0c;在实际接入与生产级部署过程中&#xff0c;跨境网络不稳定导致调用失败、海…

作者头像 李华
网站建设 2026/5/1 12:15:17

跨境增长密钥:吃透亚马逊智能革命,战略抉择不踩坑

2026年&#xff0c;亚马逊的商业生态正经历一场比算法迭代更深刻的变革——AI正从辅助工具跃升为驱动平台运转的核心引擎&#xff0c;这场变革的本质是从“规则驱动”转向“智能驱动”&#xff0c;它重塑的不仅是流量分配&#xff0c;更是竞争的根本范式&#xff0c;对卖家而言…

作者头像 李华