【机器学习】 关于外插修正随机梯度方法的数值实验

news2025/5/23 16:00:45
1. 随机梯度下降(SGD)
  • 迭代格式
    x k + 1 = x k − η k ∇ f i ( x k ) x_{k+1} = x_k - \eta_k \nabla f_i(x_k) xk+1=xkηkfi(xk)
    其中, η k \eta_k ηk 为步长(可能递减), ∇ f i ( x k ) \nabla f_i(x_k) fi(xk) 是随机采样样本 i i i 的梯度估计。
  • 优点
  • 计算效率高,适合大规模数据集,每次迭代仅需单个样本的梯度 。
  • 在强凸问题中收敛速度为 O ( 1 / t ) O(1/t) O(1/t),非凸问题中为 O ( 1 / log ⁡ t ) O(1/\log t) O(1/logt)
  • 理论分析成熟,易于实现 。
  • 缺点
  • 收敛速度较慢,尤其在非凸问题中易陷入局部最优 。
  • 对步长敏感,需要精心调整参数以保证稳定性 。
2. 重球随机梯度方法(SHB)
  • 迭代格式
    x k + 1 = x k − η k ∇ f i ( x k ) + β ( x k − x k − 1 ) x_{k+1} = x_k - \eta_k \nabla f_i(x_k) + \beta (x_k - x_{k-1}) xk+1=xkηkfi(xk)+β(xkxk1)
    其中, β ∈ ( 0 , 1 ) \beta \in (0,1) β(0,1) 为动量参数,通过历史更新方向加速收敛。
  • 优点
    • 动量项可加速收敛,尤其在光滑强凸问题中表现优于固定步长的SGD 。
    • 对梯度噪声具有一定鲁棒性,通过历史梯度平均降低方差 。
  • 缺点
    • 早期迭代可能表现不佳,收敛速度不一定始终优于SGD 。
    • 参数选择(如 β \beta β η k \eta_k ηk)需谨慎,否则可能导致震荡或发散 。
    • 在有限和随机设置中,缺乏严格的加速收敛证明 。
3. Nesterov随机梯度方法(SNAG)
  • 迭代格式
    y k = x k + γ k ( x k − x k − 1 ) x k + 1 = y k − η k ∇ f i ( y k ) y_k = x_k + \gamma_k (x_k - x_{k-1}) \\ x_{k+1} = y_k - \eta_k \nabla f_i(y_k) yk=xk+γk(xkxk1)xk+1=ykηkfi(yk)
    其中, γ k \gamma_k γk 为动量系数,通常在Nesterov方法中设计为时变参数。
  • 优点
    • 在凸问题中理论收敛速度可达 O ( 1 / t 2 ) O(1/t^2) O(1/t2),显著快于SGD 。
    • 通过“前瞻梯度”设计,减少震荡并提高稳定性 。
    • 实验显示在分类和图像任务中优于传统动量方法 。
  • 缺点
    • 随机环境下(如有限和设置)可能发散,需额外条件保证收敛 。
    • 实现复杂度较高,需同时维护多个变量(如 x k x_k xk y k y_k yk)。
  • 参数调节更复杂,尤其在非凸问题中收敛性理论尚不完善 。

以上段落来自 秘塔 AI 综述的结果(先搜索后扩展选项, 文献均来自中英文论文而非全网)。该完整版请移步至链接

https://metaso.cn/s/ThPU2bK

以下我们给出一组实验来探讨 Nesterov 加速方法的参数选择, 收敛效果请大家自行验证,这里放上一个数值结果图作为代表
在这里插入图片描述

其中一点比较尴尬的现象是确定问题中 θ k = k − 1 k + 2 \theta_k=\frac{k-1}{k+2} θk=k+2k1 类型的外插参数在随机问题中的数值实验中的表现并不好,有一子列不收敛到0,但是仍有大量文献包括教材,论文仍然推荐使用这类策略。但是换成任何一个介于开区间 ( 0 , 1 ) (0,1) (0,1) 的常数,例如 0.9, 0.99 则有明显的序列收敛至0的趋势, 从本文给的算例来看是非常简单的凸二次 x 0 2 + x 1 2 + 2 ξ 0 x 0 + 2 ξ 1 x 0 x_0^2+x_1^2+2\xi_0 x_0+2\xi_1x_0 x02+x12+2ξ0x0+2ξ1x0,其中 ξ i \xi_i ξi 服从 N ( 0 , I ) N(0,I) N(0,I) 二维标准正态分布。为了压缩噪声影响,采用递减步长 α k = 1 ( k + 2 ) γ \alpha_k=\frac{1}{(k+2)^\gamma} αk=(k+2)γ1

  1. 规模小:仅2维问题
  2. 强凸
  3. 可微,且随机梯度关于自变量 x x x 是李普希兹连续的
  4. 随机样本噪声期望存在,方差有界

