Neural Network(Basic Ideas)

目錄

A layer of Neuron

Limitation of Single Layer

What is the model?

公式字母統一

Relations between Layer Outputs

What is the 「best」 function?

How to pick the 「best」 function?

Gradient Descent的研究

Practical Issues for neural network

Parameter Initialization

Learning Rate

Stochastic gradient descent and Mini-batch

Recipe for Learning


鏈接:http://speech.ee.ntu.edu.tw/~tlkagk/courses/MLDS_2015_2/Lecture/DNN%20(v4).pdf

在這一課中,我們需要研究三個問題:1. What is the model (function hypothesis set)? 2. What is the 「best」 function? 3. How to pick the 「best」 function? 這三個問題也是第一課中遺留下來需要解決的問題。接下來,我們就圍繞這三個問題進行研究。

在這一課中,我們主要是以分類問題爲主。這裏的分類有二分類和多分類。二分類一般可以應用於垃圾郵箱的識別,推薦系統,惡意軟件的檢測,股票漲跌的預測。多分類問題一般有手寫數字的識別(0,1,2,…,9),圖像識別(dog, cat, book,…)。語音識別是一個比多分類問題更復雜的問題,以後我們再進行更詳細的討論。

A layer of Neuron

這裏,我們以手寫數字識別來作爲研究。假設,輸入的x和y都是固定等長度,即每個輸入x都是相同且相等的。這裏,x是一個N維的vector,y是一個M維的vector。這裏我們需要對y進行one-hot處理,而不是用1,2,3,…去表示。

這裏,每一個神經元的激活函數是sigmoid,這個函數很有意思,當z>0的時候,輸出的區域絕大部分映射到靠近1的地方。當z<0的時候,輸出的區域絕大部分映射到靠近0的區域。單個神經元可以解決二分類問題,但是對於多分類問題,單個神經元是無法解決的,所以需要用多個神經元才能解決,有多少類就需要用多少個神經元,即對應的多少輸出。這裏輸出的神經元有很多,每個y表示是某個數還是不是某個數,取max(yi)的最大的角標i位置對應的結果。

Limitation of Single Layer

單個隱含層不能夠解決非線性問題,這也是爲啥1960s後神經網絡進入冷淡期的原因。

由上圖,我們可以看到,無論怎麼分,都不能將紅藍兩色的點分開。該怎麼辦?怎麼辦呢?我們可以借用XNOR gate的原理,將多個門並在一起。請看下圖:

在第一個圖中,使用了兩個神經元進行劃分,雖然沒有將紅藍兩色的點進行分開。但是我們這個結果作爲輸入,feed到另外一個神經元中,在feed之前,我們驚奇地發現,現在數據變得線性可分了。所以自然,第三個神經元就將其分開了。Oops~

What is the model?

公式字母統一

公式一表示第l層中第i個神經元的輸出值

公式二表示第l層中的輸出向量

公式三表示在第l層中第i個神經元的激活函數輸入值

公式四表示在第l層中的激活函數輸入向量

公式五表示從第l-1層的第j個神經元到第l層的第i個神經元的權值

公式六表示從第l-1層到第l層的神經元權值矩陣

公式七表示在第l層的第i個神經元偏置

公式八表示在第l層的神經元偏置向量

 

Relations between Layer Outputs

最終,我們把上一個神經網絡層的輸出作爲輸入,代入激活函數中得到新的輸出,這樣構成了一個function set。在正常的編程中,其實並不會這麼算,而是把偏置加入權值矩陣中,在輸入的矩陣的前面加入一個1向量,進行矩陣的乘法,同樣可以得到以上的效果。

What is the 「best」 function?

從paramaters set裏面選擇最適應驗證集的W, b。那麼怎麼去衡量這個function的好壞呢?我們可以用損失函數去衡量這個函數到底有多差,通常我們希望這個值越小越好,常用的損失函數有均方誤差、交叉熵。與之相反的是目標函數,我們希望越大越好,越大則越接近這個目標。

 

How to pick the 「best」 function?

