神經網絡的簡單理解

http://m.blog.csdn.net/article/details?id=45669913

http://colah.github.io/posts/2014-03-NN-Manifolds-Topology/


聲明:本篇文章根據一些知乎網友的討論整理得到,在這裏感謝他們通俗易懂的說明。


  斯坦福大學的印度學生、機器學習愛好者 PararthShah 在2012年12月22日的使用買芒果的例子解釋了神經網絡,簡單來說就

是:如果你需要選芒果,但不知道什麼樣的芒果最好喫,一個簡單粗暴的方法是嚐遍所有的芒果,然後總結出個大深黃色的比較好

喫,那麼以後再去買的時候,就可以直接挑選這種。那什麼是機器學習呢,就是你讓機器“嘗”一遍所有芒果,假設它知道哪些好

喫,讓機器去總結一套規律(個大深黃色),這就是機器學習。具體操作,就是你描述給機器每一個芒果的特徵(顏色,大小,軟

硬……),描述給機器其輸出(味道如何,是否好喫),剩下的就等機器去學習出一套規則。 

  那麼問題來了,機器是怎麼學習到那套規則(個大深黃色的好喫)的?機器學習算法。將神經網絡看做一種機器學習算

,就可以比較清楚的理解神經網絡到底是用來做什麼的。 

  神經網絡就像一個剛開始學習東西的小孩子,開始認東西,作爲一個大人(監督者),第一天,他看見一隻京巴狗,你告訴他

這是狗;第二天他看見一隻波斯貓,他開心地說,這是狗,糾正他,這是貓;第三天,他看見一隻蝴蝶犬,他又迷惑了,你告訴他

這是狗……直到有一天,他可以分清任何一隻貓或者狗。 

  再舉一個簡單的例子:區分蘋果和橘子。人的大腦就是一個強大的神經網絡,通過從小的訓練,見識,並且記住了蘋果和橘

子,我們分分鐘能作出判斷哪一個是蘋果,哪一個是橘子(可能就是百分之百),即使我們矇住了人的眼睛,我們還是可以通過氣

味,重量,手感做出較爲準確的判斷(但是可能不能完全判斷正確)。說到底就是人從小開始第一次見到蘋果,橘子時,就不斷的強

化,記憶他們的特點,並且做出判斷!有這麼個大腦以後,通過直觀的比方說顏色,我們就可以區分,顏色塗成一樣,好,那我們

依靠重量,重量等重,那我們依靠氣味,氣味也掩蓋,那我們依靠其他特徵。但計算機不是人,怎樣達到人的水平或者模擬人的水

平呢?本文的主角:神經網絡出場,初始的神經網絡沒有什麼用,智商爲零。我們想讓他區分蘋果和橘子,對不起,相對於是問木

頭人!由此我們想到人類區分的過程是不斷強化,記憶(也就是訓練大腦),然後就能區分(做出判斷).好嘛!對一個神經網絡(大

腦),我們做同樣的處理。先拿一堆的橘子和蘋果,告訴它哪些是橘子,哪些是蘋果,這稱之爲訓練。然後,再拿一個水果出來,讓

它判斷是橘子還是蘋果(做出判斷),大事不好,神經網絡判斷錯誤了?別急,媽媽不會打你,不會罵你,錯了就記住,再訓練,強

化!等等還有一個問題,對於這麼一大堆橘子,蘋果,計算機怎麼強化,記憶。計算機只認識數字,對於這個問題,我們必須將橘

子和蘋果的特點變成數字(特徵提取),送入到計算機裏面去,讓他記憶(訓練).再把未知東東的特點變成數字送入計算機中讓計算機

做出判斷。顏色,我們用0~255來表示從黑到白,重量,我們用秤來秤嘛,氣味,我們測算芳香因子的數量。蘋果我們用1表示,橘子

我們用-1表示,爲什麼呢?前面我們說了,訓練的時候,我們要告訴計算機什麼是蘋果,什麼是橘子,當然是數字了,就是國際慣

例1和-1,接下來,我們將這些知道類別的數據送入計算機讓他記住,再來一個不知道類別的東東,提取出上面的特點,我們就能判

斷出是橘子還是蘋果了!又有問題了,計算機怎麼記住?(非常淺顯,專業人士一看就是不對的,還有很多別的條件沒有提到)數據

送進來,好嘛,神經網絡來了,以蘋果爲例(用1標記),蘋果的特點一串數字,我們用x表示,蘋果的類別1,也就是這個網絡最後

要得到的效果就是x通過網絡後就變成了1,數學上就是x*w=1,好嘛解個方程就完了!(如果是多層呢?x*w1*w2*….wn=1,當然還會

有更多的已知量給你哈!)解出方程得到w,後面再送入一個未知是啥的東東的特徵數字,乘以w,就知道類別!橘子和蘋果就區分出

來!每一個步驟都有很多方法,很多內容可以挖掘,甚至很多步驟已經成爲了一門專門的領域了! 

  其實神經網絡最初得名,就是其在模擬人的大腦,把每一個節點當作一個神經元,這些“神經元”組成的網絡就是神經

