【机器学习】随机梯度下降算法以及优化

一、概述:

什么是梯度下降?

梯度下降法的基本思想可以类比为一个下山的过程。 假设这样一个场景:一个人被困在山上,需要从山上下来(i.e.找到山的最低点,也就是山谷)。但此时山上 的浓雾很大,导致可视度很低。因此,下山的路径就无法确定,他必须利用自己周围的信息去找到下山的 路径。这个时候,他就可以利用梯度下降算法来帮助自己下山。具体来说就是,以他当前的所处的位置为 基准,寻找这个位置最陡峭的地方,然后朝着山的高度下降的地方走,(同理,如果我们的目标是上山, 也就是爬到山顶,那么此时应该是朝着最陡峭的方向往上走)。然后每走一段距离,都反复采用同一个方 法,最后就能成功的抵达山谷。

梯度的概念:

梯度是微积分中一个很重要的概念 在单变量的函数中,梯度其实就是函数的微分,代表着函数在某个给定点的切线的斜率 在多变量函数中,梯度是一个向量,向量有方向,梯度的方向就指出了函数在给定点的上升最快的方向 这也就说明了为什么我们需要千方百计的求取梯度!我们需要到达山底,就需要在每一步观测到此时最陡 峭的地方,梯度就恰巧告诉了我们这个方向。梯度的方向是函数在给定点上升最快的方向,那么梯度的反 方向就是函数在给定点下降最快的方向,这正是我们所需要的。所以我们只要沿着梯度的反方向一直走, 就能走到局部的最低点。

梯度下降法中注意的点:

α-也就是步长

步长太小,下降太慢

步长太大,容易跳过极小值点

为什么梯度要加负号?

梯度方向是上升最快的方向,负号是下降最快的方向。

迭代次数和停止条件:

  • 需要设置合适的迭代次数和停止条件,避免过度拟合或欠拟合。

  • 停止条件可以设置为达到预设的迭代次数,或者当两次迭代之间的差值小于某个预设的阈值时停止。

初值的选择: 梯度下降法的初值选择会影响最终的结果。 在实际应用中,可以尝试不同的初值来观察结果的差异。

二、常见的梯度下降算法:

1. 全梯度下降算法(FG)

计算训练集所有样本的误差,并对其求和取平均值作为目标函数,然后沿着目标函数的负梯度方向更新参数

通过迭代的方式,不断调整模型参数,使得损失函数的值逐渐减小,从而得到最优解。

权重向量沿其梯度相反的方向移动,从而使当前目标函数减少得最多。

因为在执行每次更新时,我们需要在整个数据集上计算所有的梯度,所以全梯度下降法的速度会很慢,同时,全梯度下降法无法处理超出内存容量限制的数据集。

全梯度下降法同样也不能在线更新模型,即在运行的过程中,不能增加新的样本

其是在整个训练数据集上计算损失函数关于参数θ的梯度:

2. 随机梯度下降算法(SGD)

由于FG每迭代更新一次权重都需要计算所有样本误差,而实际问题中经常有上亿的训练样本,故效率偏低,且容易陷入局部最优解,因此提出了随机梯度下降算法。

随机梯度下降算法在每次迭代中,从训练集中随机选择一个样本来计算梯度,并据此更新模型参数。

其每轮计算的目标函数不再是全体样本误差,而仅是单个样本误差,即每次只代入计算一个样本目标函数的梯度来更新权重,再取下一个样本重复此过程,直到损失函数值停止下降或损失函数值小于某个可以容忍的阈值。

SGD特点:

计算效率高:由于每次迭代只使用一个样本,SGD的计算成本较低,可以处理大规模数据集。

收敛速度快:虽然SGD的收敛过程可能较为震荡,但由于其快速迭代的特点,通常能够在较短时间内达到一个较好的解。

