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

2019 年 3 月 27 日 量子位
晓查 发自 凹非寺 
量子位 报道 | 公众号 QbitAI

机器学习里的优化算法很多,比如SGDAdamAdaGradAdaDelta等等,光是它们的迭代公式就已经够让人头疼。

好在TensorFlow、Keras、PyTorch中都集成了这些优化工具,但它们是如何在一步步迭代中“滑落”到最小值的,你真的清楚吗?

现在有一个机器学习优化算法的Demo,能帮你从图像中直观感受到调参对算法结果的影响,以及各自的优缺点。

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

试玩Demo

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

页面默认是常见的Adam算法,我们会看到参数沿着红色的路线,最终落入损失函数的最低点:

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

中间和右侧的图都是损失函数的“等高线”。中间以不同颜色标记不同高度,右侧直接给出了损失函数的梯度场,以箭头指向表示梯度方向、长度表示梯度大小。可以看出等高线越密集的地方,梯度也越大。

如果觉得上面的损失函数图不够清晰直观,还有高清3D大图:

随着迭代步数的增加,损失函数的数值不断减小:

Adam算法可以调节的超参数有:步长迭代次数允许误差β1β2模糊因子ϵBatch Size

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

增加步长会让学习曲线震荡幅度变大,步长太小会让损失函数收敛过慢:

△ 步长分别是0.3、0.03和0.003的三种情况

以上只是最简单的情况,Demo界面还提供其他奇形怪状的损失函数:

以及近乎所有常见的优化算法:

在不同形状的损失函数里,这些优化算法各有优缺点。

如果损失函数的“等高线”是椭圆,Adam收敛速度很快,仅迭代100步左右就已经收敛,而AdaGrad迭代了近300步才收敛。

但Adam并非就有绝对优势。在有多个鞍点和局部最小值的图形中,Adam虽然在开始阶段下降速度很快,但是在最后阶段震荡较严重,收敛速度反而不及AdaGrad。

上面的“玩法”只是Demo很小的一部分,想尝试更多请参见文末的链接地址。

C++程序员福音

千万不要以为ensmallen只是一个好玩的Demo,实际上它还是一个高效的C++优化库。对于用C++来给AI编程的程序员来说,它能对任意函数进行数学优化,解决了C++机器学习工具匮乏的痛点。

ensmallen除了打包基本优化算法之外,用户还可以使用简单的API轻松添加新的优化器。实现新的优化器只需要有一种方法和一个新的目标函数,通常用一到两个C++函数就能搞定。

安装ensmallen需要满足以下要求:

  • 支持C++ 11的编译器

  • C++线性代数与科学计算库Armadillo

  • 数学函数库OpenBLASIntel MKLLAPACK

ensmallen中的所有内容都在ens命名空间中,因此在代码中放置一个using指令通常很有用 :

using namespace ens;

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

RosenbrockFunction f;
arma::mat coordinates = f.GetInitialPoint();

Adam optimizer(0.001320.90.9991e-81000001e-5true);
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/

微软出品,硬核课程推荐

△ 扫描上方二维码进入小程序,探究微软机器学习,离图灵奖更进一步!


点击阅读原文,了解更多超硬核数据科学。

量子位 QbitAI · 头条号签约作者

վ'ᴗ' ի 追踪AI技术和产品新动态

喜欢就点这里吧 !

登录查看更多
0

相关内容

优化算法是一种根据概率按照固定步骤寻求问题的最优解的过程。与常见的排序算法、寻路算法不同的是,优化算法不具备等幂性,是一种概率算法
【2020新书】使用高级C# 提升你的编程技能,412页pdf
专知会员服务
56+阅读 · 2020年6月26日
干货书《数据科学数学系基础》2020最新版,266页pdf
专知会员服务
317+阅读 · 2020年3月23日
【干货书】流畅Python,766页pdf,中英文版
专知会员服务
224+阅读 · 2020年3月22日
算法与数据结构Python,369页pdf
专知会员服务
161+阅读 · 2020年3月4日
【强化学习】深度强化学习初学者指南
专知会员服务
179+阅读 · 2019年12月14日
【新书】Python编程基础,669页pdf
专知会员服务
192+阅读 · 2019年10月10日
深度学习优化算法总结(SGD,AdaGrad,Adam等)
极市平台
33+阅读 · 2019年4月30日
你有哪些深度学习(rnn、cnn)调参的经验?
七月在线实验室
10+阅读 · 2019年3月27日
做机器学习和AI必备的42个数学知识点
AI前线
8+阅读 · 2018年12月6日
已删除
将门创投
10+阅读 · 2018年5月2日
【干货】​深度学习中的线性代数
专知
21+阅读 · 2018年3月30日
机器学习各种熵:从入门到全面掌握
AI研习社
10+阅读 · 2018年3月22日
机器学习、深度学习 知识点总结及面试题
全球人工智能
17+阅读 · 2018年1月4日
教你用Python来玩跳一跳
七月在线实验室
6+阅读 · 2018年1月2日
干货|代码原理教你搞懂SGD随机梯度下降、BGD、MBGD
机器学习研究会
12+阅读 · 2017年11月25日
绝对干货 | 随机梯度下降算法综述
菜鸟的机器学习
15+阅读 · 2017年10月30日
W-net: Bridged U-net for 2D Medical Image Segmentation
Arxiv
19+阅读 · 2018年7月12日
Arxiv
8+阅读 · 2018年6月19日
Arxiv
3+阅读 · 2018年3月29日
VIP会员
相关VIP内容
【2020新书】使用高级C# 提升你的编程技能,412页pdf
专知会员服务
56+阅读 · 2020年6月26日
干货书《数据科学数学系基础》2020最新版,266页pdf
专知会员服务
317+阅读 · 2020年3月23日
【干货书】流畅Python,766页pdf,中英文版
专知会员服务
224+阅读 · 2020年3月22日
算法与数据结构Python,369页pdf
专知会员服务
161+阅读 · 2020年3月4日
【强化学习】深度强化学习初学者指南
专知会员服务
179+阅读 · 2019年12月14日
【新书】Python编程基础,669页pdf
专知会员服务
192+阅读 · 2019年10月10日
相关资讯
深度学习优化算法总结(SGD,AdaGrad,Adam等)
极市平台
33+阅读 · 2019年4月30日
你有哪些深度学习(rnn、cnn)调参的经验?
七月在线实验室
10+阅读 · 2019年3月27日
做机器学习和AI必备的42个数学知识点
AI前线
8+阅读 · 2018年12月6日
已删除
将门创投
10+阅读 · 2018年5月2日
【干货】​深度学习中的线性代数
专知
21+阅读 · 2018年3月30日
机器学习各种熵:从入门到全面掌握
AI研习社
10+阅读 · 2018年3月22日
机器学习、深度学习 知识点总结及面试题
全球人工智能
17+阅读 · 2018年1月4日
教你用Python来玩跳一跳
七月在线实验室
6+阅读 · 2018年1月2日
干货|代码原理教你搞懂SGD随机梯度下降、BGD、MBGD
机器学习研究会
12+阅读 · 2017年11月25日
绝对干货 | 随机梯度下降算法综述
菜鸟的机器学习
15+阅读 · 2017年10月30日
Top
微信扫码咨询专知VIP会员