大模型算法面试笔记——常用优化器SGD,Momentum,Adagrad,RMSProp,Adam

常用参数:ttt-步数,α\alphaα-学习率,θ\thetaθ-参数,f(θ)f(\theta)f(θ)-目标函数,gtg_tgt-梯度,β1\beta_1β1-一阶矩衰减系数,通常取0.9,β2\beta_2β2-二阶矩,mtm_tmt-均值,vtv_tvt-方差,m^t\hat{m}_tm^t-mtm_tmt偏置矫正,v^t\hat{v}_tv^t-vtv_tvt偏置矫正。

  • 梯度下降(BGD):最简单的迭代求解算法,选取开始点θ0\theta_0θ0,对t=1,...,Tt=1,...,Tt=1,...,Tθt=θt−1−ηgt−1\theta_t=\theta_{t-1}-\eta g_{t-1}θt=θt1ηgt1,其中η\etaη是学习率。

  • 随机梯度下降(SGD):由于有nnn个样本时,为了减少计算量,所以SGD在时间ttt随机选取一个样本tit_iti来近似f(x)f(x)f(x),SGD的下降方向是对真实梯度方向的无偏估计。

  • 批量梯度下降(MBGD):为了充分利用GPU多核,计算批量的梯度,也是一个无偏的近似,但降低了方差。

  • 动量法(Momentum):为增加收敛的稳定性,并缓解陷入局部最优,动量法使用平滑过的梯度对权重更新:θt=θt−1−ηvt\theta_t=\theta_{t-1}-\eta v_tθt=θt1ηvt,它用一个动量vtv_tvt累加了过去的梯度,其中gtg_tgt为当前梯度:
    vt=βvt−1+(1−β)⋅gtv_t=\beta v_{t-1}+(1-\beta)·g_tvt=βvt1+(1β)gt

  • Adagrad:对于不同的参数,有时需要更新的幅度相差较大,此时不同参数就需要不同的学习率,Adagrad采用的方法是,将历史梯度的平方和累加起来,为学习率添加一个分母项Gt+ϵ\sqrt{G_t+\epsilon}Gt+ϵ,其中Gt=Gt−1+gt2G_t = G_{t-1}+g_t^2Gt=Gt1+gt2,因此,参数更新公式就变成:
    θt=θt−1−ηGt+ϵ⋅gt\theta_t=\theta_{t-1}-\frac{\eta}{\sqrt{G_t+\epsilon}}·g_tθt=θt1Gt+ϵηgt
    如此可见,对于梯度一直很大的参数,其对应的学习率就会变小,而如果参数的梯度很大,学习率相对就更大一点,实现了一定程度上的自动调整。此方法比较适合处理悉数数据,因为稀疏特征的参数更新少,学习率会较大,实现更快收敛,而缺点是累积梯度会随时间增大,导致学习率越来越小甚至接近0,可能导致后期收敛太慢。

  • RMSProp:和Adagrad类似,对累积平方梯度上做改进:Gt=λGt−1+(1−λ)⋅gt2G_t=\lambda G_{t-1}+(1-\lambda)·g_t^2Gt=λGt1+(1λ)gt2,参数更新公式相同。

  • Adam:结合了动量法和Adagrad,动态调整每个参数的学习率,同时利用梯度的一阶矩(动量)和二阶矩(自适应学习率,也可以理解为转动惯量)加速收敛。具体分为四步:
    计算梯度的一阶距估计:
    mt=β1⋅mt−1+(1−β1)⋅gtm_t=\beta_1·m_{t-1}+(1-\beta_1)·g_tmt=β1mt1+(1β1)gt
    计算梯度的二阶矩估计:
    vt=β2⋅vt−1+(1−β2)⋅gt2v_t=\beta_2·v_{t-1}+(1-\beta_2)·g_t^2vt=β2vt1+(1β2)gt2
    这样设计的原因是,展开式中,当t为无穷大时,历史梯度项权重系数和为1,此为数学依据:
    mt=(1−β1)(gt+β1gt−1+β12gt−2+β13gt−3+...)m_t=(1-\beta_1)(g_t+\beta_1g_{t-1}+\beta_1^2g_{t-2}+\beta_1^3g_{t-3}+...)mt=(1β1)(gt+β1gt1+β12gt2+β13gt3+...)
    ∑i=0∞β1i=11−β1\sum_{i=0}^{\infin}\beta^i_1=\frac{1}{1-\beta_1}i=0β1i=1β11
    由于初始项受初始值为0的影响较大,所以进行偏差修正,同理,这样设计的原因是有限项等比数列和公式∑i=0tβ1i=1−β1t1−β1\sum_{i=0}^{t}\beta^i_1=\frac{1-\beta_1^t}{1-\beta_1}i=0tβ1i=1β11β1t
    mt^=mt1−β1t,vt^=vt1−β2t\hat{m_t}=\frac{m_t}{1-\beta_1^t},\hat{v_t}=\frac{v_t}{1-\beta_2^t}mt^=1β1tmt,vt^=1β2tvt 例如,当t=1t=1t=1时:m^1=m11−β11=(1−β1)g11−β1=g1\hat{m}_1=\frac{m_1}{1-\beta_1^1}=\frac{(1-\beta_1)g_1}{1-\beta_1}=g_1m^1=1β11m1=1β1(1β1)g1=g1
    最后进行参数更新:
    θ=θt−1−ηv^t+ϵ⋅m^t\theta=\theta_{t-1}-\frac{\eta}{\sqrt{\hat{v}_t}+\epsilon}·\hat{m}_tθ=θt1v^t+ϵηm^t最后贴一个论文原文算法部分:
    请添加图片描述

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

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