对噪声敏感:由于每次迭代只使用一个样本,SGD对噪声和异常值较为敏感。 可能收敛到局部最优解:与全梯度下降算法相比,SGD更有可能收敛到局部最优解而非全局最优解。

3. 小批量梯度下降算法(Mini-batch Gradient Descent)

是介于全梯度下降算法和随机梯度下降算法之间的一种优化算法,常用于深度学习和其他大规模机器学习问题的训练过程中。,在一定程度上兼顾了以上两种方法的优点。

小批量梯度下降算法在每次迭代中,从训练集中随机选择一小批(mini-batch)样本来计算梯度,并据此更新模型参数。

被抽出的小样本集所含样本点的个数称为batch_size,通常设置为2的幂次方,更有利于GPU加速处理。

特别的,若batch_size=1,则变成了SG;若batch_size=n,则变成了FG.其迭代形式为:

4.随机平均梯度下降算法(SAG)

在SG方法中,虽然避开了运算成本大的问题,但对于大数据训练而言,SG效果常不尽如人意,因为每一轮梯度更新都完全与上一轮的数据和梯度无关。

随机平均梯度算法克服了这个问题,在内存中为每一个样本都维护一个旧的梯度,随机选择第i个样本来更新此样本的梯度,其他样本的梯度保持不变,然后求得所有梯度的平均值,进而更新了参数。

通过随机选择样本来更新梯度和模型参数,但与传统SGD不同的是,SAG利用了数据的重复利用,在每次迭代中都会更新所有样本的梯度,并使用这些梯度的平均值来更新模型参数。这样可以减小每次更新的方差,提高算法的稳定性,收敛速度也比SGD快。

5.算法比较

为了比对四种基本梯度下降算法的性能,我们通过一个逻辑二分类实验来说明。 数据集共有15081条记录,包括“性别”“年龄”“受教育情况”“每周工作时常”等14个特征,数据标记列显示“年薪是否大于50000美元”。我们将数据集的80%作为训练集,剩下的20%作为测试集,使用逻辑回归建立预测模型,根据数据点的14个特征预测其数据标记(收入情况)。

以下6幅图反映了模型优化过程中四种梯度算法的性能差异。

在图1和图2中,横坐标代表有效迭代次数,纵坐标代表平均损失函数值。图1反映了前25次有效迭代过程中平均损失函数值的变化情况,为了便于观察,图2放大了第10次到25次的迭代情况。

从图1中可以看到,四种梯度算法下,平均损失函数值随迭代次数的增加而减少FG的迭代效率始终领先,能在较少的迭代次数下取得较低的平均损失函数值。FG与SAG的图像较平滑,这是因为这两种算法在进行梯度更新时都结合了之前的梯度;SG与mini-batch的图像曲折明显,这是因为这两种算法在每轮更新梯度时都随机抽取一个或若干样本进行计算,并没有考虑到之前的梯度。

从图2中可以看到虽然四条折现的纵坐标虽然都趋近于0,但SG和FG较早,mini-batch最晚。这说明如果想使用mini-batch获得最优参数,必须对其进行较其他三种梯度算法更多频次的迭代。

在图3,4,5,6中,横坐标表示时间,纵坐标表示平均损失函数值。

从图3中可以看出使用四种算法将平均损失函数值从0.7降到0.1最多只需要2.5s,由于本文程序在初始化梯度时将梯度设为了零,故前期的优化效果格外明显。其中SG在前期的表现最好,仅1.75s便将损失函值降到了0.1,虽然SG无法像FG那样达到线性收敛,但在处理大规模机器学习问题时,为了节约时间成本和存储成本,可在训练的一开始先使用SG,后期考虑到收敛性和精度可改用其他算法。

从图4,5,6可以看出,随着平均损失函数值的不断减小,SG的性能逐渐反超FG,FG的优化效率最慢,即达到相同平均损失函数值时FG所需要的时间最久。

综合分析六幅图我们得出以下结论:

