15.调参(Tuning hyperparameters)

不可否认的是,现在在做深度学习的过程中,调参数是一件非常重要且主要的事情。那么,今天我们来讲一下调参数这件事。

Grid Search

Grid Search就是穷举,穷举所有的超参组合。
当你对决策树调参,如果只对一个超参优化,比如树的最大深度,尝试[3, 5, 7]。那么可以表示为:


如果你还想对分裂标准进行调参,分别试试gini和entropy,那么就相当要对
2×3=6
组参数进行尝试。如下图:

所以这就是为什么叫做gird search,网格搜索。grid search是对网格中每个交点进行遍历,从而找到最好的一个组合。
网格的维度就是超参的个数。如果有
k
个超参,每个超参有
m
个候选,那么我们就要遍历
k^m
个组合。所以说尽管效果不错,但是计算代价是非常非常大的。

Random Search

有另外一个方法叫做Random Search,就是说我们不要循规倒矩的把每一个可能性都试过,我们随机取样的方式取样出我们想要测试的test。举例来说我这边有20个点,我们不要20个点都做,我们说20个点里面抽一些点出来试,看哪一点的结果最好,就选那一个点就好了,这个叫做Random Search
其实在deep learning里面,Random Search通常是蛮有效率的,为什么?你把所有你要search的方法组合统统拿出来在data做测试,其实top K的那些方法,他们的performance可能没有太大的差距。因为今天在做deep learning的时候,通常只有某几个参数对你的结果有特别决定性的影响,有很多参数对你的结果的影响是不大的。所以今天在所有的参数组合里面有很多种参数,它的performance的其实都是一样,你performance最好的那几组的参数组合,它的结果可能都是大同小异的,所以其实没有必要找过所有的参数组合,举最好的那一组出来,你其实只要选前k名的几种的出来,其实结果应该就够好了。

好,这是基本的假设。在这个前提之下,假设我们现在有N个点,我们想要做grid search,我们从N点里面随便选一个点,它落在top K的几率是多少?很简单,就是K除以N;接下来我们取样x次,他们落在top K里面的几率是多少?你就先计算每一次取样 不到top K的几率是1-K/N,取样到top K的几率即:1-(1-K/N)^x
我们希望这个几率大于90\%的话,如果给你KN你就可以轻易地把x推出来。举例来说,如果今天N=1000,要选到top 10, 如果你要确保说有超过90\%的几率,你一定可以取样到top 10的结果,你只需要取样230次;或是更进一步假设只要是取样到top 100你就满足了,那你取样的次数就可以降到只要取样22次就可以保证有超过90\%的几率取样到top 100的参数组合,因为1-K/N的指数项的下降是非常快的,所以其实你不需要取样太多次,就可以取样到你想要的东西,所以其实做random search是也是一个非常有效率的方式。

Model-based Hyperparameter Optimization

有另外一个做法叫做Model-based Hyperparameter Optimization,这个做法就叫做Bayesian的optimization,今天我们就只讲一下它的概念。
假设横轴代表说你要去调的参数,比如说learning rate,(这边一维就代表你要调一个参数,但实做上你要调的参数往往有数十个,所以它其实是在一个高维的空间中做Bayesian的optimization)我们选择一个learning rate,然后去跑一下结果得到一个Accuracy,见下图中的点1;我们再选另外一个learning rate再跑一下,结果再得到一个Accuracy,见下图中的点2;现在我们就得到两个Accuracy。接下来我们根据这两笔training data就learn一个regression model估测说:如果给定不同的学习率,我们期待的Accuracy有多大?这个regression model通常会有一个Bayesian的model,这个Bayesian的model可以告诉我们说在这些region里面model的confidence有多大。举例来说,如下图所示,因为1.2两个点是已知的,所以这两个点的confidence就非常大,3这个位置因为没有取样的点,所以这个位置的confidence就非常小,蓝色的区域代表今天model在估测的时候觉得可能的区间;蓝色区域越大就代表confidence越小。

