如何簡單形象又有趣地講解神經網絡是什麼? | 知乎問答精選

 

A-A+

如何簡單形象又有趣地講解神經網絡是什麼?

2018年10月07日 知乎問答精選 暫無評論 閱讀 6 ℃ 次

【王小龍的回答(158票)】:

神經網絡很萌的!

0. 分類

神經網絡最重要的用途是分類,為了讓大家對分類有個直觀的認識,咱們先看幾個例子:

  • 垃圾郵件識別:現在有一封電子郵件,把出現在裡面的所有詞彙提取出來,送進一個機器裡,機器需要判斷這封郵件是否是垃圾郵件。
  • 疾病判斷:病人到醫院去做了一大堆肝功、尿檢測驗,把測驗結果送進一個機器裡,機器需要判斷這個病人是否得病,得的什麼病。
  • 貓狗分類:有一大堆貓、狗照片,把每一張照片送進一個機器裡,機器需要判斷這幅照片裡的東西是貓還是狗。

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

分類器的輸入是一個數值向量,叫做特徵(向量)。在第一個例子裡,分類器的輸入是一堆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維空間一分為二,兩邊分屬不同的兩類,這種分類器就叫做神經元。

大家都知道平面上的直線方程是

,等式左邊大於零和小於零分別表示點

在直線的一側還是另一側,把這個式子推廣到n維空間裡,直線的高維形式稱為超平面,它的方程是:

神經元就是當h大於0時輸出1,h小於0時輸出0這麼一個模型,它的實質就是把特徵空間一切兩半,認為兩瓣分別屬兩個類。你恐怕再也想不到比這更簡單的分類器了,它是McCulloch和Pitts在1943年想出來了。

這個模型有點像人腦中的神經元:從多個感受器接受電信號

,進行處理(加權相加再偏移一點,即判斷輸入是否在某條直線

的一側),發出電信號(在正確的那側發出1,否則不發信號,可以認為是發出0),這就是它叫神經元的原因。

當然,上面那幅圖我們是開了上帝視角才知道「一條豎直線能分開兩類」,在實際訓練神經元時,我們並不知道特徵是怎麼抱團的。神經元模型的一種學習方法稱為Hebb算法:

先隨機選一條直線/平面/超平面,然後把樣本一個個拿過來,如果這條直線分錯了,說明這個點分錯邊了,就稍微把直線移動一點,讓它靠近這個樣本,爭取跨過這個樣本,讓它跑到直線正確的一側;如果直線分對了,它就暫時停下不動。因此訓練神經元的過程就是這條直線不斷在跳舞,最終跳到兩個類之間的豎直線位置。

2. 神經網絡

MP神經元有幾個顯著缺點。首先它把直線一側變為0,另一側變為1,這東西不可微,不利於數學分析。人們用一個和0-1階躍函數類似但是更平滑的函數Sigmoid函數來代替它(Sigmoid函數自帶一個尺度參數,可以控制神經元對離超平面距離不同的點的響應,這裡忽略它),從此神經網絡的訓練就可以用梯度下降法來構造了,這就是有名的反向傳播算法。

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

解決辦法是多層神經網絡,底層神經元的輸出是高層神經元的輸入。我們可以在中間橫著砍一刀,豎著砍一刀,然後把左上和右下的部分合在一起,與右上的左下部分分開;也可以圍著左上角的邊沿砍10刀把這一部分先挖出來,然後和右下角合併。解決辦法是多層神經網絡,底層神經元的輸出是高層神經元的輸入。我們可以在中間橫著砍一刀,豎著砍一刀,然後把左上和右下的部分合在一起,與右上的左下部分分開;也可以圍著左上角的邊沿砍10刀把這一部分先挖出來,然後和右下角合併。

每砍一刀,其實就是使用了一個神經元,把不同砍下的半平面做交、並等運算,就是把這些神經元的輸出當作輸入,後面再連接一個神經元。這個例子中特徵的形狀稱為異或,這種情況一個神經元搞不定,但是兩層神經元就能正確對其進行分類。

