官术网_书友最值得收藏!

3.5 神經網絡的學習

每個特定的神經網絡的網絡結構是事先設計好的,包括有多少個神經元、這些神經元之間的相互連接關系。如果是分層網絡,還需要設計好輸入層、隱藏層(可以有多個)和輸出層。但是,光設計好這些是不夠的,一個神經網絡中還有大量的參數需要確定,包括神經元之間的每條連接的連接權重、每個輸出的閾值。這些參數是在網絡的訓練階段完成設置的。

神經網絡的學習是指從訓練數據中自動調整模型中的參數,最終獲得最優參數的過程。根據訓練數據集是否有標記以及訓練評價方法,學習方式主要有以下三類。

監督學習:訓練數據集包括輸入和通過標記給出的正確輸出。通過這種方式,網絡可以比較計算結果和正確輸出之間的誤差值,并據此修正網絡參數來縮小誤差值。大部分機器學習是監督學習,如支持向量機、邏輯回歸算法等。

無監督學習:訓練數據集僅包括輸入,沒有正確答案,網絡自動完成輸入數據的運算分類,如主成分分析算法、聚類算法等是典型的無監督學習算法。

強化學習:訓練數據集包括輸入,以及為訓練行為給出的獎懲策略。如果訓練行為正確,視情給予相應的獎勵,否則就是懲罰。

人工神經網絡,尤其是深度學習神經網絡,必須要有大量的訓練數據和測試數作為支撐。沒有大量的數據對網絡模型進行訓練測試,就無法得到實用的網絡模型。因此,人工神經網絡的特征就是可以“從數據中學習”。

3.5.1 數據驅動

千百年來,人類解決問題是以知識、經驗和直覺為依據的。機器學習的方法是要盡可能避免人為介入,嘗試從收集的海量數據中尋找規律,找出解決問題的方法,這就是數據驅動。

數據驅動的提法另外一個原因是相對于信息化建設的需求牽引原則。信息化的任務是將人員的人工管理轉變為計算機管理,因此,要建設一個具備哪些能力的系統是可以說清楚的,能力包括具有哪些功能,達到什么樣的指標。這就是所謂的用戶需求。開發者必須讓信息系統實現用戶所要求的所有功能和性能要求。以深度學習為特征的智能系統所做的功能基本上是以前人們沒有做的,有些是以前想做而做不到的,有些干脆是沒有想過的。現在技術的進步允許處理海量數據,就有機會分析數據,找出數據中蘊藏的規律。這樣的做法顯然不是需求牽引,只能是數據驅動。

從數據中找規律通常的做法是先對數據提取特征,比如對圖像數據,提取反映圖像本質的特征量。傳統的機器學習由人設計并標注特征,工作量非常大,人為標注的優劣對模型最終的結果影響巨大。如果提取的特征有偏差,最后的結果一定出問題。

深度學習所采用的網絡層級遠比機器學習要多,因此需要確定的參數成千上萬,數據量也更大,再由人來設計標注特征不切實際,深度學習的特征選取和標注是由機器自動完成的。深度學習有時被稱為端到端的機器學習,即輸入原始數據就可以獲得目標結果,中間不再需要人的介入。

機器學習使用的數據根據用途分為訓練數據和測試數據。機器學習模型首先使用訓練數據進行學習,尋找出最優參數,將神經網絡模型固定下來;然后使用測試數據對訓練得到的模型進行測試,評判模型的實際效果。使用訓練數據對模型進行測試除了驗證模型的準確性外,還可以提高模型的泛化能力,這是把訓練數據與測試數據分列的主要原因。

3.5.2 損失函數

對于同一個結構的神經網絡,如果網絡參數(權重和閾值)不同,即使輸入的是同一個數據集,達到的輸出結果顯然是不同的。這些不同的輸出值就有優劣之分,自然我們要尋找的是,使得輸出值最接近期望值的那組參數。

用來計算評估實際輸出值與期望輸出值(正確答案)之間的差異的函數稱損失函數,或稱誤差函數。使用哪些函數作為損失函數呢?

原則上只要是能夠計算實際輸出值與期望輸出值之間差異的函數都可以作為損失函數,但通常使用的損失函數是均方差函數和交叉熵誤差函數,這兩種函數各有用途。

(1)對于多分類問題(n個訓練數據分成m個類),一般使用交叉熵損失函數

(2)對于遞歸問題,通常使用均方差(最小二乘)損失函數