好,接下来我们要根据上图中黑色的这一个曲线,即estimate的结果选下一个点。怎么选 就取决于两件事,一个是:我们希望找一组根据我们的model估测出来它会得到比较好的结果的参数组合;假设我们只这么做,那machine已经知道说这个点它的正确率最高,每次选要estimate正确率的时候,他就只会选在这个区域,这不是我们要的。第二条件是我们也需要machine去做一些探查去做一些搜寻,看看说在hyperparameter的空间里面,有没有哪些地方是我们没有探查到的,那没有探查到的地方我们应该探查看看:如果设那一组参数组合会得到什么样的结果,所以今天会同时考虑两件事情,一件事情是根据这个模型估测出来的结果,另外一个是这个模型他的confidence,我们希望选一个估测出来正确率高,但是confidence低的地方,根据估测的正确率和confidence,你会定出一个acquisition function,就是上图中绿色的这个函数,还有选绿色的函数值最高的地方,比如说在上图红色三角这个点。

好,接下来选了这个点,比如说这个learning rate以后,再去跑一下你的model得到Accuracy;你现在你就有三笔training data去做你的regression的problem,你在得到一条regression的线,还有得到在每一个区域这个regression的confidence。如下图所示:

而接下来就反复那个过程,接下来取样在这个地方你就得到新的点:

你这个regression的estimate就会越来越准。
这个是Bayesian的optimization,这个方法到底work嘛?我有点难告诉你说他是work的,因为这个方法的好坏就取决于你的regression的model做的好不好,而regression的model也是一个假设,也是hyperparameter……
这个regression的model到底合不合理,你也是要凭着直觉设出来,所以这个方法到底好不好久取决于regression的model到底好还是不好。

Reinforcement Learning

刚才是用一个regression的model,也许可以作用更复杂的model,比如说用RNN来决定network的架构,google现在很流行的用machine来learn machine,用network来learn network;所以假设你要train一个CNN,怎么做?你先train一个神奇的RNN,这个RNN它的output就是数字,它的第一个output就代表第一个layer的filter的高,然后接下来output第一个layer的output的宽,接下来output你的stride是多少,然后output要有几个filter,这是第一层,然后接下output第二层,然后就一直output下去,把它所有的数据收集起来,你就得到了一个CNN的架构。


RNN它的架构是每个时间点的的输出会被当做下一个时间点的输入,你使用RNN去sample一排数字你就得到一个CNN,那么这个RNN怎么来?是这样来的,我们得到一个CNN以后你就拿他去你的training set上train一下,然后在验证集上你就可以得到Accuracy,然后这个Accuracy就是RNN的reward,我们用reinforcement learning的方法来硬train这个RNN,所以我们还没有讲过reinforcement learning,但是它的基本概念你就是调RNN的参数,希望它得到的reward的期望值越大越好。

你用同样的方法其实也可以设计LSTM的架构,我们之前上课的时候已经讲过了,而且这样的方法可以被视为是一种meta learning了,或者是learn to learn的方法。这边是设计了CNN跟LSTM的架构,也可以设计激活函数,那个Swish就是这样子来的:
你先假设说激活函数有固定的样子(即输入一个值,输出一个值),今天假设说输入这个值先把它复制3份,然后前面两个值通过一个Unary的函数,Unary函数如下图所示;然后通过一个Binary函数,Binary函数有如图所示;然后再通过一个Unary函数;然后第三份也通过Unary函数;再在一起通过Binary函数得到最后的output。

在每一个block里面Unary函数Binary函数要选什么呢?把它当做RNN的output,让RNN告诉你说到底要选哪一个Unary或者是Binary函数。在learn 激活函数的时候,RNN的output就是有可能的Unary或者是Binary函数,然后接下来你就硬train下去,RNN先产生一个激活函数,这个激活函数learn一下得到Accuracy,然后去update一下RNN,再产生新的激活函数再update,就这样不断的循环,最后就可以找出一个最好的激活函数,就是Swish。

