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

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

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*vec1a=1/(k+1)**gammaxi=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.99root=(1.0+theta)*vec2-theta*vec1a=1/(k+1)**gammaxi=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= 0root=(1.0+theta)*vec2-theta*vec1a=1/(k+1)**gammaxi=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:itersif k<2xi=randn(1,lth);a=1/(k+2)^(2/3);root=root-a*gobj(root,xi);path(k+1,:)=root;elsexi=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+1Vk(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:itersif k<2xi=randn(1,lth);a=1/(k+2)^(2/3);root=root-a*gobj(root,xi);path(k+1,:)=root;elsexi=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+1Vk(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:itersif k<2xi=randn(1,lth);a=1/(k+2)^(2/3);root=root-a*gobj(root,xi);path(k+1,:)=root;elsexi=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+1Vk(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:itersif k<2xi=randn(1,lth)a=1/(k+2)^(2/3);root=root-a*gobj(root,xi);path(k+1,:)=root;elsexi=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+1Vk(k)= path(k,:)*path(k,:)';
end
loglog(Vk,'--')
grid on;
hold on;
legend('(k-1)/(k+2)','0.99','0.9','0.5')

相关文章:

  • C++ 02.好用的命令行解析库cmdline和CLI11
  • 【LLIE专题】基于事件相机照度估计的暗光增强方案
  • poppler_path 是用于 Python 库如 pdf2image 进行 PDF 转换时
  • 天文数据处理:基于CUDA的射电望远镜图像实时去噪算法(开源FAST望远镜数据处理代码解析)
  • 大规模实验管理系统的GPU资源调度设计(基于优先级队列的动态算力分配算法)
  • [原创](现代Delphi 12指南):[macOS 64bit App开发]: 如何获取目标App的程序图标?
  • Linux 之 MTD 子系统框架
  • 手机打电话时由对方DTMF响应切换多级IVR语音菜单(话术脚本与实战)
  • 第十节第六部分:常见API:DateTimeFormatter、Period、Duration
  • 智能办公协同系统开发日志(三):画板模块设计与实现全记录
  • Minion-Agent:软件测试领域的智能自动化实践
  • JUC入门(五)
  • DeepSeek Mermaid:如何将文本直接转化为精美图表? -优雅草卓伊凡
  • LeetCode Hot100(滑动窗口)
  • STL 转 STP 深度技术指南:从 3D 打印模型到工程标准的跨领域转换全解析(附迪威模型在线方案)
  • ai之pdf解析工具 PPStructure 还是PaddleOCR
  • 微信小程序之Promise-Promise初始用
  • 华为模拟器练习简单的拓扑图(3台路由器和2台pc)
  • 线性Wi-Fi FEM被卷死,非线性FEM是未来?
  • 【学习笔记】机器学习(Machine Learning) | 第七章|神经网络(3)
  • asp.net建网站/大数据网站
  • 浦江做网站/seo一键优化
  • 如何把网站建设好/抓关键词的方法10条
  • 网站上的美工图片要怎么做/seo1新地址在哪里
  • 彩票类网站是如何做代理的/24小时最新国际新闻
  • 渐变配色网站/最全bt搜索引擎入口