拒绝日夜调参:超参数搜索算法一览

栏目: 数据库 · 发布时间: 5年前

机器学习训练模型的过程中自然少不了调参,许多机器学习工程师都戏称自己为「调参师」,其重要性不言而喻。

模型的参数可分成两类:参数与超参数,前者是模型通过自身的训练学习得到的参数数据;后者则需要通过自身经验设置,以提高模型训练的效果。如下图中红色框内的隐层个数、每个隐层神经元个数、采用什么激活函数及学习算法、学习率以及正则化系数等都属于超参数。

拒绝日夜调参:超参数搜索算法一览

一个模型的落地流程如图所示:

拒绝日夜调参:超参数搜索算法一览

  • 收集日志,并从日志中抽象出特征,再把特征喂给模型,模型在初始的超参数指导下学习第一类参数;

  • 通过离线效果指标评估超参数的设定是否合适;

  • 若不合适则继续不断调整。

在这个调参过程中主要有 2 个难点:

1.参数空间大,尝试成本高

在工业界往往数据规模巨大、模型复杂,计算成本很高,并且每个类型的超参数都有众多选择。

2.目标模型是黑盒

在搜索超参数的过程中只能看到模型的输入和输出,无法获取模型内部信息(如梯度等),亦无法直接对最优超参数组合建立目标函数进行优化。

超参数的选择对模型最终的展现效果有很大影响,针对以上难点下文将介绍如何通过算法自动调参,业界常用的搜索超参数方法主要有网格搜索、随机搜索和贝叶斯优化。

1#网格搜索Grid Search

网格搜索是指在所有候选的参数选择中,通过循环遍历尝试每一种可能性,表现最好的参数就是最终的结果。

拒绝日夜调参:超参数搜索算法一览

举个例子,上图中有两类超参数,每类超参数有 3 个待探索的值,对它们进行笛卡尔积后得到 9 个超参数组合,通过网格搜索使用每种组合来训练模型,并在验证集上挑选出最好的超参数。如图所示,这种方法往往根据不同种类列出表格,并在表格内循环遍历搜索,因此称为网格搜索。

网格搜索算法思路及实现方式都很简单,但经过笛卡尔积组合后会扩大搜索空间,并且在存在某种不重要的超参数的情况下,网格搜索会浪费大量的时间及空间做无用功,因此它只适用于超参数数量小的情况。

2# 随机搜索 Random Search

拒绝日夜调参:超参数搜索算法一览

原文地址:http://www.jmlr.org/papers/volume13/bergstra12a/bergstra12a.pdf

针对网格搜索的不足,Bengio 等人提出了随机搜索方法。随机搜索首先为每类超参数定义一个边缘分布,通常取均匀分布,然后在这些参数上采样进行搜索。

随机搜索虽然有随机因素导致搜索结果可能特别差,但是也可能效果特别好。总体来说效率比网格搜索更高,但是不保证一定能找到比较好的超参数。

3# 贝叶斯优化 Bayesian Optimization

举个简单的例子,假设关于模型最优超参数组合的函数是一维曲线,由于它是一个黑盒无法直到具体的函数形式,但是可以输入某些值并得到输出。

我们随机尝试了 4 个超参数,并得到了对应的性能指标,如下图所示。

拒绝日夜调参:超参数搜索算法一览

那么问题来了, 最优超参数可能在哪里?下一个待探索的超参数是哪个? 我猜测最优值可能在 0.4 这里,函数的真实形式可能长这样子的:

拒绝日夜调参:超参数搜索算法一览

*直方图记录的是每次猜测的最小值的位置

而每个人猜测的是不一样的,因此每次生成的函数也不同:

拒绝日夜调参:超参数搜索算法一览

拒绝日夜调参:超参数搜索算法一览

拒绝日夜调参:超参数搜索算法一览

拒绝日夜调参:超参数搜索算法一览

可以看到大部分都认为最优超参数是在第 3 个点附近, 由于开始时在右侧采点的离线指标是最差的,所以先验认为最优超参数在这里的可能性不大。接着把这个过程取极限,就会得到一个关于最优超参数的概率分布。

假设每个分布都是高斯分布,那么得到的是一个高斯过程,其中高斯分布的均值为 0,方差大概为 5。

拒绝日夜调参:超参数搜索算法一览

这样无论我们猜测最优超参数是取哪个值,总能得到一个关于超参数好坏的描述,即是均值和方差,这里实际上我们用一个无限维的高斯过程来模拟黑盒的超参数搜索的目标函数形式。

拒绝日夜调参:超参数搜索算法一览

总结来说,超参数搜索问题其实是一个黑盒优化问题,贝叶斯优化通过无限维的高斯过程来描述黑盒,在这个高斯过程中可以得到每一组输入超参数的均值和方差。

得到了均值和方差则解决了上文提到的第一个问题:「最优超参数可能在哪里?」,那么下一个待探索的超参数是哪个?这其实是一个 E&E 问题(探索与利用问题),是稳妥地在目前已有的最大值附近搜索还是在不确定性大的地方搜索?后者效果可能很差,但也可能有意想不到的收获。