只要你能砍足夠多刀,把結果拼在一起,什麼奇怪形狀的邊界神經網絡都能夠表示,所以說神經網絡在理論上可以表示很複雜的函數/空間分佈。但是真實的神經網絡是否能擺動到正確的位置還要看網絡初始值設置、樣本容量和分佈。

神經網絡神奇的地方在於它的每一個組件非常簡單——把空間切一刀+某種激活函數(0-1階躍、sigmoid、max-pooling),但是可以一層一層級聯。輸入向量連到許多神經元上,這些神經元的輸出又連到一堆神經元上,這一過程可以重複很多次。這和人腦中的神經元很相似:每一個神經元都有一些神經元作為其輸入,又是另一些神經元的輸入,數值向量就像是電信號,在不同神經元之間傳導,每一個神經元只有滿足了某種條件才會發射信號到下一層神經元。當然,人腦比神經網絡模型複雜很多:人工神經網絡一般不存在環狀結構;人腦神經元的電信號不僅有強弱,還有時間緩急之分,就像莫爾斯電碼,在人工神經網絡裡沒有這種複雜的信號模式。

神經網絡的訓練依靠反向傳播算法:最開始輸入層輸入特徵向量,網絡層層計算獲得輸出,輸出層發現輸出和正確的類號不一樣,這時它就讓最後一層神經元進行參數調整,最後一層神經元不僅自己調整參數,還會勒令連接它的倒數第二層神經元調整,層層往回退著調整。這很像中國的文藝體制,武媚娘傳奇劇組就是網絡中的一個神經元,最近剛剛調整了參數。

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.

【賈偉的回答(99票)】:

首先把題主給的鏈接看了一下,大致內容如下:

你需要挑選芒果,你不知道什麼樣的芒果最好吃,所以你就嘗遍了所有的芒果,然後自己總結出個大深黃色的比較好吃,以後再去買的時候,就可以直接挑選這種。

那什麼是機器學習呢,就是你讓機器「嘗」一遍所有芒果,當然,也假設它知道哪些好吃,讓機器去總結一套規律(個大深黃色),這就是機器學習。具體操作,就是你描述給機器每一個芒果的特徵(顏色,大小,軟硬……),描述給機器其輸出(味道如何,是否好吃),剩下的就等機器去學習出一套規則。

等等,那機器是怎麼學習到這個規則(個大深黃色的好吃)的?沒錯,是通過機器學習算法。而題主所問的神經網絡,恰好就是一種機器學習算法!近些年來,由於深度學習概念的興起,神經網絡又成為了機器學習領域最熱門的研究方法。

我相信當明確神經網絡是一種機器學習算法之後,就可以很輕易的給一個外行講清楚神經網絡到底是用來做什麼的。可是神經網絡為什麼可以完成這個功能呢?

神經網絡就像一個剛開始學習東西的小孩子,開始認東西,作為一個大人(監督者),第一天,他看見一隻京巴狗,你告訴他這是狗;第二天他看見一隻波斯貓,他開心地說,這是狗,糾正他,這是貓;第三天,他看見一隻蝴蝶犬,他又迷惑了,你告訴他這是狗……直到有一天,他可以分清任何一隻貓或者狗。

其實神經網絡最初得名,就是其在模擬人的大腦,把每一個節點當作一個神經元,這些「神經元」組成的網絡就是神經網絡。而由於計算機出色的計算能力和細節把握能力,在大數據的基礎上,神經網絡往往有比人更出色的表現。

當然了,也可以把神經網絡當作一個黑箱子,只要告訴它輸入,輸出,他可以學到輸入與輸出的函數關係。神經網絡的理論基礎之一是三層的神經網絡可以逼近任意的函數,所以理論上,只要數據量夠大,「箱子容量」夠大(神經元數量),神經網絡就可以學到你要的東西。

第一次回答問題,什麼都想說,可能比較亂,有不對的地方,歡迎大家批評指正。

【朱軒的回答(32票)】:

@賈偉的回答已經很好了,我再補充一點更直觀的東西:最後建立的人工神經網絡模型到底是個啥樣子的玩意?

我覺得有一個被折疊的答案挺冤的, @爨爨,為了向零基礎的人解釋數據挖掘,其實數據挖掘是可以和找規律作類比的。

如下圖,z和x,y是什麼關係?

