【重磅开源】Facebook开源 Nevergrad:一种用于无梯度优化的开源工具

简介: 【重磅开源】Facebook开源 Nevergrad:一种用于无梯度优化的开源工具

两天前Facebook将其开源的无梯度优化框架又给更新了,之前发布的时候没有做测评,这次来介绍一下,顺便看看好用不好用。

无梯度优化

  什么叫无梯度优化呢?在梯度优化中,我们通过求目标函数的梯度,来求下降方向。但是现在如果不求梯度,我们怎么来求下降方向呢?想想人是怎么做的。如果把赚钱想成是目标函数,我们想让这个目标函数最大,难道我们建立整个世界的模型之后求梯度吗?不是吧,我们一般的操作都是看看别人怎么赚钱的,然后模仿,或者说朝着他的那个方向走就可以了。

  同样,计算机基本上也是这么干的,大概的实现就是随机扔一把数字到目标函数中,看看哪个使得目标函数最优,然后其他的点朝着那个最优的方向试试,慢慢就找到了相对来说会比之前的方法好的取值了。

安装

  nevergrad是一个Python 3.6+版本以上的库,可使用pip安装即可:

pip install nevergrad

  在终端操作如下图所示:

  也可以不安装最新版本:

pip install git+https://github.com/facebookresearch/nevergrad@master#egg=nevergrad

  如果你对benchmarking部分感兴趣的话,你可以只安装[benchmark]部分(如:pip install 'nevergrad[benchmark]')

开源的目的和项目结构

  依据其官网介绍,此次开源的目的主要是以下四项:

  • 实现一些无梯度优化算法:对于一些噪声,也能很好地处理。
  • 一个代码工具:当你在做连续、离散、或者混合优化的时候,它能够优化你的参数/超参数。
  • 函数:它能够作为一个函数来测试一下你的算法。
  • 作为一个基准:它能够作为一个baseline测试你的算法好坏。

  库的大体项目结构如下所示:

  • optimization: 实现各种优化算法;
  • instrumentation: 将代码转化为定义好的优化器的函数;
  • functions: 比较各种算法的实验例子;
  • common: 整个包通用的工具。

  举个例子如下所示,先定义一个优化器,最后最小化优化目标:

import nevergrad as ng
def square(x):
    return sum((x - .5)**2)
optimizer = ng.optimizers.OnePlusOne(instrumentation=2, budget=100)
recommendation = optimizer.minimize(square)
print(recommendation)  # optimal args and kwargs

  返回结果:

>>>Candidate(args=(array([0.49922768, 0.49968671]),), kwargs={})

  这里recommendation是优化器的返回值,这里返回的是argskwargs。优化值在recommendation.args[0]中这里是二维的np.ndarray。具体的参数参考:https://github.com/facebookresearch/nevergrad/blob/master/docs/instrumentation.md

  以下方法可以查看所有优化器:

import nevergrad as ng
print(list(sorted(ng.optimizers.registry.keys())))

文档说明

  Facebook官方也给了说明文档,具体的细节如下所示:

  • how to perform optimization using nevergrad, including using parallelization and a few recommendation on which algorithm should be used depending on the settings
  • how to instrument functions with any kind of parameters in order to convert them into a function defined on a continuous vectorial space where optimization can be performed. It also provides a tool to instantiate a script or non-python code in order into a Python function and be able to tune some of its parameters.
  • how to benchmark all optimizers on various test functions.
  • benchmark results of some standard optimizers an simple test cases.
  • examples of optimization for machine learning.

  上述文档说明包括了整个的库的使用例程,如果之后我会用到这个库再进行学习的话,会再写一篇文章对其解释。如果有粉丝对其使用方法比较熟悉的话欢迎投稿吖。个人感觉还是挺好的一个库。

参考:

官方Github :

https://github.com/facebookresearch/nevergrad

我的微信公众号名称深度学习与先进智能决策

微信公众号ID:MultiAgent1024

公众号介绍:主要研究分享深度学习、机器博弈、强化学习等相关内容!期待您的关注,欢迎一起学习交流进步!

