设计机器学习应用系统设计机器学习应用系统
首页
讨论区
首页
讨论区
  • 目录
  • 前言

    • 关于作者
    • 关于本文档
  • 机器学习数学基础

    • 线性代数

      • 引言:机器学习的语言
      • 向量基础
      • 矩阵基础
      • 数据处理实践
    • 微积分

      • 引言:变化与累积
      • 极限、导数与微分
      • 多元函数与复合函数求导
      • 微积分计算实践
    • 统计与概率

      • 引言:概率性思维
      • 概率基础
      • 统计推断
      • 概率统计实践
  • 经典统计学习方法

    • 线性模型

      • 线性回归
      • 逻辑回归
      • 正则化与广义线性模型
    • 贝叶斯方法

      • 朴素贝叶斯
      • 贝叶斯网络
      • EM 算法
    • 支持向量机

      • 支持向量机
      • 核技巧
    • 决策树与集成

      • 决策树
      • 随机森林
      • 提升方法
    • 无监督学习

      • 聚类
      • 降维
  • 神经网络与深度学习

    • 神经网络结构

      • 神经网络基础原理
      • 线性感知机
      • 多层感知机
      • 前向传播
      • 反向传播
      • 激活函数与损失函数
    • 优化神经网络

      • 梯度下降
      • 自适应优化器
    • 深层网络稳定性

      • 权重初始化
      • Dropout 正则化
      • 批归一化
    • 卷积神经网络

      • CNN 基础原理
      • AlexNet 与 CNN 复兴
      • VGG 与 GoogLeNet
      • ResNet 残差网络
      • 工程实训:AlexNet 图像分类实验
    • 生成式模型

      • 变分自编码器
      • 生成式对抗网络
      • 工程实训:DCGAN 图像生成实验
    • 序列模型

      • 词嵌入与表示学习
      • RNN 基础原理
      • LSTM 与 GRU 门控机制
      • Seq2Seq 序列映射
      • 工程实训:LSTM 古诗词生成实验
  • 语言模型的奇点

    • Transformer 架构

      • Transformer 基础原理
      • Transformer 演进与变体
      • 语言模型与分词
      • 工程实训:Transformer 模型训练实验
    • 预训练与微调

      • 预训练数据工程
      • 缩放定律
    • 对齐训练

    • 推理能力

    • 前沿与融合

  • AI Infra & 应用(名字待定)

  • 机器学习经典论文

  • 附录

    • 构建沙箱环境
    • 临时格式测试页面

引言:变化与累积

如果说线性代数是机器学习的"数据语言",它告诉计算机如何表示和组织数据,那么微积分(Calculus)就是机器学习的"优化行为",它告诉计算机如何从数据中学习和改进。从深度学习的梯度下降到物理引擎的运动模拟,微积分在现代计算技术中无处不在,是连接传统软件开发与人工智能领域的关键桥梁。

本系列文章面向传统软件开发人员,系统介绍机器学习所需的微积分知识,从极限、导数、微分到梯度、链式法则,再到 NumPy 实践和机器学习应用场景。

从实践问题到数学理论

微积分的诞生是数学史上最激动人心的篇章之一。17 世纪,科学革命的浪潮席卷欧洲,物理学、天文学的发展提出了大量关于"运动"和"变化"的问题:行星如何绕太阳运动?炮弹的轨迹是什么曲线?变速运动的物体在某一时刻的速度如何定义?这些问题困扰着当时最杰出的科学家,因为传统的数学工具只能处理"静态"的量,无法精确描述"动态"的变化。

1660 年代,英国科学家牛顿(Isaac Newton)在研究物体运动和行星轨道时,发展出了一套称为"流数术"(Method of Fluxions)的数学方法。他用这个方法成功地计算出了变速运动的瞬时速度、曲线的切线斜率,以及行星轨道的曲率。几乎与此同时,德国数学家莱布尼茨(Gottfried Leibniz)也在研究曲线的切线和面积问题时,独立发展出了一套类似的符号系统和方法。

牛顿和莱布尼茨的核心贡献在于:他们首次将看似不相关的两类问题 —— 求切线(微分问题)和求面积(积分问题)统一在一个框架之下,并发现了两者之间的互逆关系。这就是著名的"微积分基本定理"(Fundamental Theorem of Calculus)。这一定理揭示了微分和积分是一对互逆运算,就像乘法和除法、指数和对数的关系一样。

