深度學習 網路訓練技巧

2021-10-14 06:07:35 字數 3599 閱讀 5073

1.1 學習率(learning rate)

學習率:是控制模型學習效率(步長)的權重。

學習率的大小區分區別

學習率大

學習率小

學習速度快慢

應用場合

訓練初期

數次epoch過後

缺點1.容易損失過大 2.容易發生振盪

1.容易過擬合 2.收斂速度慢

學習率的設定

在訓練過程中,一般根據訓練輪數設定動態變化的學習率:

1.剛開始訓練時:學習率以 0.01 ~ 0.001 為宜。

2.一定輪數過後:逐漸減緩。

3.接近訓練結束:學習速率的衰減應該在100倍以上。

輪數減緩

指數減緩

分數減緩

英文名step decay

exponential decay

1/t1/t decay

方法每n輪學習率減半

學習率按訓練輪數增長指數插值遞減

lrt=lr0/(1+kt)lrt=lr0/(1+kt) ,kk 控制減緩幅度,tt 為訓練輪數

loss-epoch影象

理想情況下曲線應該是滑梯式下降,如圖中的[綠線]:

曲線 初始時 上揚 [紅線]: solution:初始 學習率過大 導致 振盪,應減小學習率,並 從頭 開始訓練 。

曲線 初始時 強勢下降 沒多久 歸於水平 [紫線]: solution:後期 學習率過大 導致 無法擬合,應減小學習率,並 重新訓練後面幾輪 。

曲線 全程緩慢 [黃線]: solution:初始 學習率過小 導致 收斂慢,應 增大學習率,並從頭開始訓練。

1.2 batch(批次)

批量,即batch,是深度學習中的乙個重要概念。

批量通常指兩個不同的概念——如果對應的是模型訓練方法,那麼批量指的是將所有資料處理完以後一次性更新權重或者引數的估計;如果對應的是模型訓練中的資料,那麼批量通常指的是一次輸入供模型計算用的資料量。

基於批量概念的模型訓練通常按照如下步驟進行:
處理所有資料

更新引數

初始化引數

得到新的權重

批量演算法相對應的是遞增演算法,其步驟如下:
處理乙個或者一組資料點

更新引數

初始化引數

得到新的權重

對比:

這裡的主要區別是批量演算法一次處理所有的資料;而在遞增演算法中,每處理乙個或者數個觀測值就要更新一次引數。

在後向傳播演算法中,「處理」對應的具體操作就是計算損失函式的梯度變化曲線。如果是批量演算法,則計算平均或者總的損失函式的梯度變化曲線;而如果是遞增演算法,則計算損失函式僅在對應於該觀測值或者數個觀測值時的梯度變化曲線。

「更新」則是從已有的引數值中減去梯度變化率和學習速率的乘積。

為什麼要用batch?

batch可以大致理解為計算損失函式時需要用到的樣本個數,以上兩種不同的概念,僅是在樣本個數差異上的不同體現。

2.每輸入乙個資料就計算一次損失函式,進而求梯度並更新引數,稱為隨機梯度下降,stochastic gradient descent,這種方法速度較快,但由於迭代一次僅依靠單一樣本,很容易在相鄰的兩次迭代計算中的產生梯度差距非常大,甚至方向相反,因此容易不收斂。

3.另一種就是將上述兩種方法的折中,稱為mini-batch gradient decent,將資料集分成一定數量的批,梯度不容易跑偏容易收斂,同時減少了一次處理的資料數量,因而計算量也小了很多,速度較快。

批量梯度下降法(bgd, batch gradient descent)

隨機梯度下降法(sgd, stochastic gradient descent)

小批量梯度下降法(mini-batch gradient descent)

如上圖所示,總結:優點

缺點1.相對於海量資料的大記憶體,mini-batch只需要小記憶體

1.批次越小,梯度的估值不準確

2.速度更快

2.批次越小,越不容易收斂

3. 選取區域性的梯度方向,較之全域性的學習率簡單

3.所有引數都是用同樣的learning rate

當資料集較大時,並不是適合一次將所有樣本批量輸入進行訓練,而應該使用乙個合適的數量來訓練,這個合適的數量又該如何選擇?

batch_size如何選擇?

在合理範圍內增大batch_size:

1.能提高記憶體使用率。

2.減少epoch迭代次數,提高訓練速度。

3.一定範圍內batch_size越大,確定的梯度下降方向越準確。

盲目增大batch_size:

1.記憶體不足。

2.epoch迭代次數過少,要想達到相同的精度,時間花費增加,調參整體進度下降。

3.batch_size大到一定程度,梯度方向基本不改變。

總結:在硬體配置允許下,從小(也不能過小)增大batch_size,直至乙個比較合適的數量,有人指出,將batch_size設定成2的次方倍能加快速度(未經考證)。自適應梯度剪下由於鏈式法則的計算,當網路的層數非常多時,經常出現梯度消失或者梯度**的現象。體現在影象,就是損失函式有乙個懸崖式的變化。如果設定的學習率太大,那麼可能出現修改過度,甚至丟失已經優化好的資料。而自適應梯度剪下就是根據你的學習率,調整梯度的角度,確保收斂的穩定性。

高學習率

提高收斂速度的最直接方式就是增大學習率,但單純的增大高學習率會產生收斂問題(收斂不穩定),雖然作者已經用了自適應梯度剪下的方法來增大收斂穩定性。但作者在設定學習率時,也能使用一下技巧來增強收斂穩定性。具體的做法是,一開始設定乙個很大的學習率(cdsr簡單地令每層的學習率相同),每過20個epochs,將學習率縮小十倍。這麼做的原理也很直觀,一開始訓練時網路損失函式還較大,能夠大膽地用高學習率來縮短收斂時間,隨著訓練次數得增多,模型趨向收斂,如果繼續用高學習率,就會破壞收斂穩定性,所以改用小學習率,確保網路收斂。這麼多次縮小學習率,進一步縮小了收斂時間。

原文:

深度學習 網路正則化

in 1n i 1n yi f xi 2 r d min 1n i 1n yi f xi 2 r d 2 12 22l2 12 222 1 i i l2 1 i i 1 1 2 22 1 1 2 22 2 c 2 原理 對於某層神經元,在訓練階段均以概率p隨機將該神經元權重設定為0,在測試階段所有神...

深度學習網路結構

lenet 一共有五層,兩層卷積加三層全連線,架構如下 卷積部分 均無padding 輸入kernel size stride kernel個數 輸出池化 第一層卷積 32 32 3 5 51 628 28 6 14 14 6 第二層卷積 14 14 6 5 51 1610 10 16 5 5 16...

深度學習網路學習筆記(一)

定義 全連線層 fc 在整個卷積神經網路中起到 分類器 的作用。如果說卷積層 池化層和啟用函式層等操作是將原始資料對映到隱層特徵空間的話,全連線層則起到將學到的 分布式特徵表示 對映到樣本標記空間的作用。在實際使用中,全連線層可由卷積操作實現 對前層是全連線的全連線層可以轉化為卷積核為11的卷積 而...