相关文章
|
缓存 数据可视化 测试技术
开源多年后,Facebook这个调试工具,再登Github热门榜
让许多工程师合作开发大型应用大多会面临一个挑战,通常没有一个人知道每个模块是如何工作的,这种技能会让开发新功能、调查Bug或优化性能变得困难,为了解决这个问题,Facebook创建并开源了Flipper,一个可扩展的跨平台的调试工具,用来调试 iOS 和 Android 应用。近日又双叒登上了Github热榜。
|
前端开发 JavaScript 测试技术
Facebook 开源可扩展文本编辑器 Lexical
Meta(原 Facebook)近日开源可扩展文本编辑器 Lexical,源代码托管在 GitHub 上采用 MIT 许可证。
396 0
Facebook 开源可扩展文本编辑器 Lexical
|
XML jenkins Java
Facebook开源静态代码分析工具Infer介绍
Infer是Facebook公司的一个开源的静态分析工具。Infer 可以分析 Objective-C, Java 或者 C 代码,用于发现潜在的问题。其作用类似于sonar和fortify。Infer更倾向于发现代码中的空指针异常、资源泄露以及内存泄漏的问题。
Facebook开源静态代码分析工具Infer介绍
|
机器学习/深度学习 人工智能 文字识别
图神经网络版本的PyTorch来了,Facebook开源GTN框架,还可对图自动微分
近日,Facebook的AI研究院发表了一篇论文「DIFFERENTIABLE WEIGHTED FINITE-STATE TRANSDUCERS」,开源了用于图网络建模的GTN框架,操作类似于PyTorch这种传统的框架,也可以进行自动微分等操作,大大提高了对图模型建模的效率。
273 0
图神经网络版本的PyTorch来了,Facebook开源GTN框架,还可对图自动微分
|
移动开发 Java 程序员
Facebook 将神奇动画引擎 Pop 开源了!
Facebook 2月发布的新闻类应用Paper,因为其灵动的用户界面和交互,成为近来最令人眼前一亮的移动产品之一。 而这个产品的背后是2011年Facebook收购的Push Pop Press,创始人是分别在Apple任设计师和工程师的Mike Matas与Kimon Tsinteris。他们的合作者还有传奇人物Bret Victor。他们为美国前副总统Al Gore开发的电子书Our Choice当时就曾技惊四座。
304 0
Facebook 将神奇动画引擎 Pop 开源了!
|
Web App开发 缓存 Java
Hack on HHVM —— Facebook是如何优化PHP的
Facebook周四正式发布了Hack编程语言,将静态类型以及一些现代的语言特性引入了PHP。这是Facebook对PHP优化之路上的新里程碑
307 0
Hack on HHVM —— Facebook是如何优化PHP的
|
PHP C语言 开发者
Facebook 发布开源编程语言 Hack
Facebook周四发布一款名为“Hack”的全新编程语言,并声称该语言将能使代码的编写和测试更加高效快速。Facebook已在公司内部使用该语言超过一年时间,现在将以开源的形式将其正式发布。
356 0
Facebook 发布开源编程语言 Hack
|
存储 安全 算法
Conceal —— Facebook推出的android数据加密的开源APIandroid数据加密的开源API
现如今很多的智能手机,都支持把应用安装到SD卡中,这会帮用户节省很多空间,但是许多黑客也会利用这一点窃取用户的隐私。一般情况下,应用都有SD卡的读写权限,当然他也可以读取到其他应用,存储在SD卡上的数据。这意味着如果你安装了恶意的应用,他就可以轻易的获取SD卡上的所有数据。
339 0
Conceal —— Facebook推出的android数据加密的开源APIandroid数据加密的开源API
|
安全 前端开发 API
KVOController:facebook 开源的 KVO(Key-value Observing)工具
KVOController 是一个简单安全的 KVO(Key-value Observing,键-值 观察)工具,用于 iOS 和 OS X 应用开发中,开源自 facebook。
237 0
|
SQL 存储 前端开发
Facebook 在 2013 年的开源贡献
自从 Facebook 的第一行PHP代码,第一句 MySQL 的 INSERT 语句以来,开源就已经是我们工程哲学中的一个重要的部分。
173 0
Facebook 在 2013 年的开源贡献