虽然微积分在诞生后迅速被应用于物理、天文、工程等领域,取得了巨大的成功,但它的理论基础却长期存在漏洞。牛顿和莱布尼茨的论述中充满了"无穷小量"(Infinitesimal)的概念,一个既不为零、又接近于零的"量"。这个概念在逻辑上是自相矛盾的:如果它不为零,就可以继续分割;如果它为零,就不能作为分母。这种模糊性引来了严厉的批评。1734 年的《分析学家》讽刺道,这些推理"既不是正确的数学,也不是可靠的逻辑"。

微积分的严格化经历了近两百年的努力。19 世纪初,法国数学家柯西(Augustin-Louis Cauchy)给出了极限的严格定义,将微积分建立在极限的概念之上,而非含糊不清的"无穷小量"。19 世纪末,德国数学家卡尔·魏尔斯特拉斯(Karl Weierstrass)进一步用 ε−δ\varepsilon-\deltaε−δ 语言严格化了极限的定义,最终将微积分建立在坚实的逻辑基础之上。有趣的是,20 世纪 60 年代,美国数学家亚伯拉罕·罗宾逊(Abraham Robinson)通过非标准分析(Non-standard Analysis)重新赋予了"无穷小量"严格的数学意义,但这已经是另一个故事了。

从离散到连续

对于习惯了面向对象编程、设计模式、微服务架构的软件开发人员来说,微积分似乎是一门有些"格格不入"的抽象学问。毕竟,在大多数软件开发工作中,我们更习惯离散的思维方式,数据是离散的(整数、字符串、布尔值),操作是离散的(赋值、条件判断、循环),状态空间是离散的(有限或可数无限的状态集合)。这反映了计算机的本质 —— 图灵机(Turing Machine)是一个离散的状态机,数字计算机用有限的比特来表示一切。然而,当软件开发进入机器学习和人工智能的领域,情况就完全不同了,机器学习的核心问题是优化,是从海量数据中找到最优的模型参数。这个问题本质上是连续的:参数空间是连续的(实数域),损失函数是连续函数,优化过程是在连续空间中寻找极值。这时候,开发机器学习的代码就需要微积分的语言来描述和求解。

微积分的核心思想是变化率。导数刻画了一个量随另一个量变化的敏感程度,当输入发生微小变化时,输出会发生多大的变化?这个概念在机器学习中无处不在:

  • 损失函数对参数的导数告诉我们:如果参数稍微增大一点,损失会增大还是减小?变化多少?这指导我们如何调整参数。
  • 激活函数的导数决定了反向传播中梯度的流动方式,影响着网络的训练效果。
  • 学习率本质上是一个步长参数,它控制着每次参数更新的幅度,太大可能越过最优点,太小则收敛太慢。

理解这些概念,不仅有助于我们正确使用机器学习框架(如 PyTorch、TensorFlow),更能帮助我们诊断训练中的问题、设计更好的模型架构、选择合适的优化策略。

传统计算机科学中的微积分

在进入机器学习之前,让我们先看看微积分在传统计算机科学中的应用。这些应用虽然不直接涉及机器学习,但展示了微积分作为"变化与累积的语言"的普遍价值。

  • 物理引擎与仿真

    计算机图形学和游戏开发中,物理引擎是不可或缺的组件。无论是《愤怒的小鸟》中抛物线轨迹的计算,还是《GTA》中车辆碰撞的模拟,都需要求解运动方程。牛顿运动定律告诉我们,物体的加速度等于作用力除以质量(a=F/ma = F/ma=F/m),而速度是加速度的积分(v=∫a dtv = \int a \, dtv=∫adt),位置是速度的积分(x=∫v dtx = \int v \, dtx=∫vdt)。这就是微积分在物理仿真中的应用。

    在实时物理引擎中,我们无法精确计算这些积分,只能使用数值方法来近似。欧拉方法(Euler Method)、龙格 - 库塔方法(Runge-Kutta Methods)等数值积分算法,本质上都是用离散的"小步长"来近似连续的"无穷小变化"。理解这些方法的原理和误差特性,需要微积分的知识。

  • 数值优化

    数值优化问题在计算机科学中随处可见:如何找到最短路径?如何分配资源以最大化收益?如何调度任务以最小化等待时间?许多优化问题可以用连续的数学模型来描述,然后用微积分的方法来求解。

    譬如,在机器学习兴起之前,搜索引擎的网页排名算法(如 Google 的 PageRank)就涉及求解大型线性方程组和特征值问题,这些都需要数值方法,而数值方法的分析离不开微积分。又如,在机器学习中广泛使用的支持向量机(SVM),其训练过程涉及求解一个凸优化问题,这同样需要微积分的理论支撑。

  • 信号处理与数据压缩

    音频、图像、视频的数字化处理,本质上是对连续信号的采样、变换和压缩。傅里叶变换(Fourier Transform)将信号从时域变换到频域,这个过程涉及积分运算。虽然实际应用中我们使用离散傅里叶变换(DFT)及其快速算法(FFT),但理解其原理需要连续域的傅里叶分析 —— 这正是微积分的领域。

    数据压缩中的有损压缩(如 JPEG 图像压缩、MP3 音频压缩)往往基于这样的观察:信号的大部分"能量"集中在少数几个"频率"上,而其他频率的分量可以丢弃而不影响感知质量。这种"频率"的概念,正是由傅里叶分析建立的。