如果我們用初中的數學解答,可能得到的答案是,z=y/5+y+x*x

那麼回到 @賈偉提到的問題,z是芒果的好吃程度,x是顏色,y是硬度,z和x,y是什麼關係?

如果芒果的好吃程度=它的硬度值除以5+硬度值+顏色值的平方,問題就解決了。關鍵是我們不知道它們之間是什麼關係。

於是我們建立了人工神經網絡模型,並假設建模擬合學習訓練求解什麼的都成功了,把其中的規律找了出來,假如是下面這張圖的樣子。

黑條塊蓋住的東西是什麼?零基礎的小夥伴們不用深究,蓋住的東西就是一系列的數學運算,這一系列的數學運算能夠揭示z和x、y之間的關係,本質上與z=y/5+y+x*x沒有區別,只不過形式更複雜而已。

那這個模型到底是什麼樣子?

圖裡的每一個圓圈裡都進行了數學運算,說不定就是a=y/5+y+x*x,然後z=a.

實際上模型可能複雜一點,比如每個圓圈裡是這樣子算的

最後建起的人工神經網絡模型可能是這個樣子的

再一次聲明這些是面向零基礎的小夥伴們,到最後你們得到的就是好多好多的數學表達式,它們放在一起使用,用來揭示x、y、z的關係,解釋芒果的好吃程度和芒果硬度、顏色之間的關係,就是更複雜的a=y/5+y+x*x,然後z=a。

當然真實的理論、算法比這些要複雜的多。小夥伴們看著圖個樂。有不對的地方可以隨意交流。我不把自己當回事的。

【leephilip的回答(18票)】:

補充一下@賈偉的答案

訓練過程的那段,寫得比較像強化學習,神經網絡用到的方法大部分是有監督學習。

我覺得故事應該是這樣。。。。

你想讓神經網絡(簡稱神經)辨認貓和狗(算法類型為分類)。於是給它看一百萬隻狗,和一百萬隻貓,每隻狗的腦門上都貼著「我是狗」的字條,貓則貼「我是貓」(使用標注數據)。神經同時看五十萬隻禽獸,分四批看,並作出判斷(實現時用並行處理,使用mini-batch)。每個看到的貓或狗,如果判斷錯了,就修正自己的判斷標準(優化)。每看完這二百萬隻禽獸算一輪,每學十輪就看一些之前完全沒見過的貓貓狗狗做出判斷(推廣性測試)。當神經刻苦學習貓狗知識的時候,你正在睡覺,一覺睡醒,發現神經一小時前判斷貓和狗比較準(次最優解),現在學太多反而判斷不准了(過擬合),於是你讓神經使用一小時前的標準(防止過擬合技巧之early-stopping)。這樣訓練過程就結束了。

【苗憶南的回答(5票)】:

簡單:

神經網絡就是通過模擬神經元的運動,獲得一個可以變形為任意形狀的任意維函數

函數的形狀取決於你告訴他哪些點應該是這個函數應該盡量經過的

關於形象和有趣。。實在是不擅長。。

【羅傑的回答(1票)】:

從函數上來看,我覺得神經網絡是回歸方程的級聯疊加

【百得的回答(2票)】:

建議提煉或者修改一下問題。

我無法回答。

LS各位的回答都不是簡單形象又有趣的,對於題目來說都是費力不討好的。

題主對於「神經網絡是什麼」這個命題舉出那個選芒果的例子,我認為又是文不對題的,後者應該是問題歸集和算法思路,雖然是研究神經網絡當中的必要基礎之一,但是它不是神經網絡的特異性問題,跟「神經網絡」以及「是什麼」還是有非常大的距離。例如數學也是研究神經網絡當中的必要基礎之一……

【丁超的回答(0票)】:

類似於一個被磁化的鐵塊(具備記憶性磁化),拿走原磁鐵,被磁化的鐵塊就可以自己吸其他鐵塊了,這就是被「訓練」後的結果。所謂「訓練」,就是當初其他磁鐵來吸附鐵塊時,鐵塊內部磁疇方向變化的過程。被磁化的那個鐵塊就是神經網絡。

標籤:-算法 -人工智能 -計算機 -神經網絡


相關資源:





給我留言