3.3 自適應學習率
當梯度大小不再下降時,並不代表梯度本身已經變得很小接近於0了,有可能是梯度在波谷之間來回震盪。
原始的梯度下降在很簡單的誤差表面上都不一定能夠達到臨界點,因此引入自適應學習率。
3.3.1 AdaGrad
傳統的梯度下降更新引數 \(\theta_t^i\) 的過程是
現在需要引入一個引數定製化的學習率
對於不同引數其 \(\sigma\) 不同,\(\sigma_t^i\) 的下標表示與迭代相關,上邊表示與引數 \(i\) 相關
引數相關的一個常見型別時算 梯度的均方根 即:
當某次迭代時梯度較大,則計算得到的 \(\sigma_t^i\) 也較大,得到的學習率就比較小,反之同理。
3.3.2 RMSProp
RMSProp 與 AdaGrad 的方法類似,不同點在於,AdaGrad 方法中認為每一個梯度具有同樣的重要性所以他們的權重都為1,但是在 RMSProp 中引入了一個超引數可以調整梯度的重要性
3.3.3 Adam
Adam 時最常用的最佳化策略或者最佳化器,可以看作時在 RMSProp 的基礎上加上了動量,使用動量作為引數來更新方向,並且能夠自適應的調整學習率。
3.4 學習率排程
只使用自適應學習率並不能很好的訓練,因為在快到臨界點時,周圍的梯度比較小,此時的學習率較大移動的步伐也會很大,容易造成震盪和梯度突然暴增的問題。
透過引入學習率排程 可以緩解這個問題,之前自適應學習率中 \(\eta\) 是一個固定的值,而在學習率排程中 \(\eta\) 是和時間相關的。
一種最常見的學習率排程策略就是 學習率衰減 也稱為學習率退火。
還有另外一種經典的學習率排程的方式預熱。使用預熱的意義在於,學習率最佳化的過程需要用到 \(\sigma\), 而 \(\sigma\) 是一個統計意義上的結果,因此在訓練的初期 \(\sigma\) 的值是不精準的。所以我們此時希望用較小的學習率,來抑制引數的變化,先收集一些梯度的資訊後再開始正式的更新引數。
3.5 總結
在瞭解了自適應學習率,學習率排程的最佳化方式後,我們目前的更新方式如下:
這種最佳化反式和 Adam 類似,透過使用不同的方式來計算 \(\sigma_t^i\) 和 動量\(m_t^i\),我們可以得到不同的最佳化器
雖然 \(m_t^i\) 和 \(\sigma_t^i\) 都考慮到了過去的所有梯度,但是兩者應用梯度的方式是不一樣的,動量是直接對梯度求向量和,而均方根則是不考慮方向只考慮梯度的大小,所以並不矛盾。
3.6 分類
3.6.1 分類與迴歸的關係
根據類本身是否有關聯性,我們需要考慮神否引入獨熱向量來表示類。每個獨熱向量可以看作空間中一個特定的維度,和其他維度沒有直接關係。因此用獨熱向量計算距離的話,類之間兩兩的距離是相同的。
3.6.2 帶有softmax的分類
當類別是獨熱向量時,裡面的值只有0和1,所以我們需要對神經網路計算得到的結果進行歸一化,才能和標籤計算相似度,因此我們在分類任務中引入 softmax 函式。
當類別數量在三個及以上時我們使用 softmax 函式,當類別數量為兩個時我們直接使用 sigmoid 函式,其實對於類別數為2時,sigmoid 函式和 softmax 函式的計算是等價的。
3.6.3 分類損失
常見的分類任務中的損失函式有均方誤差和交叉熵,均方誤差的形式為:
交叉熵損失的形式為:
在分類任務中,交叉熵損失一般來說比均方誤差的最佳化效果更好,因為當某個標籤非常小時,經過softmax函式後其得到的值非常接近於0,此時在交叉熵損失下得到的損失會非常大比較貼合實際,而對於均方誤差來說這一項為損失提供的大小隻有1。