两天前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 ngdef 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开源 Nevergrad:一种用于无梯度优化的开源工具相关推荐

  1. 拯救万千学子于水深火热之中!Facebook开源无梯度优化工具

    乾明 发自 凹非寺 量子位 出品 | 公众号 QbitAI 机器学习啥最苦?十有八九找参数! 不少研究生,都被卡在这个环节上,久久不能毕业. 现在,圣诞节前,有了一个好消息! Facebook宣布,开 ...

  2. 8 种用于检测前端性能的分析工具

    作者:Mahdhi Rezvi 译者:前端小智 来源:blog.bitsrc 点赞再看,微信搜索 [大迁世界] 关注这个没有大厂背景,但有着一股向上积极心态人.本文 GitHub https://gi ...

  3. 6个你应该用用看的用于文本分类的最新开源预训练模型 忆臻

    作者:PURVA HUILGOL 编译:ronghuaiyang (AI公园) 原文链接: 6个你应该用用看的用于文本分类的最新开源预训练模型​mp.weixin.qq.com 导读 文本分类是NLP ...

  4. Zeppelin:用于区块链应用的开源安全智能合约架构

    9月15日,Zeppelin的路线图建议发布.Zeppelin是一种构建安全智能合约的开源架构,遵循MIT许可.该建议的推出正是时候,从DevCon2大会上围绕着智能合约形式验证的报告和讨论的次数上就 ...

  5. h5海报设计开源工具_5个用于教幼儿阅读的开源工具

    h5海报设计开源工具 任何看到儿童使用平板电脑或智能手机的人都会观察到他们看似天生的能力,即可以滚动应用程序并在屏幕上滑动,从而弯曲"数字原生"肌肉. 根据常识媒体 ( Commo ...

  6. OR-Tools:一个用于优化的开源软件 -0-简介与安装

    算法优化一般目标是:缩小搜索范围,以找到最佳(或接近最佳)的解决方案. 算法优化不得不提软件是OR-Tools :https://developers.google.com/optimization ...

  7. 可用于电子书阅读器的开源阅读器软件项目

    可用于电子书阅读器的开源阅读器软件项目 经过2009年电子书市场红红火火的发展,计划进入电子书市场的品牌厂商及供应链上相关的厂商大概有二三十家,相信当下很多进行MP3.MP4/5.GPS 开发的Des ...

  8. python是一种语言吗-python语言是非开源语言吗

    python是一门开源的语言,Github上有很多开源的项目,下面给大家介绍10个开源的项目: 1.Pyxel Pyxel 是 Python 中复古的游戏开发环境.你可以免费使用该平台开发复古的游戏, ...

  9. python开源协议gpl_[转载]五种开源协议(GPL,LGPL,BSD,MIT,Apache)

    什么是许可协议? 什么是许可,当你为你的产品签发许可,你是在出让自己的权利,不过,你仍然拥有版权和专利(如果申请了的话),许可的目的是,向使用你产品的人提供 一定的权限. 不管产品是免费向公众分发,还 ...

  10. 14 种免费 GIS 软件:在开源中绘制世界地图

    如果你想绘制一幅世界地图,会选择什么GIS软件呢,ArcGIS.GlobalMapper这些都是国外比较出名的商业GIS软件,当然在国内很容易找到可用的版本,但是也可以使用免费的GIS软件完成所有操作 ...

最新文章

  1. 结合Flink,国内自研,大规模实时动态认知图谱平台——AbutionGraph |博文精选
  2. js编码java解码_js编码处理(转)
  3. Mac搭建本地svn服务器,并用Cornerstone连接服务器
  4. 关于wcf三大工具的使用(wsdl.exe svcutil.exe disco.exe)
  5. 响应式网页设计代码_消除响应式网站建设设计中的缺陷
  6. Scala的符号入门
  7. Django模板语言(DTL)
  8. json类型大小 mysql_MySQL数据类型 - JSON数据类型 (1)
  9. 使用微信公众号openid获取用户信息判断是否关注公众号
  10. hdu 3987 Harry Potter and the Forbidden Forest
  11. 智能电子后视镜MFC01-LCD 高配版规格书(AI-CMS)
  12. 再战港交所的高视医疗,近视小伙伴的福音?
  13. 通过浏览器无法访问Hadoop管理页面
  14. 百万数据使用子查询进行SQL优化
  15. “外卖式”售后服务体验来袭 沃丰科技ServiceGo让售后服务更智能
  16. 5GNR中PDCCH的polar编码
  17. 基于阿里云的智能插座——(立创EDA项目)
  18. 《科技创业启示录》一第2章 克里斯·巴顿、菲利普·安格布瑞希、迪拉伊·慕克吉、艾弗里·王 科技创业启示录...
  19. JavaScript奇淫技巧(一)
  20. Glide 之 Registry、ModelLoaderRegistry、 MultiModelLoaderFactory、 ModelLoader 分析

热门文章

  1. 向楚留香学习交朋友的办法
  2. 二叉搜索树的后序遍历序列(C++)
  3. 游戏开发之动态创建对象及构造函数、析构函数的执行(C++基础)
  4. IPv6 gre隧道、路由协议综合实验(华为设备)
  5. Kubernetes详解(二十四)——Deployment控制器更新实战与查看
  6. 华三 h3c 交换机链路聚合
  7. yum源配置文件解释
  8. python基础知识-01-编码输入输出变量
  9. 漫画 | Redis常见面试问题
  10. Codeforces 18C C. Stripe