单变量微积分

mathematics
Calculus
简单介绍了微分学的作用,以及一些基础的运算规则,并介绍了高阶导数与泰勒展开公式
发布于

2026年8月18日

微分学

其本质是研究函数在微小变化的行为,即: y=f(x)x→x+\epsilon, y会怎么变的呢?

对于深度学习而言,我们有一个深度学习网络: w=(w_1, w_2, ..., w_n) 当我们输入一个向量x, 基于我们的权重w,我们可以得到我们的输出: y=w_1x_1+w_2x_2+...+w_nx_n

训练的时候,我们常常关注的是L(\omega),即loss函数,如L=(y_{hat}-y_{true})^2

我们的目标就是找到: w=argmin_w L(w) 显然,我们不能直接找到最佳的权重,所以我们一般是使用迭代优化的策略

  1. 随机初始化参数;
  2. 计算梯度\frac{\partial L}{\partial w};
  3. 沿着梯度的反方向更新:w \leftarrow w-\eta \frac{\partial L}{\partial w}

这就是梯度下降,我们最需要了解到的微分学。

我们先考虑只有一种权重的情况:

其中左图是[0, 3]这个尺度下的图像,函数是波浪形,高度非线性;中间的图是[1.75, 2.25]这个尺度下的图像,图像近似抛物线;右图在[2, 2.01]上几乎是一条直线。

因此我们可以得到一个结论,任何复杂的函数,在足够小的局部领域内,都是近似线性的。

利用这一直觉,我们可以定义差商: 差商=\frac{f(x+\varepsilon)-f(x)}{\varepsilon}

\varepsilon趋于0的时候,即对其取极限的时候,我们就可以得到导数: \frac{d f}{d x}=\lim_{\varepsilon \to 0}\frac{f(x+\varepsilon)-f(x)}{\varepsilon}

导数的等价记法: \frac{d f}{d x}=\frac{d}{d x}f=f' = \nabla f = D_x f = f_x

根据以上信息,我们可以得到一个简单的式子: f(x+\varepsilon)≈f(x)+f'(x)\varepsilon

我们简单的试验一下,上面这个约等式是否成立:设f(x)=x^2, x=4, \varepsilon=0.01 f(4.01)=16.0801≈16.08=16+8*0.01=f(4)+f'(4)*0.01

可以看出来是大致成立的,该约等式正是一阶泰勒展开的雏形。

微积分法则

在这,我们直接加入一些基础的微积分法则: 1. 常数法则:\frac{d}{dx}C = 0

  1. 线性法则:\frac{d}{dx}(ax) = a

  2. 幂函数法则: \frac{d}{dx}x^n = nx^{n-1}

  3. 指数法则: \frac{d}{dx}e^x = e^x, \frac{d}{dx}a^x=\frac{d}{dx}(e^{x\ln a})=e^{x\ln a}·\frac{d}{dx}(x\ln a)=e^{x\ln a}·\ln a=a^x \ln a

  4. 对数法则: \frac{d}{dx}\ln x = \frac{1}{x}, \frac{d}{dx}log_a x=\frac{d}{dx}\frac{\ln x}{\ln a}=\frac{1}{x\ln a}

  5. 加法法则: (g+h)' = g' + h'

  6. 乘法法则: (gh)' = g'h + gh'

  7. 链式法则: \big(g(h(x))\big)' = g'\big(h(x)\big) \cdot h'(x)

此处重点是链式法则,反向传播的本质就是不断应用链式法则,从输出层向输入层逐层求导。

一个简单的实战:求\frac{d}{dx}\log (1+(x-1)^{10}): \frac{d}{dx} \log (...)=\frac{1}{1+(x-1)^{10}}·10(x-1)^9·1


在点(x_0, f(x_0))处,斜率为f'(x_0),切线的方程为: y=f'(x_0)(x-x_0)+f(x_0) 这意味着在x_0附近: f(x)≈f(x_0)+f'(x_0)(x-x_0)

如上图所示,我们可以获得一个复杂函数各点的切线方程,我们可以拥有一个经典近似,当x_0趋于0的时候,认为\sin x= x


简单来说,导数求导完以后,也是一个函数,可以继续求导,故我们可以得到高阶导数f^{(m)}(x)

如二阶导数f''(x)描述的是变化速度本身的变化速度,即曲率,我们有以下几种情况:

  1. f''(x)>0, 说明导数不断增加,函数向上弯,有一个最低点,叫凹函数。

  2. f''(x)<0, 说明导数不断下降,函数下弯曲,有一个最高点,叫凸函数。

  3. f''(x)=0, 说明是直线。

我们使用导数来更新参数,那么二阶导的作用是什么呢?

在机器学习中,优化算法不仅仅关心一阶导数\nabla f, 还关心Hessian矩阵,他是二阶导数矩阵即f''

Hessian矩阵的矩阵多大,要看有多少的特征,如果像是单变量的话,其只有一个,即f'',但如果是比较大的矩阵的话,其中的H_{ij}的计算公式为:

H_{ij}=\frac{\partial^2 f}{\partial x_i \partial x_j}

  1. \lvert f'' \rvert大的时候,代表其弯曲比较大,这时候我们的学习率要小,防止震荡;

  2. \lvert f'' \rvert小的时候,代表其弯曲比较小,这时候我们可以走更大的步长,加速收敛。

但是当然,这样的话我们要求的矩阵可能会有点大,如果有100个特征的话,有10000个参数,那么更新一次就要计算10^8次,这显然是不适合的,故我们一般不考虑其作用于我们的参数优化过程。当然有的优化方法会使用一些近似方法来控制学习率,其可能与Hessian矩阵相关,此处不做过多介绍。


最后一部分,我们讲一讲泰勒展开,这是比较基础的知识点:

如果已知某一点的函数值与各阶导数,我们可以逐步恢复函数在该点附近的行为:

  • 零阶:f(x) \approx f(x_0)
  • 一阶:f(x) \approx f(x_0) + f'(x_0)(x-x_0)
  • 二阶:f(x) \approx f(x_0) + f'(x_0)(x-x_0) + \frac{1}{2}f''(x_0)(x-x_0)^2
  • n 阶:

f(x) = \sum_{i=0}^{n} \frac{f^{(i)}(x_0)}{i!}(x-x_0)^i + R_n(x)

以下唯一个经典案例:

e^x = 1 + x + \frac{x^2}{2!} + \frac{x^3}{3!} + \cdots + \frac{x^n}{n!} + \cdots

泰勒展开在数值计算中极其重要——它让我们可以用多项式(易于计算)逼近任意光滑函数。