news 2026/5/12 22:43:52

【第一阶段—数学基础】第十三章:AI数学入门:微积分基础—链式法则与优化理论

作者头像

张小明

前端开发工程师

1.2k 24
文章封面图
【第一阶段—数学基础】第十三章:AI数学入门:微积分基础—链式法则与优化理论

学习目标:掌握链式法则,理解优化理论基础
预计时间:15-20分钟
前置知识:导数基础(3.1)、偏导数与梯度(3.2)

📋 本篇内容

链式法则 → 多层链式法则 → 极值点 → 凸函数 → 优化理论

🔗 1. 链式法则:复合函数的导数

1.1 什么是链式法则?

生活类比:温度影响冰淇淋销量,销量影响利润,那么温度如何影响利润?

场景:你开了一家冰淇淋店

关系链

温度 → 销量 → 利润

已知信息

  • 温度每升高1°C → 销量增加10支(dS/dT = 10)
  • 销量每增加1支 → 利润增加5元(dP/dS = 5)

问题:温度每升高1°C,利润增加多少?

链式法则

dP/dT = dP/dS × dS/dT = 5元/支 × 10支/°C = 50元/°C

答案:温度每升高1°C,利润增加50元!

这就是链式法则:把中间变量的导数相乘

1.2 链式法则的数学示例

importnumpyasnp# 例子:神经网络的反向传播# y = f(g(x))# dy/dx = dy/dg × dg/dx# 具体例子:y = (2x + 1)²# 设 g(x) = 2x + 1, f(g) = g²# dy/dx = dy/dg × dg/dx = 2g × 2 = 4(2x + 1)defg(x):return2*x+1deff(g_val):returng_val**2defy(x):returnf(g(x))# 在x=3处计算导数x=3g_val=g(x)# 链式法则dg_dx=2# g'(x) = 2df_dg=2*g_val# f'(g) = 2gdy_dx=df_dg*dg_dx# 链式法则print(f"📊 计算过程:")print(f"输入 x ={x}")print(f"中间变量 g(x) = 2x + 1 ={g_val}")print(f"输出 y = g² ={y(x)}")print(f"\n🔗 链式法则计算导数:")print(f"步骤1:dg/dx ={dg_dx}(g对x的导数)")print(f"步骤2:df/dg = 2g = 2×{g_val}={df_dg}(f对g的导数)")print(f"步骤3:dy/dx = df/dg × dg/dx ={df_dg}×{dg_dx}={dy_dx}")

📊 计算过程详解

当 x = 3 时:

前向计算(从输入到输出):

输入:x = 3 ↓ 中间变量:g(x) = 2x + 1 = 2×3 + 1 = 7 ↓ 输出:y = g² = 7² = 49

反向计算(链式法则求导数):

步骤1:计算 g 对 x 的导数 dg/dx = 2 步骤2:计算 f 对 g 的导数 df/dg = 2g = 2×7 = 14 步骤3:应用链式法则 dy/dx = df/dg × dg/dx = 14 × 2 = 28

✅ 验证结果

直接展开计算:

y = (2x+1)² = 4x² + 4x + 1 dy/dx = 8x + 4 = 8×3 + 4 = 28 ✓

结果一致!链式法则正确。


💡 关键洞察

  1. 链式法则 = 把中间步骤的导数相乘

    dy/dx = (dy/dg) × (dg/dx)
  2. 这就是神经网络反向传播的核心原理!

    • 前向传播:计算输出
    • 反向传播:用链式法则计算梯度
    • 每一层的梯度 = 后一层的梯度 × 本层的导数
  3. 为什么叫"链式"?

    • 因为导数像链条一样连接起来
    • 一层一层往回传播
    • 最终得到输入层的梯度

1.3 多层链式法则

生活类比:接力赛跑

场景:三个人接力跑步

  • 第1棒:小明跑得快 → 速度 × 2
  • 第2棒:小红跑得更快 → 速度 × 3
  • 第3棒:小刚跑得最快 → 速度 × 4

问题:整体速度是多少?
答案:2 × 3 × 4 = 24倍

多层链式法则就是这样

  • 每一层都有自己的"加速效果"(导数)
  • 总效果 = 所有层的效果相乘
  • 这就是神经网络的反向传播!

数学表达

如果有多层函数:

x → h1 → h2 → y

那么导数就是:

dy/dx = (dy/dh2) × (dh2/dh1) × (dh1/dx) └─────┘ └──────┘ └─────┘ 第3层 第2层 第1层 的导数 的导数 的导数

关键点

  • 从后往前算(反向传播)
  • 每一层的导数相乘
  • 就像多米诺骨牌,一层推一层
importnumpyasnp# 例子:三层神经网络# x → h1 → h2 → y# 需要计算 dy/dx# 前向传播defforward(x):h1=2*x+1# 第一层h2=h1**2# 第二层y=3*h2+2# 输出层returnh1,h2,y# 反向传播(链式法则)defbackward(x):h1,h2,y=forward(x)# 计算各层导数dy_dh2=3# y对h2的导数dh2_dh1=2*h1# h2对h1的导数dh1_dx=2# h1对x的导数# 链式法则:dy/dx = dy/dh2 × dh2/dh1 × dh1/dxdy_dx=dy_dh2*dh2_dh1*dh1_dxreturndy_dx x=3h1,h2,y=forward(x)dy_dx=backward(x)print(f"输入 x ={x}")print(f"h1 ={h1}")print(f"h2 ={h2}")print(f"输出 y ={y}")print(f"\n导数 dy/dx ={dy_dx}")print("\n💡 这就是神经网络反向传播的核心原理!")