相关文章

【计算机毕业设计】基于SSM的小型超市管理系统+LW

博主介绍:✌全网粉丝3W,csdn特邀作者、CSDN新星计划导师、Java领域优质创作者,掘金/华为云/阿里云/InfoQ等平台优质作者、专注于Java技术领域和学生毕业项目实战,高校老师/讲师/同行前辈交流✌ 技术范围:SpringBoot、Vue、SSM、HLMT、Jsp、PHP、Nodejs、…

火线、零线、地线

我们可以用 “水流” 来比喻 “电流”,这样理解起来会很简单:想象一下你家的电路就像一个 “闭合的水循环系统”:🔥 1. 火线 (Live Wire) - 好比 “进水管的高压端”作用: 从发电厂或变压器输送 高压电 到你家的插座或…

基于Vue3.0+Express的前后端分离的任务清单管理系统

文章目录 一、前端 0、项目介绍 0.1 主要功能介绍 0.2 UI展示 1、首页 2、待办事项管理 2.1 添加待办事项 2.2 展示待办事项 2.3 修改待办事项 2.4 删除待办事项 3、分类管理 3.1 添加分类 3.2 展示分类 3.3 修改分类 3.4 删除分类 4、团队成员管理 4.1 展示团队成员 二、后端 …

基于单片机智能交通灯设计

传送门 👉👉👉👉其他作品题目速选一览表 👉👉👉👉其他作品题目功能速览 概述 随着城市化进程的加快,城市交通流量日益增大,传统的固定配时交通灯已难以…

Datawhale AI夏令营——列车信息智能问答——科大讯飞AI大赛(基于结构化数据的用户意图理解和知识问答挑战赛)

前言 坐火车的你,遇到过这样的场景吗? 一次又一次查车次信息?赶火车狂奔,找检票口找到怀疑人生…想查“最早到北京的车”?时刻表翻到眼瞎!列车晚点?新出发时间算到脑壳疼! 我们这次将…

UVA11990 ``Dynamic‘‘ Inversion