其中,r表示網絡的期望輸出,y表示網絡的實際輸出。

均方差損失函數非常普通,容易理解,BP網絡通常使用它。其中的系數1/2是為了計算方便,最小二乘法的平方和是為了避免誤差值的代數和出現正負抵消而影響誤差值的實際總和,網絡實際輸出值是由激活函數計算得出的位于0到1之間的一個值。

交叉熵損失函數中的實際輸出是通過似然函數softmax計算得到的一個概率值。交叉熵損失函數有些費解,需要一些信息論的知識。

先介紹信息的定義。

1928年哈特萊(R.V.L. Hartley)定義的信息是“信息是被消除的不確定性”。有些抽象,舉個例子。

中國足球隊與韓國足球隊比賽,結果說“韓國隊贏了”,這是一條信息,如果再說“中國隊輸了”,因為沒有再消除不確定性,所以不是信息。但如果說“中國隊以0:1惜敗”則又是信息了,繼續說“中國隊在加時遭韓國隊絕殺,以0:1惜敗”,這還是一條信息。

信息有了明確的定義,如何比較不同信息之間所含的信息量的大小呢?這就是信息的度量問題。

對信息進行量化的想法還是哈特萊提出的。

他提出,如果信息源有m種消息,且每個消息是以相等可能產生的,則該信源的信息量定義為:

I=log2m

【例1】中國女排與美國女排比賽,結果有兩種,中國隊勝,美國隊勝。比賽結果為信源m,此時m=2,信息量I=log22=1,單位是比特(bit)。

【例2】2018年俄羅斯世界杯有32支球隊爭奪冠軍,如何用信息量來描述哪支球隊獲得冠軍?

如果按照哈特萊的算法(每支球隊獲得冠軍的概率相等),各支球隊獲得冠軍的信息量是:

I=log2 32=log2 25=5

這是不嚴謹的,因為32支球隊獲得冠軍的概率是不同的。國際足聯在對32支球隊分組前,先根據FIFA排名將其劃分成四檔:

第一檔:德國、巴西、葡萄牙、阿根廷、比利時、波蘭、法國、俄羅斯;

第二檔:西班牙、秘魯、瑞士、英格蘭、哥倫比亞、墨西哥、烏拉圭、克羅地亞;

第三檔:丹麥、冰島、哥斯達黎加、瑞典、突尼斯、埃及、塞內加爾、伊朗;

第四檔:塞爾維亞、尼日利亞、澳大利亞、日本、摩洛哥、巴拿馬、韓國、沙特。

概率不同如何計算信息量?這是香農的貢獻,根據“事件出現的概率越小,信息量越大”原理,事件Xi的信息量定義為:(P(Xi)表示事件Xi發生的先驗概率)

H(Xi)=?log2 P(Xi)

綜合各隊近期表現、球員實力、比賽經驗,認為巴西隊最終奪冠的概率最高,有1/16的可能性,那么,巴西隊奪冠的信息量是:

如果認為韓國隊奪冠的概率只有巴西隊的,那么,韓國隊奪冠的信息量是:

前面說明的是單個事件的信息量,對于一個樣本整體,如何來描述其信息量呢?

香農用熵來描述一個樣本整體的信息量,也就是其雜亂程度或意外程度的數值。

信息熵的定義是,對于任一隨機變量X,其信息熵為:

就是把每個可能項的概率值乘以該可能項所含的信息量,然后累加。由于0≤P(x)≤1,logP(x)≤0,加“-”保證得到正值。

前面第2個例子“誰是世界杯冠軍”的信息量公式應該是:

H=?(p1log2 p1+p2log2 p2+…+p32log2 p32)

其中,p1, p2, …, p32分別是32支球隊奪冠的概率。

可以檢驗,當各支球隊奪冠概率相差越大,熵越小,奪冠概率相差越小,熵越大,等概率時的熵為5,這是最大值。

歸納一下:

越是難以分出各球隊奪冠概率的大小,說明我們掌握的信息越少,競爭形勢越混亂,此時的熵越大。

如果能夠確定有球隊奪冠概率很大(或很小),說明我們掌握的信息較多,競爭形勢較明朗,此時的熵就小。

因此,信息量大小與熵的大小成反比。

理解了信息熵概念再介紹交叉熵就容易了。

先看只有一組訓練數據的情況,回顧一下自然對數函數負值部分的圖像,如圖3-9所示。

圖3-9 自然對數函數y=lnx的圖像

