吳恩達深度學習筆記(46)-學習率衰減優化(Learning rate decay)

學習率衰減(Learning rate decay)

加快學習算法的一個辦法就是隨時間慢慢減少學習率,我們將之稱為學習率衰減,

我們來看看如何做到,首先通過一個例子看看,為什麼要計算學習率衰減。

吳恩達深度學習筆記(46)-學習率衰減優化(Learning rate decay)

假設你要使用mini-batch梯度下降法,mini-batch數量不大,大概64或者128個樣本,在迭代過程中會有噪音(藍色線),下降朝向這裡的最小值,但是不會精確地收斂,所以你的算法最後在附近擺動,並不會真正收斂,因為你用的a是固定值,不同的mini-batch中有噪音。

吳恩達深度學習筆記(46)-學習率衰減優化(Learning rate decay)

但要慢慢減少學習率a的話,在初期的時候,a學習率還較大,你的學習還是相對較快,但隨著a變小,你的步伐也會變慢變小,所以最後你的曲線(綠色線)會在最小值附近的一小塊區域裡擺動,而不是在訓練過程中,大幅度在最小值附近擺動。

所以慢慢減少a的本質在於,在學習初期,你能承受較大的步伐,但當開始收斂的時候,小一些的學習率能讓你步伐小一些。

你可以這樣做到學習率衰減,記得一代要遍歷一次數據,如果你有以下這樣的訓練集:

吳恩達深度學習筆記(46)-學習率衰減優化(Learning rate decay)

你應該拆分成不同的mini-batch,第一次遍歷訓練集叫做第一代。第二次就是第二代,依此類推,你可以將a學習率設為a=1/(1+decayrate*epoch-num) a_0(decay-rate稱為衰減率,epoch-num為代數,α_0為初始學習率),注意這個衰減率是另一個你需要調整的超參數。

吳恩達深度學習筆記(46)-學習率衰減優化(Learning rate decay)

這裡有一個具體例子,如果你計算了幾代,也就是遍歷了幾次,如果a_0為0.2,衰減率decay-rate為1,那麼在第一代中,a=1/(1+1) a_0=0.1,這是在代入這個公式計算

a=1/(1+decayrate*epoch-num) a_0,

此時衰減率是1而代數是1。在第二代學習率為0.67,第三代變成0.5,第四代為0.4等等,你可以自己多計算幾個數據。要理解,作為代數函數,根據上述公式,你的學習率呈遞減趨勢

如果你想用學習率衰減,要做的是要去嘗試不同的值,包括超參數a_0,以及超參數衰退率,找到合適的值,除了這個學習率衰減的公式,人們還會用其它的公式。

吳恩達深度學習筆記(46)-學習率衰減優化(Learning rate decay)

比如,這個叫做指數衰減,其中a相當於一個小於1的值,如a=0.95^(epoch-num) a_0,所以你的學習率呈指數下降。

人們用到的其它公式有a=k/√(epoch-num) a_0或者a=k/√t a_0(t為mini-batch的數字)。

有時人們也會用一個離散下降的學習率,也就是某個步驟有某個學習率,一會之後,學習率減少了一半,一會兒減少一半,一會兒又一半,這就是離散下降(discrete stair cease)的意思。

到現在,我們講了一些公式,看學習率a究竟如何隨時間變化。

人們有時候還會做一件事,手動衰減。如果你一次只訓練一個模型,如果你要花上數小時或數天來訓練,有些人的確會這麼做,看看自己的模型訓練,耗上數日,然後他們覺得,學習速率變慢了,我把a調小一點。手動控制a當然有用,時復一時,日復一日地手動調整a,只有模型數量小的時候有用,但有時候人們也會這麼做。

所以現在你有了多個選擇來控制學習率a。你可能會想,好多超參數,究竟我應該做哪一個選擇,我覺得,現在擔心為時過早。

後面我們會講到,如何系統選擇超參數。

對我而言,學習率衰減並不是我嘗試的要點,設定一個固定的a,然後好好調整,會有很大的影響,學習率衰減的確大有裨益,有時候可以加快訓練,但它並不是我會率先嚐試的內容,但下週我們將涉及超參數調整,你能學到更多系統的辦法來管理所有的超參數,以及如何高效搜索超參數。

這就是學習率衰減,最後我還要講講神經網絡中的局部最優以及鞍點,所以能更好理解在訓練神經網絡過程中,你的算法正在解決的優化問題,下個筆記我們就好好聊聊這些問題。


分享到:


相關文章: