欢迎光临散文网 会员登陆 & 注册

【论文】【优化算法】团队梯度下降算法

2023-06-03 23:09 作者:飞熊jSrt  | 我要投稿

引言

  梯度下降算法常用于在回归模型中求损失函数的最小值,梯度的求法是将函数的所有自变量全部求偏导,然后依次带入要求梯度的位置,再组合成向量。梯度下降的理念是不断沿着梯度的反方向走,找到最低点。每个自变量的迭代公式是表示学习率,即下降速度,下文为了方便会用v代替。

梯度下降有许多优化算法了。比如加上了加速度的梯度下降,可以防止只求出了局部最优解。还有自适应梯度下降,速度不断减少,还有两者的结合。可是加速度梯度算法还是有可能只求出局部最优解,自适应梯度下降很容易“半途而废”,自适应加速度梯度下降虽然更准确了些,但计算量有些大。而且他们都难以控制自己的精度。

我想到了一种基于梯度下降算法的优化算法,能够更好地解决复杂的函数。我本来是想如何通过梯度下降算法得到更精确的最低点,于是我便想到了本文所使用的这种方法,我将其命名为团队梯度下降算法(梯队下降)

介绍

团队梯度下降算法,是由许多个“探险者”组成的算法,探险者数量总为双数。每个探险者都有自己的起始点与速度,也有不同的“性格”。性格,就是影响他们学习率的参数,越这个值越大,学习率也就越大。我们一般先用一个名为pos的列表存储所有“探险者”的数据,他们的所有数据全为随机生成。性格的生成决定与他们在列表中的索引,即。我们通过不断遍历pos,遍历到探险者时先判断其在pos中的位置,若不是已知最低点,则根据其性格改变其学习率。我们仍然使用

abs(nps - ip)<0.0001

(源代码片段,表示为||<ε  ε(精度)暂定为0.0001)

决定其是否为最终输出结果。

Github开原地址:https://github.com/wdnmmd-250/Gradient-descent-algorithm-innovation.git   

 

 

     实验数据

       用于实验的函数:y=x^2 - 5cos(πx),最低点:x=0

       语言:python3

       编译器:测试传统算法:emacs 测试团队梯度下降算法:海龟编辑器

       硬件:测试传统算法:MacBook Air(版本忘了) 测试团队梯度下降算法:DELL+Win10

       1.传统梯度算法

              起始位置:x=5

              学习率:0.001

              结果:最低点:x=3.837505426858092

              耗时0.0003170967102050781秒(第一次)0.0004761219024658203(第二次)

              起始位置:x=3.5

              学习率:0.01

              结果:最低点:x=3.837505426858087(误差是因为学习率增加和位置变化)

              耗时2.8848648071289062e-05秒(第一次)4.410743713378906e-05(第二次)

       2.团队梯度算法

              到时候把代码发上来吧,位置学习率太随机了。直接贴数据

              前面是耗时/秒,后面是结论,小数因为语言原因没有化简

              (以下为三次运行结果)

              1.0.0006120204925537109 0

 

2.0.0003609657287597656 0

 

3.0.0006542205810546875 0.0

              可见此算法的准确性。

(下面为直观数据)

算法类型

数据

耗时/s

X结果(误差)

传统

X=5,   η=0.001

0.0003170967102050781

3.837505426858092

 

 

0.0004761219024658203

 

 

X=3.5, η=0.01

2.8848648071289062e-0

3.837505426858087

 

 

4.410743713378906e-05

 

团队

6个点

0.0009980201721191406

0

 

 

0.002001047134399414

0.0

 

 

0.0009982585906982422

0.0

 

 

 

              讨论&结论

我这个团队梯度下降算法还可以改进。其实团队梯度下降算法探险者的还可以再增加,这次是6,下次就8、10、16、204,越多肯定越准确,内存也会越大。同时,我的代码也太丑陋了,是可以优化的。团队梯度下降算法更可以是一种理念,可以往里面填充很多东西。比如我想在生成结果之前加一层与其他的探险者数据的相似度判断,可是还没有这个能力。

这个算法的缺点是,它需要的算力与运行时间不够迅速。优点是,只要探险者足够多,硬件足够“硬”,我们就可以获得全局视野,能够如同俯视图像一样轻易找到最低点。此算法相较于传统的准确性更高,真是一片前途似锦啊!

 

             


【论文】【优化算法】团队梯度下降算法的评论 (共 条)

分享到微博请遵守国家法律