梯度是一個向量,是一個n元函數f關於n個變量的偏導數,梯度會指向各點處的函數值下降的方向。更嚴格的講,梯度指示的方向是各
點處的函數值減小最多的方向。爲何這麼說,由於方向導數=cos(\theta)×梯度,而\theta是方向導數的方向和梯度方向的夾角。
因此,全部的降低方向中,梯度方向降低的最多。算法
深度學習中, 神經網絡的主要任務是在學習時找到最優的參數(權重和偏置),這個最優參數也就是損失函數最小時的參數。可是,
通常狀況下,損失函數比較複雜,參數也不少,沒法肯定在哪裏取得最小值。因此經過梯度來尋找最小值(或者儘量小的值)的
方法就是梯度法。網絡
在處理複雜任務上,深度網絡比淺層的網絡具備更好的效果。可是,目前優化神經網絡的方法都是基於反向傳播的思想,即根據損失
函數計算的偏差經過梯度反向傳播的方式,指導深度網絡權值的更新優化。這樣作是有必定緣由的,首先,深層網絡由許多非線性層
堆疊而來,每一層非線性層均可以視爲是一個非線性函數 (非線性來自於非線性激活函數),所以整個深度網絡能夠視爲是一個複合的非線性多元函數
咱們最終的目的是但願這個多元函數能夠很好的完成輸入到輸出之間的映射,假設不一樣的輸入,輸出的最優解是 那麼,優化深度網絡就是爲了尋找到合適的權值,知足
取得極小值點,好比最簡單的損失函數 :
,假設損失函數的數據空間是下圖這樣的,
咱們最優的權值就是爲了尋找下圖中的最小值點,對於這種數學尋找最小值問題,採用梯度降低的方法再適合不過了。所以,對於神經
網絡這種參數式的方法,使用梯度更新能夠用來尋找最優的參數。函數
梯度降低的基本過程就和下山的場景很相似。首先,咱們有一個可微分的函數。這個函數就表明着一座山。咱們的目標就是找到這個
函數的最小值,也就是山底。根據以前的場景假設,最快的下山的方式就是找到當前位置最陡峭的方向,而後沿着此方向向下走,對
應到函數中,就是找到給定點的梯度 ,而後朝着梯度相反的方向,就能讓函數值降低的最快!由於梯度的方向就是函數之變化最快的
方向(在後面會詳細解釋),因此,咱們重複利用這個方法,反覆求取梯度,最後就能到達局部的最小值。
學習
梯度降低的科學解釋:
此公式的意義是:J是關於Θ的一個函數,咱們當前所處的位置爲Θ0點,要從這個點走到J的最小值點,也就是山底。首先咱們先肯定前
進的方向,也就是梯度的反向,而後走一段距離的步長,也就是α,走完這個段步長,就到達了Θ1這個點!優化
疑問點:
一、α是什麼含義?
α在梯度降低算法中被稱做爲學習率或者步長,意味着咱們能夠經過α來控制每一步走的距離,不要走太快,步長太大會錯過了最低點。
同時也要保證不要走的太慢,過小的話半天都沒法收斂。因此α的選擇在梯度降低法中每每是很重要的!α不能太大也不能過小,過小
的話,可能致使遲遲走不到最低點,太大的話,會致使錯過最低點!
二、爲何要梯度要乘以一個負號?
梯度前加一個負號,就意味着朝着梯度相反的方向前進!咱們在前文提到,梯度的方向實際就是函數在此點上升最快的方向!而咱們需
要朝着降低最快的方向走,天然就是負的梯度的方向,因此此處須要加上負號。.net
梯度降低存在的問題:
一、參數調整緩慢
二、可能收斂於局部最小值
3d
深層網絡角度:在深層網絡中,因爲網絡過深,若是初始獲得的梯度太小,或者傳播途中在某一層上太小,則在以後的層上獲得的
梯度會愈來愈小,即產生了梯度消失。梯度爆炸也是一樣的。不一樣的層學習的速度差別很大,表現爲網絡中靠近輸出的層學習的狀況很
好,靠近輸入的層學習的很慢,有時甚至訓練了好久,前幾層的權值和剛開始隨機初始化的值差很少。所以,梯度消失、爆炸,其根本
緣由在於反向傳播訓練法則,本質在於方法問題
激活函數角度:計算權值更新信息的時候須要計算前層偏導信息,所以若是激活函數選擇不合適,好比使用sigmoid,梯度消失就
會很明顯了,緣由看下圖
左圖是sigmoid的損失函數圖,右邊是其倒數的圖像,若是使用sigmoid做爲損失函數,其梯度是不可能超過0.25的,這樣通過鏈式求
導以後,很容易發生梯度消失,sigmoid函數數學表達式爲:
同理,tanh做爲損失函數,它的導數圖以下,能夠看出,tanh比sigmoid要好一些,可是它的倒數仍然是小於1的。tanh數學表達爲:orm
及採起無監督逐層訓練方法,其基本思想是每次訓練一層隱節點,訓練時將上一層隱節點的輸出做爲輸入,而本層隱節點的輸出做爲下一
層隱節點的輸入,此過程就是逐層「預訓練」(pre-training);在預訓練完成後,再對整個網絡進行「微調」(fine-tunning)。此思想
至關因而先尋找局部最優,而後整合起來尋找全局最優,此方法有必定的好處,可是目前應用的不是不少了。blog
梯度剪切這個方案主要是針對梯度爆炸提出的,其思想是設置一個梯度剪切閾值,而後更新梯度的時候,若是梯度超過這個閾值,那麼就
將其強制限制在這個範圍以內。這能夠防止梯度爆炸。深度學習
權重正則化限制過擬合,若是仔細看正則項在損失函數中的形式(公式以下),其中,α 是指正則項係數,所以,若是發生梯度爆炸,
權值的範數就會變的很是大,經過正則化項,能夠部分限制梯度爆炸的發生。
注:事實上,在深度神經網絡中,每每是梯度消失出現的更多一些。
激活函數講解參考:https://blog.csdn.net/weixin_43798170/article/details/106698255
Batchnorm是深度學習發展以來提出的最重要的成果之一了,目前已經被普遍的應用到了各大網絡中,具備加速網絡收斂速度,提高訓練穩定性
的效果,Batchnorm本質上是解決反向傳播過程當中的梯度問題。batchnorm全名是batch normalization,簡稱BN,即批規範化,經過規範化操
做將輸出信號x規範化到均值爲0,方差爲1保證網絡的穩定性。
在此只大概講一下batchnorm爲什麼能解決梯度問題,具體來講就是反向傳播中,通過每一層的梯度會乘以該層的權重,舉個簡單例子: 正向傳播中,
那麼反向傳播中,反向傳播式子中有w的存在,因此 w 的大小影響了梯度的消失和爆炸,batchnorm就是經過對每一層的輸出作
scale和shift的方法,經過必定的規範化手段,把每層神經網絡任意神經元這個輸入值的分佈強行拉回到接近均值爲0方差爲1的標準正太分佈,
即嚴重偏離的分佈強制拉回比較標準的分佈,這樣使得激活輸入值落在非線性函數對輸入比較敏感的區域,這樣輸入的小變化就會致使損失函數
較大的變化,使得讓梯度變大,避免梯度消失問題產生,並且梯度變大意味着學習收斂速度快,能大大加快訓練速度。
殘差結構解讀(論文:Deep Residual Learning for Image Recognition):https://zhuanlan.zhihu.com/p/31852747
殘差解決梯度問題:
首先殘差單元以下
通常,殘差網絡中不少這樣的跨層鏈接結構,這樣的結構在反向傳播中具備很大的好處,見下式:
公式第一個因子表示損失函數到達L的梯度,小括號中的1代表短路機制能夠無損地傳播梯度,而另一項殘差梯度則須要通過帶有weights的層, 梯度不是直接傳遞過來的。殘差梯度不會那麼巧全爲-1,並且就算其比較小,有1的存在也不會致使梯度消失。因此殘差學習會更容易。