吳恩達深度學習筆記(49)-為超參數選擇合適的範圍

為超參數選擇合適的範圍(Using an appropriate scale to pick hyperparameters)

在上一個筆記中,你已經看到了在超參數範圍中,

隨機取值可以提升你的搜索效率

但隨機取值並不是在有效範圍內的隨機均勻取值,而是選擇合適的標尺,用於探究這些超參數,這很重要。在這個筆記中,會教你怎麼做。

吳恩達深度學習筆記(49)-為超參數選擇合適的範圍

假設你要選取隱藏單元的數量n^([l]),假設你選取的取值範圍是從50到100中某點,

這種情況下,看到這條從50-100的數軸,你可以隨機在其取點,這是一個搜索特定超參數的很直觀的方式。

或者,如果你要選取神經網絡的層數,我們稱之為字母L,你也許會選擇層數為2到4中的某個值,接著順著2,3,4隨機均勻取樣才比較合理,你還可以應用網格搜索,你會覺得2,3,4,這三個數值是合理的,這是在幾個在你考慮範圍內隨機均勻取值的例子,這些取值還蠻合理的,但對某些超參數而言不適用。

吳恩達深度學習筆記(49)-為超參數選擇合適的範圍

看看這個例子,假設你在搜索超參數a(學習速率),假設你懷疑其值最小是0.0001或最大是1。如果你畫一條從0.0001到1的數軸,沿其隨機均勻取值,那90%的數值將會落在0.1到1之間,結果就是,在0.1到1之間,應用了90%的資源,而在0.0001到0.1之間,只有10%的搜索資源,這看上去不太對。

反而,用對數標尺搜索超參數的方式會更合理,因此這裡不使用線性軸,分別依次取0.0001,0.001,0.01,0.1,1,在對數軸上均勻隨機取點,這樣,在0.0001到0.001之間,就會有更多的搜索資源可用,還有在0.001到0.01之間等等。

吳恩達深度學習筆記(49)-為超參數選擇合適的範圍

所以在Python中,你可以這樣做,使

r=-4*np.random.rand()

,然後a隨機取值,a=10^r,所以,第一行可以得出r∈[4,0],那麼a∈[10^(-4),10^0],所以最左邊的數字是10^(-4),最右邊是10^0。

吳恩達深度學習筆記(49)-為超參數選擇合適的範圍

更常見的情況是,如果你在10^a和10^b之間取值,在此例中,這是10^a(0.0001),你可以通過0.0001算出a的值,即-4,在右邊的值是10^b,你可以算出b的值1,即0。

你要做的就是在[a,b]區間隨機均勻地給r取值,這個例子中r∈[-4,0],然後你可以設置a的值,基於隨機取樣的超參數a=10^r。

吳恩達深度學習筆記(49)-為超參數選擇合適的範圍

所以總結一下,在對數座標下取值,取最小值的對數就得到a的值取最大值的對數就得到b值,所以現在你在對數軸上的10^a到10^b區間取值,在a,b間隨意均勻的選取r值,將超參數設置為10^r,這就是在對數軸上取值的過程。

吳恩達深度學習筆記(49)-為超參數選擇合適的範圍

最後,另一個棘手的例子是給β 取值用於計算指數的加權平均值

假設你認為β是0.9到0.999之間的某個值,也許這就是你想搜索的範圍。記住這一點,當計算指數的加權平均值時,取0.9就像在10個值中計算平均值,有點類似於計算10天的溫度平均值,而取0.999就是在1000個值中取平均。

所以和上張幻燈片上的內容類似,如果你想在0.9到0.999區間搜索,那就不能用線性軸取值,對吧?不要隨機均勻在此區間取值,所以考慮這個問題最好的方法就是,我們要探究的是1-β,此值在0.1到0.001區間內,所以我們會給1-β取值,大概是從0.1到0.001,應用之前幻燈片中介紹的方法,這是10^(-1),這是10^(-3),值得注意的是,在之前的幻燈片裡,我們把最小值寫在左邊,最大值寫在右邊,但在這裡,我們顛倒了大小。這裡,左邊的是最大值,右邊的是最小值。

所以你要做的就是在[-3,-1]裡隨機均勻的給r取值。你設定了1-β=10^r,所以β=1-10^r,然後這就變成了在特定的選擇範圍內超參數隨機取值。

希望用這種方式得到想要的結果,你在0.9到0.99區間探究的資源,和在0.99到0.999區間探究的一樣多。

吳恩達深度學習筆記(49)-為超參數選擇合適的範圍

所以,如果你想研究更多正式的數學證明,關於為什麼我們要這樣做,為什麼用線性軸取值不是個好辦法,這是因為當β 接近1時,所得結果的靈敏度會變化,即使β有微小的變化。所以β 在0.9到0.9005之間取值,無關緊要,你的結果幾乎不會變化。

吳恩達深度學習筆記(49)-為超參數選擇合適的範圍

但β值如果在0.999到0.9995之間,這會對你的算法產生巨大影響,對吧?在這兩種情況下,是根據大概10個值取平均。但這裡,它是指數的加權平均值,基於1000個值,現在是2000個值,因為這個公式1/(1-β),當β接近1時,β就會對細微的變化變得很敏感。

所以整個取值過程中,你需要更加密集地取值,在β 接近1的區間內,或者說,當1-β 接近於0時,這樣,你就可以更加有效的分佈取樣點,更有效率的探究可能的結果。

希望能幫助你選擇合適的標尺,來給超參數取值。如果你沒有在超參數選擇中作出正確的標尺決定,別擔心,即使你在均勻的標尺上取值,如果數值總量較多的話,你也會得到還不錯的結果,尤其是應用從粗到細的搜索方法,在之後的迭代中,你還是會聚焦到有用的超參數取值範圍上。

希望這會對你的超參數搜索有幫助,下一個筆記中,我們將會分享一些關於如何組建搜索過程的思考,希望它能使你的工作更高效。


分享到:


相關文章: