第9章:变化的语言——导数、偏导数,以及那个极重要的链式法则
好函数有了向量有了矩阵也有了。这三块砖铺出了一个静态的世界数据以向量的形式存在被矩阵变换来变换去目标是逼近某个理想中的函数。但有一个问题我们还完全没碰怎么改上一章结尾我们提了一句神经网络就是反复调整矩阵里的数字直到它能把输入变成正确的输出。但反复调整四个字说起来轻松做起来完全不是一回事。你面对的是一个有几百万甚至几十亿个参数的庞然大物每调整一个数字整个输出都会跟着变。你往哪个方向调调多少怎么知道调完之后是变好了还是变坏了要回答这些问题我们需要一门描述变化的语言。这门语言叫微积分。速度表就是导数我们从一个你开过的东西开始车。你开车上路低头看一眼速度表指针指着60。这个60在告诉你什么它不是说你刚才跑了60公里也不是说你要跑60公里——它说的是此时此刻你的速度是每小时60公里。此时此刻的速度就是一个导数的典型例子。导数的核心思想极其简单一个量在某一瞬间变化得有多快。比如你的位置在变化变化的速度就是速度位置对时间的导数。速度自己也在变化变化的速度就是加速度速度对时间的导数。用数学的话说函数 f(x) 在某个点 x₀ 处的导数就是当 x 在 x₀ 附近发生极小变动时f(x) 变化了多少。记作 f’(x₀)读作f撇x零或 df/dx。你不需要会算它。你只需要记住它问的问题如果输入在这里动一小下输出会跟着变多少这个问题在AI里会被问几百万次。偏导数在复杂的世界里只盯一个方向问题来了。在AI里函数的输入通常不是单个数字 x而是几百几千个数字组成的向量。比如 f(x₁, x₂, x₃, …, xₙ)——一个函数接受 n 个输入。这时候导数就不够用了。因为你得追问你到底是针对哪个变量在求变化率于是有了偏导数——你猜对了偏就是偏心的偏。只盯着一个变量把其他所有变量都当作常数然后求这个变量单独变化时函数的变化率。举个例子。假设你的房价预测函数接受三个输入面积、卧室数、地段评分。你想知道在该点附近面积单独变动一点点时房价会变多少——把卧室数和地段评分固定住只看面积变一点点房价跟着变多少。这个单独看面积在该点的局部变化率就是 f 对面积的偏导数。偏导数的符号长这样∂f/∂x₁那个弯弯的 ∂ 读作偏——长得像数字6转了个弯别被它吓到它就是个符号跟加号减号没本质区别。它的含义跟普通导数完全一样——“输入在这个维度上动一小下输出跟着变多少”——只是它明确告诉你我只在看这一个维度其他的我没动。梯度把偏导数打包成一个箭头如果我们把函数对每一个输入变量的偏导数都算出来然后按顺序排成一个向量这个向量就叫梯度。梯度 (∂f/∂x₁, ∂f/∂x₂, ∂f/∂x₃, …, ∂f/∂xₙ)它的形状是一个向量。每一个分量告诉你在这个维度上如果输入增加一点点输出是增加还是减少、幅度有多大。更重要的是梯度向量的方向有一个极其重要的性质它指向函数上升最快的方向。也就是说如果你沿着梯度的方向走一步函数值增加得最多。反过来沿着梯度的反方向走一步函数值下降得最快。记住后半句。那正是AI训练的核心逻辑。梯度本身我们会在后面专门用一整章来讲叫做梯度下降。这里只需要记住它的骨架梯度是把所有偏导数打包在一起的一个向量它告诉你在哪个方向走能最快地改变函数的输出。链式法则变化是怎么传下去的接下来这个概念是整个深度学习的基石。你以后会反复见到它。我们先看一个场景。想象一座工厂的流水线零件进来经过机器A变成半成品再经过机器B变成成品最后卖出。如果外面市场需求变了价格波动这个变化会一路倒推回去——先是影响售价再影响机器B的产出策略再影响机器A的原料选择。数学里的复合函数就是这个结构f(g(x))。x 先进 g算出 g(x)再把 g(x) 送进 f算出最终结果 f(g(x))。现在的问题是x 变化一点点最终结果 f(g(x)) 会变化多少直觉告诉我们这个变化会传两层。先看 x 的变化让 g(x) 变了多少这就是 g 的导数再看 g(x) 的变化让 f 变了多少这就是 f 的导数。两层的影响要乘起来。这就是链式法则[f(g(x))]’ f’(g(x)) · g’(x)别被符号吓住它的意思就是最外头那一层的变化速度乘以最里头那一层的变化速度就是总变化速度。举个数字例子如果 g 把 x 的变化放大了2倍f 又把 g(x) 的变化放大了3倍那 x 的变化最终被放大了2×36倍。翻译成人话最终输出的变化率 外层函数的变化率 × 内层函数的变化率。一个变化经过多少层就乘以多少层的放大倍数。如果函数有三层呢f(g(h(x)))链式法则就是三层导数相乘。如果有一百层呢那就乘一百次。好现在把一百层这个数字记在脑子里再往下看。它在AI里到底有什么用你大概已经猜到了。一个深度神经网络就是一个极长的复合函数。输入 x 先经过第一层权重矩阵、激活函数变成 h₁再经过第二层变成 h₂再经过第三层……一直传到最后的输出。现在你要调整矩阵里的数字——也就是训练网络——你需要知道当我把某一个矩阵里的某一个数字改变一小点最终的输出会变化多少这个问题可以直接用链式法则来回答。你把输出对那个数字的变化率从最后一层开始一层一层地往回推。每一层都乘上它自己的导数就像那个流水线一样。这个从后往前逐层求导的过程在深度学习里有一个专门的名字叫反向传播。它完全就是链式法则在多层网络上的反复应用。没有链式法则就没有深度学习。所有的大模型、所有生成式AI、所有你觉得神奇的东西它们的训练过程都依赖着这个公式。这个公式你先记着。等第20章讲反向传播的时候你会看到它怎么从一条数学定理变成训练大模型的核心算法。三个工具到此为止微积分里有大量的技巧、公式、定理——求导法则、积分方法、泰勒展开、微分方程。这些在AI里各有各的用处但最核心的就三个导数告诉你单变量的变化率。偏导数告诉你多变量中某个方向的变化率。链式法则告诉你变化如何通过多层结构传递。这三样东西就像工具箱里的扳手、螺丝刀和锤子——你不需要成为能造出整个房子的工匠但你至少要知道它们分别用来拧什么、敲什么。后面讲到神经网络训练的时候你会看到这三样工具反复出现。但现在你只需要在脑子里种下这三颗种子。下一章我们把微积分和概率结合起来。因为AI不仅要处理变化还要处理不确定性——而这件事跟买彩票和天气预报用的是同一套逻辑。参考文献3Blue1Brown. (2017). “Derivative formulas through geometry | Chapter 3, Essence of Calculus”. YouTube.推荐理由这一期视频用几何方式展示了导数的直观含义——曲线的斜率、变化率的直觉以及链式法则的几何可视化。3Blue1Brown的微积分系列可能是让害怕数学的人重拾信心最好的教程。Stewart, J. (2015).Calculus: Early Transcendentals(8th ed.). Cengage Learning. 第2章Derivatives 和第14章Partial Derivatives。推荐理由标准的微积分教材。第2章从导数定义讲起第14章引入偏导数和链式法则。不需要读完整本只看图示和公式旁边的解释文字就够了。Nielsen, M. (2015).Neural Networks and Deep Learning. 第2章How the backpropagation algorithm works。在线免费书籍http://neuralnetworksanddeeplearning.com/推荐理由这一章完整地展示了链式法则在反向传播中的应用。Nielsen用一张清晰的网络结构图把每一层的导数传递画得一目了然。读完之后你会看到我们今天聊的变化逐层传递在那里变成了可以实际编码的算法。