量子位 出品 | 公众号 QbitAI
机器学习啥最苦?十有八九找参数!
不少研究生,都被卡在这个环节上,久久不能毕业。
现在,圣诞节前,有了一个好消息!
Facebook宣布,开源自家一直在使用的无梯度优化工具:Nevergrad。
并“信誓旦旦”表示,这能让调整模型参数和超参数的过程变得更快、更容易。
但在Twitter上,仿佛起到了相反的效果。
有人看到这个消息之后,立马“梗”上心头:
NeverGraduate吗?
也有人调侃称,这绝对是那些博士读了6年的人心中的噩梦。
不过,调侃归调侃,人家可是货真价实的NeverGradient。
大多数人还是用转发、点赞表达了自己的态度。
这是个什么东东?
简单来说, 这是一个Python 3库,里面有很多不需要进行梯度计算的算法。这些算法有:
- 差分进化
- 序列二次规划
- FastGA
- 协方差矩阵自适应
- 用于噪声管理的种群控制方法
- 粒子群优化
- ……
它们都呈现在了一个标准的ask-and-tell Python框架中,同时,Facebook还配备了相关的测试和评估工具。
有没有一种热泪盈眶的感觉?
先别急……来看看效果怎么样。
拿起来就能用
就先从上面提到的算法来说吧。之前这些算法都是定制的,想要比较一个任务中各种算法的性能?要么行不通,要么得花大力气。
Facebook表示,有了Nevergrad,这些都不是问题。只要有用得着它的地方,拿起来就能用。
不仅能够比较不同方法的性能,还能与那些常用基准上的最先进水平进行比较,以及帮你为特定的用例找最好的优化方法。
应用场景很感人
先说Facebook的情况。博文中说,自家的研究团队已经在强化学习、图像生成以及各种各样的项目中使用Nevergrad了。
而且,Nevergrad的无梯度优化,还能广泛运用于各种机器学习问题。比如:
- 多模态问题,比如有几个最小值的问题。 (例如,语言建模深度学习的超参数化。)
- 病态问题,在试图优化几个具有非常不同动态的变量时,通常会出现这种问题。(例如,没有针对具体问题重新标定dropout和学习率。)
- 可分离或旋转的问题,包括部分旋转的问题。
- 部分可分离问题,可以考虑通过几个变量块来解决。 例子包括对深度学习或其他形式设计的架构搜索,以及多任务网络的参数化。
- 离散、连续或混合的问题。这些任务需要同时选择每层的学习速率、每层的权重衰减以及每层的非线性类型。
- 有噪声的问题,当使用完全相同的参数调用函数时,函数可以返回不同的结果,例如强化学习中的独立事件。
来,总结一下。
在机器学习中,Nevergrad可来调整超参数,如学习速率、动量、权重衰减(可能是每层)、 dropout和深层网络的每一部分的层参数等。
但从无梯度方法的角度来说,它也可以应用到电网管理、航空、镜头设计以及许多其他科学和工程中。
为了证明Nevergrad的能力。Facebook的团队使用 Nevergrad 实现了几个基准测试。
硬核示例:用Nevergrad生成算法基准
不同的例子对应于不同的设置(是否多模态,是否有噪声,是否离散,是否病态) ,并展示了如何使用Nevergrad确定最佳优化算法。
在每个基准测试中,他们对不同的x值进行了独立的实验。这确保了方法之间在几个x值上的一致排名具有统计学意义。
△噪声最优化示例
这个示例显示,使用pcCMSA – ES的噪声管理方法的TBPSA优于其他几种替代方案。
具体怎么比较的,Facebook在GitHub上开源了,传送门在文末。
Nevergrad也可以处理离散的目标函数,在许多机器学习案例中都会遇到这个问题。
例如,在有限的选项集(如神经网络中的激活函数)之间进行选择,以及在不同类型的层之间进行选择(例如,决定在网络中的某个位置是否需要跳过连接)。
现有的一些工具,比如Bbob和Cutest不包含任何离散的基准测试。但Nevergrad可以处理离散域。
方法有两个,一是通过softmax函数(将离散问题转化为有噪声的连续问题),二是通过连续变量的离散化。
Facebook还专门做了一个测试。
如上图,测试中FastGA在这种情况下表现最好。有一点,DoubleFastGA对应于1/dim和( dim – 1 ) / dim之间的突变率,而不是1/dim和1/2。这是因为,原始范围对应的是一个二进制域,而在这里,Facebook考虑的是任意域。
好,到此,该说的都说了。
请收好传送门吧~
传送门
Nevergrad项目地址:
https://github.com/facebookresearch/nevergrad
博客地址:
https://code.fb.com/ai-research/nevergrad/
噪声最优化示例项目地址:
https://github.com/facebookresearch/nevergrad/blob/master/docs/benchmarks.md
“