搞不懂深度學習中常用優化演算法背後的數學原理?看這篇就對了
全文共 2961字,預計學習時長 6分鐘
深度學習是一個高度迭代的過程。必須嘗試超引數的各種排列才能確定最佳組合。因此,在不影響成本的前提下,深度學習模式必須在更短的時間內進行訓練。本文將解釋深度學習中常用優化演算法背後的數學原理。
優化演算法
在演算法f(x)中,優化演算法可得到f(x)的最大值或最小值。在深度學習中,可通過優化代價函式J來訓練神經網路。代價函式為:
代價函式J的值是預測值y '與實際值y之間損失L的均值。利用網路的權值W和偏置b,在正向傳播過程中得到y '值。通過優化演算法更新可訓練引數W和b的值,從而使代價函式J的值最小化。
梯度下降法
權值矩陣W是隨機初始化的。利用梯度下降法可使代價函式J最小化,得到最優權矩陣W和偏置b。梯度下降法是一種求函式最小值的一階迭代優化演算法。將代價函式J應用於梯度下降法來最小化成本。數學上可定義為:
第一個方程表示權值矩陣W的變化量,第二個方程表示偏置b的變化量。這兩個值的變化由學習率和成本J對權值矩陣W和偏置b的導數決定。反覆更新W和 b,直到代價函式J最小化。接下來本文將通過下圖來解釋梯度下降法的原理:
案例1. 假設W初始值小於其達到全域性最小值時的值。這一點的斜率J對W的偏導數為負,因此,根據梯度下降方程,權值增加。
案例2. 假設W初始值大於其達到全域性最小值時的值。這一點的斜率J對W的偏導數為正,因此,根據梯度下降方程權值下降。
因此,W和b都取得最優值,代價函式J的值被最小化。
以上給出了以梯度下降法為優化演算法的基本策略。
小批量梯度下降法
梯度下降法的缺點之一是隻有在經過完整的訓練資料後才可更新引數。當訓練資料過大無法載入計算機記憶體時,這無疑構成了一大挑戰。小批量梯度下降法是解決上述梯度下降問題的一種應變之法。
在小批量梯度下降中,可根據用例將整個訓練資料分佈在大小為16、32、64等的小批量中。然後使用這些小批量來迭代訓練網路。使用小批量有以下兩個優點:
1. 在最初的幾個訓練案例中,只要遍歷第一個小批量,即可開始訓練。
2. 當擁有大量不適合儲入記憶體的資料時,可以訓練一個神經網路。
現在batch_size成為新的模型超引數。
1. 當batch_size = number of training examples (訓練樣本數)時,稱為批量梯度下降。此時就存在著需要遍歷整個資料集後才能開始學習的問題。
2. 當batch_size = 1時,稱為隨機梯度下降。由於沒有充分利用向量化,訓練將變得非常緩慢。
3. 因此,通常選擇64或128或256或512。然而,這取決於用例和系統記憶體,換而言之,應確保一個小批量能載入系統記憶體。
以上給出了採用小批量梯度下降法作為優化演算法的基本策略。
Momentum
動量梯度下降法是一種先進的優化演算法,可加快代價函式J的優化。動量梯度下降法利用移動平均來更新神經網路的可訓練引數。
移動平均值是在n個連續值上計算的平均值,而不是整組值。數學上表示為:
這裡,A[i]表示X[i]值在i資料點處的移動平均值。引數β決定計算平均值的數值n。例如,如果β= 0.9,移動平均值用10個連續值來計算;如果β= 0.99, 移動平均值用100個連續值來計算。一般情況下,n的值可近似為:
下圖顯示了移動平均線的工作原理。隨著β值增加,n增加,圖形偏向右邊,這是因為初始階段,這些值都會增加。然而,當β減少,n減少,就可以正確建模X。因此有必要找出適當的β值以得到良好的移動平均線。可以看出β= 0.9時適用於大多數情況。
現在,瞭解了什麼是移動平均線,接下來試著理解其在動量演算法中的應用。訓練神經網路時,目標是優化代價函式J,使其值最小化。傳統梯度下降優化器遵循藍色路徑,而動量優化器遵循綠色路徑以達到最小值(紅色)。
與動量相比,梯度下降的路徑步驟過多。這是因為梯度下降在y軸上有很大波動,而在x軸上移動得很少,也就接近最小值。正確的解決方案是通過抑制y軸的運動來減少波動。這就是移動平均線發揮作用的地方。
觀察藍色的路徑,可以看到y軸上的運動是一系列的正負變化。將加權平均應用於幾乎為零的運動,隨後即出現y軸上的波動。對於x軸的運動也有類似的直覺。這減少了路徑上的波動,最終,隨著訓練迭代次數的減少,神經網路在較短的時間內達到最小值。為此,引入兩個新的變數VdW和Vdb來跟蹤權值dW和偏置db的導數的加權平均值。
值得注意的是,由於只有引數更新方法發生了更改,所以也可使用小批量處理方法和力矩優化器。
以上給出了以動量為優化演算法的基本策略。
RMS Prop
RMS Prop是指均方根傳播,與動量類似,它是一種抑制y軸運動的技術。前面的示例有助於理解其原理。為了更好地理解,這裡將y軸表示為偏置b,把x軸表示為權重W。
憑直覺而言,當用一個大數除以另一個數時,結果會變得很小。該例中,第一個大數為db,第二大數為加權平均db²。引入了兩個新的變數Sdb和SdW,跟蹤db²和dW²的加權平均。db和Sdb相除得到一個更小的值,它抑制了y軸的運動。引入Ⲉ避免出現除以零的錯誤。對於 x軸上W的值的更新也有類似的直覺。
值得注意的是,這裡以y軸為偏置b, x軸為權值W,以便更好地理解和視覺化引數的更新。也可用類似的方法消除由任何偏置b(b1, b2,…,bn)或權值W(W1, W2,…,Wn)或兩者引起的任何波動。同樣,由於只有引數更新方法發生了更改,也可使用小批量處理方法和均方根優化器(RMS optimizer)。
以上給出了使用RMS Prop作為優化演算法時的基本策略。
AdaM
AdaM是指適應性動量。它使用單一方法結合動量和RMS prop,是一種強大而快速的優化器。也可利用誤差修正方法解決加權平均計算中的冷啟動問題(即加權平均值的前幾個值與實際值相差太遠)。V值包含動量邏輯,而S值包含RMS prop邏輯。
值得注意的是,計算中使用2個不同的β值。β1用於計算相關動量,而β2用於計算相關RMS prop。同樣,由於只有引數更新方法發生了更改,所以也可使用小批量處理方法和AdaM 優化器。
以上給出了使用AdaM作為優化演算法時的基本策略。
效能比較
損失曲面的輪廓及不同優化演算法的時間演化
參考文獻
1. Coursera — Deep Learning Course 2
https://www.coursera.org/learn/deep-neural-network/home/welcome?source=post_page---------------------------
2. Stanford 231n — Visualizations
http://cs231n.github.io/neural-networks-3/?source=post_page---------------------------
https://www.toutiao.com/a6726730681814090252/
來自 “ ITPUB部落格 ” ,連結:http://blog.itpub.net/29829936/viewspace-2654218/,如需轉載,請註明出處,否則將追究法律責任。
相關文章
- 深度學習 - 常用優化演算法深度學習優化演算法
- 零基礎入門深度學習工作原理?看本文就對了!深度學習
- 強化學習(Reinforcement Learning)中的Q-Learning、DQN,面試看這篇就夠了!強化學習面試
- 學透 Redis HyperLogLog,看這篇就夠了Redis
- Android App效能優化技能,看這篇就夠了AndroidAPP優化
- Nginx 配置常用引數,看這一篇就夠了Nginx
- 小白如何學習六西格瑪,看這篇就夠了!
- HashMap的實現原理(看這篇就夠了)HashMap
- Volatile的實現原理(看這篇就夠了)
- 學Mybatis,入門看這一篇就夠你學的了!MyBatis
- 計算機視覺與深度學習,看這本書就夠了計算機視覺深度學習
- 熱門、常用API介面,看這篇就夠了API
- 學習MySQL這一篇就夠了MySql
- 學習JDBC這一篇就夠了JDBC
- 學習Jmeter,這一篇就夠了JMeter
- 學習git這一篇就夠了!!!Git
- 深度學習的優化器(各類 optimizer 的原理、優缺點及數學推導)深度學習優化
- 搞懂babel7常用的配置和優化,這篇就夠了!Babel優化
- 常見機器學習演算法背後的數學機器學習演算法
- 【詳細圖解】學習佇列,看這一篇就夠了!圖解佇列
- 深度學習中的優化方法(二)深度學習優化
- 深度學習中的優化方法(一)深度學習優化
- 學Redis這篇就夠了Redis
- java序列化,看這篇就夠了Java
- 深度學習優化演算法總結深度學習優化演算法
- SQL優化這麼做就對了SQL優化
- mongoDB看這篇就夠了MongoDB
- Spring 學習,看松哥這一篇萬餘字乾貨就夠了!Spring
- 學習Hibernate5這一篇就夠了
- MySQL索引優化看這篇文章就夠了!MySql索引優化
- kafka3.x原理詳解看這篇就夠了Kafka
- 梯度下降背後的數學原理幾何?梯度
- 關於GC原理和效能調優實踐,看這一篇就夠了!GC
- 大模型在業務落地必須要學習的技術,看這篇就夠了大模型
- Android Fragment看這篇就夠了AndroidFragment
- Oracle索引,看這篇就夠了Oracle索引
- 動力節點jQuery學習教程,jQuery入門看這一篇就夠了jQuery
- IDEA中的Git操作,看這一篇就夠了!IdeaGit