神經網路是如何學習的(中)
上一篇文章介紹了神經網路訓練的基本概念。本文就對一些具體細節進行介紹。
一、錯誤反饋的量化:損失函數
我們已經知道了,訓練神經網路的過程,是個通過樣本數據,根據試錯的反饋不斷調整網路參數(W和b)的過程。我們需要有一個評估準則去評估預測值(也就是訓練過程中的結果)和真實的結果之間的吻合度,這就是損失函數的作用。在統計學中損失函數是一種衡量損失和錯誤程度的函數。
我們在訓練網路模型的時候,針對某一個樣本的誤差,叫做loss。而針對整體所有樣本的損失值,可以用簡單的辦法就是對所有樣本的lost做合計,或者做平均數,作為整體的損失值。但這種計算的結果其實在訓練中無法得到想要的結果,於是引入了平方誤差(Square loss)作為損失函數。
平方誤差的公式為:
其中y是期望輸出(或者正確結果),a是預估值輸出(或者訓練過程中的神經網路模型計算的結果) 。其中1,2....n代表了是n個樣本的平方誤差。
可以看到平方誤差是非負的,這樣不同樣本間正的誤差和負的誤差就不會相互抵消。你肯定想到,誤差的絕對值也是正的,為什麼不用絕對值呢?因為平方形式對大誤差的懲罰大於小誤差(放大錯誤)。此外還有一個數學計算中的問題,就是如果需要對損失函數求導數,平方形式求導後變成一次函數,較為簡單。
此外,還有常見的均方誤差函數(MSE)等等可以作為損失函數。不管採取何種函數,他們都是對訓練情況的一種量化評價。
二、找到最誤差:梯度下降
我們根據之前的理解,可以說,神經網路訓練的目標是找到誤差最小化的情況,也就是通過前面說的損失函數,不到找到損失函數計算後的最小值。在訓練開始,我們的模型中的參數,即偏置和權重是隨機設定,怎麼找到最優解呢?
為了得到這個效果,採用了梯度下降的方法。下面的一張圖可以解釋什麼是梯度下降。
假設,一個被卡在山上某個地點的人(圖中就是綠色的小球)正在試圖下山(即試圖找到極小值)。大霧使得能見度非常低。因此,下山的道路是看不見的,所以他必須利用局部信息來找到極小值。他可以使用梯度下降法,該方法涉及到察看在他當前位置山的陡峭程度,然後沿著負陡度(即下坡)最大的方向前進。使用此方法,他會最終到達山腳下。當然,這樣需要一個前提假設,就是下坡是連續(不是起伏狀)。
現在,回到上面的圖中。C(豎向)軸我們設定是損失值,v1軸我們認為是w(權重),v2軸我們認為是b(偏量),那麼圖中的曲面就是在不同的w、b值時所計算得到的損失值。綠色的小球代表了我們在進行神經網路訓練時的設定的w,b值以及相應的損失值的位置。在最初,這個位置完全是隨機設定的。神經網路的訓練學習機制將根據梯度(圖中綠色的箭頭)有方向性的調整w,b的變化,從而接近圖中的曲面的最底部,也就是最優的結果。實際的梯度下降的演算法比圖中的示例要複雜,圖只是為了說明容易而做了最簡單化的假設。
三、梯度下降的問題
前面說的梯度下降發看起來非常美好。但是顯示情況是,誤差的走向可能更加複雜。
一個問題是局部最優解問題。就如下圖所示的圖形:
圖中,A,B,C,D都是一個"坑",如果按照簡單的梯度下降,掉入到這些小坑裡面,就無法找到真正的最低點G了。所以,這些A,B,C,D點就叫做「局部最優」,G點是「全局最優」的部分。放到3維空間裡面,可以想像成這個樣子:
為了讓梯度下降中不至於落入局部的"坑",人們把梯度下降的演算法中加入物理的想像力,就是給下降的同時加入動量,就像有了勢能一樣,可以從小坑(局部最優)中衝出去進入大坑(全局最優)。當然,如何設定這個動量也是相當複雜的事情。因此,局部最優解問題被人們討論了相當長的時間,大多數人一直認為這個問題是神經網路訓練中的主要矛盾。
但是,到了2014年有幾深度神經網路的幾位大牛寫論文提出來,局部最優的情況其實沒有人們想像的那麼嚴重(不太可能出現)。為什麼呢?因為其實我們真正的求解神經網路模型最優的過程不是2維的,也不是3維,是很大很大的維度的。在本篇的第一張圖中舉例的時候,設C(豎向)軸我們設定是損失值,v1軸我們認為是w(權重),v2軸我們認為是b(偏量)。這是3維的一個直觀圖,是為了大家容易理解。再想想,w和b可不只一個,有多少的神經網路的神經元節點,就有多少對w和b。因此在深度神經網路裡面,有5000個節點就是1萬緯。要求所有的維度在一個點附近都是 這種形狀才能構成局部最小值。那麼要求1萬維都是 這種形狀,這種概率非常小,所以在深度學習中,局部最小就不是主要考慮的問題了。
那麼,既然不太可能存在局部最優的問題,實際訓練中不到最優效果即是另一個原因造成的:鞍點。下面的圖是一個直觀的鞍點的示例。從名字直接理解,就是一個馬鞍狀的情形。
如果梯度下降沿著綠色的方向下降,那麼就會在綠色的底部達到所謂的「最優」(並非是真的最優),如果我們給它一個勢能(動量),如果這個動量的矢量與綠色線一致,它也只能沿綠色的方向擺動。但是明顯,藍線的方向下面才有真正的最優值。因此,我們還需要干預下降的方向(矢量)。
為了避免鞍點的「陷阱」,或者說逃離鞍點,人們發明了多樣的變種隨機下降演算法。常見的有:隨機梯度下降(Stochatic gradient decent, SGD),小批量梯度下降(mini-batch gradient descent),Adadelta梯度下降等。這裡我們不去詳細介紹每種演算法了。
推薦閱讀:
※獨家 | 一文讀懂人工神經網路
※「營銷號」式寫作——YOLOv3:一項漸進式的更新
※Michael Nielsen對交叉熵的解釋(三)
※【可解釋 AI 重大突破】DeepMind 構建心智理論神經網路讓機器互相理解
※深度神經網路(DNN)前向傳播
TAG:神經網路 |