1. 程式人生 > >【機器學習】範數規則化之(二)核範數與規則項引數選擇

【機器學習】範數規則化之(二)核範數與規則項引數選擇

OK,回到問題本身。我們選擇引數λ的目標是什麼?我們希望模型的訓練誤差和泛化能力都很強。這時候,你有可能還反映過來,這不是說我們的泛化效能是我們的引數λ的函式嗎?那我們為什麼按優化那一套,選擇能最大化泛化效能的λ呢?Oh,sorry to tell you that,因為泛化效能並不是λ的簡單的函式!它具有很多的區域性最大值!而且它的搜尋空間很大。所以大家確定引數的時候,一是嘗試很多的經驗值,這和那些在這個領域摸爬打滾的大師是沒得比的。當然了,對於某些模型,大師們也整理了些調參經驗給我們。例如Hinton大哥的那篇A Practical Guide to Training RestrictedBoltzmann Machines等等。還有一種方法是通過分析我們的模型來選擇。怎麼做呢?就是在訓練之前,我們大概計算下這時候的loss項的值是多少?Ω(w)的值是多少?然後針對他們的比例來確定我們的λ,這種啟發式的方法會縮小我們的搜尋空間。另外一種最常見的方法就是交叉驗證Cross validation了。先把我們的訓練資料庫分成幾份,然後取一部分做訓練集,一部分做測試集,然後選擇不同的λ用這個訓練集來訓練N個模型,然後用這個測試集來測試我們的模型,取N模型裡面的測試誤差最小對應的λ來作為我們最終的λ。如果我們的模型一次訓練時間就很長了,那麼很明顯在有限的時間內,我們只能測試非常少的λ。例如假設我們的模型需要訓練1天,這在深度學習裡面是家常便飯了,然後我們有一個星期,那我們只能測試7個不同的λ。這就讓你遇到最好的λ那是上輩子積下來的福氣了。那有什麼方法呢?兩種:一是儘量測試7個比較靠譜的λ,或者說λ的搜尋空間我們儘量廣點,所以一般對λ的搜尋空間的選擇一般就是2的多少次方了,從-10到10啊什麼的。但這種方法還是不大靠譜,最好的方法還是儘量讓我們的模型訓練的時間減少。例如假設我們優化了我們的模型訓練,使得我們的訓練時間減少到2個小時。那麼一個星期我們就可以對模型訓練7*24/2=84次,也就是說,我們可以在84個λ裡面尋找最好的λ。這讓你遇見最好的λ的概率就大多了吧。這就是為什麼我們要選擇優化也就是收斂速度快的演算法,為什麼要用GPU、多核、叢集等來進行模型訓練、為什麼具有強大計算機資源的工業界能做很多學術界也做不了的事情(當然了,大資料也是一個原因)的原因了。