6 个版本
0.1.5 | 2024年2月27日 |
---|---|
0.1.4 | 2021年5月27日 |
0.1.3 | 2020年5月18日 |
357 在 算法 中排名
每月 73 次下载
70KB
946 行
多线程随机梯度下降
本包提供了某些随机梯度算法的 Rust 实现。
这里实现的算法致力于最小化由多个函数的均值表示的(凸)目标函数,这些函数在各种统计和学习环境中出现。
实现的算法包括
-
由李磊和 M.I Jordan 的两篇论文描述和分析的所谓 SCSG 算法。
-
由 R. Johnson 和 T. Zhang 的论文描述的 SVRG 算法 "使用预测方差减少加速随机梯度下降" (2013)。
神经网络信息处理系统进展,第 315–323 页,2013 -
由 M.Schmidt, N.LeRoux, F.Bach 描述的随机平均梯度下降 (SAG),如论文:“使用随机平均梯度最小化有限和” (2013, 2016)。
这些算法通过以下表达式最小化函数
f(x) = 1/n ∑ fᵢ(x) where fᵢ is a convex function.
算法交替进行某种形式的大批量计算(计算和的许多项的梯度)和小批量(计算少量项,可能只有一项,的梯度)并更新位置,通过结合这些全局和局部梯度来完成。
示例和测试
小型测试包括一个来自优化包的线性拟合问题。
示例基于逻辑回归应用于 MNIST 数据库(如 SCSG 的第二篇论文)。
数据文件可以从 MNIST 下载。
使用 3 种算法测试了具有 10 个类别的逻辑回归,并提供了比较结果的注释。
运行时间是在 i9-13900HX (32 个线程) 上获得的。我们给出了系统时间和最小化器中花费的 CPU 时间。
SCSG 逻辑回归
关于参数 B_0 和 m_O 的含义,请参阅 SCSG 文档。所有运行中 b_0 都设置为 1。
以下是一些结果
- 初始位置:9 张图像,恒定像素 = 0.5,初始位置的误差:6.94
迭代次数 | B_0 | m_0 | 步长_0 | 误差 | 时间(s) | CPU 时间(s) |
---|---|---|---|---|---|---|
50 | 0.015 | 0.004 | 0.1 | 0.285 | 2.9 | 14.8 |
50 | 0.015 | 0.006 | 0.1 | 0.279 | 6.8 | 19 |
100 | 0.02 | 0.004 | 0.1 | 0.266 | 7.89 | 32.5 |
50 | 0.02 | 0.004 | 0.1 | 0.289 | 3.89 | 16 |
150 | 0.02 | 0.004 | 0.1 | 0.257 | 12 | 50 |
150 | 0.02 | 0.002 | 0.1 | 0.269 | 6.5 | 45 |
- 初始位置:9 张图像,恒定像素 = 0.0,初始位置的误差:2.3
迭代次数 | B_0 | m_0 | 步长_0 | 误差 | 时间(s) | CPU 时间(s) |
---|---|---|---|---|---|---|
50 | 0.015 | 0.004 | 0.1 | 0.274 | 4.7 | 17 |
50 | 0.02 | 0.004 | 0.1 | 0.277 | 3.7 | 16.5 |
50 | 0.02 | 0.006 | 0.1 | 0.267 | 5.5 | 18 |
100 | 0.02 | 0.004 | 0.1 | 0.260 | 7.6 | 33 |
增加参数以降低minibatch数量来提高并行度。
从零图像初始化的收敛似乎比使用恒定的0.5像素稍微容易一些。
SVRG逻辑回归
- 初始位置:9 张图像,恒定像素 = 0.5,初始位置的误差:6.94
迭代次数 | nb迷你批处理 | 步骤 | 误差 | 时间(s) | CPU 时间(s) |
---|---|---|---|---|---|
100 | 1000 | 0.02 | 0.269 | 10.5 | 159 |
25 | 1000 | 0.05 | 0.288 | 2.6 | 40 |
50 | 1000 | 0.05 | 0.263 | 5. | 81 |
100 | 1000 | 0.05 | 0.249 | 10.2 | 160 |
- 初始位置:9 张图像,恒定像素 = 0.0,初始位置的误差:2.3
迭代次数 | nb迷你批处理 | 步骤 | 误差 | 时间(s) | CPU 时间(s) |
---|---|---|---|---|---|
50 | 1000 | 0.05 | 0.258 | 5.3 | 80 |
50 | 2000 | 0.05 | 0.247 | 7.5 | 81 |
100 | 1000 | 0.05 | 0.247 | 10 | 161 |
SAG逻辑回归
- 初始位置:9 张图像,恒定像素 = 0.5,初始位置的误差:6.94
迭代次数 | 批大小 | 步骤 | 误差 | 时间(s) | CPU 时间(s) |
---|---|---|---|---|---|
1000 | 1000 | 0.2 | 0.47 | 17 | 272 |
1000 | 1000 | 0.5 | 0.35 | 17 | 273 |
1000 | 2000 | 0.5 | 0.34 | 17.6 | 262 |
2000 | 1000 | 0.5 | 0.297 | 34.6 | 546 |
结果
测试表明,在正确初始化和远离解的情况下,SCSG在等效精度下CPU时间比SVRG高1.5倍。SVRG明显优于SAG。
SCSG在达到良好的近似值(约0.28)方面非常快,尽管在这个实现中它从未运行在整个(十分之一)。SCSG需要更大的问题才能从多线程中受益。
致谢
这个crate借鉴了crate 优化,在其中我保留了经过各种修改后定义用户界面的Function
和Summation
特质,这些修改在文件types.rs
中详细说明。
许可证
根据您的选择,许可如下:
- Apache License,版本2.0,LICENSE-APACHE或https://apache.ac.cn/licenses/LICENSE-2.0
- MIT许可证LICENSE-MIT或http://opensource.org/licenses/MIT
。
依赖项
~5MB
~90K SLoC