此時,交叉熵誤差函數定義為:

yk為神經網絡的實際輸出,取值區間[0, 1];rk為期望輸出,只取0或1兩個值。因此,只有當分類正確時,rk為1,否則為0。比如,假設數據標簽為“A”,對于一個輸入,神經網絡認為數據為“A”的輸出(可能性)為0.6,則交叉熵誤差為?ln 0.6=0.51,如果輸出為0.1,則交叉熵誤差為?ln 0.1=2.3。顯然離正確值差距越大,其交叉熵值越大。

由于在不正確分類時,rk=0,上述公式實際上是對正確分類的輸出數據的對數值求和,因此,交叉熵誤差值只與由正確分類的輸出結果有關。

由對數函數性質可知,正確分類(rk為1)的輸出值yk越大(接近1),ln yk越接近0,此時,交叉熵誤差值最小;當yk越小(接近0),ln yk越接近1,此時,交叉熵誤差值最大。yk越接近rk,交叉熵誤差值越小,反之越大。所以,交叉熵誤差值可以作為損失函數。

由此可知,交叉熵誤差值越小,結果越好,交叉熵誤差值越大,結果越差。

再看訓練數據分成N個組的情況,此時交叉熵誤差為:

ynk為第n組數據的第k個元素的網絡輸出;rnk為第n組數據的第k個元素的理想輸出。除以N是求單組數據的“平均誤差”。至此,交叉熵損失函數就解釋清楚了。

損失函數是調整網絡參數的工具。如何通過計算損失函數的值來調整參數值呢?

參數值通常是微調的,所以想到對損失函數E求關于參數值W(權重)的導數。損失函數對參數的導數值的正、負和0值,可以指明參數的變化方向,以保證損失函數逐步收斂:

3.5.3 激活函數

激活函數是人工神經網絡的重要組成部分,負責對輸入信號進行非線性變換,可以擬合各種曲線,并輸出最終結果。如果沒有經過激活函數處理,神經網絡的每一層節點的輸入都是上層輸出的線性函數,很容易驗證,無論神經網絡有多少層,輸出都是輸入的線性組合,網絡僅能夠表達線性映射,此時即便有再多的隱藏層,整個網絡跟單層神經網絡也是等價的。因此,激活函數提供了網絡的非線性建模能力。

激活函數中的“激活”一詞是指對網絡中的某個神經元是否被接收到的所有輸入信號之和所激活,或者說,這個神經元所接收到的信號是起作用,還是被忽視。激活函數將神經元的所有輸入,包括輸入值、連接權重,經過代數運算,得到一個綜合的激活值,激活函數根據這個激活值離閾值的遠近,決定這個神經元輸出0~1或-1~1的數值。

不是任何函數都適合做神經元的激活函數的。那么激活函數應該具有哪些性質呢?

可導性:由于人工神經網絡的誤差反向傳遞算法需要對損失函數求導數,因此,激活函數必須是可導的;

單調性:只有當激活函數是單調的,才能保證根據輸出的誤差值,逐步調整網絡參數,達到誤差收斂的效果;

非線性性:如果使用線性函數作為激活函數,增加網絡層數將變得沒有意義。這是因為,假設用線性函數f(x)=cx作為激活函數,后續再增加一層,其運算近似于y(x)=f(f(x))=c2x,這樣的結果可以直接設f(x)=c2x,從而使增設一層網絡變得沒有意義;輸出值的范圍:原則上對激活函數的輸出值是沒有限定的。但是,如果激活函數輸出值為有限時,基于梯度的優化方法會更加穩定,因為特征的表示受有限權重的影響更顯著;如果激活函數輸出值為無限時,模型的訓練會更加高效,不過在這種情況下,一般需要更小的學習率。另外,激活函數的值域最好是在概率空間[0, 1]范圍內,否則不能直接作為輸出層的輸出值,還需要通過softmax函數來計算分類的概率。

1. 階梯函數

M-P模型和感知器使用如下的階梯函數作為激活函數(見圖3-10)。

圖3-10 階梯函數

其中,xi為網絡的輸入,wi為連接權重,h為閾值。

2. sigmoid函數

最初的神經網絡就是將感知器的激活函數中的階梯函數換成sigmoid函數(見圖3-11),從而將神經元的輸出從二值改成了0~1的連續值:

圖3-11 sigmoid函數

