加入收藏 | 设为首页 | 会员中心 | 我要投稿 河北网 (https://www.hebeiwang.cn/)- 科技、建站、经验、云计算、5G、大数据,站长网!
当前位置: 首页 > 建站 > 正文

用三维Demo看懂各种优化算法,还有C++程序员福音

发布时间:2019-04-02 12:11:55 所属栏目:建站 来源:晓查
导读:本文经AI新媒体量子位(公家号ID:QbitAI)授权转载,转载请接洽出处。 呆板进修里的优化算法许多,好比SGD、Adam、AdaGrad、AdaDelta等等,光是它们的迭代公式就已经够让人头疼。 亏得TensorFlow、Keras、PyTorch中都集成了这些优化器材,但它们是如安在一
副问题[/!--empirenews.page--]

本文经AI新媒体量子位(公家号ID:QbitAI)授权转载,转载请接洽出处。

呆板进修里的优化算法许多,好比SGD、Adam、AdaGrad、AdaDelta等等,光是它们的迭代公式就已经够让人头疼。

用三维Demo看懂各类优化算法,尚有C++措施员福音

亏得TensorFlow、Keras、PyTorch中都集成了这些优化器材,但它们是如安在一步步迭代中“滑落”到最小值的,你真的清晰吗?

此刻有一个呆板进修优化算法的Demo,能帮你从图像中直观感觉到调参对算法功效的影响,以及各自的优弱点。

它就是ensmallen!它的开拓者不只提供了Demo,还给措施员们打包了一份C++数据库,那我们先来试玩一下吧。

试玩Demo

试玩要领很简朴,乃至不必要安装任何软件,进入ensmallen网站,选择Demo标签,就能看到一组优化算法的3D表示图。

页面默认是常见的Adam算法,我们会看到参数沿着赤色的蹊径,最终落入丧失函数的最低点:

用三维Demo看懂各类优化算法,尚有C++措施员福音

左侧是参数初始值地址位置,,也就是图片中的红点,可以用鼠标随意拖动。

中间和右侧的图都是丧失函数的“等高线”。中间以差异颜色标志差异高度,右侧直接给出了丧失函数的梯度场,以箭头指向暗示梯度偏向、长度暗示梯度巨细。可以看出等高线越麋集的处所,梯度也越大。

假如认为上面的丧失函数图不足清楚直观,尚有高清3D大图:

用三维Demo看懂各类优化算法,尚有C++措施员福音

跟着迭代步数的增进,丧失函数的数值不绝减小:

用三维Demo看懂各类优化算法,尚有C++措施员福音

Adam算法可以调理的超参数有:步长、迭代次数、应承偏差、β1、β2、恍惚因子ϵ、Batch Size。

用三维Demo看懂各类优化算法,尚有C++措施员福音

拖动滑动条调理超参数,“红线”的外形和终点也会随之变革。我们不妨调理一下步长,看看这个参数会对功效造成什么样的影响。

增进步长会让进修曲线震荡幅度变大,步长太小会让丧失函数收敛过慢:

用三维Demo看懂各类优化算法,尚有C++措施员福音

△ 步长别离是0.3、0.03和0.003的三种环境

以上只是最简朴的环境,Demo界面还提供其他奇形怪状的丧失函数:

用三维Demo看懂各类优化算法,尚有C++措施员福音

以及近乎全部常见的优化算法:

用三维Demo看懂各类优化算法,尚有C++措施员福音

在差异外形的丧失函数里,这些优化算法各有优弱点。

假如丧失函数的“等高线”是椭圆,Adam收敛速率很快,仅迭代100步阁下就已经收敛,而AdaGrad迭代了近300步才收敛。

用三维Demo看懂各类优化算法,尚有C++措施员福音

但Adam并非就有绝对上风。在有多个鞍点和局部最小值的图形中,Adam固然在开始阶段降落速率很快,可是在最后阶段震荡较严峻,收敛速率反而不及AdaGrad。

上面的“玩法”只是Demo很小的一部门,想实行更多请拜见文末的链接地点。

C++措施员福音

万万不要觉得ensmallen只是一个好玩的Demo,现实上它照旧一个高效的C++优化库。对付用C++来给AI编程的措施员来说,它能对恣意函数举办数学优化,办理了C++呆板进修器材匮乏的痛点。

ensmallen除了打包根基优化算法之外,用户还可以行使简朴的API轻松添加新的优化器。实现新的优化器只必要有一种要领和一个新的方针函数,凡是用一到两个C++函数就能搞定。

安装ensmallen必要满意以下要求:

  • 支持C++ 11的编译器
  • C++线性代数与科学计较库Armadillo
  • 数学函数库OpenBLAS或Intel MKL或LAPACK

ensmallen中的全部内容都在ens定名空间中,因此在代码中安排一个using指令凡是很有效 :

  1. using namespace ens; 

以行使Adam为例,其代码如下:

  1. RosenbrockFunction f; 
  2. arma::mat coordinates = f.GetInitialPoint(); 
  3. Adam optimizer(0.001, 32, 0.9, 0.999, 1e-8, 100000, 1e-5, true); 
  4. optimizer.Optimize(f, coordinates); 

个中,Adam优化器中参数的次序依次是:步长、Batch Size、β1、β2、ϵ、最大迭代次数、应承偏差、是否以随机方法会见每个函数。

至于其他优化算法,可以去网站查察具体的声名文档。

最后附上全部资源:

ensmallen压缩包下载地点:

https://ensmallen.org/files/ensmallen-1.14.2.tar.gz

Demo地点:

https://vis.ensmallen.org/

(编辑:河北网)

【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容!

热点阅读