什么是梯度和梯度下降法?

本文介绍了梯度和梯度下降法。梯度是函数在某点变化率最大的方向。梯度下降法是沿梯度反方向移动,其要素有初始化权重、优化函数和学习率。还介绍了梯度下降法的类别,如标准、批量、小批量和随机梯度下降法,以及自适应学习率优化算法。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >


一、梯度

1.1 什么是梯度?

梯度是一个向量(矢量), 表示某一函数在该点处的方向导数沿着该方向取得最大值,也就是该点变化率最大的方向。在现实中,就是山体的某点沿着山体最陡峭的向上方向就是梯度。

二、梯度下降法

2.1 什么是梯度下降法

       ● 梯度下降就是沿着梯度最陡的地方下降。也可以说梯度下降就是曲线或曲面上的某点沿着该点梯度的反方向移动。

       ● 如果我们从一个位置点x开始,每向下移动一点的距离,记做Oh,并将我们的位置更新为x-Oh,并且我们继续保持一致,直到达到底部。
在这里插入图片描述
       梯度下降法的三要素:初始化权重、优化函数(动量) 、学习率。

2.2 梯度下降法的类别

       根据采用数据量可以分为标准梯度下降法(GD)、批量梯度下降法(BatchGradient Descent)、小批量梯度下降法(Mini-batch Gradient Descent)、随机梯度下降法(Stochastic Gradient Descent)

(1)标准梯度下降法(GD)

● 每个样本都计算一次
● 训练速度慢,容易陷入局部最优解

(2)批量梯度下降法(Batch Gradient Descent)

       批量梯度下降法是最原始的形式,它是指在每一次迭代时使用所有样本来进行梯度的更新。
       如果数据集比较大,可能会面临内存不足问题,而且其收敛速度一般比较慢(相较于GD要快一些),容易陷入局部最优解。选取平均梯度最小的方向。在这里插入图片描述
(3)小批量梯度下降法(Mini-batch Gradient Descent)
       小批量梯度下降算法是折中方案,选取训练集中一个小批量样本,这样可以保证训练过程更稳定,而且采用批量训练方法也可以利用矩阵计算的优势。
       通过矩阵运算,每次在一个batch上优化神经网络参数并不会比单个数据慢太多。
在这里插入图片描述
(4)随机梯度下降法(Stochastic Gradient Descent)

       针对训练集中的一个训练样本计算的,又称为在线学习,即得到了一个样本,就可以执行一次参数更新。所以其收敛速度会快一些(不需要计算每个样本的梯度或平均梯度),但是有可能出现目标函数值震荡现象,因为高频率的参数更新导致了高方差。
       从批样本随机选择一个方向进行下降。(某次有可能不正确,最终会正确)
在这里插入图片描述

2.3 自适应学习率优化算法

(1)AdaGrad算法
       每个变量用不同的学习率,学习率越来越慢。(对于已经下降的变量,则减缓学习率,对于还没下降的变量,则保持较大的学习率)。

       模型收敛稳定(由于学习率越来越小,接近目标的时候震荡小)。

(2)RMSProp算法
在这里插入图片描述
       蓝色为Momentum,绿色为RMSProp
       ● 自适应调整学习率
       (避免了学习率越来越低的问题)

       ● 模型收敛稳定
       (消除了摆动大的方向,各个维度的摆动都较小)

(3)AdaDelta算法
       结合了AdaGrad和RMSProp
       ●训练速度快(模型训练初中期加速效果好,速度快)
       ●模型收敛不稳定(模型训练的后期,会反复在局部最小值附近抖动)

(4)Adam算法
       结合了AdaGrad和RMSProp
       对内存需要较小(适用于大数据集和高维空间)
       不同参数有独立自适应学习率(通过计算梯度的一阶矩估计和二阶矩估计)解决稀疏梯度和噪声问题(结合了AdaGrad和RMSProp算法最优的性能)

2.4 局部最小值和全局最小值

在这里插入图片描述
在这里插入图片描述

2.5 鞍点

在这里插入图片描述

### 梯度的定义 梯度是一个向量,表示多元函数在某一点处的变化率最大的方向变化速率。对于一个具有多个变量的标量函数 \( f(x_1, x_2, \ldots, x_n) \),其梯度由偏导数组成: \[ \nabla f = \left(\frac{\partial f}{\partial x_1}, \frac{\partial f}{\partial x_2}, \ldots, \frac{\partial f}{\partial x_n}\right)^T \] 梯度的方向指向函数增长最快的方向,而负梯度则指示函数减小最快的方向[^1]。 --- ### 梯度下降法的基本原理 梯度下降法是一种常用的优化算法,在机器学习领域广泛应用于寻找损失函数的最小值。该方法通过不断调整模型参数,使目标函数逐步接近最优解。以下是梯度下降法的核心思想: #### 1. **初始设定** 选择一组初始参数作为起点,并设置学习率(也称为步长),记作 \( \alpha \)。学习率决定了每一步更新的幅度大小。 #### 2. **迭代过程** 利用当前参数位置上的梯度信息,按照负梯度方向更新参数。假设目标函数为 \( J(\theta) \),其中 \( \theta \) 是待优化的参数,则参数更新公式如下: \[ \theta := \theta - \alpha \nabla_\theta J(\theta) \] 这里,\( \nabla_\theta J(\theta) \) 表示目标函数关于参数 \( \theta \) 的梯度[^2]。 #### 3. **收敛条件** 当梯度趋近于零或者达到预设的最大迭代次数时,停止更新。此时认为已经找到了局部极小值点。 --- ### 随机梯度下降与批量梯度下降的区别 为了提高效率并适应大规模数据集的需求,基于基础梯度下降法衍生出了两种主要变体:随机梯度下降 (Stochastic Gradient Descent, SGD) 批量梯度下降 (Batch Gradient Descent)。 - 批量梯度下降使用整个训练样本集合来计算每一次的梯度,这种方法虽然精确但可能非常耗时。 - 随机梯度下降每次仅选取单个样本来估计梯度,从而显著加快了计算速度,但也可能导致路径更加波动。 --- ### Python 实现示例 下面展示了一个简单的梯度下降算法实现,用于解决一元线性回归问题: ```python import numpy as np def compute_cost(X, y, theta): m = len(y) predictions = X.dot(theta) square_err = (predictions - y)**2 return 1 / (2 * m) * np.sum(square_err) def gradient_descent(X, y, theta, alpha, num_iters): m = len(y) cost_history = [] for i in range(num_iters): error = X.dot(theta) - y grad = (X.T).dot(error) / m theta -= alpha * grad cost = compute_cost(X, y, theta) cost_history.append(cost) return theta, cost_history # 初始化参数 X = np.array([[1, 2], [1, 3], [1, 4]]) y = np.array([7, 8, 9]) theta = np.zeros(2) alpha = 0.01 num_iters = 1000 optimal_theta, costs = gradient_descent(X, y, theta, alpha, num_iters) print("Optimal parameters:", optimal_theta) ``` 此代码片段展示了如何通过多次迭代逐渐逼近最佳拟合直线的斜率截距[^4]。 ---
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值