在这边Swish的paper里面,他们有讲说他们找到的最好的八个激活函数就列举在这边,如下图所示:

这些的激活函数有什么特色?有一个特色是他们好像都有直接使用到input x。然后另外一个特色就是有一些激活函数,居然是有周期性的,这个也是作者相当自豪的一点,因为正常在设计激活函数的时候,你绝对不会设计这种激活函数,举例来说,像绿色的这样的一个激活函数,有一些奇怪的地方,觉得不太make sense:因为你input在这个地方,在这个地方它的output都是一样的,machine就会分辨不出到底是什么样的input,反正用RNN learn出来就是这个样子,machine超越人,设计出来的激活函数就是这么回事,你没有办法想象的。

还可以拿来决定学习率,我们知道说学习率有一些决定的strategy,比如说Adam和RMSProp等等,其实这些不同的学习率的strategy,有一个共同的表示是:举例来说SGD,我们大家都熟知的SGDG代表那个gradient,gradient乘上identity,就是SGD
RMSProp呢?RMSProp是有同样gradient乘上identity,,但是这边有一个\hat v\hat v是过去的gradient的平方的estimation,就等于是你把过去的gradient的平方和 把它平均起来。 好,把平方和开根号,然后再把G除上开根号的结果就是RMSProp。
那么Adam呢?AdamRMSProp不一样的地方就是把gradient换成{\hat m}{\hat m}就是momenton,momenton就是gradient平均,{\hat v}是gradient的平方的estimation,{\hat m}是gradient的estimation,{\hat m}除掉{\hat v}的开根号就得到Adam

好,我们怎么知道说什么时候要{\hat m},什么{\hat v},什么时候开根号,什么时候做什么?所以怎么办?让machine来决定要怎么调学习率:


这边一样learn一个RNN,他的第一个输出就代表了第一个Operand,那Operand有什么呢?

,然后再输出第二个Operand,再输出第一个Unary函数,这边有各种Unary函数:

再输出第二个Unary函数,然后输出Binary函数,有各种不同Binary函数:

你就可以制造一个新的learning的strategy,新版的Adam,新版的RMSProp,最后得到什么结果?最后得到一个新的learning的strategy叫做PowerSign,其实他没有做很完整的实验,但他的结果看起来疑似可以training得到新的test上,叫它作为reinforcement learning的时候,machine是train在image的test上,但是你learn出来的learning的strategy好像可以apply在其他比如说translation,language model上面,好像也可以得到不错的结果。

然后他这边是举其中一个实验,这个实验是在月牙形的loss函数上面,它是一个对gradient descent来说经典的难题,四个经典的方法包括SGD,Momenton,Adam,RMSProp,来发现说SGD,Adam,RMSProp,其实都没有办法从开始的地方走到终点这个地方,这三个方法都走不到;Momenton可以走到,那PowerSign跟Momenton一样强,而且走了一个很崎岖的路径但是他最后也走到了。

而且很好奇,说PowerSign长什么样子,它其实也没有很复杂,它长这样


。他还蛮单纯的,我们把gradient前面乘上

这次听起来蛮自觉的,如果gradient跟Momenton同向,e的指数项就是正,那你的gradient就会乘上一个正的值,是一个比较大的学习率,因为如果你今天你的gradient跟Momenton反向,那指数项就是负的,e的指数项就是一个小于1的值,所以你学习率就会减小,所以这个听起来蛮直观的。

这些方法虽然听起来很潮,但是这是好孩子也没办法学,你在家里也没办法自己尝试,你可会想说我现在在做作业2,还有一点点时间,看要不要自己发明一些新的RNN的结构,我看你还是洗洗睡了这样子,其实你给我看产生SVN的架构paper,他说他用了800张gpu,这个实验实在是好,还是没办法学的一个task。

