导数、偏导数与梯度:机器学习数学基础

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示例

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 = 20

for i in range(epochs):
    g = grad(x)
    x = x - lr * g
    print(f"第 {i+1} 次迭代: x = {x:.4f}, f(x) = {f(x):.4f}")

输出结果:

Lua 复制代码
第 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
含义 函数在一点的斜率 在某一方向(某个变量)上的变化率 所有方向偏导数的组合,指向最陡上升方向
输出 一个数(斜率) 一个数(某个方向的变化率) 一个向量(多个偏导数组合)
几何意义 曲线的切线斜率 曲面在某一方向的切线斜率 曲面上升最快方向的向量
计算方式 对单个变量求导 对一个变量求偏导,其他变量看作常数 对所有变量求偏导,并组合成向量
应用场景 一维函数分析 多维函数单方向分析 多维最优化(如梯度下降、深度学习训练)
相关推荐
小白菜又菜21 小时前
Leetcode 495. Teemo Attacking
算法·leetcode·职场和发展
.柒宇.1 天前
力扣hot100----15.三数之和(java版)
java·数据结构·算法·leetcode
杰克尼1 天前
二分查找为什么总是写错
java·数据结构·算法
程序员阿鹏1 天前
56.合并区间
java·数据结构·算法·leetcode
古译汉书1 天前
Stm32江科大入门教程--各章节详细笔记---查阅传送门
数据结构·stm32·单片机·嵌入式硬件·算法
Jasmine_llq1 天前
《P2656 采蘑菇》
算法·强连通分量·广度优先搜索(bfs)·tarjan 算法·图的缩点操作·有向无环图(dag)·最长路径
芥子沫1 天前
《人工智能基础》[算法篇3]:决策树
人工智能·算法·决策树
mit6.8241 天前
dfs|位运算
算法
苏纪云1 天前
算法<C++>——双指针 | 滑动窗口
数据结构·c++·算法·双指针·滑动窗口