机器学习的数学核心:优化问题

现在,让我们进入机器学习的核心领域,看看微积分如何成为理解和实现机器学习算法的关键。如果你此前完全没有接触过机器学习,下面内容不妨先当科普来看看,混个脸熟,等我们构筑好前置的数学基础后,会花一整章篇幅来展开讲解这些知识。

机器学习的基本范式可以概括为"从数据中学习一个函数"。给定一组训练数据(输入 - 输出对),我们希望找到一个函数 fff,使得 fff 能够正确地将新的输入映射到正确的输出。这个函数 fff 通常由一组参数 θ\thetaθ 决定,我们的目标就是找到最优的参数 θ∗\theta^*θ∗。如何定义"最优"?我们需要一个损失函数 L(θ)L(\theta)L(θ) 来衡量当前参数的好坏。损失函数越小,说明模型的预测越准确。于是,机器学习的训练过程就转化为一个优化问题:

θ∗=arg⁡min⁡θL(θ)\theta^* = \arg\min_{\theta} L(\theta)θ∗=argθmin​L(θ)

这个优化问题的求解,正是微积分大显身手的地方。最经典的优化算法是梯度下降(Gradient Descent)。梯度是多元函数的导数概念的推广,它是一个向量,指向函数值增长最快的方向。相应地,梯度的反方向就是函数值下降最快的方向。梯度下降算法的核心思想非常直观:从某个初始点出发,计算当前位置的梯度,然后沿着梯度的反方向走一小步,到达新的位置后重复这个过程,直到收敛到局部极小值点,此时无论向哪个方向移动,函数值都会增大。用数学语言描述:设当前参数为 θt\theta_tθt​,损失函数为 L(θ)L(\theta)L(θ),则参数更新规则为:

θt+1=θt−η∇L(θt)\theta_{t+1} = \theta_t - \eta \nabla L(\theta_t)θt+1​=θt​−η∇L(θt​)

其中 ∇L(θt)\nabla L(\theta_t)∇L(θt​) 是损失函数在 θt\theta_tθt​ 处的梯度,η\etaη 是学习率(Learning Rate),控制每一步的步长。这个简单的算法,及其各种变体(随机梯度下降、动量法、Adam 等),是所有深度学习训练过程的共通思想。理解它,需要先理解导数(梯度)、链式法则(反向传播)等微积分核心概念。

学习路线图

本章作为引言,简要介绍了微积分在机器学习中的地位和应用场景。接下来的章节,我们将系统地学习微积分的核心概念,并通过 Python 实践加深理解。

  • 第 2 章:极限、导数与微分将深入讲解极限的定义、导数的概念与几何意义、常见函数的导数公式、微分与线性近似、高阶导数等内容,建立单变量微积分的理论基础。
  • 第 3 章:多元函数与复合函数求导将把导数概念推广到多元函数,介绍偏导数、梯度、链式法则、方向导数等核心概念以及积分的基础知识,为理解机器学习优化算法奠定基础。
  • 第 4 章:微积分计算实践将使用程序代码实现数值微分、梯度计算和数值积分,并介绍 PyTorch 自动微分的使用方法,通过代码加深对概念的理解。

让我们开始这段旅程,掌握机器学习的优化语言 —— 微积分。

文章字数:3,562
更新于 2026-05-15
Star
Last Updated:
Contributors: icyfenix, Claude Opus 4.7, Claude Opus 4.6
Prev
数据处理实践
Next
极限、导数与微分