訓(xùn)練速率
這可能是最重要的超參數(shù)之一,決定了整個學(xué)習(xí)過程。如果設(shè)置的學(xué)習(xí)速率太小,你的模型可能需要幾年才能收斂;如果學(xué)習(xí)速率太大,在開始訓(xùn)練幾個樣本之后,你的損失值(loss)可能會迅速增加。一般來說,0.01 的學(xué)習(xí)速率是安全的,但這不應(yīng)被視為一個嚴(yán)格的規(guī)則;因?yàn)樽罴褜W(xué)習(xí)速率應(yīng)該根據(jù)具體任務(wù)來調(diào)整。
相比之下,在每個 epoch 之后選擇固定的學(xué)習(xí)率(learning rate)或者逐漸降低學(xué)習(xí)率(learning rate)是另一個選擇。雖然這可能有助于訓(xùn)練得更快,但需要人工確定新的學(xué)習(xí)率。一般來說,學(xué)習(xí)率可以在每個 epoch 后減半——這幾類策略在幾年前相當(dāng)普遍。
幸運(yùn)的是,現(xiàn)在我們有更好的基于動量(momentum based methods)方法來改變學(xué)習(xí)率,就是基于誤差函數(shù)的曲率。這種方法也可以幫助我們?yōu)槟P椭械母鱾€參數(shù)設(shè)置不同的學(xué)習(xí)率;使得一些參數(shù)可能以相對較慢或較快的速率學(xué)習(xí)。
近期大量針對優(yōu)化方法的研究也產(chǎn)生了自適應(yīng)學(xué)習(xí)率(adaptive learning rate)方法。現(xiàn)在,我們有很多可選擇的方法,從老牌的動量方法(Momentum Method)到 Adagrad、Adam(我最喜歡的方法)、RMSProp 等。像 Adagrad 或 Adam 這樣的方法有效地避免了手動選擇初始學(xué)習(xí)速率,并且模型能在一定的時間內(nèi)順利地收斂(當(dāng)然,如果選擇好的初始速率會進(jìn)一步幫助模型收斂)。
超參數(shù)微調(diào):旋轉(zhuǎn)的網(wǎng)格搜索——擁抱隨機(jī)搜索
網(wǎng)格搜索(Grid Search)是經(jīng)典的機(jī)器學(xué)習(xí)方法。但是,在尋找 DNN 的最佳超參數(shù)時,網(wǎng)格搜索并不高效。主要是因?yàn)閲L試不同的 DNN 超參數(shù)組合所花費(fèi)的時間太長。隨著超參數(shù)的數(shù)量不斷增加,網(wǎng)格搜索所需的計(jì)算也呈指數(shù)增長。
這里有兩種方法:
1. 根據(jù)經(jīng)驗(yàn)手動調(diào)整一些常用的超參數(shù),如學(xué)習(xí)率、層數(shù)(number of layer)等。
2. 使用隨機(jī)搜索/隨機(jī)抽樣(Random Search/Random Sampling)來選擇最優(yōu)超參數(shù)。超參數(shù)的組合通常從可行域的均勻分布中選擇。還可以加入先驗(yàn)知識以進(jìn)一步減少搜索空間(例如學(xué)習(xí)速率不應(yīng)該太大或太小)。經(jīng)證明,隨機(jī)搜索比網(wǎng)格搜索更有效率。
學(xué)習(xí)方法
老牌的隨機(jī)梯度下降(Stochastic Gradient Descent)可能不像 DNN 一樣有效(這不是一個嚴(yán)格的規(guī)則),因此最近很多人正研究開發(fā)更靈活的優(yōu)化算法。例如:Adagrad、Adam、AdaDelta、RMSProp 等。這些復(fù)雜的方法除了提供自適應(yīng)學(xué)習(xí)率之外,還對不同的模型參數(shù)應(yīng)用不同的速率,使得收斂曲線更加平滑。將學(xué)習(xí)率、層數(shù)等作為超參數(shù)是很好的,建議在訓(xùn)練數(shù)據(jù)的子集上進(jìn)行嘗試。
使權(quán)重的維度以 2 的指數(shù)冪級增加
即使用最新的硬件資源處理最新的深度學(xué)習(xí)模型時,內(nèi)存管理仍然是以字節(jié)衡量的;所以,盡量將參數(shù)的大小設(shè)置為 2 的冪指數(shù),如 64、128、512、1024。這可能有助于分割矩陣、權(quán)重等,從而略微提高學(xué)習(xí)效率。這個現(xiàn)象在使用 GPU 時變得更加顯著。
無監(jiān)督預(yù)訓(xùn)練
無論你是否用 NLP、機(jī)器視覺(Computer Vision)、語音識別等技術(shù),無監(jiān)督預(yù)訓(xùn)練總能幫助有監(jiān)督模型和無監(jiān)督模型的訓(xùn)練。詞向量(Word Vector)在 NLP 中無處不在;對于有監(jiān)督二分類問題,你可以使用 ImageNet 的數(shù)據(jù)集以無監(jiān)督的方式預(yù)訓(xùn)練模型;或者對于說話者消歧模型(speaker disambiguation model),可以進(jìn)一步利用語音樣本的信息訓(xùn)練模型。
Mini-Batch vs. 隨機(jī)學(xué)習(xí)
訓(xùn)練模型的主要目的是學(xué)習(xí)得到適當(dāng)?shù)膮?shù),從而產(chǎn)生從輸入到輸出的最佳映射(mapping)。不管是否使用批處理(batch)、Mini-Batch 或隨機(jī)學(xué)習(xí)(stochastic learning),這些參數(shù)都會因訓(xùn)練樣本的不同而有所調(diào)整。在使用隨機(jī)學(xué)習(xí)方法時,在每個訓(xùn)練樣本之后調(diào)整權(quán)重梯度,因此將噪聲引入梯度。這具有非常理想的效果;即在訓(xùn)練期間引入噪聲,模型變得不太容易過度擬合。
然而,現(xiàn)在計(jì)算機(jī)的計(jì)算能力大大提高,使得隨機(jī)學(xué)習(xí)方法的效率可能相對較低。隨機(jī)學(xué)習(xí)可能浪費(fèi)了很大一部分資源。如果我們能夠計(jì)算矩陣與矩陣的乘法(Matrix-Matrix multiplication),那么為什么要局限于使用迭代相加的向量與向量的乘法?因此,為了實(shí)現(xiàn)更大的吞吐量(throughput)/更快的學(xué)習(xí),建議使用 Mini-Batch 而不是隨機(jī)學(xué)習(xí)。
但是,選擇適當(dāng)?shù)呐幚泶笮∫簿哂邢嗤闹匾?因此我們也可以保留一些噪音(通過減少批的數(shù)據(jù)量實(shí)現(xiàn)),并有效利用計(jì)算機(jī)的計(jì)算能力。同樣的,一個批的樣本量控制在 16 到 128 之間也是一個不錯的選擇(2 的指數(shù)冪)。通常,一旦你找到更重要的超參數(shù)(或手動或隨機(jī)搜索),批處理的大小是選定的。然而,有些情況下(如在線學(xué)習(xí)/online learning),模型的訓(xùn)練數(shù)據(jù)是數(shù)據(jù)流(stream),這時求助于隨機(jī)學(xué)習(xí)是一個很好的選擇。