使用階梯函數作為激活函數的想法很自然,滿足條件(閾值)函數取值為1,不滿足函數取值為0。但是,在數據分析中,很多判斷只能是一個概率值,無法給出明確的二值邏輯值,所以階梯函數在很多場合是不適應的,于是又引入了sigmoid函數。

盡管因為其一些固有的缺陷,現在的神經網絡已經很少使用sigmoid函數了,但是,不可否認,當初想到構造這樣一個函數還是很不簡單的,其最初的啟發個人猜測是來自于伯努利試驗。

來看伯努利試驗:如果每次試驗只有“成功(取值為1)”與“失敗(取值為0)”兩種結果,成功的概率P是一個常數,這種試驗成為伯努利試驗。1次伯努利試驗的概率是:

因為只能給出一種結果的概率值,所以來看每次試驗的成功與失敗的比值

令:

p是伯努利試驗成功的概率,以此作為激活函數更符合對分類判斷可能性的描述。

下面來比較一下階梯函數與sigmoid函數的不同之處。

階梯函數在閾值處出現陡變,在閾值處不連續,無法求導數值,在其他地方導數值為0,函數值非0即1。

sigmoid函數是一條光滑的曲線,在區間(0, 1)連續取值,處處可以求導數,導數值為正數。

誤差反向傳遞算法需要對損失函數求導數,因此,階梯函數就無法完成參數自動學習調整的任務,而sigmoid函數是可以的。

進一步,階梯函數只能輸出0或1兩個值,而sigmoid函數可以輸出區間(0, 1)上的任意值,因此,對結果的描述更加精細。

sigmoid函數是不是沒有毛病了呢?下面來繼續分析sigmoid函數的特性。

為了推導方便,將sigmoid函數寫成如下形式:

可以對sigmoid函數求一階導數:f′(x)=f(x)(1?f(x)),因此可以作為誤差反向傳遞算法(見第3.6節)訓練使用。

如圖3-12所示,首先,sigmoid函數的一階導數(梯度值)≤0.25,而且,變量取值只在區間[?5, 5]之間梯度值較大,其余區域梯度值會很小,有可能引發梯度消失問題(見第3.6節);其次,sigmoid函數還包含指數函數,運算量很大;第三,sigmoid函數的值域是(0, 1),函數值都是正值,算法不是一個對稱算法,并不是所有情況下都希望下一個神經元只能接受正值輸入,而且算法收斂緩慢。所以,現在深度學習中已不常使用。

圖3-12 sigmoid函數及其導數的圖像

3. tanh函數

楊立昆先生建議采用雙曲正切函數tanh來解決sigmoid的非對稱問題。tanh函數的圖像形狀與sigmoid函數很像,區別是值域從(0, 1)擴大到(?1, 1),這是一個對稱區間。

tanh函數的導數為:

f'(x)=1-(f(x))2

tanh函數的值域是以0為中心的區間(-1, 1),因此優化更容易,但同樣存在梯度消失和運算效率問題。因此,必須尋找新的激活函數來解決梯度消失問題和運算效率問題。

4. ReLU函數

激活函數ReLU(Rectified Linear Unit,修正線性單元)是一個非常簡單的函數,但有著不簡單的效果。

圖3-13 tanh函數及其導數的圖像

修正線性單元ReLU的定義為:f(x)=m ax(x, 0),或定義成:

即如果輸入值大于0,直接輸出該值,否則輸出0(函數及其導數的圖像見圖3-14)。

圖3-14 ReLU函數及其導數的圖像

顯然,ReLU函數的作用是,當x>0時,f(x)>0,模型會更新參數,否則不會更新。再來看看這個函數的導數:

這個導數函數是一個標準的階梯函數。

不難看出,ReLU函數計算顯然簡單,而且不會出現梯度問題。文獻“Krizhevsky, ImageNet Classification with Deep Convolutional Neural Networks, 2012”已經證明,與sigmoid和tanh相比,ReLU的收斂速度提高了6倍。

但是,ReLU函數在解決了梯度消失和計算效率問題的同時,又出現了下列兩個問題:

? ReLU的取值范圍為(0, ∞),已經超出概率空間[0, 1],因此不能直接作為輸出值出現在輸出層,還需要使用softmax函數(見3.5.3節似然函數)來計算分類的概率;

? ReLU的另一個問題是“死神經元”問題。當x≤0時,對應的梯度值為0,神經元無法更新;當x>0時,因為ReLU函數的梯度值可以很大,可能導致權重w調整步伐過大,使得某個神經元跳過調整,以后的梯度都是0,神經元不會再被激活;

