微积分中链式法则和反向传播
链式法则和反向传播是微积分和机器学习中的两个重要概念。链式法则是微积分中的一个基本求导法则,而反向传播则是深度学习中用于训练神经网络的关键算法。
链式法则
链式法则用于求复合函数的导数。假设有两个函数 y = f(u) 和 u = g(x),那么复合函数 y = f(g(x)) 的导数可以通过链式法则求得:
\frac{dy}{dx} = \frac{dy}{du} \cdot \frac{du}{dx}
具体来说,如果 y = f(g(x)) ,那么:
\frac{d}{dx} f(g(x)) = f'(g(x)) \cdot g'(x)
示例
假设我们有一个函数 y = sin(x^2)
我们想求它的导数。
-
识别内外函数:
- 外函数: y = sin(u)
- 内函数:u = x^2
-
应用链式法则:
\frac{dy}{dx} = \frac{dy}{du} \cdot \frac{du}{dx} -
计算每一部分的导数:
- 外函数的导数:
\frac{dy}{du} = \cos(u)- 内函数的导数:
\frac{du}{dx} = 2x -
组合结果:
\frac{dy}{dx} = \cos(x^2) \cdot 2x
所以,函数 y = \sin(x^2) 的导数是 \frac{dy}{dx} = 2x \cos(x^2) 。
反向传播
反向传播(Backpropagation)是训练神经网络的一种算法,它利用链式法则来计算损失函数相对于网络参数的梯度。反向传播的主要步骤如下:
- 前向传播:计算输入数据通过网络的每一层后的输出,直到得到最终的预测值。
- 计算损失:使用损失函数计算预测值与实际值之间的差异。
- 反向传播:从输出层开始,逐层计算损失函数相对于每一层权重的梯度。这一步利用链式法则来传播梯度。
- 更新权重:使用优化算法(如梯度下降)根据计算得到的梯度更新网络的权重。
示例
假设我们有一个简单的神经网络,输入 x ,权重 w ,偏置 b ,激活函数 \sigma ,损失函数 L 。网络的前向传播公式为:
z = wx + b
y = \sigma(z)
损失函数为:
L = \frac{1}{2} (y - \text{target})^2
反向传播的步骤如下:
-
计算损失相对于输出的梯度:
\frac{\partial L}{\partial y} = y - \text{target} -
计算输出相对于激活函数输入的梯度:
\frac{\partial y}{\partial z} = \sigma'(z) -
计算激活函数输入相对于权重和偏置的梯度:
\frac{\partial z}{\partial w} = x
\frac{\partial z}{\partial b} = 1
- 应用链式法则计算损失相对于权重和偏置的梯度:
\frac{\partial z}{\partial b} = 1
\frac{\partial L}{\partial w} = \frac{\partial L}{\partial y} \cdot \frac{\partial y}{\partial z} \cdot \frac{\partial z}{\partial w} = (y - \text{target}) \cdot \sigma'(z) \cdot x
\frac{\partial L}{\partial b} = \frac{\partial L}{\partial y} \cdot \frac{\partial y}{\partial z} \cdot \frac{\partial z}{\partial b} = (y - \text{target}) \cdot \sigma'(z)
通过这些梯度,我们可以更新权重 w 和偏置 b,从而训练神经网络。
评论区