深度學習中的梯度


一、什么是梯度

· 梯度的定義


梯度是一個向量,是一個n元函數f關於n個變量的偏導數,梯度會指向各點處的函數值降低的方向。更嚴格的講,梯度指示的方向是各
點處的函數值減少最多的方向。為什么這么說,因為方向導數=cos(\theta)×梯度,而\theta是方向導數的方向和梯度方向的夾角。
所以,所有的下降方向中,梯度方向下降的最多。

二、梯度法

· 什么是梯度法

深度學習中, 神經網絡的主要任務是在學習時找到最優的參數(權重和偏置),這個最優參數也就是損失函數最小時的參數。但是,
一般情況下,損失函數比較復雜,參數也很多,無法確定在哪里取得最小值。所以通過梯度來尋找最小值(或者盡可能小的值)的
方法就是梯度法

· 為什么使用梯度更新規則

在處理復雜任務上,深度網絡比淺層的網絡具有更好的效果。但是,目前優化神經網絡的方法都是基於反向傳播的思想,即根據損失
函數計算的誤差通過梯度反向傳播的方式,指導深度網絡權值的更新優化。這樣做是有一定原因的,首先,深層網絡由許多非線性層
堆疊而來,每一層非線性層都可以視為是一個非線性函數 (非線性來自於非線性激活函數),因此整個深度網絡可以視為是一個復合的非線性多元函數
我們最終的目的是希望這個多元函數可以很好的完成輸入到輸出之間的映射,假設不同的輸入,輸出的最優解是 那么,優化深度網絡就是為了尋找到合適的權值,滿足
取得極小值點,比如最簡單的損失函數 :,假設損失函數的數據空間是下圖這樣的,
我們最優的權值就是為了尋找下圖中的最小值點,對於這種數學尋找最小值問題,采用梯度下降的方法再適合不過了。因此,對於神經
網絡這種參數式的方法,使用梯度更新可以用來尋找最優的參數。

· 梯度下降

梯度下降的基本過程就和下山的場景很類似。首先,我們有一個可微分的函數。這個函數就代表着一座山。我們的目標就是找到這個
函數的最小值,也就是山底。根據之前的場景假設,最快的下山的方式就是找到當前位置最陡峭的方向,然后沿着此方向向下走,對
應到函數中,就是找到給定點的梯度 ,然后朝着梯度相反的方向,就能讓函數值下降的最快!因為梯度的方向就是函數之變化最快的
方向(在后面會詳細解釋),所以,我們重復利用這個方法,反復求取梯度,最后就能到達局部的最小值。

梯度下降的科學解釋:

此公式的意義是:J是關於Θ的一個函數,我們當前所處的位置為Θ0點,要從這個點走到J的最小值點,也就是山底。首先我們先確定前
進的方向,也就是梯度的反向,然后走一段距離的步長,也就是α,走完這個段步長,就到達了Θ1這個點!


疑問點:
1、α是什么含義?
α在梯度下降算法中被稱作為學習率或者步長,意味着我們可以通過α來控制每一步走的距離,不要走太快,步長太大會錯過了最低點。
同時也要保證不要走的太慢,太小的話半天都無法收斂。所以α的選擇在梯度下降法中往往是很重要的!α不能太大也不能太小,太小
的話,可能導致遲遲走不到最低點,太大的話,會導致錯過最低點!
2、為什么要梯度要乘以一個負號?
梯度前加一個負號,就意味着朝着梯度相反的方向前進!我們在前文提到,梯度的方向實際就是函數在此點上升最快的方向!而我們需
要朝着下降最快的方向走,自然就是負的梯度的方向,所以此處需要加上負號。

梯度下降存在的問題:
1、參數調整緩慢

2、可能收斂於局部最小值

三、深度學習中的梯度問題

· 梯度消失與梯度爆炸