通常參數的選擇,我們一般使用梯度下降法。首先對參數進行隨機初始值,然後求損失函數關於參數的偏導,最後將偏導後的結果與原來的參數值進行更新。依次重複…這裏,求某個參數的偏導,即求斜率,當斜率<0的時候,如圖向右移動,當斜率>0的時候,向左移動。梯度下降法是求一個局部最優(下面會繼續展開討論)。

 

Gradient Descent的研究

假設只有兩個參數,隨機初始化參數值,在「可視範圍」內,向損失值最小的地方移動,到了新的點,再在「可視範圍」內,向損失值更小的地方移動,以此類推。

對於損失函數,可以由泰勒公式展開,假設這個紅色的「可視區域」最夠小,小到只剩一個點,我們可以消去後面的二次項。最後求偏導整理後,可以發現損失函數其實是與參數成一次關係。即上一個損失函數到下一個損失函數的關係就是線性地加減。這也解釋了爲啥求偏導,以及爲啥更新公式長這樣。在實際中,這樣計算參數計算量會特別大,所以我們一般採用反向傳播。

思考:這裏,我們消去了二次項,但是加上二次項,可能對結果會更有幫助,但是這樣會增加計算量。這是一個待解決的問題。

因爲梯度下降法是求局部最優解,而SVM是求全局最優解,它是一個convex function,這也是爲啥SVM火了一段時間的原因。梯度下降法的權值無論從何地起始,都可能到最後會卡在local minima。但是後面人們研究發現,local minima並沒有想象的那麼多,主要的問題還是saddle point(鞍點),所以現在我們主要解決的是怎麼跳出鞍點

Practical Issues for neural network

Parameter Initialization

不要讓所有的參數都相等,因爲在下次更新的時候還可能在一個地方。所以隨機初始化參數。這很重要。

Learning Rate

對於學習率的設置,一直是一個叩待解決的問題。當學習率太大的時候,參數更新每一步都特別大,從而導致損失值一直都進入不了局部最優的區域。於是,我們將學習率調小,發現損失值一直在峯谷口徘徊,不能進去。所以,我們還需要繼續調小學習值。總的來說,學習值的調試也需要隨之迭代次數而不斷地減少。

Stochastic gradient descent and Mini-batch

訓練數據一共有r個。Gradient Descent是將其全部代入訓練,因爲計算矩陣變大,所以需要花費更多的時間。Stochastic Gradient Descent是每次去一個樣本去更新權值,這樣效果比較快。Mini-batch是將size(Mini-batch)個數全部綁定在一個去更新權值,它是Gradient Descent和Stochastic Gradient Descent的一種折中方法。雖然計算量和Stochastic Gradient Descent差不多,但是效果卻有很大多的差別。

從實驗結果圖可以看出,Gradient Descent將數據全部參數訓練和迭代更新,不但耗時多,而且效果低。Stochastic Gradient Descent每次代入一個數據更新,雖然時間上式提高了,但是一次性處理一個樣本,在數據量比較多多的情況下,耗時就會增加,不過正確率還是比較好的。Mini-batch效果最好,不但耗時低,而且正確率也很高。

Recipe for Learning

首先對數據集分成訓練集,驗證集(知道真實標籤),測試集(直到deadline才知道真實標籤)。然後,我們需要確保訓練集上效果比較好的情況下,纔去看驗證集的效果(往往驗證集的效果低於訓練集的效果)。如果訓練集上效果不好,可能是由以下幾點原因造成:程序有bug;激活函數不好(局部最小,鞍點問題,改變訓練策略);模型本身就不好(function set假設得不好,需要一個更大的網絡)。當訓練集效果比較好的時候,我們再看驗證集。如果效果好,我們可以done。如果不好,可能是他由於過擬合造成的。造成過擬合的原始是訓練集和測試集的分佈往往不同,比如在手寫識別的例子中,「2」在訓練集中沒有圈,而在測試集中有圈。解決過擬合的原因一般是研究和尋找解決過擬合的算法和方法,比如加正則項。但是最簡單的是尋找更多的訓練數據集。