当前位置: 首页 > news >正文

李宏毅机器学习笔记——梯度下降法

深度学习介绍

基于仿生学的一种自成体系的机器学习算法,包括但不限于图像识别、语音、文本领域。

梯度下降法

作为深度学习算法种常用的优化算法

梯度下降法,是一种基于搜索的最优化方法,最用是最小化一个损失函数。梯度下降是迭代法的一种,可以用于求解最小二乘问题(线性和非线性都可以)。在求解机器学习算法的模型参数,即无约束优化问题时,梯度下降是最常采用的方法之一,另一种常用的方法是最小二乘法。在求解损失函数的最小值时,可以通过梯度下降法来一步步的迭代求解,得到最小化的损失函数和模型参数值。
当然可以!以下是关于梯度下降法的详细介绍,使用 LaTeX 格式进行排版,并将希腊字母用美元符号表示:

梯度下降法

梯度下降法(Gradient Descent)是一种用于优化的迭代算法,广泛应用于机器学习和深度学习中,以最小化损失函数并找到模型的最佳参数。它的基本思想是通过计算损失函数相对于模型参数的梯度(即导数),来更新参数,从而逐步逼近损失函数的最小值。

1. 基本原理

在多维空间中,损失函数可以看作是一个表面,梯度下降法通过以下步骤来寻找最低点:

  1. 初始化参数:随机选择初始参数值。
  2. 计算梯度:计算损失函数相对于每个参数的梯度。
  3. 更新参数:根据梯度的方向和学习率(step size)更新参数:
    θ = θ − α ∇ J ( θ ) \theta = \theta - \alpha \nabla J(\theta) θ=θαJ(θ)
    其中:
    • θ \theta θ 是参数,
    • α \alpha α 是学习率,
    • ∇ J ( θ ) \nabla J(\theta) J(θ) 是损失函数的梯度。
  4. 迭代:重复步骤 2 和 3,直到满足停止条件(如达到最大迭代次数或损失函数收敛)。
2. 学习率

学习率 α \alpha α 是一个超参数,控制每次更新的步长。选择合适的学习率非常重要:

  • 过大:可能导致参数更新过头,无法收敛,甚至发散。
  • 过小:收敛速度慢,可能需要更多的迭代次数。
3. 梯度下降的变种

梯度下降法有几种不同的变种,适用于不同的场景:

  • 批量梯度下降(Batch Gradient Descent):使用整个训练集计算梯度,适合小规模数据集,但在大数据集上计算开销较大。

  • 随机梯度下降(Stochastic Gradient Descent, SGD):每次只使用一个样本计算梯度,更新频繁,收敛速度快,但可能会在最优解附近震荡。

  • 小批量梯度下降(Mini-batch Gradient Descent):结合了批量和随机梯度下降的优点,每次使用一小部分样本进行更新,平衡了计算效率和收敛稳定性。

4. 动量法

为了加速收敛并减少震荡,动量法(Momentum)引入了“动量”概念,通过考虑过去的梯度来更新参数:

v t = β v t − 1 + ( 1 − β ) ∇ J ( θ ) v_t = \beta v_{t-1} + (1 - \beta) \nabla J(\theta) vt=βvt1+(1β)J(θ)
θ = θ − α v t \theta = \theta - \alpha v_t θ=θαvt

其中:

  • v t v_t vt 是当前的动量,
  • β \beta β 是动量衰减因子(通常取值在 0.9 到 0.99 之间)。
5. 自适应学习率方法

一些算法通过自适应调整学习率来提高收敛速度:

  • AdaGrad:根据参数的历史梯度调整学习率,适合稀疏数据。
  • RMSProp:对每个参数使用指数衰减平均来调整学习率,适合非平稳目标。
  • Adam:结合了动量法和 RMSProp 的优点,广泛应用于深度学习。
6. 应用

梯度下降法在许多机器学习和深度学习任务中都有广泛应用,包括但不限于:

  • 线性回归和逻辑回归
  • 神经网络的训练
  • 支持向量机(SVM)
  • 深度学习中的卷积神经网络(CNN)和循环神经网络(RNN)

总结

梯度下降法是优化问题中一种重要的工具,尤其在机器学习和深度学习中。通过不断迭代更新参数,梯度下降法能够有效地找到损失函数的最小值,从而提高模型的性能。选择合适的变种和超参数(如学习率)对于成功应用梯度下降法至关重要。