©著作权归作者所有,转载或内容合作请联系作者
  • 序言:七十年代末,一起剥皮案震惊了整个滨河市,随后出现的几起案子,更是在滨河造成了极大的恐慌,老刑警刘岩,带你破解...
    沈念sama阅读 212,542评论 6 493
  • 序言:滨河连续发生了三起死亡事件,死亡现场离奇诡异,居然都是意外死亡,警方通过查阅死者的电脑和手机,发现死者居然都...
    沈念sama阅读 90,596评论 3 385
  • 文/潘晓璐 我一进店门,熙熙楼的掌柜王于贵愁眉苦脸地迎上来,“玉大人,你说我怎么就摊上这事。” “怎么了?”我有些...
    开封第一讲书人阅读 158,021评论 0 348
  • 文/不坏的土叔 我叫张陵,是天一观的道长。 经常有香客问我,道长,这世上最难降的妖魔是什么? 我笑而不...
    开封第一讲书人阅读 56,682评论 1 284
  • 正文 为了忘掉前任,我火速办了婚礼,结果婚礼上,老公的妹妹穿的比我还像新娘。我一直安慰自己,他们只是感情好,可当我...
    茶点故事阅读 65,792评论 6 386
  • 文/花漫 我一把揭开白布。 她就那样静静地躺着,像睡着了一般。 火红的嫁衣衬着肌肤如雪。 梳的纹丝不乱的头发上,一...
    开封第一讲书人阅读 49,985评论 1 291
  • 那天,我揣着相机与录音,去河边找鬼。 笑死,一个胖子当着我的面吹牛,可吹牛的内容都是我干的。 我是一名探鬼主播,决...
    沈念sama阅读 39,107评论 3 410
  • 文/苍兰香墨 我猛地睁开眼,长吁一口气:“原来是场噩梦啊……” “哼!你这毒妇竟也来了?” 一声冷哼从身侧响起,我...
    开封第一讲书人阅读 37,845评论 0 268
  • 序言:老挝万荣一对情侣失踪,失踪者是张志新(化名)和其女友刘颖,没想到半个月后,有当地人在树林里发现了一具尸体,经...
    沈念sama阅读 44,299评论 1 303
  • 正文 独居荒郊野岭守林人离奇死亡,尸身上长有42处带血的脓包…… 初始之章·张勋 以下内容为张勋视角 年9月15日...
    茶点故事阅读 36,612评论 2 327
  • 正文 我和宋清朗相恋三年,在试婚纱的时候发现自己被绿了。 大学时的朋友给我发了我未婚夫和他白月光在一起吃饭的照片。...
    茶点故事阅读 38,747评论 1 341
  • 序言:一个原本活蹦乱跳的男人离奇死亡,死状恐怖,灵堂内的尸体忽然破棺而出,到底是诈尸还是另有隐情,我是刑警宁泽,带...
    沈念sama阅读 34,441评论 4 333
  • 正文 年R本政府宣布,位于F岛的核电站,受9级特大地震影响,放射性物质发生泄漏。R本人自食恶果不足惜,却给世界环境...
    茶点故事阅读 40,072评论 3 317
  • 文/蒙蒙 一、第九天 我趴在偏房一处隐蔽的房顶上张望。 院中可真热闹,春花似锦、人声如沸。这庄子的主人今日做“春日...
    开封第一讲书人阅读 30,828评论 0 21
  • 文/苍兰香墨 我抬头看了看天上的太阳。三九已至,却和暖如春,着一层夹袄步出监牢的瞬间,已是汗流浃背。 一阵脚步声响...
    开封第一讲书人阅读 32,069评论 1 267
  • 我被黑心中介骗来泰国打工, 没想到刚下飞机就差点儿被人妖公主榨干…… 1. 我叫王不留,地道东北人。 一个月前我还...
    沈念sama阅读 46,545评论 2 362
  • 正文 我出身青楼,却偏偏与公主长得像,于是被迫代替她去往敌国和亲。 传闻我的和亲对象是个残疾皇子,可洞房花烛夜当晚...
    茶点故事阅读 43,658评论 2 350

推荐阅读更多精彩内容