导数、偏导数与梯度:机器学习数学基础
1. 导数
1.1. 定义
导数用来描述函数在某一点的变化率,也就是曲线在那一点的切线斜率。
比如你有一个函数:
导数 表示: 当
在某一点
处变化一个很小的量时,
会随之变化多少。
数学上定义为:
这个极限就是在 处的瞬时变化率。
1.2. 举例
函数:
导数:
在 时:
这表示 每增加一点点,
会增大约6倍得量。
1.3. 导数为0与极值点
当导数为0时,曲线在该点的切线时水平的。此时可能出现以下几重情况:
- 极小值(山谷):函数由下降转为上升
- 极大值(山顶):函数由上升转为下降
- 拐点:曲线弯曲方向改变的点,也就是曲线从“凹”变“凸”或从“凸”变“凹”的位置。
例如:
: 在
处导数为0,是最小值。
:
处导数为0,是极大值。
2. 偏导数
2.1. 定义
当函数有多个变量时,例如:
函数的变化不仅取决于 ,还取决于
。
这时我们引入偏导数来分析某个方向的变化率。
- 对
的偏导数(固定
):
- 对
的偏导数(固定
):
偏导数就是:只改变一个变量,其他变量保持不变,观察函数的变化率。
2.2. 举例
给定:
对 的偏导(
当常数):
对 的偏导(
当常数):
可以把 想象成一片山地的高度,
轴表示东西方向,
轴表示南北方向,
表示地形高度。在某一点,
表示沿东西方向的坡度,
表示沿南北方向的坡度。
3. 向量
3.1. 定义
向量是一个既有大小又有方向的量,可以用来表示空间中的位置、运动方向、力的大小等。
- 通常用箭头表示:从起点指向终点
- 也可以用有序列表示:
3.2 表示
空间维度 | 向量示例 | 含义 |
---|---|---|
一维 | 直线上的点或位移 | |
二维 | 平面上的箭头 | |
三维 | 空间中的箭头 | |
n 维 | 高维空间的方向和大小 |
- 分量:向量得每一个数字称为分量
- 模(长度):
4. 梯度
在机器学习和数学优化中,梯度是一个非常核心的概念,用来描述函数在多维空间中变化最快的方向与速度。
4.1. 定义
对于一个多元函数
它的梯度记为
直观理解:
- 每个偏导数表示函数在该变量方向上的变化率。
- 梯度向量就像是在多维控件中的箭头,指向函数上升最快的方向。
- 你把函数想象成一座山,你站在某个位置,梯度向量就是这座山在你脚下最陡峭的上坡方向。
4.2. 梯度算法与损失函数
在机器学习中,我们的目标通常是: 让模型的预测值尽可能接近真实值。 而实现这一目标的核心就是损失函数和梯度算法的配合。
4.2.1. 损失函数
- 损失函数是一个用来衡量模型预测值与真实值差距的函数。
- 它把模型的表现变成一个可以计算、可以优化的数字。
- 它只告诉你模型表现得好不好,但没有告诉你如何改进参数。
4.2.2. 梯度算法
- 梯度算法的核心是沿着损失下降最快的方向前进,直到损失函数达到最小值。
- 类比:想象你站在一座山顶,周围雾蒙蒙,看不见远处得谷底,你只能感受到脚下最陡得坡度,然后沿着最陡得坡度一步步往下走,直到走到山谷最低点。
4.2.3. 数学表示
设目标函数为:,其中
是待优化的参数,
是损失函数。
每次迭代的参数更新公式为:
:学习率(learning rate),决定每次走多大步;
:梯度,表示函数对参数的偏导数;
4.2.4. 梯度下降迭代步骤
- 初始化参数
为函数的参数设置随机初始值。
- 计算梯度
在当前参数值下,计算损失函数的变化情况。这告诉我们函数增长最快的方向。梯度显示了每个参数如何影响函数输出。
- 更新参数
将每个参数稍微沿着降低损失的方向移动。具体做法是从当前参数中减去梯度。步长由学习率控制。学习率越小,每次更新的步伐也越小。
- 重复过程
用新的参数再次执行上述计算。不断重复,直到损失函数值不再下降或变得非常小,这意味着算法可能已经到达最小值。
4.2.5. Python示例
import numpy as np# 目标函数:f(x) = x^2
def f(x):return x*x# 导数:f'(x) = 2x
def grad(x):return 2 * x# 初始化
x = 5.0
lr = 0.1
epochs = 20for i in range(epochs):g = grad(x)x = x - lr * gprint(f"第 {i+1} 次迭代: x = {x:.4f}, f(x) = {f(x):.4f}")
输出结果:
第 1 次迭代: x = 4.0000, f(x) = 16.0000
第 2 次迭代: x = 3.2000, f(x) = 10.2400
第 3 次迭代: x = 2.5600, f(x) = 6.5536
第 4 次迭代: x = 2.0480, f(x) = 4.1943
第 5 次迭代: x = 1.6384, f(x) = 2.6844
第 6 次迭代: x = 1.3107, f(x) = 1.7180
第 7 次迭代: x = 1.0486, f(x) = 1.0995
第 8 次迭代: x = 0.8389, f(x) = 0.7037
第 9 次迭代: x = 0.6711, f(x) = 0.4504
第 10 次迭代: x = 0.5369, f(x) = 0.2882
第 11 次迭代: x = 0.4295, f(x) = 0.1845
第 12 次迭代: x = 0.3436, f(x) = 0.1181
第 13 次迭代: x = 0.2749, f(x) = 0.0756
第 14 次迭代: x = 0.2199, f(x) = 0.0484
第 15 次迭代: x = 0.1759, f(x) = 0.0309
第 16 次迭代: x = 0.1407, f(x) = 0.0198
第 17 次迭代: x = 0.1126, f(x) = 0.0127
第 18 次迭代: x = 0.0901, f(x) = 0.0081
第 19 次迭代: x = 0.0721, f(x) = 0.0052
第 20 次迭代: x = 0.0576, f(x) = 0.0033
可以看到,经过20次迭代,目标函数已经非常接近最小值了。
5. 导数、偏导数、梯度对比
项目 | 导数(Derivative) | 偏导数(Partial Derivative) | 梯度(Gradient) |
---|---|---|---|
适用函数 | 单变量函数 | 多变量函数 | 多变量函数 |
自变量数 | 1 | ≥ 2 | ≥ 2 |
含义 | 函数在一点的斜率 | 在某一方向(某个变量)上的变化率 | 所有方向偏导数的组合,指向最陡上升方向 |
输出 | 一个数(斜率) | 一个数(某个方向的变化率) | 一个向量(多个偏导数组合) |
几何意义 | 曲线的切线斜率 | 曲面在某一方向的切线斜率 | 曲面上升最快方向的向量 |
计算方式 | 对单个变量求导 | 对一个变量求偏导,其他变量看作常数 | 对所有变量求偏导,并组合成向量 |
应用场景 | 一维函数分析 | 多维函数单方向分析 | 多维最优化(如梯度下降、深度学习训练) |