上一章介紹了使用邏輯回歸處理分類問題。盡管邏輯回歸是個非常好用的模型,但是在處理非線性問題時仍然顯得力不從心,下圖就是一個例子:
線性模型已經無法很好地擬合上面的樣本,所以選擇了更復雜的模型,得到了復雜的分類曲線:
然而這個模型存在兩個問題:過擬合和模型復雜度。過擬合問題可參考《ML(附錄3)——過擬合與欠擬合》,這里重點講模型復雜度。
還是非線性分類,現在將輸入擴充為100個,為了擬合數據,我們構造了更多的特征:
約有 1002/2 = 5000個特征。由此看來,對於n個輸入,二次項特征的個數大約以n2/2的數量級增長,在真實世界中面臨的輸入何止成千上萬個,此時將得到噩夢般的模型。
在計算機視覺中,幾何數量級的特征無處不在:
如上圖所示,雖然人眼能夠馬上識別出圖片是汽車,但是機器就沒那么容易,它所看到的僅僅是像素的矩陣。假設僅抽取汽車輪轂和方向盤上的兩個點判斷圖片是否是汽車:
右圖中得到了一個非線性曲線。實際上,即使僅有50 × 50的灰度圖片,也會有2500個輸入值;如果使用全二次項構造特征值,會產生 25002/2 ≈ 3000,000個特征值。由此看來,只是簡單的增加二次項或者三次項之類的邏輯回歸算法並不是一個解決復雜非線性問題的好辦法,因為當n很大時將會產生非常多的特征項。
神經網絡就是在解決復雜非線性分類問題上的一種好得多的算法,即使輸入的特征維數n很大。
神經網絡
1997年世界上發生過兩件大事,一是克隆羊多利誕生,另一件是IBM 電腦“深藍”擊敗國際象棋世界冠軍。就在這一年,我從一本電子游戲雜志上看到了一篇關於計算機不可能戰勝職業圍棋選手的文章。
二十年過去了,2016 年一月底,谷歌在自然雜志上正式公開發表論文,宣布其以深度學習技術為基礎的電腦程序 AlphaGo,在 2015年 十月,連續五局擊敗歐洲冠軍、職業二段樊輝。這是第一次機器擊敗職業圍棋選手。
在這篇文章中,我嘗試介紹深度學習的前身——神經網絡。
神經元模型
神經元是神經網絡中的一個重要概念。其實我覺得,神經網絡和神經元都是看似高逼格的名詞,這讓我們聯想到腦神經,從而心生畏懼。我們經常看到下面的圖示:
我想說,把腦神經都丟到垃圾桶里吧!
然而我們還是需要知道什么是神經元,如下圖所示:
可以把這個神經元看作感知器模型:
這是一個特殊的有向圖,θ稱為權重,x0稱為偏置項,函數f是激活函數。在感知器模型中,激活函數是sign;在邏輯回歸中,激活函數是sigmoid。
上圖的神經元模型似乎有點類似數字電路中的電路門,實際上神經元模型確實可以實現一些電路門運算:
神經網絡模型
單個神經元模型和感知器模型沒什么區別,對非線性分類有些力不從心,比如“異或否(not (x1 xor x2))”的判別:
這就需要使用多層神經網絡:
一個典型的神經網絡如下圖所示:
上圖是一個三層神經網絡,分為輸入層、隱藏層和輸出層。在隱藏層中,不能通過訓練樣本觀測到節點的值。上圖神經網絡中有3個輸入節點(偏置節點不計在內,通常也不單獨畫出),3個隱藏節點(偏置節點不計在內)及一個輸出節點。
節點的上標表示神經網絡的層數,a(2)表示第二層的節點,下標表示節點的序號,包括x0在內,所有偏置節點的序號都是0,值都是1。用大寫的Θ表示每一層的權重,第一層的權重是Θ(1)。每個隱藏節點連同它的輸入和輸出,可看作一個神經元模型,由此:
權重的下標分為兩部分:第一部分表示指向該權重指向的隱藏節點的序號,第二部分表示權重的序號。Θ2,3(1)表示該權重處於第一層,它是指向a2(2)節點的第3個權重。可以將a2(2)單獨列出:
如果神經網絡的第j層有Sj個節點,第j+1層有Sj+1個節點,那么第j層權重Θ(j)的權重總數是 Sj+1×(Sj+1 + 1), +1是因為計算了偏置節點。
現在嘗試用矩陣表示上面的神經網絡模型:
第一層節點x表示輸入向量,Θ(1)表示第1層的權重。現在,用z(l)表示第 l 層的輸入:
神經網絡可以有多個隱藏層,每一層都會計算出更復雜的特征,但只有一個輸入層和一個輸出層:
激活函數
激活函數的作用是給神經網絡加入一些非線性因素,使得神經網絡更好地解決較為復雜的問題。
常見的激活函數是sigmoid函數,在《ML(4)——邏輯回歸》中介紹過,還有很多其它的激活函數。
如果使用sigmoid作為激活函數,其區間是[0,1],當神經元的輸出為1時,表示該神經元被激活,否則稱為未被激活。類似地,如果激活函數是雙曲正切tanh,其區間是[-1, 1],當神經元輸出為1是表示激活,-1表示未被激活。
本節其余部分轉自 https://www.cnblogs.com/dudumiaomiao/p/6014205.html
傳統神經網絡中最常用的兩個激活函數,Sigmoid系(Logistic-Sigmoid、Tanh-Sigmoid)被視為神經網絡的核心所在.從數學上來看,非線性的Sigmoid函數對中央區的信號增益較大,對兩側區的信號增益小,在信號的特征空間映射上,有很好的效果,通過對加權的輸入進行非線性組合產生非線性決策邊界.從神經科學上來看,中央區酷似神經元的興奮態,兩側區酷似神經元的抑制態,因而在神經網絡學習方面,可以將重點特征推向中央區,將非重點特征推向兩側區.
Relu函數為現在深度學習使用比較廣泛的激活函數,相比前面兩個,其優點在於計算簡單,導數簡單,收斂快,單側抑制 ,相對寬闊的興奮邊界 ,稀疏激活性;缺點在於在訓練的時候,網絡很脆弱,很容易出現很多神經元值為0,從而再也訓練不動.一般將學習率設置為較小值來避免這種情況的發生.
比較:
激活函數的一些可取的屬性包括:
非線性:當激活函數是非線性的,然后一個兩層神經網絡可以證明是一個通用函數近似值.而identity激活函數不滿足這個屬性.當多層網絡使用identity激活函數,整個網絡就相當於一個單層模型.
連續可微的:這個屬性對基於梯度優化方法是必要的.二進制激活函數在0點沒有可微性,它在其他值上全部可導為0,基於梯度優化方法對於它毫無進展.
范圍:當激活函數的范圍是有限的,基於梯度的訓練方法往往更穩定,因為模式顯著影響幾個有限權重.當范圍是無限的,訓練通常更有效率,因為模式顯著影響大部分權重.在后一種情況下,較小的學習利率通常是必要的.
單調:當激活函數是單調時,與單層模型相關的錯誤表面是凸的.
平滑性:有單調導數的平滑函數已經被證明在某些情況下推廣地更好.這些屬性表明這些激活函數和Occam's razor更一致.
原點附近近似identity:當激活函數有這個屬性,對於小的隨機值初始化權重,神經網絡將有效地學習.當激活函數沒有這個屬性,在初始化權值必須使用特殊例子.在下面的表中,激活函數,表明有該屬性
多分類
神經網絡也可以處理多分類。現在我們有一個能夠區分行人、小汽車、摩托車和貨車的四分類神經網絡,如下圖所示:
輸出層在這里有四個節點,其基本思路和上一章《邏輯回歸》的多分類一致,但是對輸出需要稍加變動:
如果輸出結果是<0, 1, 0, 0>,則判斷圖片是小汽車。
參考:
Ng視頻《Neural Networks》
《數學之美》第二版
《集體智慧編程》
作者:我是8位的
出處:http://www.cnblogs.com/bigmonkey
本文以學習、研究和分享為主,如需轉載,請聯系本人,標明作者和出處,非商業用途!
掃描二維碼關注公眾號“我是8位的”