- TensorFlow神經網絡到深度學習
- 張德豐編著
- 1201字
- 2021-05-19 18:18:37
3.6 梯度下降法
梯度下降法是一個一階最優化算法,通常也稱為最速下降法。要使用梯度下降法找到一個函數的局部極小值,必須向函數上當前點對于梯度(近似梯度)的反方向的規定步長距離點進行迭代搜索。所以梯度下降法可以幫助我們求解某個函數的極小值或者最小值。對于n維問題求最優解,梯度下降法是最常用的方法之一。
3.6.1 梯度下降法的作用與分類
在訓練過程中,每次的正向傳播后都會得到輸出值與真實值的損失值,這個損失值越小,代表模型越好,于是梯度下降法就用在這里,幫助尋找最小的那個損失值,從而可以反推出對應的學習參數b和w,達到優化模型的效果。
常用的梯度下降法可以分為批量梯度下降、隨機梯度下降和小批量梯度下降。
·批量梯度下降:遍歷全部數據集算一次損失函數,然后算函數對各個參數的梯度和更新梯度。這種方法每更新一次參數,都要把數據集里的所有樣本看一遍,計算量大,計算速度慢,不支持在線學習。
·隨機梯度下降:每看一個數據就算一個損失函數,然后求梯度更新參數。這個方法速度比較快,但是收斂性能不太好,可能在最優點附近晃來晃去,命中不到最優點。兩次參數的更新也有可能互相抵消,造成目標函數震蕩比較劇烈。
·小批量梯度下降:為了克服上面兩種方法的缺點,一般采用一種折中手段——小批量梯度下降。這種方法一方面因為把數據分為若干個批,按批來更新參數,這樣一批中的一組數據共同決定了本次梯度的方向,下降起來就不容易跑偏,減少了隨機性;另一方面因為批的樣本數與數據集相比小了很多,計算量也不是很大。
【例3-12】使用tf.gradients實現梯度下降。


運行程序,輸出如下:

3.6.2 退化學習率
優化器中的learning_rate就是學習率,在運籌學中常常成為步長因子。設置學習率的大小,是在精度和速度之間尋找一個平衡:
·學習率比較大,訓練的速度雖然會提升,但是會造成精度不夠。
·學習率比較小,精度雖然提升了,但是訓練會耗費非常多的時間。
退化學習率(衰減學習率),在訓練的初期可以使用較大的學習率以提高學習速度,當訓練到一定程度后,把學習率調小來提高訓練精度。它的定義如下:

學習率的衰減速度是由global_step和decay_steps來決定的。具體的計算公式如下:

staircase值默認為False。當為True時,將沒有衰減功能,只是使用上面的公式初始化一個學習率的值而已。
例如,下面的代碼:

這種方式定義的學習率就是退化學習率,它的意思是當前迭代到global_step,學習率每一步都按照每10萬步縮小到0.96%的速度衰退。有時還需要對已經訓練好的模型進行微調,可以指定不同層使用不同的學習率。
【例3-13】定義一個學習率變量,將其衰減系數設置好,并設置好迭代循環的次數。將每次迭代運算的次數與學習率打印出來,觀察學習率按照次數退化的現象。


運行程序,輸出如下:

由以上結果可以看出,學習率在逐漸變小,在第10次由原來的0.1變成了0.09。
注意:這是一種常用的訓練策略,在訓練神經網絡時,通常在訓練剛開始時使用較大的learning_rate,隨著訓練的進行,會慢慢減小learning_rate。在使用時,一定要把當前迭代次數global_step傳進去,否則不會有退化的功能。