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

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
含义 函数在一点的斜率 在某一方向(某个变量)上的变化率 所有方向偏导数的组合,指向最陡上升方向
输出 一个数(斜率) 一个数(某个方向的变化率) 一个向量(多个偏导数组合)
几何意义 曲线的切线斜率 曲面在某一方向的切线斜率 曲面上升最快方向的向量
计算方式 对单个变量求导 对一个变量求偏导,其他变量看作常数 对所有变量求偏导,并组合成向量
应用场景 一维函数分析 多维函数单方向分析 多维最优化(如梯度下降、深度学习训练)
相关推荐
伊玛目的门徒4 小时前
试用leetcode之典中典 二数之和问题
java·算法·leetcode
Jerry4 小时前
LeetCode 226. 翻转二叉树
算法
想做小南娘,发现自己是女生喵5 小时前
【无标题】
数据结构·算法
Kx_Triumphs7 小时前
HDU4348 To the moon(主席树区间修改模板)
算法·题解
旖-旎7 小时前
《LeetCode647 回文子串 || LeetCode 5 最长回文子串》
c++·算法·leetcode·动态规划·哈希算法
轻颂呀8 小时前
约瑟夫环问题
算法
科技大视界10 小时前
投资AI项目,传统尽调不够用了——李章虎律师拆解算法、数据、算力三大雷区
人工智能·算法·数据挖掘
郝学胜-神的一滴10 小时前
算法实战:最小k个数——大顶堆的优雅解法
开发语言·数据结构·c++·python·程序人生·算法·排序算法
Irissgwe11 小时前
算法滑动窗口
数据结构·算法