(1)FG方法由于它每轮更新都要使用全体数据集,故花费的时间成本最多,内存存储最大。

(2)SAG在训练初期表现不佳,优化速度较慢。这是因为我们常将初始梯度设为0,而SAG每轮梯度更新都结合了上一轮梯度值。

(3)综合考虑迭代次数和运行时间,SG(随机梯度下降,也叫SGD)表现性能都很好,能在训练初期快速摆脱初始梯度值,快速将平均损失函数降到很低。但要注意,在使用SG方法时要慎重选择步长,否则容易错过最优解。

(4)mini-batch结合了SG的“胆大”和FG的“心细”,从6幅图像来看,它的表现也正好居于SG和FG二者之间。在目前的机器学习领域,mini-batch是使用最多的梯度下降算法,正是因为它避开了FG运算效率低成本大和SG收敛效果不稳定的缺点。

三、梯度下降优化算法

以下这些算法主要用于深度学习优化

1.动量法

动量法(Momentum Method)是对传统梯度下降算法的一种改进,旨在解决梯度下降算法中收敛速度慢和容易陷入局部最优解的问题。动量法通过引入一个动量项来加速优化过程,并减少震荡现象。


(v(t) = \beta v(t-1) + (1-\beta) \nabla L(w(t)))

(v(t)) 表示第 (t) 步迭代时的动量。

(\beta) 是动量因子,通常取值在0.9左右。

(\nabla L(w(t))) 是损失函数 (L) 在当前参数 (w(t)) 下的梯度。

(w(t+1) = w(t) - \eta v(t))

(w(t)) 和 (w(t+1)) 分别表示第 (t) 步和第 (t+1) 步迭代时的参数值。

(\eta) 是学习率,控制每一步迭代的步长。

2.Adam算法

原理:

Adam(自适应矩估计)算法的基本思想是在梯度下降算法的基础上,引入两个动量变量来分别保存梯度的一阶矩估计和二阶矩估计,从而实现对学习率的自适应调整。具体来说,一阶矩估计类似于传统动量法中的动量项,用于加速参数更新;二阶矩估计则类似于RMSProp算法中的梯度平方的平均值,用于调整学习率的大小。

优化步骤:

1.计算梯度:  

     使用训练数据进行前向传播。  

     计算损失函数对模型参数的梯度。

2.更新动量:  

     一阶矩估计(动量项):记录历史梯度的加权平均,用于平滑梯度更新。  

     二阶矩估计(梯度平方的平均值):记录梯度平方的加权平均,用于调整学习率的大小。

3.偏差修正:  

     由于初始时动量值为0,Adam算法引入偏差修正来避免初期偏差。  

     对一阶矩估计和二阶矩估计进行修正。

4.参数更新:  

     使用修正后的一阶矩估计(动量项)和二阶矩估计(梯度平方的平均值)来更新模型的参数。  

     公式中的学习率、小常数和当前迭代步数等因素共同决定了参数更新的幅度和方向。

Adam优化算法对内存的需求很小,它结合了动量项,有效减少了训练过程中的震荡,并通过计算一阶和二阶矩估计自适应地调整每个参数的学习率。这种灵活性使得Adam能够针对不同参数设置最适合的学习步长,从而提高训练效率和模型性能。因此,Adam算法在各种深度学习任务中都表现出色,成为当今深度学习领域最受欢迎的优化算法之一。

四、总结

全梯度下降算法稳定但计算量大,适用于小数据集;随机梯度下降算法速度快,适用于大数据集但更新不稳定;小批量梯度下降则在这两者间找到了平衡。动量法通过引入动量项加速收敛并减少震荡,而Adam算法则通过自适应调整学习率实现高效计算,是目前广泛应用的优化算法,但其性能对参数选择较为敏感。

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/pingmian/16870.shtml

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

相关文章

【Postman接口测试】第一节.接口测试基础认识