? 和Sigmoid激活函數類似,ReLU函數的輸出同樣不以零為中心。

盡管存在這些問題,ReLU目前仍是最常用的激活函數,在搭建人工神經網絡時推薦優先嘗試。

下列函數可以解決ReLU的死神經元問題:

? Maxout

? Leaky ReLU

? Parametric ReLU(PReLU)

? Randomized leaky Rectified Linear Units(RReLU)

5. maxout函數

maxout函數是一種新型的激活函數,是一個可學習的分段線性函數,是從k個候選輸出值中選取最大的一個作為這個值的唯一輸出。

實際上,是將網絡的中間層所有m個元素分成d個小組,每個小組有k個元素,每個小組只取其最大值作為這個小組的代表輸出。

如圖3-15所示,首先將中間層分成若干個(圖中為d個)元素相等(圖中為k個)的小組,設zpl為中間層的第p小組的第l個元素,其計算公式為:

圖3-15 maxout函數示意圖

于是,被選作第p小組唯一的輸出為:

6. ReLU函數的衍生函數

由于函數ReLU在x<0時梯度為0,這樣,這個神經元有可能再也不會被任何數據激活。如圖3-16所示的3個函數都是對函數ReLU的負數端進行了改進,因此都屬于ReLU的衍生函數。

圖3-16 ReLU及其衍生函數示意圖

Leaky ReLU函數:

其導數為:

x<0時,Leaky ReLU函數讓變量乘以一個很小的常數a,例如a=0.01,這樣就可以得到0.01的正梯度,從而避免出現死神經元問題。

PReLU函數:y=max(αx, x),a是一個超參數,不是一個固定值,是由誤差反向傳播算法計算出來的,從理論上看比Leaky ReLU函數設計得更合理些。PReLU激活函數出自于微軟研究院何凱明等人的論文《Delving Deep into Rectifiers: Surpassing Human-LevelPerformance on ImageNet Classification》。

理論上來講,ReLU函數的衍生函數有ReLU的所有優點,且不會有死神經元問題,但是在實際操作當中,并沒有完全證明它們總是好于ReLU函數。

3.5.4 似然函數

機器學習的目的是讓機器的實際輸出與期望輸出盡可能地接近。判斷實際輸出與期望輸出是否足夠接近的常用手段有兩種:計算二者差異程度的誤差函數,或者是計算二者接近程度的似然度。所謂似然度就是二者的相似程度。

這兩種方法的目的或結果是一致的,差別是分析問題的角度不同。一個是從兩者的相差程度來衡量它們的接近程度,另一個是從兩者的相似程度來計算它們的接近程度。當然希望二者的誤差函數值能夠最小,或者二者的似然度最大。

與計算實際輸出值與期望輸出值之間差異的誤差函數類似,似然度是通過計算似然函數獲得的。在介紹似然函數之前,需要介紹最大似然估計,為此,還需引入先驗概率和后驗概率概念。

先驗概率:在一個事件發生前,人們根據已有的經驗或知識預測該事件發生的概率。如,擲六面骰子,擲出點數為1的概率為1/6。再如,已知機場已經實行了流量控制,根據自己以往乘坐飛機的經驗,預測自己今天乘坐的那個航班延誤的概率。

后驗概率:在一個事件發生后,人們分析計算導致該事件發生的各種原因的各自概率。如已知連續擲兩次骰子的點數和為8,求其中1次點數和為3,1次點數和為5的概率。再如,已知自己乘坐的航班已經延誤,計算因為機場流控造成這個航班延誤的概率和因為機械故障造成航班延誤的概率。

先驗概率是根據經驗或知識來預測未來事件出現的可能性,后驗概率是在事件已發生后,分析計算導致事件發生的各種原因的可能性。在分析計算后驗概率時,會用到先驗概率的知識。

例:已知連續投擲兩次骰子的點數之和為8,求其中一次為點數和3,另一次點數和為5的概率。

其中,按照經驗,擲出2+6、3+5、4+4等的概率是一樣的,是先驗概率。

有了先驗概率和后驗概率知識后,理解最大似然估計就比較容易了。

