官术网_书友最值得收藏!

3.6 梯度下降法

梯度下降法是一個一階最優化算法,通常也稱為最速下降法。要使用梯度下降法找到一個函數的局部極小值,必須向函數上當前點對于梯度(近似梯度)的反方向的規定步長距離點進行迭代搜索。所以梯度下降法可以幫助我們求解某個函數的極小值或者最小值。對于n維問題求最優解,梯度下降法是最常用的方法之一。

3.6.1 梯度下降法的作用與分類

在訓練過程中,每次的正向傳播后都會得到輸出值與真實值的損失值,這個損失值越小,代表模型越好,于是梯度下降法就用在這里,幫助尋找最小的那個損失值,從而可以反推出對應的學習參數bw,達到優化模型的效果。

常用的梯度下降法可以分為批量梯度下降、隨機梯度下降和小批量梯度下降。

·批量梯度下降:遍歷全部數據集算一次損失函數,然后算函數對各個參數的梯度和更新梯度。這種方法每更新一次參數,都要把數據集里的所有樣本看一遍,計算量大,計算速度慢,不支持在線學習。

·隨機梯度下降:每看一個數據就算一個損失函數,然后求梯度更新參數。這個方法速度比較快,但是收斂性能不太好,可能在最優點附近晃來晃去,命中不到最優點。兩次參數的更新也有可能互相抵消,造成目標函數震蕩比較劇烈。

·小批量梯度下降:為了克服上面兩種方法的缺點,一般采用一種折中手段——小批量梯度下降。這種方法一方面因為把數據分為若干個批,按批來更新參數,這樣一批中的一組數據共同決定了本次梯度的方向,下降起來就不容易跑偏,減少了隨機性;另一方面因為批的樣本數與數據集相比小了很多,計算量也不是很大。

【例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傳進去,否則不會有退化的功能。

主站蜘蛛池模板: 丹棱县| 神池县| 米易县| 永仁县| 凌云县| 政和县| 五寨县| 亚东县| 平度市| 平泉县| 墨脱县| 枣庄市| 称多县| 新兴县| 阿拉善右旗| 屏东市| 义马市| 兴海县| 高尔夫| 济源市| 尉犁县| 宕昌县| 安吉县| 仁怀市| 会宁县| 柳林县| 泰顺县| 武汉市| 南城县| 招远市| 周口市| 珲春市| 平远县| 吕梁市| 晋城| 安新县| 迭部县| 石门县| 黄石市| 永济市| 加查县|