很难相信这样二维简单的例子参数 θ k = k − 1 k + 2 \theta_k=\frac{k-1}{k+2} θk=k+2k1 都不收敛,其在大规模以及大数据问题中会具有较好的收敛效果,欢迎大家参与实验与讨论。

Python 代码如下:

import numpy as np
import matplotlib.pyplot as plt
import numpy.linalg as la
iters=1000000
root=np.array([1.0,3.0])
vec1=root.copy()
vec2=root.copy()
dim=len(root)
path=np.zeros([iters,dim])
def gobj(x,xi):
    return(2*(x+xi))
gamma=1

#  (k-1)/(k+2)  ===============================
np.random.seed(0)
for k in range(iters):    
    theta= (k-1)/(k+2)
    root=(1.0+theta)*vec2-theta*vec1
    a=1/(k+1)**gamma
    xi=np.random.randn(2)
    vec1=vec2.copy()
    vec2=root - a*gobj(root,xi)
    path[k,:]=root
V=np.zeros(iters)
for k in range(iters):
    V[k]=la.norm(path[k,:])
plt.loglog(V,'-.')
plt.grid(True)

# 0.99    ===============================
iters=1000000
root=np.array([1.0,3.0])
vec1=root.copy()
vec2=root.copy()
dim=len(root)
path=np.zeros([iters,dim])
np.random.seed(0)
for k in range(iters):    
    theta= 0.99
    root=(1.0+theta)*vec2-theta*vec1
    a=1/(k+1)**gamma
    xi=np.random.randn(2)
    vec1=vec2.copy()
    vec2=root - a*gobj(root,xi)
    path[k,:]=root
V=np.zeros(iters)
for k in range(iters):
    V[k]=la.norm(path[k,:])
plt.loglog(V,'--')
plt.grid(True)


# 0.9  ===============================
iters=1000000
root=np.array([1.0,3.0])
vec1=root.copy()
vec2=root.copy()
dim=len(root)
path=np.zeros([iters,dim])
np.random.seed(0)
for k in range(iters):    
    theta= 0
    root=(1.0+theta)*vec2-theta*vec1
    a=1/(k+1)**gamma
    xi=np.random.randn(2)
    vec1=vec2.copy()
    vec2=root - a*gobj(root,xi)
    path[k,:]=root
V=np.zeros(iters)
for k in range(iters):
    V[k]=la.norm(path[k,:])
plt.loglog(V,'.-')
plt.grid(True)



plt.legend(['(k-1)/(k+2)',0.99,0.5,'2/(k+2)'])
plt.show()

Matlab 代码如下

% (k-1)/(k+2)   ===============================
init=[1,3];
lth=length(init);
fobj=@(x,xi)(x*x'+2*xi*x');
gobj=@(x,xi)(2*x+2*xi);
iters=1000000;
path=ones(iters+1,length(init));
path(1,:)=init;
root=init;
randn('seed',1)
for k =1:iters
  if k<2
     xi=randn(1,lth);
     a=1/(k+2)^(2/3);
     root=root-a*gobj(root,xi);
     path(k+1,:)=root;
   else
     xi=randn(1,lth);
     a=1/(k+2)^(2/3);
     v=root-a*gobj(root,xi);
     path(k+1,:)=v;
     theta=(k-1)/(k+2);
     th=theta;
     root=(1+th)*path(k+1,:)-theta*path(k,:);
   end
end
Vk=ones(iters+1,1);
for k=1:iters+1
  Vk(k)= path(k,:)*path(k,:)';
end
loglog(Vk,'--')
grid on;
hold on;

% theta=0.99    ===============================
init=[1,3];
iters=1000000;
path=ones(iters+1,length(init));
path(1,:)=init;
root=init;
randn('seed',1)
for k =1:iters
  if k<2
     xi=randn(1,lth);
     a=1/(k+2)^(2/3);
     root=root-a*gobj(root,xi);
     path(k+1,:)=root;
   else
     xi=randn(1,lth);
     a=1/(k+2)^(2/3);
     v=root-a*gobj(root,xi);
     path(k+1,:)=v;
     theta=0.99;
     th=theta;
     root=(1+th)*path(k+1,:)-theta*path(k,:);
   end
end
Vk=ones(iters+1,1);
for k=1:iters+1
  Vk(k)= path(k,:)*path(k,:)';
end
loglog(Vk,'--')
grid on;
hold on;

% theta=0.9     ===============================
init=[1,3];
iters=1000000;
path=ones(iters+1,length(init));
path(1,:)=init;
root=init;
randn('seed',1)
for k =1:iters
  if k<2
     xi=randn(1,lth);
     a=1/(k+2)^(2/3);
     root=root-a*gobj(root,xi);
     path(k+1,:)=root;
   else
     xi=randn(1,lth);
     a=1/(k+2)^(2/3);
     v=root-a*gobj(root,xi);
     path(k+1,:)=v;
     theta=0.9;
     th=theta;
     root=(1+th)*path(k+1,:)-theta*path(k,:);
   end