先舉個例子,一天,一個獵人帶著他的一幫朋友去林子里打獵,看到遠處樹梢上有只野雞,獵人要求大家一起向這只可伶的野雞開槍。一聲令下,槍聲一片,野雞應聲落樹。走近細看,一槍爆頭!是誰打了神準的這一槍?大家一致認為是獵人,因為他的槍法最好,一槍爆頭只有他能做到。大家的思維方式不自覺地用到了最大似然估計。

用數學描述最大似然估計就是:給定一組樣本數據,一個計算模型,在這個計算模型中有一些未確定的參數。利用樣本數據,對各種參數組合進行分別測試,通過模型計算比較哪種參數組合得到的概率值最大,即找出一種參數組合,可以得出引發該事件的概率最大。

在統計中,似然函數是一種關于統計模型中的參數的函數,表示模型中參數的似然性,是根據參數的作用對結果進行區分。在數據可用之前,使用概率來描述對于一組參數可能出現的結果。在數據可用之后,使用似然把結果描述成參數的函數。當給定輸出x時,關于參數θ的似然函數L(θ)(在數值上)等于給定參數θ后變量X的概率:

L(θ)=P(X=x|θ)

進一步:

其中,X=(x1, x2, …, xn)

下面來解釋公式:的含義:

對于似然函數L(θ)而言,我們希望求出一組參數θ,使得在這組參數下,似然函數值L(θ)為最大。

實際上是求似然函數L(θ)關于變量θ的最大值,可以使用對函數L(θ)求關于變量θ的導數的方法:

為了計算方便,改用求似然函數的對數函數的最大值。這是因為在(0, 1)區間內,對數函數單調遞增,所以與原函數的極值點是相同的。

在機器學習中,因解決的問題種類不同,選用不同的似然函數,來計算多層感知器最終的輸出結果。

(1)多分類問題。通常用softmax函數作為似然函數:

上式表示,輸出層有n個神經元,第k個神經元輸出的概率是p(yk),然后在這np(yk)值中比較,哪個值最大,最終將最大值作為最后的輸出值。

分母是對輸出層所有單元(q=1, …, n)的激活值進行求和,起到歸一化作用,輸出層中每個單元的取值都是介于0和1之間的概率值,取概率最大值作為最終分類結果輸出。

softmax函數實際就是一個歸一化函數,將一個向量u=[u1, u2, …, un]T歸一化成和為1的概率向量p=[p(y1), p(y2), …, p(yn)]T

上面的描述有些難懂,來看一個softmax函數簡單的例子。

如果有3個輸出值3、1、-3,使用softmax函數將其轉換為概率輸出值,然后再比較選擇一個可能性最大的值作為最終的輸出值,如圖3-17所示。有些書將softmax函數作為輸出層專用的激活函數介紹,也是有道理的。

圖3-17 softmax函數示意圖

如果某一個分量zj的似然函數值大過其他分量的函數值,那么softmax就輸出這個分量。因此,y1就是最終的輸出值。

需要注意的是,softmax函數包含e的指數函數,如果eui中的ui值過大,eui會非常大,有溢出的可能。

(2)遞歸問題。有時會使用線性輸出函數作為似然函數。

線性輸出函數會把激活值作為結果直接輸出。輸出層各單元的取值仍是介于0和1之間。

3.5.5 梯度與梯度下降法

量微積分中,標量場的梯度是一個向量場。如圖3-18和圖3-19所示,標量場中某一點的梯度指向是指在這一點標量場變化最大的方向(不一定是直接指向最低點的方向),圖中虛線是函數的等高線。簡單地說,一個點的梯度指示的方向是該點函數值減小最大的方向。

圖3-18 函數f(x, y)=x2+2y2示意圖

圖3-19 函數f(x, y)=x2+2y2梯度下降示意圖

對于單變量函數,其梯度就是函數的導數。對于三個變量的函數,梯度是對各個變量求函數的偏導數:

深度神經網絡的參數非常多,因此,損失函數的梯度往往是一個維數很大的矩陣,相應的計算量必然非常大。

假設誤差函數為E(w0, w1, …, wn),w0, w1, …, wn為神經網絡中的參數,其梯度值定義為:

在機器學習中,自動調整參數的過程是,損失函數的取值從當前位置沿梯度方向前進一小段距離(距離大小由學習率決定),然后在新的地方重新求梯度,再沿著新梯度方向前進,如此反復,沿不斷修正的梯度方向小步前進,逐漸減小損失函數值,直至達到預期范圍。這個過程就是機器學習參數自動調整的梯度下降法。梯度下降法是機器學習中最優化問題的常用方法,特別在神經網絡的學習中經常使用。