UVA11990 Dynamic Inversion题目链接题意输入格式输出格式分析CDQ分治嵌套(树状数组套BST)分块k-D Tree题目链接 UVA11990 Dynamic’’ Inversion 题意 给一个 1~n 的排列A,要求按照某种顺序删除一些数(其他数顺序不变&#xff0…

银河麒麟“安装器”安装方法

书接上回:银河麒麟安装软件商店方法-CSDN博客 过了几天发现当时一不小心把系统自带的“安装器”软件也卸载掉了,导致现在deb文件只能通过命令行安装,寻思这可不行,就想一下应该怎么安装。 首先,为了确认一下安装器的…

计算机毕设分享-基于SpringBoot的健身房管理系统(开题报告+前后端源码+Lun文+开发文档+数据库设计文档)

基于SpringBoot的健身房管理系统分享一套完整的基于SpringBoot的健身房管理系统毕业设计(开题报告完整前后端源码Lun文 开发文档数据库设计文档)系统分为三个角色功能如下:用户功能需求描述管理员功能需求描述教练功能需求描述开题报告系统功…

代码审计与web安全选择题1

软件供应链安全的基础是( )A.完善的需求分析B.源代码安全C.渗透测试D.软件测试参考答案:B保证源代码安全的主要措施包括( )A.开发工具和环境的安全B.代码安全C.渗透测试D.代码审计E.软件的说明文档完整参考…

python基本数据类型 数据类型转换 数字 菜鸟教程笔记

python基本数据类型 数据类型转换 数字 菜鸟教程笔记 1.基本数据类型 Python 中的变量不需要声明。每个变量在使用前都必须赋值,变量赋值以后该变量才会被创建。 在 Python 中,变量就是变量,它没有类型,我们所说的"类型"…

USRP X410 X440 5G及未来通信技术的非地面网络(NTN)

概述 在本白皮书中,我们将介绍NTN的现状、正处于探索阶段的一些新应用,以及最重要的一点,我们需要克服哪些技术挑战才能让这个市场充满活力。最后,我们将概述为实现实用高效的测试,NI围绕NTN所做的努力,该测…

基于SpringBoot+Vue的电脑维修管理系统(WebSocket实时聊天、Echarts图形化分析)

“ 🎈系统亮点:WebSocket实时聊天、Echarts图形化分析”01系统开发工具与环境搭建—前后端分离架构项目架构:B/S架构运行环境:win10/win11、jdk17小程序端:技术:Uniapp;UI库:colorUI…

2025.7.28总结

今天真有点小烦,工作有些不太顺利,我是真没想到,阻塞我工作开展得竟然是我的主管。当初需求澄清的时候,开发说要申请一个便携,我当时申请的时候也跟主管说了,需求测试的时候要使用到,但主管要我…

DBA常用数据库查询语句

1 数据库信息 1.1 数据库概要 select a.name "DB Name",e.global_name "Global Name",c.host_name "Host Name",c.instance_name "Instance Name" ,DECODE(c.logins,RESTRICTED,YES,NO) "Restricted Mode",a.log_mode &quo…

【c++深入系列】:万字详解priority_queue(附模拟实现的源码)

🔥 本文专栏:c 🌸作者主页:努力努力再努力wz 💪 今日博客励志语录: 真正的强大,不是从不跌倒,而是每次跌倒后都能笑着站起来 ★★★ 本文前置知识: 模版 引入 那么pri…

分享一个脚本,从mysql导出数据csv到hdfs临时目录

想从mysql导出一个表到csv文件,然后上传到hdfs,开始使用sqoop,结果各种问题频出: https://blog.csdn.net/weixin_45357522/article/details/149498030 https://blog.csdn.net/weixin_45357522/article/details/149449413 特别是那…

OpenLayers 综合案例-区域掩膜

看过的知识不等于学会。唯有用心总结、系统记录,并通过温故知新反复实践,才能真正掌握一二 作为一名摸爬滚打三年的前端开发,开源社区给了我饭碗,我也将所学的知识体系回馈给大家,助你少走弯路! OpenLayers…

30天打牢数模基础-神经网络基础讲解

一、代码说明本代码基于模拟房价数据集,使用scikit-learn库中的MLPRegressor(多层感知器回归)实现神经网络模型,解决房价预测问题。代码逻辑清晰,适合数模小白入门,包含数据预处理、模型构建、训练评估、新…

Linux应用开发基础知识——LInux学习FreeType编程(七)

目录 一、使用freetype 显示一个文字 二、使用 freetype 显示一行文字 1. 了解笛卡尔坐标系 2. 每个字符的大小可能不同 3. 怎么在指定位置显示一行文字 4. freetype 的几个重要数据结构 4.1、FT_Library结构体 4.2、FT_Face结构体 4.3、FT_GlyphSlot结构体 4.4、FT_G…

Kotlin中Flow

Kotlin Flow 深度解析:从原理到实战一、Flow 核心概念体系1. Flow 的本质与架构Flow 是 Kotlin 协程库中的异步数据流处理框架,核心特点:响应式编程:基于观察者模式的数据处理协程集成:无缝融入 Kotlin 协程生态背压支…