end
Vk=ones(iters+1,1);
for k=1:iters+1
  Vk(k)= path(k,:)*path(k,:)';
end
loglog(Vk,'--')
grid on;
hold on;


% theta=0.9  ===================================================================
init=[1,3];

iters=1000000;
path=ones(iters+1,length(init));
path(1,:)=init;
root=init;
randn('seed',1)
for k =1:iters
  if k<2
     xi=randn(1,lth)
     a=1/(k+2)^(2/3);
     root=root-a*gobj(root,xi);
     path(k+1,:)=root;
   else
     xi=randn(1,lth);
     a=1/(k+2)^(2/3);
     v=root-a*gobj(root,xi);
     path(k+1,:)=v;
     theta=0.5;
     th=theta;
     root=(1+th)*path(k+1,:)-theta*path(k,:);
   end
end
Vk=ones(iters+1,1);
for k=1:iters+1
  Vk(k)= path(k,:)*path(k,:)';
end
loglog(Vk,'--')
grid on;
hold on;
legend('(k-1)/(k+2)','0.99','0.9','0.5')

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

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

相关文章

结构型:组合模式

目录 1、核心思想 2、实现方式 2.1 模式结构 2.2 实现案例 3、优缺点分析 4、适用场景 1、核心思想 目的&#xff1a;将总是在重复、迭代地显示的某种自相似性的结构&#xff08;部分与整体结构特征相似&#xff09;&#xff0c;例如树形结构&#xff0c;以统一的方式处…

windows 删除文件夹提示“操作无法完成,因为其中的文件夹或文件已在另一程序中打开”

windows 删除文件夹提示“操作无法完成&#xff0c;因为其中的文件夹或文件已在另一程序中打开” tomact已经关闭了&#xff0c;刚开始怀疑是tomcat关闭不彻底&#xff0c;但是任务管理器–》进程里根本没有java的进程了&#xff0c;由于是医院服务器、不方便重启 解决方法&am…

微信小程序中,解决lottie动画在真机不显示的问题

api部分 export function getRainInfo() {return onlineRequest({url: /ball/recruit/getRainInfo,method: get}); }data存储json数据 data&#xff1a;{rainJson:{} }onLoad方法获取json数据 onLoad(options) {let that thisgetRainInfo().then((res)>{that.setData({r…

Wireshark 抓包工具使用

1.下载地址 https://2.na.dl.wireshark.org/win64/ 或者 Wireshark Go Deep 2.安装并打开 3.电脑设置热点&#xff0c;手机连接热点 4.手机发起网络请求&#xff0c;工具上选择WLAN。或者本地连接 5.点击查看抓包数据&#xff0c;过滤。最好用发送端ip过滤&#xff0c;s…

大语言模型(LLM)本身是无状态的,怎么固化记忆

大语言模型(LLM)本身是无状态的,无法直接“记住”历史对话或用户特定信息 大语言模型(LLM)本身是无状态的,无法直接“记住”历史对话或用户特定信息,但可以通过架构改进、外部记忆整合、训练方法优化等方案实现上下文记忆能力。 一、模型内部记忆增强:让LLM“记住”…

JUC入门(六)

12、四大函数式接口 Consumer<T>&#xff08;消费者接口&#xff09; 源码 功能 接收一个参数T&#xff0c;不返回任何结果。主要用于消费操作&#xff0c;例如打印日志、更新状态等。 使用场景 遍历集合并执行操作。 对象的字段赋值。 代码示例 import java.util.…

window xampp apache使用腾讯云ssl证书配置https

下载腾讯云ssl证书&#xff1a; 编辑Apache根目录下 conf/httpd.conf 文件&#xff1a; #LoadModule ssl_module modules/mod_ssl.so和#Include conf/extra/httpd-ssl.conf&#xff0c;去掉前面的#号注释。 编辑Apache根目录下 conf/httpd-ssl.conf 文件&#xff1a; <Vi…

逆向音乐APP:Python爬虫获取音乐榜单 (1)

1. 引言 在数字音乐时代&#xff0c;许多平台如音乐有榜单&#xff0c;限制非付费用户访问高音质或独家内容。然而&#xff0c;从技术研究的角度来看&#xff0c;我们可以通过逆向工程和Python爬虫技术解音乐的API接口&#xff0c;获取付费音乐的播放链接。 2. 技术准备 在当…

支持向量存储:PostgresSQL及pgvector扩展详细安装步骤!老工程接入RAG功能必备!