為了簡單說明原理,假設只有一個權重參數w,損失函數與權重就可以用二維坐標系表示了。如圖3-20所示,梯度下降法就是通過計算實際輸出與期望輸出之間的誤差函數E=r?y2對權重的梯度,調整連接權重w0,得到新的連接權重w1,不斷迭代調整權重,直至誤差達到允許范圍,得到最優的連接權重w最優。

圖3-20 梯度下降法

具體采用什么樣的方法計算誤差非常關鍵。在誤差反向算法中,誤差計算函數一般采用最小二乘損失函數:

其中,r是期望輸出,y是實際輸出,加系數1/2是為了后面計算方便。

梯度下降法的目的是通過迭代調整權重w,使得誤差越來越小:

E(w)→0(ww最優)

如何調整權重使其達到最優?

對損失函數求導,可以得到圖3-20中每個給定點(wi, Ei)的梯度值。當誤差值較大時,其梯度值也較大,這時需要增大參數的調整幅度Δw;當誤差較小時,其梯度值也較小,這時減小參數的調整幅度Δw。梯度大說明誤差大,誤差大,調整幅度就要大,這符合常識。

梯度下降法的調整方法是以目標的負梯度方向對權重進行調整的,其公式為:

η為學習率,這個超參數決定了參數調整幅度?w的大小,參數調整幅度是學習率與梯度的乘積。

調整權重時用到了梯度,這要求激活函數和損失函數可以求導。回憶M-P模型,使用的激活函數是階梯函數,是不連續的,更不可導。

為了使誤差能夠傳播,Rumelhart等人使用可導函數sigmoid作為激活函數。

通常取λ=1,f′(u)=f(u)(1?f(u))

但是,一個函數的梯度為0,即f′(x)=0,無法確定在此點函數f(x)的值是極大值還是極小值,這需要通過再求二階導數得出結論。用數學方式描述就是:

f′(x)=0時,如果f′′(x)>0,x是一個局部極小值點,如果f′′(x)<0,x是一個局部極大值點,但是,如果f′′(x)=0,仍然無法確定x處函數值的屬性。

對一個有n個變量的函數f(x1, x2, …, xn),其所有二階偏導數組成的矩陣稱為海森矩陣(Hessian matrix):

A為正定矩陣時,f有極小值;當A為負定矩陣時,f有極大值。

3.5.6 學習率

學習率是指用來確定權重調整幅度大小的一個超參數,通常用字母η表示。所謂超參數,就是在開始學習過程之前設置值的參數,而不是通過訓練得到的參數數據,所以,超參數通常需要嘗試多個值,以便找到一個可以使學習順利完成的參數值。

機器學習的參數調整需要通過多次迭代,不斷逼近目標值。第t次調整連接權重的公式為:

從這個公式可知,學習率η和梯度是決定連接權重調整幅度大小的關鍵因素。梯度是由眾多的連接權重和誤差計算公式決定的,而學習率是一個影響全局的重要參數。就像我們在上課學習時,如果老師授課的進度太快,學生跟不上學習進度。如果教師授課的進度太慢,課程結束時學生發現學到的東西太少。

超參數學習率的數值設置很重要但又難以選擇,多數是根據經驗來確定的,這樣就有可能選到一個不適當的值。

如果學習率η設置過大,導致每次權重調整的幅度Δw過大,有可能會錯過權重的最優值,致使誤差無法收斂;如果學習率η設置過小,雖然可以確保不會錯過任何局部極小值,但也意味著將花費更長的時間來進行收斂。

于是想到,改變以往訓練前設定一個學習率,用這個學習率貫穿整個學習過程的做法,在學習過程中動態調整學習率,試圖選到一個適當的學習率。

動態調整學習率有一種做法是,首先設定一個較大的值,再逐漸減小這個值,這種方法稱為學習率衰減(learning rate decay)。在實際生活中,學習一種知識,開始時通常會學到很多新知識,以后學到的新知識會逐漸減少。

學習率衰減法的做法是將網絡中所有參數的學習率步調一致地降低。而AdaGrad算法就做得更加精細,針對每個參數,賦予其定制的學習率,算法名稱中的Ada就是取值英文單詞“Adaptive”,即自適應的意思。

AdaGrad算法就是將每一個參數的每一次迭代的梯度取平方累加后再開方,用全局學習率除以這個數,作為學習率的動態更新。AdaGrad方法的計算公式為:

