AI数学入门:微积分从导数到优化
阅读提示:本文面向几乎没有数学基础的读者。你无需提前掌握任何公式,只要保持好奇心与耐心就可以跟上。
文章主旨是这一点:把抽象概念放进日常场景来理解,用直觉引导你,而不是靠死记公式。
⚠️进阶提醒:文中凡是带 📌 的内容,属于想进一步深挖的补充说明。首次阅读可以直接略过,不会影响你对主线的把握。
在谈多变量之前,我们先把“一元情况”彻底搞明白。它就是微积分的起点。
你开车从 A 到 B,全程 300 公里,用时 3 小时。此时你的平均速度为:
这就是平均变化率:把总变化量除以总时间。不过它也有缺陷——它把中间发生的细节全部抹平了。比如前两小时你可能跑了 200 公里,第三小时只跑了 100 公里;又或者第三小时遇到堵车,速度降到 20 公里/小时。
生活类比:平均变化率就像问别人“这辈子平均有多幸福”。对方说“还行”,但你从这数字里看不出他昨天是中大奖还是丢了钱包。
我们真正关心的是某个精确瞬间的状态,比如下午 2 点 15 分 32 秒时车速到底是多少。
为了解决这种“抓刹那”的问题,数学家提出思路:把观察的时间间隔不断缩短,去观察速度会向哪个值靠近。
设你的路程可以用函数来表示,表示到某个时刻走过的距离。我们希望求瞬时速度:
如果这个极限能成立,就得到瞬时变化率,也就是导数:
生活比喻:把你正在看的电影当成 24 帧/秒。每一帧本身是静止的;但当你把“帧率”不断拉高到极限,画面就会变得连贯。导数就是在无限细的时间分辨率下,捕捉那一瞬间的变化。
再看几何直觉:把函数曲线不断放大到局部,只要足够小,任何足够光滑的曲线都会“看起来像直线”。导数正是这条局部直线的斜率。
生活比喻:你站在山坡上,脚下只有极小一片区域时,它看上去像平地。可这片“平”的其实并非完全水平,它的倾斜程度(坡度)就是导数。站的位置不同,坡度也不同,因此导数会随位置变化。
如果函数是,在点处的导数通常记作:
两种记号的差别:
经典例子:(绝对值函数)在处会出现尖角。在处左侧逼近 0 时,坡度是 -1;右侧逼近 0 时,坡度是 +1。左右斜率不一致,所以在 0 点并不存在导数。
📌 虽然在处严格意义上不能定义导数,但在工程与优化里,我们可以使用次梯度(subgradient):只要选择的取值落在之间,就能刻画这个“尖角”位置附近的局部变化趋势。它也为后面第7节对 ReLU 激活函数的讨论做了铺垫。
📌 这个“不可微的尖角”概念非常关键,后面讲 ReLU 时还会反复遇到。
不必机械背诵,先理解“为什么”:
1. 常数的导数是 0
直觉:平直的路面没有坡度。
2. 幂函数的导数
直觉:幂次越高增长越快,所以它的“坡度”不只取决于位置,还取决于幂次。幂越大,变化往往越剧烈。
3. 加法法则
直觉:两个坡叠加后,总坡度就是各自坡度的和。
4. 乘法法则
直觉:当两个都在变化的量相乘时,不只是“一个变一个不变”。相互作用会带来额外的交叉贡献——既在变,也在一起变。
5. 链式法则(一元版本)
直觉:如果最终的变量是通过 的中间变量间接依赖于,那么对的影响可以看成“两段影响”的乘积。就像传话游戏:第一个人对最后一个人的影响等于每一轮传递因子的连乘。
📌 链式法则几乎是深度学习的数学地基。神经网络本质上是把一层层函数复合起来,如果没有链式法则,就无法理解反向传播。
现实的机器学习往往要同时面对多个因素。比如你想预测房价,输入可能包括面积、卧室数、地段评分……如果要回答“面积每增加 1 单位,房价大概会涨多少”,就得先把其他变量暂时固定住,这就是偏导数背后的思想。
生活比喻:你煮咖啡时想研究研磨粗细如何影响苦味,那就要在比较时固定水温和冲泡时间,只改变研磨度。你品到的那点苦味细微变化,就是“苦味对研磨度”的偏导数。
若函数是,那么对的偏导数记作:
它的定义思路与普通导数类似,只不过把当作常数处理:
📌 这里更多是符号上的提醒:它表示这是多变量函数的求导方式,但计算逻辑与一元导数并没有本质差异。
几何理解:把二元函数想成一座山。偏导数就是沿着某个坐标轴方向切一刀,看切面曲线的斜率。比如只朝东走时对应的坡度。
📌 重要提醒:偏导数存在并不等于函数在该点连续或可微。反例十分典型:
这个函数在原点的两个偏导数都存在(都等于 0),但函数本身甚至不连续。这说明:偏导存在只是“可微的必要条件”,不是“充分条件”。
如果你在山上想知道往哪个方向走能让高度增长得最快,只看单独某个方向的坡度是不够的。你需要一种能把所有方向信息打包的量——它就是梯度。
梯度把各个偏导数组织成一个向量:
对于有个输入的函数,梯度就是一个维向量。它通常有两个特别重要的性质:
生活比喻:你在露天剧场里寻找最快到达舞台的路。周围到处都有坡度,而梯度就像口袋里突然出现的指南针,总是指向最陡的下坡(或上坡)方向。机器学习里的梯度下降,就是每次沿着负梯度的方向走一步,让模型逐渐“滚向”最低点。
📌 严格前提:梯度指向最陡方向,这依赖于函数在该点可微。如果函数有尖角(例如某些损失曲面),梯度可能不存在,这时就用次梯度(subgradient)的框架来处理。
若损失函数是,是多个参数构成的向量,则梯度下降的更新规则为:
其中是步长(也就是学习率)。这就是模型学习过程的核心驱动。
📌 在真实深度学习里,几乎不会用全部数据每次都算一次梯度,而是用一小批数据(Mini-batch)。因此我们常见的优化方式是 SGD(随机梯度下降)。要是每次都用完整的大数据集计算一次梯度,效率会慢到几乎无法接受。
📌 更严格地说,传统教材中 SGD 通常指每次只用一个样本估计梯度,Mini-batch 是它的推广。但在现代深度学习实践中,这两个叫法常被混用:大家口头说的 SGD 往往默认“小批量随机梯度下降”。原因是 GPU 并行计算的优势使得真正的单样本训练效率极低。
📌 梯度更像“局部视角”的眼镜。它只描述当前位置附近最陡的方向,但损失函数的地形可能崎岖且非凸。在深度学习里,损失曲面常见的形态可能包括:
📌 特别值得注意的是:在高维空间中(比如神经网络参数空间可能有上百万到上亿维),真正严格的局部极小值往往非常罕见。可以想象,要在所有方向上都“朝上凸”才算极小,这样的概率很低。更常见的是鞍点——Hessian 矩阵(二阶导数矩阵)的特征值可能既有正也有负,意味着某些方向上是上坡,另一些方向上是下坡。随机梯度下降带来的噪声,反而能帮助算法“从鞍点处绕开”,继续朝更优解前进。这也是深度学习理论看起来困难、实践却能训练成功的原因之一。
生活比喻:梯度就像你在浓雾中爬山,只能看清脚下 5 米范围内的坡度。你顺着最陡方向走,也许会掉进一个小土坑(局部最优),但不一定是真正的山谷(全局最优)。像 Adam、Momentum 这样的现代优化器,就像给这个“近视的人”配了惯性眼镜和自适应步幅,帮助它冲出小土坑。
📌 学习率设置太大或太小都不合适:
在进一步讨论优化之前,我们需要区分两类截然不同的“地形”。
如果一个函数是凸函数,那么任意两点之间的连线都落在函数图像的上方。形式上,对任意 和:
生活比喻:凸函数就像一个光滑的碗。你从碗的任意边缘滚下去,最后都会掉到碗底,而且只有一个碗底——那就是全局最小值。
凸函数还有一个非常漂亮的性质:局部最小值就等于全局最小值。这意味着在合适的步长条件下,梯度下降不会被困住在“小土坑”里。只要沿着负梯度走,你就能找到最好的解。
线性回归、逻辑回归(损失函数)、支持向量机(SVM)的损失函数都属于凸的类别。因此这些经典算法在理论上优雅,优化时也更可靠。
📌 严格凸的补充:上面不等式用于普通凸函数(convex),等号允许成立,因此函数可能在一段“平坦的谷底”上拥有无数个最小值(例如当对所有 都成立)。若在机器学习中希望损失的全局最小值是唯一的,就需要它严格凸——即只有在 时等号才成立。不过就算只是不严格的凸函数,“局部最小即全局最小”依然成立,只是最优点可能不止一个。
📌 既然逻辑回归的损失函数本身已经是凸的,为什么还要用神经网络?因为凸函数虽然更容易优化,但表达能力有限。逻辑回归只能学到线性决策边界;而神经网络通过多层非线性变换,能逼近任意复杂的函数。代价是:损失往往变成非凸,优化难度随之上升。
神经网络的损失函数几乎从不保持凸性。原因很简单:即便你只考虑单层网络,且激活函数选择凸且(如 ReLU),当你把损失函数写成“对参数的函数”时,激活与损失的组合通常就会破坏凸性。一旦堆叠多层,参数与激活输出之间的乘积耦合(如),再加上海量参数的共同作用,凸性会被进一步破坏,把“碗”扭成了极其复杂的“山地”。
生活比喻:非凸函数像真实的山脉——有无数小山谷、悬崖、高原甚至迷宫般的地形。你站在某个山谷底部,以为自己已经到达最低处,但翻过旁边的一座小山,远处可能还有更深的盆地。
📌 非凸性是现代深度学习优化的核心难题,它也解释了为什么:
📌 好消息是:虽然深度学习损失函数在理论上非凸,但在实际训练中,大规模网络的损失曲面往往表现出某种“良性结构”。例如高维空间里的鞍点比局部极小更常见,而随机梯度下降的噪声又能帮助算法从鞍点附近“脱困”。因此,尽管理论上难,实践仍能成功训练。这也是深度学习能落地的关键原因之一。
微积分的另一条主线是:用较简单的函数去逼近复杂函数。泰勒展开正是这一思想的集中体现。
假设你站在山坡上某个点,想知道往前走一点后,高度会变化多少。如果只根据脚下的坡度来判断,最自然的近似就是:
这就是一阶泰勒展开:用切线(一阶函数)去替代原曲线,只在局部做近似。
生活比喻:你站在弯弯的山路上,想估计前方 10 米的高度。一阶泰勒展开就是“只看脚下坡度,然后假设接下来那段路是直线继续延伸”。步长足够小的时候,这种近似通常相当可靠。
📌 严格说法:对零基础读者而言,上面的近似已经足够直观。如果想写得更精确,完整泰勒展开会多出一个误差项:。其中表示“比 更快趋近于零”的量。只要这个量足够小,就可以忽略它。
梯度下降就正是利用这种局部近似:为了让函数值尽量小,我们选择,于是:
只要足够小且,函数值就能下降。
对多变量函数来说,一阶泰勒展开形式类似,会变成:
梯度下降对应的选择是,于是:
在足够小且梯度不为零的情况下,函数值就会继续下降。
一阶近似只用到了坡度信息,却没有反映“路是直还是弯”。二阶泰勒展开进一步引入二阶导数(也可理解为曲率):
生活比喻:一阶近似像用直尺测路程,二阶近似则像用弯曲的尺子再量一次。如果路是下凸的(,开口向上像碗),弯尺就能告诉你:直尺估计可能偏乐观,实际走起来会更陡。
📌 多变量情形下,二阶导数会推广为 Hessian 矩阵,它把所有两两偏导数的信息都记录下来。梯度下降只用一阶信息,而牛顿法等二阶方法借助 Hessian,可以“看穿”曲率并迈出更准确的步子。但 Hessian 的计算与存储开销很大,所以深度学习中通常仍以一阶方法为主。
📌 平坦极小值 vs 尖锐极小值:如果 Hessian 的特征值整体都很小,这种极小值常被称作“平坦极小值”,模型的泛化通常更好;相反,特征值很大对应“尖锐极小值”,泛化往往较差。因此“找到最低点”不如“找到平坦的低点”。
📌 更精确地说,“平坦”是多维概念。Hessian 矩阵的谱分布(所有特征值的分布)决定极小值整体的形状:若大部分特征值都很小,即使个别方向曲率较大,整体也可能是平坦的;反之,若特征值普遍偏大,极小值就更尖锐。实际判断时,我们常用 Hessian 的迹(特征值之和)或最大特征值来做粗略估计。
很多时候,函数不是单层结构,而是“一层套一层”。例如气温随海拔变化,而海拔又随位置变化。想得到气温如何随位置变化,就需要把两段影响“乘起来”。
一元链式法则:
如果通过 等个中间变量把 与 联系起来,多变量链式法则会把每条路径的效应叠加:
生活比喻:你想知道加班()对幸福指数()的总影响。加班会带来疲劳(),同时也会增加收入()。疲劳会拉低幸福,收入会提高幸福。总效应 = 疲劳路径带来的影响 + 收入路径带来的影响。每条路径实际上都是“上游变量对下游变量的偏导数”的连乘。
这也解释了为什么深度神经网络不管多深,都能把误差从输出层一路传回到输入层:因为它本质上是由无数个微小变化按链式法则串成的复合函数。
📌 反向传播的本质可以理解为一串向量的 Jocabian 乘积(VJP)。若网络很深(比如 100 层),而很多层的局部梯度又略小于 1,那么连乘之后梯度会指数级衰减到接近 0(梯度消失),前面的参数几乎学不到东西;反过来若多数层略大于 1,梯度就会指数级爆炸(梯度爆炸)。
生活比喻:链式法则像传话筒游戏。100 个人排成一队,第 100 个人要把消息反向传给第 1 个人。若每个人都“稍微扭曲一点点”,传到第一个人时就会完全变形;若每个人都“夸大一点点”,传到第一个人时就可能变成离谱的谣言爆炸。
📌 现代架构(ResNet、LSTM、LayerNorm 等)本质上都在应对这个问题。比如 ResNet 里采用了 的结构,使反向传播时梯度出现一条“高速公路”,让梯度更容易回传,从而缓解深层连乘带来的问题。但要注意:残差连接提供的是梯度通路的捷径,内部仍然存在权重矩阵的连乘。让深层网络真正可训练的是“残差连接 + 合理初始化 + 批归一化”等因素共同作用,不能简单归功于某一个点。
神经网络可以看作一个很长的复合函数:
训练过程中,需要计算损失对每一层权重与偏置的梯度,然后用它们更新参数。
如果从输入端开始正向推导(正向模式),计算复杂度会随着输入维度线性增长。而神经网络中参数规模可能达到百万乃至千万,但损失却只有一个标量。反向传播(反向模式)的关键在于:从输出端开始,把已算好的梯度进行记录并复用,逐层往回传。反向模式的复杂度与输出维度成正比。对神经网络而言输出维度是 1,因此只需一次反向传播就能同时得到全部参数梯度,效率比正向模式高得多。
想象一个最简场景:我们要计算对 的偏导数。
这一步完全依赖链式法则。每个节点的梯度都等于:该节点输出相对于输入的局部偏导数,与从损失端传回来的累积梯度相乘并汇总。
在真实网络中,反向传播就是把这一原则系统化:通过一次正向计算与一次反向计算,让所有参数的梯度都被同时求出。得到梯度后,梯度下降再根据这些梯度给每个参数“指路”,让损失逐步下降。
📌 很多人担心反向传播,其实它的核心并不复杂:把损失当成“责任”,再按链式法则把责任分配回每一个神经元连接。谁贡献大,谁就被调整得更多。
📌 神经网络里常用的 ReLU 激活函数在 处从严格数学角度属于不可微(图像有尖角)。若按纯粹数学处理,这里偏导确实不存在。但在工程实现中,我们会直接给该点导数指定为 0 或 1(也就是次梯度),于是训练依然能够顺利进行。这也说明深度学习即使在“不严格光滑”的函数上也能取得成功——呼应了前面讨论的“尖角不可微”概念。
📌 Dead ReLU 问题:如果某个 ReLU 神经元的输入长期保持为负,它的输出一直是 0,梯度也永远为 0。结果是这个神经元在训练中“死亡”,之后几乎无法再更新。因此实践中常用 Leaky ReLU(负数处保留一点斜率)、PReLU 或 GELU 等改进激活函数——相当于给神经元安装了“生命维持系统”,让负输入仍保有少量梯度。
前面我们讨论的导数多是“标量对标量”。但神经网络中,损失是标量,而参数通常是矩阵(甚至更高维的张量)。因此求导需要推广到向量与矩阵。
假设有一个向量值函数,输入是 维向量,输出是 维向量。那么它的导数不再只是一个数,而是一个 的 Jacobian 矩阵:
矩阵的每个元素都表示:输出第 个分量相对于输入第 个分量的敏感度。
生活比喻:Jacobian 矩阵像一张“影响关系表”。比如公司有一个部门(输入),有一个产品(输出),每个表格元素记录“这个部门预算增加 1 元,产品利润会变化多少”。反向传播本质上就在这张表上做向量-Jacobian 乘积(VJP)。它不需要显式计算完整 Jacobian,而是把上游传回的梯度向量与局部 Jacobian 相乘,从而高效地把梯度继续往回传。对参数动辄百万级的神经网络而言,这种“按需计算”的方式非常关键。
📌 维度追踪法:一个极实用的调试技巧。在 PyTorch/TensorFlow 中,梯度张量的形状通常会与参数张量的形状完全一致。如果你发现维度对不上,基本就能定位到某处实现或计算写错了。
这是深度学习里最常见、也最容易理解的一类组合:把“复杂导数”带来的麻烦压缩成“惊人的简化”。
Softmax 函数能把任意实数向量转换为概率分布:
交叉熵损失度量预测概率与真实标签之间的差距(假设真实标签为第类,即 one-hot 向量):
单独分析 Softmax 的导数,公式就已经很复杂。但当把 Softmax 与交叉熵放在一起求导时,会出现一个简洁的结果:
其中是真实标签(第 类为 1,其余为 0)。
生活比喻:这就像一个机械装置,拆开看每个齿轮的传动关系都让人眼花缭乱;但当你把它重新组装起来,输出端指针的转动规律反而异常简单——只取决于“预测概率与真实标签之间的差距”。
这个简洁结论意味着:当模型对正确类别的预测概率本来就很高(),梯度会接近 0,几乎不用更新;若预测错了,梯度就会很大,模型会被迫进行大幅修正。这也是神经网络训练得以顺利进行的重要原因之一。
前面我们花了很多篇幅讲“微分”,也就是研究函数在某一点的瞬时变化。但微积分的另一半是“积分”:研究如何把局部变化累积成整体结果。
想象你要计算不规则形状的面积。你可以把它切成很多细长的竖条,每条竖条的面积近似等于“宽度乘高度”,然后把所有竖条的面积加起来。只要竖条切得越来越细,求和就会转化为积分:
生活比喻:积分就像记录一天的步数。每一步都只有几十厘米(局部),但积分把这些步数累加起来,最终告诉你今天总共走了多少公里。
在人工智能中,积分随处可见,特别是在概率与统计领域:
1. 概率与期望
连续型随机变量落在某个区间内的概率,就是密度函数在该区间的积分:
随机变量的期望(平均值)同样可以写成积分:
生活比喻:概率密度就像河流在不同位置的流速分布。积分就是计算“某段河道总共流过了多少水量”。
📌 变分推断(VAE)与策略梯度(强化学习)的关键都在于估计期望。当积分无法解析计算时,我们通过采样来近似,比如蒙特卡洛方法。
2. 归一化常数
很多概率模型都要求总概率为 1,这通常就需要计算归一化常数:
对于复杂的高维分布(例如能量模型、玻尔兹曼机),这个积分往往无法精确算出,是机器学习中的经典难题之一。因此衍生出 MCMC 采样、重要性采样、归一化流等方法。
3. 微分熵
信息论里的熵推广到连续分布后同样用积分来表示:
它衡量的是连续分布的不确定性。在变分自编码器(VAE)中,你既要最小化重构损失,也要让隐变量分布尽量贴近标准正态分布,这就会涉及微分熵的计算。
4. 微积分基本定理
微分与积分互为逆运算:
直觉:你先把变化累积起来(积分),再把累积结果求瞬时变化率(微分),最终就会回到原来的变化率本身。
这个定理揭示了微分与积分的互逆关系。但在深度学习中,我们讨论的是自动微分,它解决的是导数问题,而不是积分问题。自动微分的关键利用的是链式法则的“逆向传播”:把正向计算拆成一张由基础操作组成的计算图,然后从输出端反向传递梯度,自动、准确地得到每个参数的偏导数,不必手工推导复杂公式。
你可能会问:为什么不直接给电脑函数求导公式来算?那是符号微分,往往会生成非常巨大的表达式,计算效率很低;而数值微分靠近似又会慢且不够精确。
自动微分的思路不同:它并不是推导出整个函数的解析公式,而是把计算拆成最基本的加减乘除以及指数、对数等操作,形成计算图;接着再利用链式法则在这张图上传递梯度。这样既精确又高效,正是现代深度学习框架(PyTorch、TensorFlow 等)的基础。
自动微分通常有两种模式:
在实现层面,当你定义运算时框架会悄悄构建计算图,并让每个张量记录“它由什么操作生成”。当你调用 backward() 时,就从最后的标量开始,沿着计算图一路把累计梯度乘回去,直到到达每个叶子节点。
📌 实战小技巧:在 PyTorch 中,torch.no_grad() 或 tensor.detach() 用来告诉框架“这部分不需要计算梯度”。例如模型推理(只预测不训练)、冻结已训练好的模型某些层、或把张量从计算图中剥离出来当普通数值使用时,都常会用到它,从而节省内存和计算量。
一句话总结:自动微分让你不用手动推导任意复杂函数的梯度,只要写出正向计算,系统就能自动算出各个输入对输出的敏感程度。深度学习训练之所以“更省力”,正是因为这把精准的“梯度手术刀”。
📌 这是一个进阶技巧,在强化学习与变分推断中尤其常用。
假设你想求一个概率分布对参数的梯度,但这个期望不能直接求导(因为它来自对样本的采样,而采样过程本身不可微)。于是我们使用对数导数技巧把问题改写:
直觉:,所以。我们不再对采样过程求导,而是对概率的“对数”求导——而对数形式通常拥有更简洁的解析表达。
生活比喻:你想知道调整抽奖规则()会如何影响平均奖金(期望)。但奖金来自抽出来的结果,抽奖过程没有导数。对数导数技巧就像转而研究“每种奖品的对数概率如何随规则变化”,再用实际抽到的奖金做加权汇总。
📌 重要前提:上述公式适用的关键是概率分布所涉及的量不依赖于参数。如果概率本身也随参数变化(例如某些更复杂的强化学习场景),就需要额外项来修正。
📌 REINFORCE 算法(策略梯度的经典起点)以及 Score Function Estimator 都基于该思路。它在“采样”和“梯度”之间建立了桥梁,使策略优化成为可能。
📌 除了对数导数技巧外,在生成模型中另一条更常见的路线是重参数化技巧(Reparameterization Trick)。
同样的背景:我们希望对期望求梯度,但期望是通过采样得到的,而采样过程不可微。我们当然可以用对数导数技巧估计梯度(前文第11节),但基于得分函数的估计器往往方差较大,训练过程波动也更明显。
重参数化技巧的核心是:不要把随机性“绑”在参数上,而是把随机性移到一个与参数无关的噪声变量上。比如如果你从正态分布采样,可以改写为:
这样对 和 的依赖就变成了确定性的计算,随机性只来自与参数无关的噪声变量。于是梯度就能顺畅地传递。
生活比喻:你想研究厨师的手艺(参数)如何影响菜品口味,但每道菜还会受到当天食材的随机波动。对数导数技巧更像“不管食材怎么变,只看手艺变化对整体满意度统计的影响”;而重参数化技巧更像“把食材波动单独隔离出来,让手艺影响变成一条清晰的因果链”。
📌 重参数化技巧是变分自编码器(VAE)训练的关键。通常它比 Score Function Estimator 的方差更小、梯度更稳定。对于高斯等连续分布,可以把采样重写为确定性变换;对于离散分布(如类别分布),直接套用会困难,因此常用 Gumbel-Softmax 等连续松弛近似,再间接使用重参数化。
📌 在扩散模型(Diffusion Models)里,重参数化技巧同样不可或缺。扩散每一步会加入噪声,而这些噪声也被重参数化成确定性函数,使得整个生成流程能够用梯度下降进行优化。
📌 现实世界很少是“完全无约束”的优化任务。拉格朗日乘数法提供了处理带约束优化的通用框架,在机器学习中几乎处处可见。
假设你要最小化 ,但必须满足某个约束条件 。拉格朗日乘数法告诉我们:在最优解处,目标函数的梯度与约束函数的梯度必须平行(同向或反向)。也就是说存在一个常数 ,使得:
接着我们构造拉格朗日函数:
然后分别对 和 求偏导,并令它们为 0,就可以找到满足约束的最优解。
生活比喻:你想在山区公路上找海拔最低的地方。约束就是这条公路本身,你不能随意往山下走,只能沿路移动。拉格朗日乘数法说明:在路的最低点处,路的走向(约束的梯度)与“你最想下去的方向”(目标函数的梯度)刚好对齐——只是被路的形状限制了。
支持向量机(SVM):SVM 的核心优化目标是“最大化间隔”。硬间隔 SVM 要求所有样本都被正确分类;而实际更常用的是软间隔 SVM,它允许一定误差,并通过惩罚项控制违规程度。两种形式的推导都需要拉格朗日乘数法。那些著名的“支持向量”,对应的正是拉格朗日乘子所关联的样本。
变分推断中的概率归一化约束:在变分推断中,我们要找一个最优的变分分布来近似真实后验。在求解时(例如均值场近似),必须保证每个候选都是合法概率分布——最重要条件是它在整个空间上的积分必须等于 1。所谓“积分等于 1”的这条约束,正是拉格朗日乘数法用来处理的:我们引入乘子,让优化过程自动满足该要求。拉格朗日乘数法在这里的作用,是把归一化约束并入优化目标,从而推导出各因子的最优解析形式。 📌 顺便一提,变分推断中常用的 ELBO(证据下界)的一种直观推导会用到 Jensen 不等式(借助对数的凹性),从另一个角度给出下界;而拉格朗日乘数法则专门负责把“概率分布必须归一化”的约束嵌进优化里。
正则化与约束的等价性:在机器学习里常见的 L2 正则化可以写成损失 的形式,其实等价于“在最小化损失的同时,把参数范数限制在某个上限以内”。
📌 在深度学习中,带约束的优化(例如某些流形学习、正交约束,或增广拉格朗日法里的显式约束)会借助拉格朗日思路来处理。而常见的权重裁剪、梯度裁剪则属于直接的投影/截断操作:把超出范围的值拉回去。虽然它们也能限制参数大小,但从机制上并不等同于拉格朗日方法。
微积分并不是一堆冰冷的公式,而是一套理解变化、预测趋势、并指导优化决策的思维工具。从梯度下降与反向传播,到概率建模与强化学习,再到凸优化与生成模型,这些工具贯穿现代人工智能的方方面面。真正掌握它,你也就获得了打开 AI 黑箱的第一把钥匙。