文章目录 前言一、接口的基础 1.1 什么是接口 1.2 软件为什么需要接口 1.3 为什么要做接口测试二、接口测试的基础 2.1 接口测试介绍 2.2 接口测试的实现方式三、接口返回数据和JSON详解四、接口测试协议详解总结 前言 一、接口的基础知识 1.1 什么是…

出生率下降 幼儿园如何面对困境创新转型

从2023年开始,全国幼儿园生存发展问题成为教育界焦点,民办幼儿园更为焦虑满满。当今年轻人对待婚姻和生育的观念,的确让上一辈人始料未及。那么,是否幼儿园再也不可能回到巅峰时期了?是否很多幼儿教育者将无用武之地呢…

1+x(Java)中级题库易混淆理论题(二)

冷备份实质就是数据库相关文件的复制 System.in是字节流 Map集合中的key是无序的 protected不能用于修饰类 接口中所有抽象方法默认使用public修饰 DML操作有:INSERT UPDATE DELETE SQL 语句中进行 group by 分组时,可以不写 where 子句 使…

【权威出版】2024年土木工程、抗震构造与材料技术国际会议(CSCMT 2024)

2024年土木工程、抗震构造与材料技术国际会议 2024 International Conference on Civil Engineering, Seismic Construction, and Material Technology 【1】会议简介 2024年土木工程、抗震构造与材料技术国际会议即将召开,这是一次集结全球土木工程、抗震构造与材料…

网络其他重要协议(DNS、ICMP、NAT)

1.DNS DNS是一整套从域名映射到IP的系统 1.1 DNS背景 TCP/IP中使用IP地址和端口号来确定网络上的一台主机的一个程序,但是IP地址不方便记忆,例如我们想访问百度就会在浏览器中输入baidu.com而不是百度的IP地址。于是人们发明了一种叫主机名的东西, 是…

瞄准金融行业的远控木马:SpyNote

Android 间谍软件是最常见的恶意软件之一,攻击者通过 Android 间谍软件来跟踪用户位置、检查 Web 浏览记录,甚至窃取敏感信息(密码和信用卡号等),其对银行机构与客户构成的威胁与 Android 银行木马相媲美。间谍软件还可…

消息回复及时,客户不流失!这个微信自动回复设置快快码住!

你是不是也遇到过由于回复不及时,导致客户流失的情况发生?或是好友申请太多,来不及通过? 别担心,试试个微管理系统,让你实现自动回复,提高回复效率! 1、自动通过好友 当有新的好友…

Suricata-入门实验-快速理解suricata

实验环境: 主机win10 ip地址:192.168.121.1 虚拟机使用vm ubuntu20.04 ip地址:192.168.121.128 实验目标: 从主机 给虚拟机 发送ping 命令 虚拟机中Suricata接收到ping后发出告警信息。 正文 在前面 编译好Suricata后&#x…

postman调用Grpc