t代表迭代次數,ε一般是一個極小值,比如為10-6,作用是防止分母為0。

AdaGrad計算公式與前面的連接權重調整公式相比,學習率多了一個梯度平方和的根式,這樣,梯度越大學習率會越小,梯度越小學習率越大。而且,公式可以對每個參數逐個迭代求最佳學習率。

AdaGrad的缺點是在訓練的中后期,分母上梯度平方的累加將會越來越大,從而梯度趨近于0,使得訓練提前結束。

因為學習率的重要性,所以引起了很多學者的興趣,不斷提出了很多動態調整方法,除AdaGrad外,AdaDelta方法、Adam方法、Momentum方法也很有名,它們各有所長。

3.5.7 學習規則

各種人工神經網絡在學習訓練過程中,如何調整神經網絡的參數,有各自的一套方法和規則,這些調整參數的方法和規則稱為神經網絡的學習規則。

人工神經網絡在學習訓練過程中調整的參數主要包括神經元之間的連接權重和屬于神經元自身的閾值。

常用的神經網絡學習規則包括誤差修正學習規則、Hebb學習規則、競爭學習規則以及隨機學習規則等。

1. 誤差修正學習規則

誤差修正學習規則也稱Delta學習,其基本思想是,設定神經網絡的期望輸出r,然后根據計算出的網絡實際輸出y和期望輸出r之間的差值,迭代調整參數。

每次迭代時,神經元i與神經元j之間的連接權重調整計算公式為:

wij(t+1)=wij(t)+η(rj(t)?yj(t))xi(t)

wij(t)表示時刻t的權重,wijt+1)表示對時刻t的權重修正一次后得到的新權重,η為學習率,rj(t)為神經元j的期望輸出,yj(t)為神經元j的實際輸出,xi(t)為神經元i的輸入。

調整的目標是使神經元j的實際輸出與期望輸出之間的誤差平方為最小:

這實際上是求上述凸函數的最優化問題。

2. Hebb學習規則

1949年,赫布(Donald Hebb)提出,在同等條件下,出現興奮狀態多的神經元的組合會得到加強,而出現興奮狀態少的神經元的組合則會減弱。這就是后天學習可以增強智力和能力的理論依據。

Hebb學習規則:當某一突觸兩端的神經元同時處于興奮狀態時,那么該連接的權重應該增強。用數學方式描述調整權重wij的方法為:

wij(t+1)=wij(t)+ηxi(t)xj(t) (η>0)

xixj分別為神經元ij的輸出。因此,權重的調整值為:

?wij=ηxi(t)xj(t)

Hebb規則不是普適的,刺激效應會有衰減現象。即同一刺激對生物體的重復作用,可能造成機體的習慣化。習慣化將減弱機體對刺激的反應,這與Hebb規則正好相反。

3. 競爭學習規則

競爭學習規則就是“勝者為王”的規則。網絡中的某一組神經元,通過競爭,爭取唯一一個對外界刺激的響應權力。

這個規則分為三個步驟:

(1)向量歸一化:由于不同的模式單位不統一,因此在數據處理前,會將模式向量進行規范化;

(2)尋找獲勝神經元:當網絡得到一個輸入模式向量時,競爭層的所有神經元都計算權重與輸入模式的乘積值,對這些值進行比較,最大者為獲勝神經元;

(3)獲勝神經元輸出為1,其余輸出為0。只有獲勝神經元才有權調整其權重。

4. 隨機學習規則

隨機學習規則不僅能夠接受能量函數減小(性能得到改善)的變化,還可以以某種概率分布接受能量函數增大的變化。

接受使能量函數變大的變化是為了避免陷入局部極值問題,模擬退火算法(Simulated Annealing,SA)就是一種典型的隨機學習算法。

主站蜘蛛池模板: 中阳县| 太仆寺旗| 遂昌县| 大洼县| 外汇| 伊金霍洛旗| 买车| 罗山县| 南川市| 申扎县| 五大连池市| 五峰| 于都县| 阿拉善左旗| 分宜县| 浦北县| 西林县| 合江县| 灵武市| 冀州市| 西平县| 新宁县| 中方县| 焦作市| 屏东县| 威海市| 河北区| 甘洛县| 祁连县| 宜兰县| 囊谦县| 神池县| 北海市| 稻城县| 栾川县| 全南县| 陵川县| 麟游县| 波密县| 铁岭县| 巴塘县|