網絡。而由於計算機出色的計算能力和細節把握能力,在大數據的基礎上,神經網絡往往有比人更出色的表現。當然了,也可以把

神經網絡當作一個黑箱子,只要告訴它輸入,輸出,他可以學到輸入與輸出的函數關係。神經網絡的理論基礎之一是三層的神經網

絡可以逼近任意的函數,所以理論上,只要數據量夠大,“箱子容量”夠大(神經元數量),神經網絡就可以學到你要的東西。 

  知道了這些後我們可能會問神經網絡主要用來做什麼呢,其最重要的用途是分類。爲了讓大家對分類有個直觀的認識,咱們先

看幾個例子:

垃圾郵件識別:現在有一封電子郵件,把出現在裏面的所有詞彙提取出來,送進一個機器裏,機器需要判斷這封郵件是否是垃圾郵件。

疾病判斷:病人到醫院去做了一大堆肝功、尿檢測驗,把測驗結果送進一個機器裏,機器需要判斷這個病人是否得病,得的什麼病。

貓狗分類:有一大堆貓、狗照片,把每一張照片送進一個機器裏,機器需要判斷這幅照片裏的東西是貓還是狗。

這種能自動對輸入的東西進行分類的機器,就叫做分類器。 

  分類器的輸入是一個數值向量,叫做特徵(向量)。在第一個例子裏,分類器的輸入是一堆0、1值,表示字典裏的每一個詞是

否在郵件中出現,比如向量(1,1,0,0,0……)就表示這封郵件裏只出現了兩個詞abandon和abnormal;第二個例子裏,分類器的輸入

是一堆化驗指標;第三個例子裏,分類器的輸入是照片,假如每一張照片都是320*240像素的紅綠藍三通道彩色照片,那麼分類器的

輸入就是一個長度爲320*240*3=230400的向量。 

  分類器的輸出也是數值。第一個例子中,輸出1表示郵件是垃圾郵件,輸出0則說明郵件是正常郵件;第二個例子中,輸出0表示

健康,輸出1表示有甲肝,輸出2表示有乙肝,輸出3表示有餅乾等等;第三個例子中,輸出0表示圖片中是狗,輸出1表示是貓。 

  分類器的目標就是讓正確分類的比例儘可能高。一般我們需要首先收集一些樣本,人爲標記上正確分類結果,然後用這些標記

好的數據訓練分類器,訓練好的分類器就可以在新來的特徵向量上工作了。 


1. 神經元 

  咱們假設分類器的輸入是通過某種途徑獲得的兩個值,輸出是0和1,比如分別代表貓和狗。現在有一些樣本: 

這裏寫圖片描述
 
大家想想,最簡單地把這兩組特徵向量分開的方法是啥?當然是在兩組數據中間畫一條豎直線,直線左邊是狗,右邊是貓,分類器

就完成了。以後來了新的向量,凡是落在直線左邊的都是狗,落在右邊的都是貓。 

  一條直線把平面一分爲二,一個平面把三維空間一分爲二,一個n-1維超平面把n維空間一分爲二,兩邊分屬不同的兩

類,這種分類器就叫做神經元。 

  大家都知道平面上的直線方程是ax+by+c=0,等式左邊大於零和小於零分別表示點(x,y)在直線的一側還是另一側,把這個式子

推廣到n維空間裏,直線的高維形式稱爲超平面,它的方程是: 

h = a1x1+a2 x2+…+anxn+a0=0 

神經元就是當h大於0時輸出1,h小於0時輸出0這麼一個模型,它的實質就是把特徵空間一切兩半,認爲兩瓣分別屬兩個

類。你恐怕再也想不到比這更簡單的分類器了,它是McCulloch和Pitts在1943年想出來了。 

  這個模型有點像人腦中的神經元:從多個感受器接受電信號x1,x2,…,xn,進行處理(加權相加再偏移一點,即判斷輸入是否在

某條直線h=0的一側),發出電信號(在正確的那側發出1,否則不發信號,可以認爲是發出0),這就是它叫神經元的原因。當

然,上面那幅圖我們是開了上帝視角才知道“一條豎直線能分開兩類”,在實際訓練神經元時,我們並不知道特徵是怎麼抱團

的。神經元模型的一種學習方法稱爲Hebb算法: 

  先隨機選一條直線/平面/超平面,然後把樣本一個個拿過來,如果這條直線分錯了,說明這個點分錯邊了,就稍微把直

線移動一點,讓它靠近這個樣本,爭取跨過這個樣本,讓它跑到直線正確的一側;如果直線分對了,它就暫時停下不動。因

此訓練神經元的過程就是這條直線不斷在跳舞,最終跳到兩個類之間的豎直線位置。 


2. 神經網絡 

  MP神經元有幾個顯著缺點。首先它把直線一側變爲0,另一側變爲1,這東西不可微,不利於數學分析。人們用一個和0-1階躍