而 Acquisition function 正是平衡 E&E 问题的方式,下面我们依次介绍 3 种常见的做法。

1# Upper (lower) Confidence Band

拒绝日夜调参:超参数搜索算法一览

UCB 方法用线性加权的方式直接对 E&E 采样进行平衡,第一项是当前最好的超参数值,在当前最好的结果附近稳妥的搜索;第二项是方差,表示去探索更未知的空间,beta参数用来控制力度,这种方法简单有效。

2# Maximum Probability of Improvement

拒绝日夜调参:超参数搜索算法一览

MPI 方法的目的是下一个待搜索的值能最大限度提升概率,假设当前最好的是 y_best, 那么 MPI 表示的是下一个待搜索的点能比 y_best 小的概率,这种方法容易陷入在局部最小值附近。

3# Expected Improvement

拒绝日夜调参:超参数搜索算法一览

该种方法描述的是下一个待搜索的点能比当前最好的值更好的期望,因为是高斯过程,这里的后验概率是高斯形式,积分有闭式解,实现起来较为简单,因此这种方法也较为常用。

:chestnut:举个例子

拒绝日夜调参:超参数搜索算法一览

如上方图所示,虚线代表关于最优超参数的真实函数形式(但实际上它是个黑盒,不知道其具体形式),实线代表当前最好的超参所在位置,两条浅灰线表示的是当前点的方差。

下方图表示已知的和待探索超参数的 Expected Improvement,此时很多地方都有希望能取得比当前最好值更好的超参数,主要需要探索,我们首先选择 0.0 点作为下一个待探索的超参数。

拒绝日夜调参:超参数搜索算法一览

可以看到,此时 0.0 点的方差变为 0。继续寻找下一个待探索的超参数,选择 1.0。

拒绝日夜调参:超参数搜索算法一览

如图,1.0 点的方差变为 0,经过两次探索我们注意到不需要再探索右侧区域,因为我们在右边得到的超参数效果比左边的差。继续选择下一个超参数位置,选择 0.25 点左右的位置。

拒绝日夜调参:超参数搜索算法一览

按照 EI 方法,依次寻找下一个待探索的超参数,这次我们选择的超参数位置大概在 0.7 点。

拒绝日夜调参:超参数搜索算法一览

选择 0.7 点的超参数效果比之前选择的更好,此时 Expected Improvement acquision 建议应该加大在 0.7 附近搜索的力度。

拒绝日夜调参:超参数搜索算法一览

拒绝日夜调参:超参数搜索算法一览

拒绝日夜调参:超参数搜索算法一览

经过几轮探索之后发现最优超参数应该在 0.8 点附近。

通过以上案例可以看出贝叶斯优化是通过 acquisition function 平衡均值和方差,做 E&E 问题探索下一个可能的最优超参数。

最后通过三张动图概括网格搜索、随机搜索和贝叶斯优化。

拒绝日夜调参:超参数搜索算法一览

网格搜索

拒绝日夜调参:超参数搜索算法一览

随机搜索

拒绝日夜调参:超参数搜索算法一览

贝叶斯优化

*本文部分图源 :

http://gpss.cc/gpmc17/slides/LancasterMasterclass_1.pdf

拒绝日夜调参:超参数搜索算法一览 美团技术团队

在美团,我们信仰耐心和坚持的力量,愿意持续去做一些正确、有积累、可能表面看上去不那么重要实则非常关键的事情。

理论 算法 贝叶斯优化

相关数据

激活函数 技术

Activation function

在 计算网络中, 一个节点的激活函数定义了该节点在给定的输入或输入的集合下的输出。标准的计算机芯片电路可以看作是根据输入得到"开"(1)或"关"(0)输出的数字网络激活函数。这与神经网络中的线性感知机的行为类似。 一种函数(例如 ReLU 或 S 型函数),用于对上一层的所有输入求加权和,然后生成一个输出值(通常为非线性值),并将其传递给下一层。

来源: 维基百科 Google ML glossary

高斯分布 技术

Gaussian distribution

正态分布是一个非常常见的连续概率分布。由于中心极限定理(Central Limit Theorem)的广泛应用,正态分布在统计学上非常重要。中心极限定理表明,由一组独立同分布,并且具有有限的数学期望和方差的随机变量X1,X2,X3,...Xn构成的平均随机变量Y近似的服从正态分布当n趋近于无穷。另外众多物理计量是由许多独立随机过程的和构成,因而往往也具有正态分布。

来源: Wikipedia

学习率 技术

Learning rate

在使用不同优化器(例如随机梯度下降,Adam)神经网络相关训练中,学习速率作为一个超参数控制了权重更新的幅度,以及训练的速度和精度。学习速率太大容易导致目标(代价)函数波动较大从而难以找到最优,而弱学习速率设置太小,则会导致收敛过慢耗时太长

