目录:
- 引言:为什么微积分在 AI 中不可或缺?
- 导数:函数变化的“速度表”
- 2.1 导数的定义和几何意义
- 2.2 常见函数的导数
- 2.3 导数计算法则:加法、减法、乘法、除法、链式法则
- 2.4 高阶导数
- 偏导数:多变量函数的“分头行动”
- 3.1 偏导数的定义
- 3.2 几何意义:函数在各个坐标轴方向上的变化率
- 3.3 高阶偏导数
- 梯度:函数上升最快的“方向盘”
- 4.1 梯度的定义
- 4.2 梯度与方向导数
- 4.3 梯度的性质
- 泰勒展开:函数的“近似放大镜”
- 5.1 泰勒公式
- 5.2 泰勒展开的应用:函数近似、优化
- 微积分在 AI 中的应用
- 6.1 梯度下降法:寻找函数的最小值
- 6.2 反向传播算法:训练神经网络
- 6.3 牛顿法、拟牛顿法:更快的优化算法
- 6.4 最大似然估计:参数估计
- Python 实战:使用 SymPy 进行符号计算
- 总结与下一步
- 挑战任务
大家好!欢迎来到“AI 高手之路”系列的第二篇。继线性代数之后,我们将继续探索 AI 的另一块数学基石——微积分。
1. 引言:为什么微积分在 AI 中不可或缺?
如果说线性代数是 AI 的骨骼,那么微积分就是 AI 的肌肉。如果把一个AI模型比作一辆汽车,线性代数构建车身,微积分则提供让汽车动起来的引擎。
为什么这么说呢?
AI 模型的核心任务之一,是从数据中学习规律。这个“学习”的过程,本质上是一个“优化”的过程:我们需要找到一组模型参数,使得模型能够最好地拟合数据,或者最小化预测误差。
而微积分,正是研究函数变化规律的数学工具。它提供了导数、梯度等概念,帮助我们找到函数的极值点(最大值或最小值)。在 AI 中,这意味着我们可以通过微积分来找到最优的模型参数。
2. 导数:函数变化的“速度表”
2.1 导数的定义和几何意义
-
定义: 对于一个一元函数 f(x)f(x)f(x),它在点 x0x_0x0 处的导数定义为:
f′(x0)=limh→0f(x0+h)−f(x0)h f'(x_0) = \lim_{h \to 0} \frac{f(x_0 + h) - f(x_0)}{h} f′(x0)=h→0limhf(x0+h)−f(x0)
如果这个极限存在,则称函数 f(x)f(x)f(x) 在 x0x_0x0 处可导,f′(x0)f'(x_0)f′(x0) 就是导数。
-
几何意义: 导数 f′(x0)f'(x0)f′(x0) 表示函数 f(x) 在 x0x_0x0 处的切线斜率。
从上图可以看出导数是函数f(x)在x0处附近变化情况的反应。
2.2 常见函数的导数
- 常数函数:f(x)=c,f′(x)=0f(x) = c, f'(x) = 0f(x)=c,f′(x)=0
- 幂函数:f(x)=xn,f′(x)=nx(n−1)f(x) = x^n, f'(x) = nx^(n-1)f(x)=xn,f′(x)=nx(n−1)
- 指数函数:f(x)=ax,f′(x)=ax∗ln(a)f(x) = a^x, f'(x) = a^x * ln(a)f(x)=ax,f′(x)=ax∗ln(a) (特例:f(x)=ex,f′(x)=exf(x) = e^x, f'(x) = e^xf(x)=ex,f′(x)=ex)
- 对数函数:f(x)=loga(x)f(x) = log_a(x)f(x)=loga(x), f′(x)=1/(x∗ln(a))f'(x) = 1 / (x * ln(a))f′(x)=1/(x∗ln(a)) (特例:f(x)=ln(x),f′(x)=1/xf(x) = ln(x), f'(x) = 1/xf(x)=ln(x),f′(x)=1/x)
- 三角函数:f(x)=sin(x),f′(x)=cos(x);f(x)=cos(x),f′(x)=−sin(x)f(x) = sin(x), f'(x) = cos(x); f(x) = cos(x), f'(x) = -sin(x)f(x)=sin(x),f′(x)=cos(x);f(x)=cos(x),f′(x)=−sin(x)
2.3 导数计算法则
- 加法/减法法则: (f(x)±g(x))′=f′(x)±g′(x)(f(x) ± g(x))' = f'(x) ± g'(x)(f(x)±g(x))′=f′(x)±g′(x)
- 乘法法则: (f(x)∗g(x))′=f′(x)g(x)+f(x)g′(x)(f(x) * g(x))' = f'(x)g(x) + f(x)g'(x)(f(x)∗g(x))′=f′(x)g(x)+f(x)g′(x)
- 除法法则:(f(x)/g(x))′=(f′(x)g(x)−f(x)g′(x))/(g(x))2(f(x) / g(x))' = (f'(x)g(x) - f(x)g'(x)) / (g(x))^2(f(x)/g(x))′=(f′(x)g(x)−f(x)g′(x))/(g(x))2
- 链式法则: 如果y=f(u)且u=g(x),则dy/dx=dy/du∗du/dx如果 y = f(u) 且 u = g(x),则 dy/dx = dy/du * du/dx如果y=f(u)且u=g(x),则dy/dx=dy/du∗du/dx
2.4 高阶导数
对导数再次求导,得到二阶导数 f′′(x)f''(x)f′′(x);对二阶导数再次求导,得到三阶导数 f′′′(x)f'''(x)f′′′(x),以此类推。
3. 偏导数:多变量函数的“分头行动”
3.1 偏导数的定义
对于一个多变量函数 f(x1,x2,...,xn)f(x_1, x_2, ..., x_n)f(x1,x2,...,xn),它对变量 xi 的偏导数定义为:
∂f/∂xi=lim(h−>0)[f(x1,...,xi+h,...)−f(x1,...,xi,...)]/h∂f/∂x_i = lim (h->0) [f(x_1, ..., x_i+h, ...) - f(x_1, ..., x_i, ...)] / h∂f/∂xi=lim(h−>0)[f(x1,...,xi+h,...)−f(x1,...,xi,...)]/h
即,在计算偏导数时,将其他变量视为常数,只对 xix_ixi 求导。
3.2 几何意义
偏导数 ∂f/∂xi∂f/∂xi∂f/∂xi 表示函数 f 在 xi 轴方向上的变化率。
3.3 高阶偏导数
对偏导数再次求偏导,得到高阶偏导数。例如:
- 二阶偏导数:∂2f/∂xi2∂²f/∂x_i²∂2f/∂xi2 (对 xix_ixi 求两次偏导), ∂2f/∂xi∂xj∂²f/∂xi∂xj∂2f/∂xi∂xj (先对 xix_ixi 求偏导,再对 xjx_jxj 求偏导)
- 混合偏导数:如果函数足够光滑,则混合偏导数的求导顺序可以交换,即 ∂2f/∂xi∂xj=∂2f/∂xj∂xi∂²f/∂x_i∂x_j = ∂²f/∂x_j∂x_i∂2f/∂xi∂xj=∂2f/∂xj∂xi
4. 梯度:函数上升最快的“方向盘”
4.1 梯度的定义
对于一个多变量函数 f(x1,x2,...,xn)f(x_1, x_2, ..., x_n)f(x1,x2,...,xn),它的梯度是一个向量,由所有偏导数组成:
∇f=[∂f/∂x1,∂f/∂x2,...,∂f/∂xn]∇f = [∂f/∂x_1, ∂f/∂x_2, ..., ∂f/∂x_n]∇f=[∂f/∂x1,∂f/∂x2,...,∂f/∂xn]
4.2 梯度与方向导数
- 方向导数: 函数 fff 在点 (x1,x2,...,xn)(x_1, x_2, ..., x_n)(x1,x2,...,xn) 处沿着方向 uuu (单位向量) 的变化率。
- 梯度的重要性: 梯度方向是函数值上升最快的方向,梯度的模是函数值上升的最大速率。
4.3 梯度的性质
- 梯度的方向与等高线(面)垂直。
- 梯度的模越大,函数值变化越快。
5. 泰勒展开:函数的“近似放大镜”
5.1 泰勒公式
泰勒公式可以将一个在点 x0 处具有 n 阶导数的函数 f(x) 展开成一个多项式:
$f(x)≈f(x0)+f′(x0)(x−x0)+(1/2!)f′′(x0)(x−x0)2+...+(1/n!)f(n)(x0)(x−x0)n+Rn(x)f(x) ≈ f(x0) + f'(x0)(x - x0) + (1/2!)f''(x0)(x - x0)^2 + ... + (1/n!)f^(n)(x0)(x - x0)^n + Rn(x)f(x)≈f(x0)+f′(x0)(x−x0)+(1/2!)f′′(x0)(x−x0)2+...+(1/n!)f(n)(x0)(x−x0)n+Rn(x)
其中 Rn(x)Rn(x)Rn(x) 是余项,表示近似误差。
5.2 泰勒展开的应用
- 函数近似: 当 xxx 接近 x0x_0x0 时,可以用泰勒多项式近似函数值。
- 优化: 泰勒展开可以用于推导优化算法,例如牛顿法。
6. 微积分在 AI 中的应用
6.1 梯度下降法:寻找函数的最小值
- 原理: 沿着梯度的负方向迭代更新参数,逐步逼近函数的最小值。
- 更新公式: x(t+1)=x(t)−α∇f(x(t))x(t+1) = x(t) - α∇f(x(t))x(t+1)=x(t)−α∇f(x(t)),其中 α 是学习率(步长)。
- 变种: 批量梯度下降 (BGD)、随机梯度下降 (SGD)、小批量梯度下降 (MBGD)、动量法、Adam 等。
6.2 反向传播算法:训练神经网络
- 原理: 利用链式法则,从输出层到输入层,逐层计算损失函数对每个参数的梯度,然后使用梯度下降法更新参数。
- 核心: 高效计算梯度。
6.3 牛顿法、拟牛顿法:更快的优化算法
- 牛顿法: 利用二阶导数(Hessian 矩阵)加速收敛。
- 拟牛顿法: 通过近似 Hessian 矩阵来避免计算二阶导数。
6.4 最大似然估计:参数估计
- 原理: 找到一组参数,使得观测数据出现的概率最大。
- 方法: 通常取对数似然函数,然后求导数或梯度,令其为 0,解方程得到参数估计值。
7. Python 实战:使用 SymPy 进行符号计算
SymPy 是 Python 的一个符号计算库,可以进行公式推导、求导、积分等。
import sympy as sp
# 定义符号变量
x, y = sp.symbols('x y')
# 定义函数
f = x**2 + sp.sin(y)
# 计算偏导数
df_dx = sp.diff(f, x) # 对x求偏导
df_dy = sp.diff(f, y) # 对y求偏导
print(f"∂f/∂x = {df_dx}") # 输出:∂f/∂x = 2*x
print(f"∂f/∂y = {df_dy}") # 输出:∂f/∂y = cos(y)
# 计算混合偏导数
df_dxdy = sp.diff(f, x, y)
print(f"∂²f/∂x∂y = {df_dxdy}") # 输出:∂²f/∂x∂y = 0
# 计算梯度
gradient = [sp.diff(f, var) for var in (x, y)]
print(f"∇f = [{gradient[0]}, {gradient[1]}]") # 输出:∇f = [2*x, cos(y)]
# 在x=0处进行泰勒展开
taylor = f.series(x, 0, 4).removeO()
print(f"泰勒展开(x=0):\n{taylor}")
代码解释:
这段代码演示了SymPy库求导数和偏导数。sp.symbols('x y')
定义了符号变量。sp.diff(f, x)
计算 f 关于 x 的导数。sp.diff(f, x, y)
计算f先关于x再关于y的偏导数。
8. 总结与下一步
在本篇博文中,我们学习了微积分的基础知识,包括导数、偏导数、梯度、泰勒展开等,并了解了它们在 AI 中的应用,特别是梯度下降法和反向传播算法。我们还使用 SymPy 进行了简单的符号计算。
掌握微积分是理解 AI 模型训练原理的关键。在接下来的挑战中,我们将学习概率统计、优化算法等更多 AI 相关的数学知识,并逐步深入机器学习和深度学习的核心算法。
9. 挑战任务
- 复习: 回顾本篇博文中的所有概念。
- 推导:
- 手动推导常见函数的导数。
- 推导链式法则。
- 推导梯度下降法的更新公式。
- 计算:
- 计算一些复杂函数的导数和偏导数。
- 计算一些函数在给定点的梯度。
- 手动计算一个简单函数的泰勒展开。
- SymPy 练习:
- 使用 SymPy 计算更复杂的导数、偏导数、梯度和泰勒展开。
- 尝试使用 SymPy 求解方程。
- 思考题:
- 梯度下降法有哪些局限性?如何改进?
- 反向传播算法是如何工作的?
- 牛顿法和梯度下降法有什么区别?
- 最大似然估计和最小二乘法有什么关系?
- 阅读材料: 阅读《Calculus》by James Stewart 的 differentiation rules 章节.
希望这篇博文能帮助你更好地掌握微积分基础!如果你有任何问题或建议,请随时在评论区留言。让我们继续 AI 学习之旅!