神經網絡很萌的

神經網絡很萌的!算法

0.分類
神經網絡最重要的用途是分類,爲了讓你們對分類有個直觀的認識,我們先看幾個例子:
垃圾郵件識別:如今有一封電子郵件,把出如今裏面的全部詞彙提取出來,送進一個機器裏,機器須要判斷這封郵件是不是垃圾郵件。網絡

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

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

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

分類器的輸入是一個數值向量,叫作特徵(向量)。在第一個例子裏,分類器的輸入是一堆0、1值,表示字典裏的每個詞是否在郵件中出現,好比向量(1,1,0,0,0......)就表示這封郵件裏只出現了兩個詞abandon和abnormal;第二個例子裏,分類器的輸入是一堆化驗指標;第三個例子裏,分類器的輸入是照片,假如每一張照片都是320240像素的紅綠藍三通道彩色照片,那麼分類器的輸入就是一個長度爲320240*3=230400的向量。spa

分類器的輸出也是數值。第一個例子中,輸出1表示郵件是垃圾郵件,輸出0則說明郵件是正常郵件;第二個例子中,輸出0表示健康,輸出1表示有甲肝,輸出2表示有乙肝,輸出3表示有餅乾等等;第三個例子中,輸出0表示圖片中是狗,輸出1表示是貓。orm

分類器的目標就是讓正確分類的比例儘量高。通常咱們須要首先收集一些樣本,人爲標記上正確分類結果,而後用這些標記好的數據訓練分類器,訓練好的分類器就能夠在新來的特徵向量上工做了。blog

1.神經元
我們假設分類器的輸入是經過某種途徑得到的兩個值,輸出是0和1,好比分別表明貓和狗。如今有一些樣本:圖片

圖片描述

你們想一想,最簡單地把這兩組特徵向量分開的方法是啥?固然是在兩組數據中間畫一條豎直線,直線左邊是狗,右邊是貓,分類器就完成了。之後來了新的向量,凡是落在直線左邊的都是狗,落在右邊的都是貓。get

一條直線把平面一分爲二,一個平面把三維空間一分爲二,一個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刀把這一部分先挖出來,而後和右下角合併。

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

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

神經網絡神奇的地方在於它的每個組件很是簡單——把空間切一刀+某種激活函數(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.

做者:王小龍
連接:https://www.zhihu.com/question/22553761/answer/36429105來源:知乎著做權歸做者全部。商業轉載請聯繫做者得到受權,非商業轉載請註明出處。

相關文章
相關標籤/搜索