来源:Liu, T. Y. (2009). Learning to rank for information retrieval. Foundations and Trends® in Information Retrieval, 3(3), 225-331. Wikipedia

网格搜索 技术

Grid search

网格搜索是一项模型超参数优化技术,常用于优化三个或者更少数量的超参数,本质是一种穷举法。对于每个超参数,使用者选择一个较小的有限集去探索。然后,这些超参数笛卡尔乘积得到若干组超参数。网格搜索使用每组超参数训练模型,挑选验证集误差最小的超参数作为最好的超参数。

来源: Deep Learning Book

机器学习 技术

Machine Learning

机器学习是人工智能的一个分支,是一门多领域交叉学科,涉及概率论、统计学、逼近论、凸分析、计算复杂性理论等多门学科。机器学习理论主要是设计和分析一些让计算机可以自动“学习”的算法。因为学习算法中涉及了大量的统计学理论,机器学习与推断统计学联系尤为密切,也被称为统计学习理论。算法设计方面,机器学习理论关注可以实现的,行之有效的学习算法。

来源:Mitchell, T. (1997). Machine Learning. McGraw Hill.

神经元 技术

neurons

(人工)神经元是一个类比于生物神经元的数学计算模型,是神经网络的基本组成单元。 对于生物神经网络,每个神经元与其他神经元相连,当它“兴奋”时会向相连的神经元发送化学物质,从而改变这些神经元的电位;神经元的“兴奋”由其电位决定,当它的电位超过一个“阈值”(threshold)便会被激活,亦即“兴奋”。 目前最常见的神经元模型是基于1943年 Warren McCulloch 和 Walter Pitts提出的“M-P 神经元模型”。 在这个模型中,神经元通过带权重的连接接处理来自n个其他神经元的输入信号,其总输入值将与神经元的阈值进行比较,最后通过“激活函数”(activation function)产生神经元的输出。

来源: Overview of Artificial Neural Networks and its Applications. (2018). medium.com.

目标函数 技术

Objective function

目标函数f(x)就是用设计变量来表示的所追求的目标形式,所以目标函数就是设计变量的函数,是一个标量。从工程意义讲,目标函数是系统的性能标准,比如,一个结构的最轻重量、最低造价、最合理形式;一件产品的最短生产时间、最小能量消耗;一个实验的最佳配方等等,建立目标函数的过程就是寻找设计变量与目标的关系的过程,目标函数和设计变量的关系可用曲线、曲面或超曲面表示。

来源: 百度百科

后验概率 技术

Posterior probability

在贝叶斯统计中,一个随机事件或者一个不确定事件的后验概率是在考虑和给出相关证据或数据后所得到的条件概率。同样,后验概率分布是一个未知量(视为随机变量)基于试验和调查后得到的概率分布。“后验”在本文中代表考虑了被测试事件的相关证据。

来源: 维基百科

参数 技术

parameter

在数学和统计学裡,参数(英语:parameter)是使用通用变量来建立函数和变量之间关系(当这种关系很难用方程来阐述时)的一个数量。

来源: 维基百科

正则化 技术

Regularization

当模型的复杂度增大时,训练误差会逐渐减小并趋向于0;而测试误差会先减小,达到最小值后又增大。当选择的模型复杂度过大时,过拟合现象就会发生。这样,在学习时就要防止过拟合。进行最优模型的选择,即选择复杂度适当的模型,以达到使测试误差最小的学习目的。

来源:李航著 统计学习方法 清华大学出版社

验证集 技术

Validation set

验证数据集是用于调整分类器超参数(即模型结构)的一组数据集,它有时也被称为开发集(dev set)。

来源: Wikipedia

高斯过程 技术

Gaussian Processes


以上就是本文的全部内容,希望对大家的学习有所帮助,也希望大家多多支持 码农网

查看所有标签

猜你喜欢:

本站部分资源来源于网络,本站转载出于传递更多信息之目的,版权归原作者或者来源机构所有,如转载稿涉及版权问题,请联系我们

编程原本

编程原本

Alexander Stepanov、Paul McJones / 裘宗燕 / 机械工业出版社华章公司 / 2012-1-10 / 59.00元

本书提供了有关编程的一种与众不同的理解。其主旨是,实际的编程也应像其他科学和工程领域一样基于坚实的数学基础。本书展示了在实际编程语言(如C++)中实现的算法如何在最一般的数学背景中操作。例如,如何定义快速求幂算法,使之能使用任何可交换运算。使用抽象算法将能得到更高效、可靠、安全和经济的软件。 这不是一本很容易读的书,它也不是能提升你的编程技能的秘诀和技巧汇编。本书的价值是更根本性的,其终极目......一起来看看 《编程原本》 这本书的介绍吧!

Base64 编码/解码
Base64 编码/解码

Base64 编码/解码

正则表达式在线测试
正则表达式在线测试

正则表达式在线测试

RGB HSV 转换
RGB HSV 转换

RGB HSV 互转工具