环境: .net6.0 一、准备 安装nuget: Grpc.AspNetCore Google.Protobuf Grpc.Core.Api Grpc.Tools Grpc.AspNetCore.Server.Reflection Program.cs: public class Program{public static void Main(string[] args){var builder WebApplicat…

报名倒计时!「飞天技术沙龙-CentOS 迁移替换专场」参会指南

为帮助广大用户诊断 CentOS 迁移替换过程中的疑难杂症,「飞天技术沙龙-CentOS 迁移替换专场」将于 5 月 29 日(周三)在北京举办,将围绕如何在确保服务的连续性和稳定性的前提下实现平滑迁移及如何最大限度地利用现有资源前提下确保…

App Inventor 2 Encrypt.Security 安全性扩展:MD5哈希,SHA/AES/RSA/BASE64

这是关于App Inventor和Thunkable安全性的扩展,它提供MD5哈希,SHA1和SHA256哈希,AES加密/解密,RSA加密/解密,BASE64编码/解码方法。 权限 此扩展程序不需要任何权限。 事件 OnErrorOccured 抛出任何异常时将触发此事件…

前端 CSS 经典:图片边框

前言&#xff1a;有这么一个业务&#xff0c;需要边框随着图片宽度的变化而变化&#xff0c;比如一些聊天的气泡框等。 实现原理&#xff1a;使用 border-image 属性 效果图&#xff1a; 实现代码&#xff1a; <!DOCTYPE html> <html lang"en"><he…

【区块链】caliper压力测试

本文上接postman接口测试 参照工程项目使用Caliper测试工具对食品安全溯源系统智能合约生成新食品(newFood)功能进行压力测试 首先启动webase python3 deploy.py startAll vim /opt/bencahmark/caliper-benchmark/networks/fisco-bcos/test-nw/fisco-bcos.json 命令便捷查…

Web3 游戏周报(5.19 - 5.25)

【5.19 - 5.25】Web3 游戏行业动态&#xff1a; Arbitrum 已开启 “2 亿枚 ARB 游戏催化剂计划”的提案投票。 STEPN 在官方 X 宣布将推出全新社交健身应用 STEPN GO。 Oasys 正式推出《足球小将》漫改 Web3 游戏《Captain Tsubasa-RIVALS-》。 Gala Games &#xff1a;已销…

华为交换机基础实验----VLAN基础

交换机篇实验&#xff1a; 给交换机创建VLAN 1.单个VLAN的创建 [S]vlan 10 查看的方法&#xff1a;dis vlan 2.批量创建vlan的方法 Vlan b 20 30 40 连续创建三个vlan&#xff0c;分别为vlan20 vlan30和vlan40 [SONY-S1-vlan10]vlan b 20 30 40 3.批量创建连续的vlan&#xf…

【Qt Creator】跨平台的C++图形用户界面应用程序开发框架---QT

&#x1f341;你好&#xff0c;我是 RO-BERRY &#x1f4d7; 致力于C、C、数据结构、TCP/IP、数据库等等一系列知识 &#x1f384;感谢你的陪伴与支持 &#xff0c;故事既有了开头&#xff0c;就要画上一个完美的句号&#xff0c;让我们一起加油 目录 1.互联网的核心岗位以及职…

宝塔下新增站点 No Input File Specified.错误修复

今天明月收到了一个购买【站长必备在线工具源码含上百款工具-博客优化修复版】用户的求助&#xff0c;在宝塔里新增网站部署好工具源码后&#xff0c;访问出现“No input file specified.”的提示。其实出现这个提示一般都是 PHP 文件无法被解析造成的。 简单排查了一下宝塔相关…

MySQL数据库语法(二)

一、数据库的创建 创建数据库CRATE DATABASE语法&#xff1a;CREATE DATABASE [IF NOT EXISTS]数据库名;功能&#xff1a;用给定的名字创建一个数据库如果数据库已经存在&#xff0c;发生一个错误。查看创建数据库&#xff1a;SHOW CREATE DATABASE <数据库名>&#xff…

疯狂“造人”!美国两党共推新法案,5年培养100万AI及量子人才

当前&#xff0c;全球量子计算人才的短缺已成为制约该领域快速发展的关键瓶颈。 为了解决量子计算人才短缺的问题&#xff0c;各国政府和企业采取了积极措施&#xff0c;加大了对量子教育和培训的投入。根据美国参议院官网消息&#xff0c;2024年5月23日&#xff0c;美国两党议…

【算法】位运算——常见位运算基础操作总结

位运算基础操作总结&#xff0c;包括基础运算符 修改某位bit位 目录 1.基础位运算符2.按位基础操作1.给一个数 n&#xff0c;确定其二进制的第 x 位是 0/12.将一个数 n 的二进制标识的第 x 位修改成 13.将一个数 n 的二进制标识的第 x 位修改成 04.提取一个数 n 二进制中最右侧…