最小二乘法的问题

梯度下降

最小二乘法是一种用于回归分析的统计方法,旨在通过最小化观测值与模型预测值之间的平方差来估计模型参数。其核心思想是找到一条最佳拟合线,使得所有数据点到这条线的垂直距离的平方和最小。
在机器学习中,许多算法都需要最大化或最小化一个函数,这个函数被称为“目标函数”。通常,我们将最小化的一类函数称为“损失函数”。损失函数能够根据预测结果衡量模型预测能力的好坏。在求损失函数最小化的过程中,梯度下降法被广泛应用。

  1. 梯度的概念
    在直线方程中,导数代表斜率;在曲线方程中,导数代表切线的斜率。导数表示参数 θ \theta θ 单位变化时,损失函数相应的变化。通过图中的点可以发现,该点的导数为负值,因此随着参数 θ \theta θ 的增加,损失函数减小。导数从某种意义上还可以代表方向,对应着损失函数增大的方向。

import randomif __name__ == '__main__':x = [ i/100. for i in range(100)]y = [3*i+4+random.random()/100. for i in x]w = random.random()b = random.random()for _ in range(5000):for _x,_y in zip(x,y):y_pre  = _x*w+bo = y_pre-_yloss = o**2dw = -2*o*_xdb = -2*ow = w+0.1*dwb = b+0.1*dbprint(w,b,loss)

公式原理

梯度
∇ J ( θ 0 , θ 1 , … , θ n ) = ( ∂ J ∂ θ 0 , ∂ J ∂ θ 1 , … , ∂ J ∂ θ n ) \nabla J\left(\theta_{0}, \theta_{1}, \ldots, \theta_{n}\right)=\left(\frac{\partial J}{\partial \theta_{0}}, \frac{\partial J}{\partial \theta_{1}}, \ldots, \frac{\partial J}{\partial \theta_{n}}\right) J(θ0,θ1,,θn)=(θ0J,θ1J,,θnJ)
目标: 使 ∑ i = 1 m ( y ( i ) − y ^ ( i ) ) 2 \sum_{i=1}^{m}\left(y^{(i)}-\hat{y}^{(i)}\right)^{2} i=1m(y(i)y^(i))2 尽可能的小
y ^ ( i ) = θ 0 + θ 1 X 1 ( i ) + θ 2 X 2 ( i ) + ⋯ + θ n X n ( i ) \hat{y}^{(i)}=\theta_{0}+\theta_{1} X_{1}^{(i)}+\theta_{2} X_{2}^{(i)}+\cdots+\theta_{n} X_{n}^{(i)} y^(i)=θ0+θ1X1(i)+θ2X2(i)++θnXn(i)
目标: 使 ∑ i = 1 m ( y ( i ) − ( θ 0 + θ 1 X 1 ( i ) + θ 2 X 2 ( i ) + ⋯ + θ n X n ( i ) ) ) 2 \sum_{i=1}^{m}\left(y^{(i)}-\left(\theta_{0}+\theta_{1} X_{1}^{(i)}+\theta_{2} X_{2}^{(i)}+\cdots+\theta_{n} X_{n}^{(i)}\right)\right)^{2} i=1m(y(i)(θ0+θ1X1(i)+θ2X2(i)++θnXn(i)))2 尽可能小
∇ J ( θ ) = [ ∂ J ∂ θ 0 ∂ J ∂ θ 1 … ∂ J ∂ θ 2 ] = [ ∑ i − 1 m 2 ( y ( i ) − X ( i ) θ ) ⋅ ( − 1 ) ∑ i − 1 m 2 ( y ( i ) − X ( i ) θ ) ⋅ ( − X 1 ( i ) ) ∑ i = 1 m 2 ( y ( i ) − X ( i ) θ ) ⋅ ( − X 2 ( i ) ) … ∑ i = 1 m 2 ( y ( i ) − X ( i ) θ ) ⋅ ( − X n ( i ) ) ] = 2 ⋅ [ ∑ i − 1 m ( y ( i ) − X ( i ) θ ) ⋅ ( − 1 ) ∑ i = 1 m ( y ( i ) − X ( i ) θ ) ⋅ ( − X 1 ( i ) ) ∑ i = 1 m ( y ( i ) − X ( i ) θ ) ⋅ ( − X 2 ( i ) ) ⋯ ∑ i = 1 m ( y ( i ) − X ( i ) θ ) ⋅ ( − X n ( i ) ) ] \nabla J(\theta)=\left[\begin{array}{c} \frac{\partial J}{\partial \theta_{0}} \\ \frac{\partial J}{\partial \theta_{1}} \\ \ldots \\ \frac{\partial J}{\partial \theta_{2}} \end{array}\right]=\left[\begin{array}{c} \sum_{i-1}^{m} 2\left(y^{(i)}-X^{(i)} \theta\right) \cdot(-1) \\ \sum_{i-1}^{m} 2\left(y^{(i)}-X^{(i)} \theta\right) \cdot\left(-X_{1}^{(i)}\right) \\ \sum_{i=1}^{m} 2\left(y^{(i)}-X^{(i)} \theta\right) \cdot\left(-X_{2}^{(i)}\right) \\ \ldots \\ \sum_{i=1}^{m} 2\left(y^{(i)}-X^{(i)} \theta\right) \cdot\left(-X_{n}^{(i)}\right) \end{array}\right]=2 \cdot\left[\begin{array}{c} \sum_{i-1}^{m}\left(y^{(i)}-X^{(i)} \theta\right) \cdot(-1) \\ \sum_{i=1}^{m}\left(y^{(i)}-X^{(i)} \theta\right) \cdot\left(-X_{1}^{(i)}\right) \\ \sum_{i=1}^{m}\left(y^{(i)}-X^{(i)} \theta\right) \cdot\left(-X_{2}^{(i)}\right) \\ \cdots \\ \sum_{i=1}^{m}\left(y^{(i)}-X^{(i)} \theta\right) \cdot\left(-X_{n}^{(i)}\right) \end{array}\right] J(θ)= θ0Jθ1Jθ2J = i1m2(y(i)X(i)θ)(1)i1m2(y(i)X(i)θ)(X1(i))i=1m2(y(i)X(i)θ)(X2(i))i=1m2(y(i)X(i)θ)(Xn(i)) =2 i1m(y(i)X(i)θ)(1)i=1m(y(i)X(i)θ)(X1(i))i=1m(y(i)X(i)θ)(X2(i))i=1m(y(i)X(i)θ)(Xn(i))
由于目标函数的梯度随着特征向量的增加会越来越大,这是不合理的,因此我们给它加个系数 1 m \frac{1}{m} m1
目标: 使 1 m ∑ i = 1 m ( y ( i ) − y ^ ( i ) ) 2 \frac{1}{m} \sum_{i=1}^{m}\left(y^{(i)}-\hat{y}^{(i)}\right)^{2} m1i=1m(y(i)y^(i))2 尽可能的小
∇ J ( θ ) = 2 m [ ∑ i = 1 m ( y ( i ) − X ( i ) θ ) ⋅ ( − 1 ) ∑ i = 1 m ( y ( i ) − X ( i ) θ ) ⋅ ( − X 1 ( i ) ) ∑ i = 1 m ( y ( i ) − X ( i ) θ ) ⋅ ( − X 2 ( i ) ) ⋯ ∑ i = 1 m ( y ( i ) − X ( i ) θ ) ⋅ ( − X n ( i ) ) ] = 2 m [ ∑ i = 1 m ( y ( i ) − X ( i ) θ ) ⋅ ( − X 0 ( i ) ) ∑ i = 1 m ( y ( i ) − X ( i ) θ ) ⋅ ( − X 1 ( i ) ) ∑ i = 1 m ( y ( i ) − X ( i ) θ ) ⋅ ( − X 2 ( i ) ) ⋯ ∑ i = 1 m ( y ( i ) − X ( i ) θ ) ⋅ ( − X n ( i ) ) ] \nabla J(\theta)=\frac{2}{m}\left[\begin{array}{c} \sum_{i=1}^{m}\left(y^{(i)}-X^{(i)} \theta\right) \cdot(-1) \\ \sum_{i=1}^{m}\left(y^{(i)}-X^{(i)} \theta\right) \cdot\left(-X_{1}^{(i)}\right) \\ \sum_{i=1}^{m}\left(y^{(i)}-X^{(i)} \theta\right) \cdot\left(-X_{2}^{(i)}\right) \\ \cdots \\ \sum_{i=1}^{m}\left(y^{(i)}-X^{(i)} \theta\right) \cdot\left(-X_{n}^{(i)}\right) \end{array}\right]=\frac{2}{m}\left[\begin{array}{c} \sum_{i=1}^{m}\left(y^{(i)}-X^{(i)} \theta\right) \cdot\left(-X_{0}^{(i)}\right) \\ \sum_{i=1}^{m}\left(y^{(i)}-X^{(i)} \theta\right) \cdot\left(-X_{1}^{(i)}\right) \\ \sum_{i=1}^{m}\left(y^{(i)}-X^{(i)} \theta\right) \cdot\left(-X_{2}^{(i)}\right) \\ \cdots \\ \sum_{i=1}^{m}\left(y^{(i)}-X^{(i)} \theta\right) \cdot\left(-X_{n}^{(i)}\right) \end{array}\right] J(θ)=m2 i=1m(y(i)X(i)θ)(1)i=1m(y(i)X(i)θ)(X1(i))i=1m(y(i)X(i)θ)(X2(i))i=1m(y(i)X(i)θ)(Xn(i)) =m2 i=1m(y(i)X(i)θ)(X0(i))i=1m(y(i)X(i)θ)(X1(i))i=1m(y(i)X(i)θ)(X2(i))i=1m(y(i)X(i)θ)(Xn(i))
有时也取 J ( θ ) = 1 2 m ∑ i = 1 m ( y ( i ) − y ^ ( i ) ) 2 J(\theta)=\frac{1}{2 m} \sum_{i=1}^{m}\left(y^{(i)}-\hat{y}^{(i)}\right)^{2} J(θ)=2m1i=1m(y(i)y^(i))2