之前文章和大家分享过&#xff0c;将会出一篇专栏&#xff08;从电脑装ubuntu系统&#xff0c;到安装ubuntu的常用基础软件&#xff1a;jdk、python、node、nginx、maven、supervisor、minio、docker、git、mysql、redis、postgresql、mq、ollama等&#xff09;&#xff0c;目前…

idea常用配置 properties中文输出乱码

propertis配置中文乱码 源码和编译后的都是中文 程序输入效果 idea配置3处 程序输出效果 自定义注释模板 IDEA 中有以下两种配置模板。 File and Code Templates Live Templates File and Code Templates File and Code Templates 用来配置文件和代码模板&#xff0c;即…

day1 大模型学习 Qwen系列学习

Qwen 模型学习笔记:RM、SFT 与 RLHF 技术解析 一、Qwen 模型概述 Qwen 是阿里巴巴开源的大型语言模型系列,旨在实现通用人工智能(AGI)。其架构包括基础语言模型(如 Qwen-7B、Qwen-14B、Qwen-72B)和经过后训练的对话模型(如 Qwen-Chat)。后训练主要通过 SFT 和 RLHF 技…

Unity3D仿星露谷物语开发47之砍树时落叶特效

1、目标 当橡树被砍伐时的落叶粒子效果。 2、创建粒子物体 Hierarchy -> PersistentScene下创建新物体命名为DeciduousLeavesFalling。 添加Particle System组件。 基础配置如下&#xff1a;&#xff08;暂时勾选Looping实时可以看生成效果&#xff0c;后面反选即可&am…

第十节第六部分:常见API:DateTimeFormatter、Period、Duration

DateTimeFormatter类常用方法 Period类常用方法 Duration类常用方法 总结 代码&#xff1a; 代码一&#xff1a;DateTimeFormatter类常用方法 package com.itheima.jdk8_time;import java.time.LocalDateTime; import java.time.format.DateTimeFormatter;public class DateT…

如何在VSCode中更换默认浏览器:完整指南

引言 作为前端开发者&#xff0c;我们经常需要在VSCode中快速预览HTML文件。默认情况下&#xff0c;VSCode会使用系统默认浏览器打开文件&#xff0c;但有时我们可能需要切换到其他浏览器进行测试。本文将详细介绍如何在VSCode中更换默认浏览器。 方法一&#xff1a;使用VSCo…

【机器人】复现 3D-Mem 具身探索和推理 | 3D场景记忆 CVPR 2025

3D-Mem 是用于具体探索和推理的3D场景记忆&#xff0c;来自CVPR 2025. 本文分享3D-Mem复现和模型推理的过程&#xff5e; 下面是一个推理和选择识别的结果&#xff1a; 看一下机器人探索的效果&#xff1a; 下面是真实环境下&#xff0c;官方跑的demo&#xff0c;3D-Mem无需训…

鸿蒙进阶——CMakelist、GN语法简介及三方库通用移植指南

文章大纲 引言一、GN常用的内置变量二、GN常用的内置函数三、CMake 重要语法1、生成动态库2、生成静态库3、生成OBJECT 库4、重要的函数和模块4.1、add_definitions4.2、execute_process4.3、add_dependencies4.4、install4.5、FetchContent 四、GN 重要语法1、编译Target2、预…

CSS-5.1 Transition 过渡

本系列可作为前端学习系列的笔记&#xff0c;代码的运行环境是在HBuilder中&#xff0c;小编会将代码复制下来&#xff0c;大家复制下来就可以练习了&#xff0c;方便大家学习。 HTML系列文章 已经收录在前端专栏&#xff0c;有需要的宝宝们可以点击前端专栏查看&#xff01; 点…

从虚拟仿真到行业实训再到具身智能--华清远见嵌入式物联网人工智能全链路教学方案

2025年5月23-25日&#xff0c;第63届中国高等教育博览会&#xff08;高博会&#xff09;将在长春中铁东北亚国际博览中心举办。作为国内高等教育领域规模大、影响力广的综合性展会&#xff0c;高博会始终聚焦教育科技前沿&#xff0c;吸引全国高校管理者、一线教师、教育科技企…

告别手动绘图!2分钟用 AI 生成波士顿矩阵

波士顿矩阵作为经典工具&#xff0c;始终是企业定位产品组合、制定竞争策略的核心方法论。然而&#xff0c;传统手动绘制矩阵的方式&#xff0c;往往面临数据处理繁琐、图表调整耗时、团队协作低效等痛点。 随着AI技术的发展&#xff0c;这一现状正在被彻底改变。boardmix博思白…

GraphPad Prism工作表的管理

《2025新书现货 GraphPad Prism图表可视化与统计数据分析&#xff08;视频教学版&#xff09;雍杨 康巧昆 清华大学出版社教材书籍 9787302686460 GraphPadPrism图表可视化 无规格》【摘要 书评 试读】- 京东图书 GraphPad Prism统计数据分析_夏天又到了的博客-CSDN博客 工作…