Python 从零开始实现机器学习实战 03: 梯度概念以及梯度下降python实例

梯度的详细解释

1. 背景介绍

在数学和机器学习领域,梯度是一个非常重要的概念。它是一个向量,表示函数在某一点上变化最快的方向。梯度的引入为解决优化问题、求解方程和模型训练等提供了强大的工具。

2. 梯度的概念

2.1 导数与变化率

在单变量微积分中,我们学过导数,它表示函数在某一点上的变化率。对于多变量函数,我们引入了偏导数,而梯度就是由各个偏导数组成的向量。

2.2 多变量函数的梯度

考虑一个多变量函数 (f(x_1, x_2, …, x_n)),它在某一点 ((a_1, a_2, …, a_n)) 处的梯度记为 (\nabla f(a_1, a_2, …, a_n)) 或 (\frac{\partial f}{\partial x_1}, \frac{\partial f}{\partial x_2}, …, \frac{\partial f}{\partial x_n})。

2.3 几何解释

梯度的几何解释是函数在某一点上变化最快的方向。梯度向量的方向是函数值增加最快的方向,而梯度的模(长度)表示这个变化率。关于如何证明较为复杂,此处不展开,见https://dsfftp.readthedocs.io/zh-cn/latest/Linear-Regression/%E6%A2%AF%E5%BA%A6%E4%B8%8B%E9%99%8D%E6%B3%95%E7%9A%84%E6%95%B0%E5%AD%A6%E5%8E%9F%E7%90%86.html
链接: 梯度下降的数学原理

3. 梯度的计算

3.1 多变量函数的偏导数

对于一个多变量函数,梯度是由各个偏导数组成的向量。计算梯度的步骤是分别对每个变量求偏导数。

[ \nabla f(x, y) = \left( \frac{\partial f}{\partial x}, \frac{\partial f}{\partial y} \right) ]

3.2 梯度下降

梯度下降是一种优化算法,用于找到函数的最小值。在每一步,梯度下降沿着负梯度的方向更新参数,直到达到停止条件。更新规则如下:

[ \mathbf{x}{\text{new}} = \mathbf{x}{\text{old}} - \alpha \nabla f(\mathbf{x}_{\text{old}}) ]

其中,(\alpha) 是学习率。

4. 梯度的应用

4.1 优化问题

梯度被广泛用于解决优化问题。在机器学习中,训练模型就是一个通过调整参数使得损失函数最小化的优化问题。

4.2 求解方程

梯度也用于求解方程。通过构造一个函数,使得该函数的梯度为零的点即是方程的解。

4.3 机器学习中的梯度下降

在机器学习中,梯度下降是训练模型的核心算法之一。通过最小化损失函数,梯度下降可以调整模型参数,使得模型能够更好地拟合数据。

结论

梯度是一个多变量函数变化率的向量表示,具有丰富的几何和数学意义。在数学、优化和机器学习领域,梯度的概念和应用是非常重要的,对于理解算法和解决实际问题都具有深远的影响。

梯度下降

1. 背景介绍

在机器学习和优化问题中,我们常常面临着需要最小化(或最大化)一个目标函数的情况。梯度下降是一种基于迭代的优化算法,通过沿着目标函数的梯度方向逐步调整参数,从而找到目标函数的最小值。

2. 概念解析

2.1 目标函数

假设我们有一个函数 (J(\theta)),其中 (\theta) 是我们要优化的参数。这个函数称为目标函数或损失函数,我们的目标是找到能够使 (J(\theta)) 最小化的 (\theta)。

2.2 梯度

梯度是一个向量,指向函数在给定点上变化最快的方向。对于目标函数 (J(\theta)),其梯度记为 (\nabla J(\theta))。

2.3 学习率

学习率(Learning Rate)是梯度下降中的一个超参数,表示在每一步中我们沿梯度方向调整参数的幅度。选择合适的学习率对算法的性能至关重要。

3. 算法步骤

3.1 初始化

选择初始参数值 (\theta_0)。

3.2 计算梯度

计算目标函数在当前参数值处的梯度,即 (\nabla J(\theta_0))。

3.3 参数更新

通过以下的更新规则,沿着负梯度方向更新参数:

[ \theta_{\text{new}} = \theta_{\text{old}} - \text{学习率} \times \nabla J(\theta_{\text{old}}) ]

3.4 重复迭代

重复步骤 3,直到满足停止条件(例如达到最大迭代次数、梯度趋近于零等)。

4. 梯度下降的应用

4.1 线性回归

在线性回归中,我们希望找到一条直线,使得观测值与预测值之间的平方误差最小化。梯度下降被用来更新线性回归模型的参数,使得平方误差最小。

import numpy as np
import matplotlib.pyplot as plt

# 生成随机数据
np.random.seed(0)
X = 2 * np.random.rand(100, 1)
y = 4 + 3 * X + np.random.randn(100, 1)

# 应用梯度下降进行线性回归
eta = 0.1  # 学习率
n_iterations = 1000
m = 100

theta = np.random.randn(2, 1)

for iteration in range(n_iterations):
    gradients = 2/m * X.T.dot(X.dot(theta) - y)
    theta = theta - eta * gradients

# 打印结果
print("线性回归模型的参数:", theta)

4.2 逻辑回归

在逻辑回归中,梯度下降同样用于更新模型参数,以最小化对数似然损失函数。

import numpy as np
import matplotlib.pyplot as plt

# 生成随机数据
np.random.seed(0)
X = 2 * np.random.rand(100, 1)
y = (X > 1).astype(int)

# 添加偏置项
X_b = np.c_[np.ones((100, 1)), X]

# 应用梯度下降进行逻辑回归
eta = 0.1  # 学习率
n_iterations = 1000
m = 100

theta = np.random.randn(2, 1)

for iteration in range(n_iterations):
    logits = X_b.dot(theta)
    y_proba = 1 / (1 + np.exp(-logits))
    gradients = 1/m * X_b.T.dot(y_proba - y)
    theta = theta - eta * gradients

# 打印结果
print("逻辑回归模型的参数:", theta)

5. 总结

梯度下降是一种强大的优化算法,被广泛用于机器学习和深度学习等领域。通过不断地沿着目标函数梯度的反方向更新参数,我们可以逐步接近最优解。梯度下降的成功应用涵盖了各种机器学习算法,从线性回归到神经网络。合理选择学习率、停止条件和初始化参数等超参数,以及理解梯度下降背后的原理,对于成功应用该算法至关重要。

  • 22
    点赞
  • 18
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值