深層網絡角度:在深層網絡中,由於網絡過深,如果初始得到的梯度過小,或者傳播途中在某一層上過小,則在之后的層上得到的
梯度會越來越小,即產生了梯度消失。梯度爆炸也是同樣的。不同的層學習的速度差異很大,表現為網絡中靠近輸出的層學習的情況很
好,靠近輸入的層學習的很慢,有時甚至訓練了很久,前幾層的權值和剛開始隨機初始化的值差不多。因此,梯度消失、爆炸,其根本
原因在於反向傳播訓練法則,本質在於方法問題
激活函數角度:計算權值更新信息的時候需要計算前層偏導信息,因此如果激活函數選擇不合適,比如使用sigmoid,梯度消失就
會很明顯了,原因看下圖

左圖是sigmoid的損失函數圖,右邊是其倒數的圖像,如果使用sigmoid作為損失函數,其梯度是不可能超過0.25的,這樣經過鏈式求
導之后,很容易發生梯度消失,sigmoid函數數學表達式為:
同理,tanh作為損失函數,它的導數圖如下,可以看出,tanh比sigmoid要好一些,但是它的倒數仍然是小於1的。tanh數學表達為:

· 梯度消失、爆炸的解決方案

1、預訓練加微調

及采取無監督逐層訓練方法,其基本思想是每次訓練一層隱節點,訓練時將上一層隱節點的輸出作為輸入,而本層隱節點的輸出作為下一
層隱節點的輸入,此過程就是逐層“預訓練”(pre-training);在預訓練完成后,再對整個網絡進行“微調”(fine-tunning)。此思想
相當於是先尋找局部最優,然后整合起來尋找全局最優,此方法有一定的好處,但是目前應用的不是很多了。

2、梯度剪切與正則

梯度剪切這個方案主要是針對梯度爆炸提出的,其思想是設置一個梯度剪切閾值,然后更新梯度的時候,如果梯度超過這個閾值,那么就
將其強制限制在這個范圍之內。這可以防止梯度爆炸。

權重正則化限制過擬合,如果仔細看正則項在損失函數中的形式(公式如下),其中,α 是指正則項系數,因此,如果發生梯度爆炸,
權值的范數就會變的非常大,通過正則化項,可以部分限制梯度爆炸的發生。

注:事實上,在深度神經網絡中,往往是梯度消失出現的更多一些。

3、使用relu、elu、leakrelu等激活函數

激活函數講解參考:https://blog.csdn.net/weixin_43798170/article/details/106698255

4、Batchnorm(批量歸一化)

Batchnorm是深度學習發展以來提出的最重要的成果之一了,目前已經被廣泛的應用到了各大網絡中,具有加速網絡收斂速度,提升訓練穩定性
的效果,Batchnorm本質上是解決反向傳播過程中的梯度問題。batchnorm全名是batch normalization,簡稱BN,即批規范化,通過規范化操
作將輸出信號x規范化到均值為0,方差為1保證網絡的穩定性。
在此只大概講一下batchnorm為何能解決梯度問題,具體來說就是反向傳播中,經過每一層的梯度會乘以該層的權重,舉個簡單例子: 正向傳播中
那么反向傳播中,反向傳播式子中有w的存在,所以 w 的大小影響了梯度的消失和爆炸,batchnorm就是通過對每一層的輸出做
scale和shift的方法,通過一定的規范化手段,把每層神經網絡任意神經元這個輸入值的分布強行拉回到接近均值為0方差為1的標准正太分布,
即嚴重偏離的分布強制拉回比較標准的分布,這樣使得激活輸入值落在非線性函數對輸入比較敏感的區域,這樣輸入的小變化就會導致損失函數
較大的變化,使得讓梯度變大,避免梯度消失問題產生,而且梯度變大意味着學習收斂速度快,能大大加快訓練速度。

5、構建殘差結構

殘差結構解讀(論文:Deep Residual Learning for Image Recognition):https://zhuanlan.zhihu.com/p/31852747

殘差解決梯度問題:
首先殘差單元如下

一般,殘差網絡中很多這樣的跨層連接結構,這樣的結構在反向傳播中具有很大的好處,見下式:

公式第一個因子表示損失函數到達L的梯度,小括號中的1表明短路機制可以無損地傳播梯度,而另外一項殘差梯度則需要經過帶有weights的層,
梯度不是直接傳遞過來的。殘差梯度不會那么巧全為-1,而且就算其比較小,有1的存在也不會導致梯度消失。所以殘差學習會更容易。


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM