3.2 为超参数选择合适的范围-深度学习第二课《改善深层神经网络》-Stanford吴恩达教授
| 3.1 調試處理 | 回到目錄 | 3.3 超參數訓練的實踐: Pandas vs. Caviar |
為超參數選擇合適的范圍 (Using an Appropriate Scale to Pick Hyperparameters)
在上一個視頻中,你已經看到了在超參數范圍中,隨機取值可以提升你的搜索效率。但隨機取值并不是在有效范圍內的隨機均勻取值,而是選擇合適的標尺,用于探究這些超參數,這很重要。在這個視頻中,我會教你怎么做。
假設你要選取隱藏單元的數量 n[l]n^{[l]}n[l] ,假設,你選取的取值范圍是從50到100中某點,這種情況下,看到這條從50-100的數軸,你可以隨機在其取點,這是一個搜索特定超參數的很直觀的方式。或者,如果你要選取神經網絡的層數,我們稱之為字母 LLL ,你也許會選擇層數為2到4中的某個值,接著順著2,3,4隨機均勻取樣才比較合理,你還可以應用網格搜索,你會覺得2,3,4,這三個數值是合理的,這是在幾個在你考慮范圍內隨機均勻取值的例子,這些取值還蠻合理的,但對某些超參數而言不適用。
看看這個例子,假設你在搜索超參數 α\alphaα (學習速率),假設你懷疑其值最小是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之間等等。
所以在Python中,你可以這樣做,使r=-4*np.random.rand(),然后 aaa 隨機取值, a=10ra=10^ra=10r ,所以,第一行可以得出 r∈[?4,0]r\in[-4,0]r∈[?4,0] ,那么 a∈[10?4,100]a\in[10^{-4},10^0]a∈[10?4,100] ,所以最左邊的數字是 10?410^{-4}10?4 ,最右邊是 10010^0100 。
更常見的情況是,如果你在 10a10^a10a 和 10b10^b10b 之間取值,在此例中,這是 10a10^a10a (0.0001),你可以通過 0.00010.00010.0001 算出 aaa 的值,即-4,在右邊的值是 10b10^b10b ,你可以算出 bbb 的值 111 ,即0。你要做的就是在 [a,b][a,b][a,b] 區間隨機均勻地給 rrr 取值,這個例子中 r∈[?4,0]r\in[-4,0]r∈[?4,0] ,然后你可以設置 aaa 的值,基于隨機取樣的超參數 a=10ra=10^ra=10r 。
所以總結一下,在對數坐標下取值,取最小值的對數就得到 aaa 的值,取最大值的對數就得到 bbb 值,所以現在你在對數軸上的 10a10^a10a 到 10b10^b10b 區間取值,在 a,ba,ba,b 間隨意均勻的選取 rrr 值,將超參數設置為 10r10^r10r ,這就是在對數軸上取值的過程。
最后,另一個棘手的例子是給 β\betaβ 取值,用于計算指數的加權平均值。假設你認為 β\betaβ 是0.9到0.999之間的某個值,也許這就是你想搜索的范圍。記住這一點,當計算指數的加權平均值時,取0.9就像在10個值中計算平均值,有點類似于計算10天的溫度平均值,而取0.999就是在1000個值中取平均。
所以和上張幻燈片上的內容類似,如果你想在0.9到0.999區間搜索,那就不能用線性軸取值,對吧?不要隨機均勻在此區間取值,所以考慮這個問題最好的方法就是,我們要探究的是 1?β1-\beta1?β ,此值在0.1到0.001區間內,所以我們會給 1?β1-\beta1?β 取值,大概是從0.1到0.001,應用之前幻燈片中介紹的方法,這是 10?110^{-1}10?1 ,這是 10?310^{-3}10?3 ,值得注意的是,在之前的幻燈片里,我們把最小值寫在左邊,最大值寫在右邊,但在這里,我們顛倒了大小。這里,左邊的是最大值,右邊的是最小值。所以你要做的就是在 [?3,?1][-3,-1][?3,?1] 里隨機均勻的給 rrr 取值。你設定了 1?β=10r1-\beta=10^r1?β=10r ,所以 β=1?10r\beta=1-10^rβ=1?10r ,然后這就變成了在特定的選擇范圍內超參數隨機取值。希望用這種方式得到想要的結果,你在0.9到0.99區間探究的資源,和在0.99到0.999區間探究的一樣多。
所以,如果你想研究更多正式的數學證明,關于為什么我們要這樣做,為什么用線性軸取值不是個好辦法,這是因為當 β\betaβ 接近1時,所得結果的靈敏度會變化,即使 β\betaβ 有微小的變化。所以 β\betaβ 在0.9到0.9005之間取值,無關緊要,你的結果幾乎不會變化。
但 β\betaβ 值如果在0.999到0.9995之間,這會對你的算法產生巨大影響,對吧?在這兩種情況下,是根據大概10個值取平均。但這里,它是指數的加權平均值,基于1000個值,現在是2000個值,因為這個公式 11?β\frac1{1-\beta}1?β1? ,當 β\betaβ 接近1時, β\betaβ 就會對細微的變化變得很敏感。所以整個取值過程中,你需要更加密集地取值,在 β\betaβ 接近1的區間內,或者說,當 1?β1-\beta1?β 接近于0時,這樣,你就可以更加有效的分布取樣點,更有效率的探究可能的結果。
希望能幫助你選擇合適的標尺,來給超參數取值。如果你沒有在超參數選擇中作出正確的標尺決定,別擔心,即使你在均勻的標尺上取值,如果數值總量較多的話,你也會得到還不錯的結果,尤其是應用從粗到細的搜索方法,在之后的迭代中,你還是會聚焦到有用的超參數取值范圍上。
希望這會對你的超參數搜索有幫助,下一個視頻中,我們將會分享一些關于如何組建搜索過程的思考,希望它能使你的工作更高效。
課程PPT
| 3.1 調試處理 | 回到目錄 | 3.3 超參數訓練的實踐: Pandas vs. Caviar |
總結
以上是生活随笔為你收集整理的3.2 为超参数选择合适的范围-深度学习第二课《改善深层神经网络》-Stanford吴恩达教授的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: 3.1 调试处理-深度学习第二课《改善深
- 下一篇: 3.3 超参数训练实战:Pandas v