🎯 2. 优化理论基础

2.1 极值点

生活类比:找到山谷的最低点

问题:怎么知道你已经到达山谷底部?

答案:当你站的地方是平的(导数=0)!

  • 在山坡上:有斜度(导数≠0)
  • 在山谷底:完全平坦(导数=0)

极值点 = 导数为0的点

importnumpyasnpimportmatplotlib.pyplotasplt# 解决中文显示问题plt.rcParams['font.sans-serif']=['Arial Unicode MS','SimHei','Microsoft YaHei','STHeiti']plt.rcParams['axes.unicode_minus']=False# 例子:找到函数的最小值deff(x):returnx**2-4*x+5deff_prime(x):return2*x-4# 极值点:导数为0的点# f'(x) = 2x - 4 = 0# x = 2x_min=2y_min=f(x_min)print(f"📊 寻找极值点:")print(f"函数:f(x) = x² - 4x + 5")print(f"导数:f'(x) = 2x - 4")print(f"\n求解 f'(x) = 0:")print(f"2x - 4 = 0")print(f"x = 2")print(f"\n✅ 极值点: x ={x_min}, y ={y_min}")print(f"验证:f'({x_min}) ={f_prime(x_min)}(导数为0,确实是极值点!)")# 可视化x=np.linspace(-1,5,100)y=f(x)plt.figure(figsize=(10,6))plt.plot(x,y,'b-',linewidth=2,label='f(x) = x² - 4x + 5')plt.plot(x_min,y_min,'r*',markersize=20,label=f'最小值点({x_min},{y_min})')plt.axhline(y=y_min,color='r',linestyle='--',alpha=0.3)plt.axvline(x=x_min,color='r',linestyle='--',alpha=0.3)plt.xlabel('x')plt.ylabel('y')plt.title('函数的最小值')plt.legend()plt.grid(True,alpha=0.3)plt.show()

实际意义

  • 左边 (x < 2):函数下降,导数 < 0
  • 极值点 (x = 2):函数平坦,导数 = 0 ← 找到了!
  • 右边 (x > 2):函数上升,导数 > 0

AI训练类比

损失函数就像这条抛物线: - 训练目标:找到最低点(损失最小) - 方法:求导数=0的点 - 结果:找到最优参数

💡关键洞察:导数=0 是找极值点的"金钥匙"!

2.2 凸函数和凹函数

生活类比:碗和山

凸函数(碗状)

  • 像一个碗,只有一个最低点
  • 无论从哪里开始下山,都能到达最低点
  • 例子:y = x²

凹函数(山峰状)

  • 像一座山,只有一个最高点
  • 例子:y = -x²

为什么凸函数重要?

  • AI训练 = 找最小值(下山)
  • 凸函数保证能找到全局最优解
  • 不会被困在局部最优(小坑)里
importnumpyasnpimportmatplotlib.pyplotasplt# 解决中文显示问题plt.rcParams['font.sans-serif']=['Arial Unicode MS','SimHei','Microsoft YaHei','STHeiti']plt.rcParams['axes.unicode_minus']=False# 凸函数:二阶导数 > 0(碗状)defconvex(x):returnx**2# 凹函数:二阶导数 < 0(山峰状)defconcave(x):return-x**2x=np.linspace(-3,3,100)plt.figure(figsize=(12,4))plt.subplot(1,2,1)plt.plot(x,convex(x),'b-',linewidth=2)plt.plot(0,0,'r*',markersize=15,label='唯一最小值')plt.title('凸函数(碗状)')plt.xlabel('x')plt.ylabel('y')plt.legend()plt.grid(True,alpha=0.3)plt.subplot(1,2,2)plt.plot(x,concave(x),'r-',linewidth=2)plt.plot(0,0,'g*',markersize=15,label='唯一最大值')plt.title('凹函数(山峰状)')plt.xlabel('x')plt.ylabel('y')plt.legend()plt.grid(True,alpha=0.3)plt.tight_layout()plt.show()

💡 为什么凸函数在AI中如此重要?

✅ 凸函数的优势

特性说明实际意义
唯一最小值只有一个谷底不会找错目标
保证收敛梯度下降一定能找到训练一定成功
无局部最优不会被困在小坑里找到的就是最优解

📊 常见的凸函数

  • 均方误差(MSE):(y_pred - y_true)²
  • L2正则化:
  • 线性回归的损失函数

⚠️ 非凸函数的挑战

想象一个多山的地形(非凸):

/\ /\ /\ / \ / \ / \ / \/ \ / \ / 小坑 \/ 真正的谷底
  • 神经网络的损失函数通常是非凸的
  • 可能有多个"小坑"(局部最优)
  • 容易被困在小坑里,找不到真正的谷底
  • 需要更聪明的优化策略(Adam、动量等)

关键洞察

  • 凸函数 = 简单模式(线性回归)= 容易优化
  • 非凸函数 = 复杂模式(神经网络)= 需要技巧

🎯 总结

核心概念

  • ✅ 链式法则 = 把中间步骤的导数相乘
  • ✅ 链式法则是反向传播的基础
  • ✅ 极值点:导数为0的点
  • ✅ 凸函数:只有一个最小值,保证收敛

链式法则是神经网络的数学基础!🔗✨

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