https://www.toutiao.com/a6683809735214367239/

2019-04-25 20:35:22

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

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

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

  • 收集日志,并从日志中抽象出特征,再把特征喂给模型,模型在初始的超参数指导下学习第一类参数;
  • 通过离线效果指标评估超参数的设定是否合适;
  • 若不合适则继续不断调整。

在这个调参过程中主要有 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

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

?举个例子

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

下方图表示已知的和待探索超参数的 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 问题探索下一个可能的最优超参数。

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

网格搜索

随机搜索

贝叶斯优化

干货 | 拒当调参师工程师:超参数搜索算法一览相关推荐

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

    拒绝日夜调参:超参数搜索算法一览 语言: CN / TW / HK 时间 2018-10-31 15:22:57 机器之心 主题 数据挖掘 数学 机器学习训练模型的过程中自然少不了调参,许多机器学习工 ...

  2. 天桥调参师秘籍:一份深度学习超参微调技术指南

    随着深度学习的兴起,越来越多的人从事算法工程师这一岗位.有时候他们自嘲自己为"天桥调参师".当然,算法工程师的工作内容并没有那么简单,因为设置超参数的过程需要专业知识和广泛的试验和 ...

  3. 从谷歌AutoML到百度EasyDL,AI大生产时代,调参师不再是刚需

    出品 | AI科技大本营 头图 | 付费下载于视觉中国 2018 年,Google Cloud 宣布将 AutoML 作为机器学习产品的一部分.至此,AutoML 开始进入大众的视野. 实际上,201 ...

  4. 灵魂调参师被AutoGluon打爆,李沐:调得一手好参的时代要过去了

    点击上方"AI遇见机器学习",选择"星标"公众号 重磅干货,第一时间送达 新智元报道 编辑:张佳 [导读]日前,亚马逊AWS推出AutoGluon,只需三行代码 ...

  5. 自动机器学习新进展!性能超过人类调参师6个点,AutoGluon 低调开源

    机器之心报道 机器之心,Datawhale编辑 自动机器学习效果能有多好?比如让 MobileNet1.0 backbone 的 YOLO3 超过 ResNet-50 backbone 的 faste ...

  6. AutoGluon 低调开源!性能超过人类调参师6个点

    机器之心报道 机器之心,Datawhale编辑 自动机器学习效果能有多好?比如让 MobileNet1.0 backbone 的 YOLO3 超过 ResNet-50 backbone 的 faste ...

  7. 用python+pyqt5+matplotlib实现pid仿真调参(手把手超详细)

    文章目录 前言 一.pid是什么? *关于pid,建议直接看下面两个大佬写的* *pid基本公式* 二.位置式pid与增量式pid的区别. ***位置式pid*** ***增量式pid*** 三.用到 ...

  8. 11_模型的选择与调优,交叉验证,超参数搜索-网格搜索sklearn.model_selection.GridSearchCV

    1.交叉验证 交叉验证:为了让被评估的模型更加准确可信. 交叉验证:将拿到的数据,分为训练和验证集.以下图为例:将数据分成5份,其中一份作为验证集.然后经过5次(组)的测试,每次都更换不同的验证集.即 ...

  9. 竞赛专题 | 挖掘模型哪家强,自动调参 VS 祖传参数?

    点击上方"Datawhale",选择"星标"公众号 第一时间获取价值内容 Dtawhale竞赛群已成立 扫描下方二维码,添加负责人微信,可申请加入竞赛学习交流群 ...

最新文章

  1. 迁移学习之InceptionV3(159层),Xception(126层),Inception_ResNet_V2(572层)(图像识别)
  2. select的value值为对象时,获取label和value
  3. linux怎么配置mysql数据库服务器_linux下指定mysql数据库服务器主从同步的配置实例...
  4. PHP会话控制考察点
  5. WebSSH2安装过程可实现WEB可视化管理SSH工具
  6. go语言通道插入0_Go语言入门必知教程-通道
  7. php arff文件,python实现txt文件格式转换为arff格式
  8. 用幼儿园所学拆解美国总统网络安全行政令(含软件供应链安全)
  9. queryrunner对于数据库的快速操作
  10. Caused by: java.lang.UnsatisfiedLinkError: libjawt.so: 无法打开共享对象文件: 没有那个文件或目录
  11. 抖音视频批量下载,一个软件就够了,手把手教你下载抖音无水印视频。
  12. 计算机无法访问dota服务器,dota2无法与任何服务器建立连接如何解决
  13. QC4+充电协议_坚果R1原装QC4+充电器评测:兼容USB PD3.0/PPS/QC3.0
  14. 代挂php源码,[PHP源码]开心QQ等级代挂源码,无后门任意搭建分站
  15. 提交application/x-www-form-urlencoded类型数据
  16. 一文详细介绍情绪识别常用的数据集
  17. 【深度学习】Fashion-MNIST数据集简介
  18. mysql 5.6 插入表情符
  19. 2019电大计算机考试题及答案,2019年最新电大《计算机应用基础》期末考前复习综合练习题(A、B、C)及参考答案资料小抄...
  20. 苹果屏幕录制没有声音_苹果手机屏幕不亮但有声音是怎么回事?不要慌,这样就可以解决...

热门文章

  1. matplotlib hist 绘制直方图 bar 绘制条形图 API
  2. python中的for else
  3. log_softmax与softmax区别
  4. lstm预测sin函数方法2思路的
  5. 《因果学习周刊》第6期:因果推荐系统
  6. 北京国家新一代人工智能创新发展试验区正式成立
  7. 豆瓣评分 8.6,近 5 万读者学习的 Android 经典最新版出版,承载无数程序员的回忆......
  8. 软件研发之道——有关软件的思考
  9. 区块链相关论文研读3- 关于超级账本Hyperledger Fabric的性能优化
  10. 独家 | 对抗图像和攻击在Keras和TensorFlow上的实现