在訓練深度神經網路時,通常會隨著訓練的進行降低學習率。 這可以通過使用預定義的學習率計畫或自適應學習率方法來完成。
學習率表
學習率時間表旨在根據預先定義的時間表降低學習率,從而在訓練過程中調整學習率。 常見的學習率時間表包括基於時間的衰減,逐步衰減和指數衰減。
什麼是學習率?
使用隨機梯度下降演算法訓練深度學習神經網路。
隨機梯度下降是一種優化演算法,它使用訓練資料集中的示例為模型的當前狀態估算誤差梯度,然後使用誤差的反向傳播演算法(簡稱為反向傳播)更新模型的權重。
訓練期間權重的更新量稱為步長或「學習率」。
具體而言,學習率是用於神經網路訓練的可配置超引數,其具有較小的正值,通常在0.0到1.0之間。
學習率通常用小寫希臘字母eta(n)的表示法表示。
在訓練期間,錯誤的反向傳播會估計網路中節點權重所負責的錯誤量。 而不是全部更新權重,而是根據學習率來縮放。
這意味著學習率0.1(傳統上常用的預設值)意味著每次更新權重時,網路中的權重都會更新0.1 *(估計的權重誤差)或估計的權重誤差的10%。
學習率的影響
神經網路學習或近似乙個函式,以最佳地將輸入對映到訓練資料集中示例的輸出。
學習速率超引數控制模型學習的速率或速度。具體來說,它控制模型權重每次更新時(例如,在每批訓練示例的末尾)更新的分配誤差量。
給定乙個完美配置的學習速率,該模型將學習在給定數量的訓練時期(通過訓練資料)中,在給定可用資源(層數和每層節點數)的情況下,對函式進行最佳近似。
通常,較高的學習率可使模型學習更快,但代價是要獲得次優的最終權重集。較小的學習率可以使模型學習更優化的甚至是全域性最優的權重集,但訓練時間可能會更長。
在極端情況下,學習速率過大將導致權重更新過大,並且模型的效能(例如模型在訓練資料集上的損失)將在訓練時期內振盪。據說振盪效能是由發散(發散)的重量引起的。太小的學習率可能永遠不會收斂或卡在次優的解決方案上。
如何配置學習率
在訓練資料集上為模型找到合適的學習率非常重要。
實際上,學習率可能是為模型配置的最重要的超引數。
實際上,如果有資源可以調整超引數,那麼這段時間中的大部分時間應該用於調整學習速率。
不幸的是,我們無法在給定的資料集上分析計算給定模型的最佳學習率。相反,必須通過反覆試驗發現乙個好的(或足夠好的)學習率。
學習率要考慮的值範圍小於1.0且大於10 ^ -6。
學習率將與優化過程的許多其他方面相互作用,並且相互作用可能是非線性的。然而,一般而言,較低的學習率將需要更多的培訓時間。相反,較高的學習率將需要較少的培訓時間。此外,考慮到誤差梯度的嘈雜估計,較小的批次大小更適合較小的學習率。
傳統的學習率預設值是0.1或0.01,這可能是您解決問題的乙個很好的起點。
診斷圖可用於調查學習率如何影響模型的學習和學習動態。 乙個示例是在訓練過程中建立一條損失曲線圖。 折線圖可以顯示許多屬性,例如:
超過訓練時期(例如快或慢)的學習率。
模型是學習得太快(急劇上公升和平穩)還是學習得太慢(幾乎沒有變化或沒有變化)。
學習損失是否會因丟失的振盪而過大。
配置學習速率既困難又耗時。
另一種方法是對所選模型的學習率進行敏感性分析,也稱為網格搜尋。 這可以幫助強調乙個好的學習率可能存在的數量級,以及描述學習率和效能之間的關係。
網格搜尋學習率通常是從0.1到10 ^ -5或10 ^ -6的對數刻度。
為學習過程增添動量
通過將歷史記錄新增到體重更新中,可以使訓練神經網路變得更加容易。
具體地,當權重被更新時,可以包括權重的先前更新的指數加權平均值。隨機梯度下降的這種變化稱為「動量」,並在更新過程中增加了慣性。
動量演算法累積過去梯度的指數衰減移動平均值,並繼續沿其方向移動。
動量可以加快對這些問題的學習,在這些問題上,通過優化過程導航的高維「權空間」具有誤導梯度下降演算法的結構,例如平坦區域或陡峭曲率。
動量法旨在加速學習,尤其是在面對高曲率,較小但一致的梯度或嘈雜的梯度時。
過去更新的慣性量通過新增新的超引數(通常稱為「動量」或「速度」)進行控制,並使用希臘小寫字母alpha(a)表示。
…動量演算法引入了乙個變數v,它起著速度的作用-它是引數在引數空間中移動的方向和速度。速度設定為負梯度的指數衰減平均值。
它具有平滑優化過程,減慢更新速度以繼續前乙個方向而不會卡住或振盪的作用。
解決特徵值差異很大的一種非常簡單的技術是在梯度下降公式中新增動量項。這有效地增加了通過重量空間的運動的慣性,並消除了振動
動量設定為大於0.0且小於1的值,在實踐中通常使用0.9和0.99等常用值。
實際上,[動量]的常用值包括.5,.9和.99。
動量不能使配置學習率變得容易,因為步長與動量無關。相反,動量可以與步長一致地提高優化過程的速度,從而提高在更少的訓練時期中發現更好的權重集的可能性。
人話來說就是當前梯度與之前相同就加速,不同就減速。
使用學習費率表
使用固定學習率的另一種方法是在訓練過程中改變學習率。
學習率隨時間(訓練時期)變化的方式稱為學習率時間表或學習率衰減。
也許最簡單的學習率計畫是將學習率從大的初始值線性減小到小值。 這允許在學習過程開始時進行較大的權重更改,並在學習過程結束時進行較小的更改或微調。
實際上,在訓練神經網路時,使用學習速率表可能是最佳實踐。 代替選擇固定的學習速率超引數,配置挑戰包括選擇初始學習速率和學習速率時間表。 鑑於學習率時間表可能允許的更好效能,初始學習率的選擇可能不如選擇固定學習率敏感。
學習率可以衰減到接近零的較小值。 或者,學習率可以在固定數量的訓練時期內衰減,然後對於其餘的訓練時期保持較小的恆定值,以便於進行更多的時間微調。
適應性學習率
該模型在訓練資料集上的效能可以通過學習演算法進行監控,並且可以相應地調整學習率。
這稱為自適應學習率。
合理的優化演算法選擇是sgd,其動量具有學習速率下降的趨勢(在不同問題上表現較好或較差的流行衰減方案包括線性衰減,直到達到固定的最小學習速率,然後呈指數衰減,或將學習速率降低乙個因子)。每次2-10個驗證錯誤穩定時間)。
或者,如果在固定數量的訓練時期內效能沒有提高,則可以再次提高學習率。
自適應學習率方法通常會優於配置錯誤的學習率的模型。
先驗地選擇好的學習率的困難是自適應學習率方法如此有用和流行的原因之一。乙個好的自適應演算法通常會比簡單的反向傳播收斂速度快得多,而固定學習率選擇得不好。
儘管沒有任何一種方法可以很好地解決所有問題,但是已經證明了三種自適應學習率方法在許多態別的神經網路體系結構和問題型別上均具有較強的魯棒性。
它們是adagrad,rmsprop和adam,並且都針對模型中的每個權重維持並調整學習率。
也許最受歡迎的是(adam),因為它建立在rmsprop之上並增加了動力。
此時,乙個自然的問題是:應該選擇哪種演算法?不幸的是,目前在這一點上尚無共識。當前,活躍使用的最流行的優化演算法包括sgd,帶動量的sgd,rmsprop,帶動量的rmsprop,adadelta和adam。
一種穩健的策略可能是,首先使用具有自適應學習率的現代版本的隨機梯度下降法(例如adam)來評估模型的效能,然後將結果用作基線。然後,在時間允許的情況下,探索是否可以通過精心選擇的學習率或更簡單的學習率時間表來實現改進。
學習率衰減 Learning Rate Decay
以目前最主流的引數優化演算法gradient descent為例,為了讓梯度下降的效能更優,我們需要將學習率設定在乙個合適的範圍。具體來說,學習率其實就是演算法的步長,一步走多少決定了很多事情 步子大了,優化效率高,很可能一下越過最優解 相反,步子小了,優化效率低,很可能陷進乙個區域性最優解怎麼都走...
筆記 學習率衰減
加快學習的乙個辦法就是學習率衰減。假設你要使用 mini batch 梯度下降法,mini batch 數量不大,大概 64 或者 128 個樣本,在迭代過程中會有噪音,下降朝向這裡的最小值,但是不會精確地收斂,所以你的演算法最後在附近擺動,並不會真正收斂,因為你用的學習率是固定值,不同的 mini...
指數衰減學習率
設損失函式 loss w 1 2,令w初值是常數10.反向傳播就是求最優w,即求最小loss對應的w值 使用指數衰減學習率,在迭代初期得到較高的下降速度,可以在較小的訓練輪數下取得更有效收斂度 import tensorflow as tf learning rate base 0.1 最初學習率 ...