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

深度学习介绍

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

梯度下降法

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

梯度下降法,是一种基于搜索的最优化方法,最用是最小化一个损失函数。梯度下降是迭代法的一种,可以用于求解最小二乘问题(线性和非线性都可以)。在求解机器学习算法的模型参数,即无约束优化问题时,梯度下降是最常采用的方法之一,另一种常用的方法是最小二乘法。在求解损失函数的最小值时,可以通过梯度下降法来一步步的迭代求解,得到最小化的损失函数和模型参数值。
当然可以!以下是关于梯度下降法的详细介绍,使用 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.tpcf.cn/diannao/89600.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

day50/60

浙大疏锦行 DAY 50 预训练模型CBAM模块 知识点回顾: resnet结构解析CBAM放置位置的思考针对预训练模型的训练策略 差异化学习率三阶段微调 ps:今日的代码训练时长较长,3080ti大概需要40min的训练时长 作业: 好好理解下resnet18的…

Vue3 之vite.config.js配置

一、示例 import { defineConfig } from vite import vue from vitejs/plugin-vue import path from path // https://vitejs.dev/config/ export default defineConfig({plugins: [vue()],base: ./,build: {assetsDir: static, //指定静态资源目录rollupOptions: {input: {mai…

利用Gpu训练

方法一: 分别对网络模型,数据(输入,标注),损失函数调用.cuda() 网络模型: if torch.cuda.is_available():netnet.cuda() 数据(训练和测试): if torch.cud…

使用excel中的MATCH函数进行匹配数据

一、背景 在平日处理数据时,经常需要将给定数据按照制定的数据进行排序,数量比较大时,逐个处理有点费事费力且容易出错,这时可借助excel表格中match函数进行精确匹配。 二、使用match函数–精确排序操作步骤 主要工作步骤&#xf…

SpringCloud系列(41)--SpringCloud Config分布式配置中心简介

前言:微服务意味着要将单体应用中的业务拆分成一个个子服务,每个服务的粒度相对较小,因此系统中会出现大量的服务,但由于每个服务都需要必要的配置信息才能运行,所以—套集中式的、动态的配置管理设施是必不可少的&…

wireshark介绍和使用

Wireshark 介绍 Wireshark 是一款开源的 网络协议分析工具(Packet Sniffer),用于捕获和分析网络数据包。它支持多种协议解析,适用于网络调试、安全分析、网络教学等场景。 官网:https://www.wireshark.org/ 特点&#…

【甲方安全建设】敏感数据检测工具 Earlybird 安装使用详细教程

文章目录 背景工具介绍安装方法一、Linux 与 macOS 安装流程二、Windows 系统安装流程(一)三、Windows 系统安装流程(二)四、错误处理使用说明模块与规则机制集成与运维建议结语背景 随着源代码泄露、配置误提交、密码硬编码等风险频发,企业源代码库中潜在的敏感信息泄漏…

异步Websocket构建聊天室

目录 Websocket技术背景 Websockec简介 实现websocket通信程序 实验环境: 服务端(阿里云ESC,VPC网络): 客户端1(本机): 通信模型: 实现功能逻辑: 源代码: 服务…

OpenCV CUDA模块设备层-----反向二值化阈值处理函数thresh_binary_inv_func()

操作系统:ubuntu22.04 OpenCV版本:OpenCV4.9 IDE:Visual Studio Code 编程语言:C11 算法描述 OpenCV CUDA 模块(cudev) 中的一个仿函数(functor)生成器,用于创建一个反向二值化阈值…

【实现一个时间MCP完整技术解析】

🕒 MCP Time Server 完整技术解析:从核心实现到文件架构的深度剖析 目前已上传npm库,chan-mcp-time-server,有兴趣的可以下载试试 创建时间: 2025年7月2日 🎯 项目概述与架构设计 核心问题定义 AI助手在处理时间相关…

类成员方法命名风格解析:动宾、纯动词与纯名词的选择之道

在软件开发的浩瀚代码海洋中,类成员方法的命名犹如指引开发者的灯塔,其重要性不言而喻。合理的命名不仅能让代码 “自我言说”,降低理解成本,还能提升开发效率,促进团队协作。常见的类成员方法命名风格可归纳为动宾结构…

自己电脑搭建本地服务器并实现公网访问,内网也能提供互联网连接使用

如何在本地自己计算机上自建服务器并开启公网地址提供互联网服务的详细教学,一步步操作流程,从本地部署到配置公网IP,最后并附无公网IP内网穿透公网访问的nat123方案。 要在自用的电脑上搭建本地服务器并实现公网地址的访问,需要…

如何使用AI改进论文写作 ---- 引言篇(2)

写在前面 本篇作为1.0版本的补充优化,记录本人的研究过程。 在分析了多本论文写作的相关的书籍之后,我明白了一点,关于论文写作,永远是一个熟能生巧的过程,对于人来说,必须多写才能够变得熟练,对…

【Java21】在spring boot中使用ScopedValue

文章目录 0.环境说明1.基础知识1.1 ScopedValue的特点 2.应用场景2.1 spring web项目中,使用ScopedValue传递上下文(全局不可变量)2.2 spring grpc项目中,使用ScopedValue传递上下文(全局不可变量) 3.Scope…

第10篇 图像语义分割和目标检测介绍

语义分割(Semantic Segmentation)是图像处理和机器视觉一个重要分支,其目标是精确理解图像场景与内容。语义分割是在像素级别上的分类,属于同一类的像素都要被归为一类,因此语义分割是从像素级别来理解图像的。如下如所示的照片,属…

微算法科技(NASDAQ MLGO)基于量子图像处理的边缘检测算法:开拓图像分析新视野

在当今数字化时代,图像数据海量增长,边缘检测作为图像处理的关键环节,在机器视觉、医学成像、安防监控等众多领域有着至关重要的作用。传统边缘检测算法在处理复杂图像时,面临计算效率低、精度不足等问题。量子计算的兴起&#xf…

SM4密码算法的C语言实现(带测试)

一、SM4算法原理 SM4是中国国家密码管理局于2012年发布的国家商用密码算法标准,也称为GB/T 32907-2016。它是一种分组对称加密算法,采用32轮非线性迭代结构,分组长度和密钥长度均为128位。SM4算法的设计充分考虑了安全性、高效性和实现简便性…

【React Native原生项目不能运行npx react-native run-android项目】

运行命令报错,帮我修复X:\jetbrains-workspace\theme-wallpaper>npx react-native run-android error Android project not found. Are you sure this is a React Native project? If your Android files are located in a non-standard location (e.g. not inside ‘andro…

SPLADE 在稀疏向量搜索中的原理与应用详解

今天看到Sentence Transformers v5.0 集成了许多稀疏嵌入模型。为了搞清楚什么稀疏嵌入模型以及应用,查到了SPLADE,比较巧合的是在paper reading分享的时候看到有同学分享了一片ACL 2025的工作也是基于SPLADE去做的。下面结合一些资料分享关于SPLADE 在稀…

wpf的Binding之UpdateSourceTrigger

前言 在wpf界面开发中,Binding的源和目标之间可以通过Mode来决定数据的传递方向,同时数据传递时的触发条件也是可以有多种情况,多种情况由UpdateSourceTrigger属性来控制,该属性有Default、Explicit、LostFocus、PropertyChanged…