函數類似但是更平滑的函數Sigmoid函數來代它(Sigmoid函數自帶一個尺度參數,可以控制神經元對離超平面距離不同的點的響

應,這裏忽略它),從此神經網絡的訓練就可以用梯度下降法來構造了,這就是有名的傳播算法。 

  神經元的另一個缺點是:它只能切一刀!你給我說說一刀怎麼能把下面這兩類分開吧。 

這裏寫圖片描述 
解決辦法是多層神經網絡,底層神經元的輸出是高層神經元的輸入。我們可以在中間橫着砍一刀,豎着砍一刀,然後把左上和右下

的部分合在一起,與右上的左下部分分開;也可以圍着左上角的邊沿砍10刀把這一部分先挖出來,然後和右下角合併。 

  每砍一刀,其實就是使用了一個神經元,把不同砍下的半平面做交、並等運算,就是把這些神經元的輸出當作輸入,後面再連

接一個神經元。這個例子中特徵的形狀稱爲異或,這種情況一個神經元搞不定,但是兩層神經元就能正確對其進行分類。 

  只要你能砍足夠多刀,把結果拼在一起,什麼奇怪形狀的邊界神經網絡都能夠表示,所以說神經網絡在理論上可以表示很復

雜的函數/空間分佈。但是真實的神經網絡是否能擺動到正確的位置還要看網絡初始值設置、樣本容量和分佈。 

  神經網絡神奇的地方在於它的每一個組件非常簡單——把空間切一刀+某種激活函數(0-1階躍、sigmoid、max-poolin

g),但是可以一層一層級聯。輸入向量連到許多神經元上,這些神經元的輸出又連到一堆神經元上,這一過程可以重複很多次。這

和人腦中的神經元很相似:每一個神經元都有一些神經元作爲其輸入,又是另一些神經元的輸入,數值向量就像是電信號,在不同

神經元之間傳導,每一個神經元只有滿足了某種條件纔會發射信號到下一層神經元。當然,人腦比神經網絡模型複雜很多:人工神

經網絡一般不存在環狀結構;人腦神經元的電信號不僅有強弱,還有時間緩急之分,就像莫爾斯電碼,在人工神經網絡裏沒有這種

複雜的信號模式。 

  神經網絡的訓練依靠反向傳播算法:最開始輸入層輸入特徵向量,網絡層層計算獲得輸出,輸出層發現輸出和正確的類號不

一樣,這時它就讓最後一層神經元進行參數調整,最後一層神經元不僅自己調整參數,還會勒令連接它的倒數第二層神經元調

整,層層往回退着調整。經過調整的網絡會在樣本上繼續測試,如果輸出還是老分錯,繼續來一輪迴退調整,直到網絡輸出滿意爲

止。這很像中國的文藝體制,武媚娘傳奇劇組就是網絡中的一個神經元,最近剛剛調整了參數。(這個例子挺形象嘛) 


3. 大型神經網絡 

我們不禁要想了,假如我們的這個網絡有10層神經元,第8層第2015個神經元,它有什麼含義呢?我們知道它把第七層的一大堆神經

元的輸出作爲輸入,第七層的神經元又是以第六層的一大堆神經元做爲輸入,那麼這個特殊第八層的神經元,它會不會代表了某種

抽象的概念? 

  就好比你的大腦裏有一大堆負責處理聲音、視覺、觸覺信號的神經元,它們對於不同的信息會發出不同的信號,那麼會不會有

這麼一個神經元(或者神經元小集團),它收集這些信號,分析其是否符合某個抽象的概念,和其他負責更具體和更抽象概念的神

經元進行交互。 

  2012年多倫多大學的Krizhevsky等人構造了一個超大型卷積神經網絡[1],有9層,共65萬個神經元,6千萬個參數。網絡的輸入

是圖片,輸出是1000個類,比如小蟲、美洲豹、救生船等等。這個模型的訓練需要海量圖片,它的分類準確率也完爆先前所有分類

器。紐約大學的Zeiler和Fergusi[2]把這個網絡中某些神經元挑出來,把在其上響應特別大的那些輸入圖像放在一起,看它們有什

麼共同點。他們發現中間層的神經元響應了某些十分抽象的特徵。 


第一層神經元主要負責識別顏色和簡單紋理; 

第二層的一些神經元可以識別更加細化的紋理,比如布紋、刻度、葉紋; 

第三層的一些神經元負責感受黑夜裏的黃色燭光、雞蛋黃、高光; 

第四層的一些神經元負責識別萌狗的臉、七星瓢蟲和一堆圓形物體的存在; 

第五層的一些神經元可以識別出花、圓形屋頂、鍵盤、鳥、黑眼圈動物。 

這裏面的概念並不是整個網絡的輸出,是網絡中間層神經元的偏好,它們爲後面的神經元服務。雖然每一個神經元都傻不拉幾

的(只會切一刀),但是65萬個神經元能學到的東西還真是深邃呢。 


[1] Krizhevsky, A., Sutskever, I., & Hinton, G. E. (2012). Imagenet classification with deep convolutional neural networks. In Advances in neural information processing systems (pp. 1097-1105). 

[2] Zeiler, M. D., & Fergus, R. (2013). Visualizing and understanding convolutional neural networks. arXiv preprint arXiv:1311.2901.

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章