机器学习与算法2.2 —— 偏导数与梯度
从偏导数与梯度了解如何训练模型
前言
好了朋友们~,这是我们新的旅程。在初识机器学习的或是深度学习的应用中。我们经常能听到所谓梯度下降,反向传播,训练等等术语。但其中的原理是什么呢?
说到最简单的应用使用Tensorflow,Pytorch或者Scikit-learn等等深度学习库,只需输入一个 model.fit(x,y) 或 model.train(x,y),我们就能得到一个训练后的模型。
但是当面对复杂问题的时候,往往效果不佳,此时开始调参。但记得前面说过的 GIGO(垃圾进,垃圾出),也许数学对你比较无趣,不过了解之后可以让你更好的去理解并应用!
今日份的座右铭是:“什么是手段,什么是目的,不要在手段中迷失了旅途的目的地。”
顺便分享一首纯音乐:配合食用更佳 月明かりの宴(月光盛宴)~
1. 什么是偏导数?
在多元微积分中,偏导数用来描述多变量函数对其中一个变量的变化率。偏导数的意义在于它可以告诉我们,函数值随着某个特定变量(保持其他变量不变)的变化而如何变化。
假设我们有一个简单的二元函数
。这个函数的输出不仅取决于 x 的值,也取决于 y 的值。为了研究 x 或 y 对 f 的影响,我们分别计算 x 和 y 的偏导数。
偏导数的计算方法
步骤1:如果我们想知道 x 对 f(x,y) 的影响,我们就对 x 求偏导数,保持 y 不变:

步骤2:如果我们想知道 y 对 f(x,y) 的影响,我们就对 y 求偏导数,保持 x 不变:

偏导数的意义
在函数 f(x,y)=x2+y2f 中,偏导数
表示当 x 发生微小变化时,f 会如何变化。同理,偏导数
表示当 y 发生微小变化时,f 的变化率。
在机器学习中,偏导数的计算非常关键。因为我们需要找到模型参数的最佳值来最小化损失函数,而计算偏导数可以帮助我们分析每个参数的影响,指导我们如何调整参数。
2. 什么是梯度?
梯度是一个向量,包含了函数对每个变量的偏导数。在几何上,梯度指向函数值增长最快的方向,因此在多维空间中,梯度向量代表了函数的“陡峭上升”方向。
假设仍然使用函数
:
- 这个函数的梯度(记作 ∇f)是所有偏导数的集合,即:

梯度的几何意义
梯度向量 (2x,2y) 表示当我们从一点出发时,如何沿着最快速增大的方向移动(这个方向就是梯度指向的方向)。而在优化问题中,我们往往想沿着“梯度的反方向”移动,以达到函数的最小值。
3. 偏导数和梯度在机器学习中的作用
在机器学习中,我们经常使用梯度下降法来优化模型参数,使损失函数最小化。
假设我们有一个线性回归模型,目标是最小化损失函数
。为了找到最佳的 w 和 b 值,我们计算损失函数关于 w 和 b 的偏导数:
- 对 w 求偏导数:

- 对 b 求偏导数:

这些偏导数组成梯度向量
。在梯度下降中,我们使用这个梯度向量来调整参数:

这里的 α(alpha) 是学习率,用来控制参数的调整步伐。
通过梯度下降法,我们可以逐步找到让损失函数最小化的 w 和 b 值,从而得到一个更优的模型。
4. 实际示例
假设问题:线性回归模型
假设我们有一组数据,想要通过训练一个线性模型来预测某个目标变量 y。线性回归模型的公式为:y=wx+b
其中:
- x 是输入特征,
- w 是模型参数(权重 weights),
- b 是偏置项 (bias)。
目标是找到最优的 w 和 b 值,使得模型的预测结果 y 最接近真实值。
损失函数:均方误差(MSE - Mean Squared Error)
为了度量模型预测值和真实值之间的差异,我们定义了一个损失函数 L(w,b)。在这里,我们使用 均方误差(MSE)作为损失函数,它的定义为:

其中:

说句人话就是,计算每个预测值和真实值,然后加起来取平均数。
我们的目标是通过调整 w 和 b 的值,使得 L(w,b) 最小化。(至于是最小化还是最大化,就看损失函数的方向,比如用R平方的话就是最大化。)
计算偏导数
要实现这个目标,我们需要计算 L(w,b) 对 w 和 b 的偏导数,以便我们知道如何调整 w 和 b 才能使损失最小化。
1. 对 w 求偏导数:
(套一下前面的偏导数公式,两边同除2)
这个偏导数告诉我们,如果我们对 w 做一个小小的调整,损失 L 会如何变化。
2. 对 b 求偏导数:

同样地,这个偏导数告诉我们,如果我们对 b 做一个小小的调整,损失 L 会如何变化。
梯度向量
偏导数
和
共同组成了损失函数的梯度向量,记作
。这个梯度向量指向损失函数增加最快的方向。
梯度下降法更新参数
在机器学习中,梯度下降法是通过使用梯度向量来迭代更新参数的方法。我们从随机初始化的 w 和 b 开始,逐步沿着损失函数下降最快的方向调整参数。每次更新的公式为:

其中,α\alpha 是学习率,用来控制每次参数调整的步伐。也就是说在我们学习率的基础上新的 b = b - α*(b的偏导数)学习率在此处也重要,步子大了扯着,步子小了走不出怪圈。
示例计算过程
假设有一组简单的数据:
| x | y |
|---|---|
| 1 | 2 |
| 2 | 2.8 |
| 3 | 3.6 |
| 4 | 4.5 |
1. 初始化参数:假设 w = 0 和 b = 0,学习率 α=0.01。
2. 计算偏导数:
- 根据当前的 w = 0 和 b = 0,可以计算

3. 更新参数:
- 使用梯度下降公式,更新 w 和 b。
4. 重复步骤 2 和 3,直到 w 和 b 收敛到一个稳定的值,使得损失函数最小化。
为什么这很重要?
- 偏导数帮助我们理解单个变量对多变量函数输出的影响。
- 梯度包含了所有偏导数,指向函数值增加最快的方向,是优化问题中的重要工具。
- 在机器学习中,通过梯度下降法,利用梯度信息,我们可以逐步找到最优参数,使模型的损失函数最小化,从而提高模型的预测准确性。
偏导数和梯度的计算让我们知道在每一步中应该如何调整参数,使损失函数尽可能下降。这就像爬山时需要知道哪个方向最陡峭,而在优化问题中,我们寻找“下降最陡的方向”。
在机器学习中,这一过程非常关键,因为通过这样的优化,我们可以让模型的参数不断向最佳解靠拢,从而提高模型的预测准确性。
恭喜你又完成一小节!!!!!!!!!!!!!!!!!!!!!