最小二乘法和梯度下降法是机器学习中非常重要的工具。通过最小化损失函数,我们可以有效地训练模型,使其能够更好地拟合数据。理解梯度的概念及其在优化过程中的作用,对于掌握机器学习算法的工作原理至关重要。随着技术的不断发展,梯度下降法也在不断演化,出现了许多变种,如随机梯度下降(SGD)、小批量梯度下降(Mini-batch Gradient Descent)等,这些方法在实际应用中展现出了良好的性能。

http://www.lryc.cn/news/579455.html

相关文章:

  • 映射阿里云OSS(对象存储服务)
  • 百度文心智能体平台x小米应用商店:联手打造行业首个智能体与应用市场跨端分发模式
  • webrtc-streamer视频流播放(rstp协议h264笔记)
  • KDD 2025 | 地理定位中的群体智能:一个多智能体大型视觉语言模型协同框架
  • Go应用容器化完全指南:构建最小化安全镜像的终极实践
  • I/O 线程 7.3
  • VTK中自定义双组分输入最大值滤波
  • 基于spark的北京房价数据分析及价格预测
  • npm 命令入门指南(前端小白版)
  • 以太坊 Legacy 交易和 EIP-1559 交易
  • C++ 标准模板库算法之 transform 用法
  • RAG从入门到高阶(二):Retrieve-and-Rerank
  • 开源无广告面板mdserver-web:替代宝塔实现服务器轻松管理
  • NCCL的基本使用和常用通信算法源码分析
  • 洛谷-循环结构(1)
  • 前端框架中注释占位与Fragment内容替换的实现与优化
  • 网络基础(3)
  • Spring 6 源码深度掘金:66+核心原理与高频面试攻坚指南
  • 【科研绘图系列】基于R语言的种质资源评分相关性分析与可视化教程
  • 【零基础学AI】第21讲:TensorFlow基础 - 神经网络搭建入门
  • 从生活实例看:点积、内积和矩阵乘法如何玩转机器学习
  • 【maven仓库搜索下载工作流程】
  • 后端 Maven打包 JAR 文件、前端打包dist文件、通过后端服务访问前端页面、Nginx安装与部署
  • 办公文档批量打印器 Word、PPT、Excel、PDF、图片和文本,它都支持批量打印。
  • Flask 遇到了 AttributeError: ‘Babel‘ object has no attribute ‘localeselector‘ 怎么解决
  • TinyWebserver学习(8)-定时器
  • 在 Jetson Orin 开发套件上使用 Hardware Encoder / Decoder 构建 FFmpeg
  • 仿真软件介绍 COMSOL Multiphysics 或 ANSYS Fluent 等 MATLAB OpenFOAM,和在化学上的应用实例
  • 2025年6月一区-田忌赛马优化算法Tianji’s horse racing optimization-附Matlab免费代码
  • Springboot3整合ehcache3缓存--XML配置和编程式配置