1. 程式人生 > >大白話5分鐘帶你走進人工智慧-第33節神經網路和神經元概念(1)

大白話5分鐘帶你走進人工智慧-第33節神經網路和神經元概念(1)

目錄

 

1、前述

2、神經網路例項與概念

3、神經元結構

4、神經元拓撲總結

5、邏輯迴歸和神經元神經網路的關係


1、前述

不少小夥伴反應為什麼沒有神經網路的文章,因為現在那麼主流。其實本打算更新完演算法的基礎篇之後再更新神經網路的文章。但是小夥伴的心情是急切的,所以也為了迎合大家的吶喊~~。

從本節開始我們就開始神經元演算法的學習了。這將是一個很有意思的事情。前面基礎學習還有幾節演算法沒有更新,我們會穿插在神經網路中或者等神經網路結束之後接著更新。大致的規劃是還剩下最大熵模型,em 演算法,貝葉斯網路,隱含馬爾科夫,條件隨機場,SVM。幾個主流的演算法。

好了,接下來跟著我的腳步一起去看下魅力的神經網路吧。說起神經網路實際上就是深度學習。之前說機器學習可以用來進行預測,而深度學習可以對更復雜一些應用或者程式,進行更好的預測,它是基於神經網路衍生和發展出來這麼一門學科,可以理解為深度學習基於神經網路,是機器學習裡的一個演算法,而又把演算法的發揚光大。

神經網路這個詞聽起來可能比較玄乎,它跟生物或者人的身體裡面的很多網路是相關的,可能第一眼看上去似個魔法,但是不要被它嚇到。它本身其實不再是各種各樣的推導,它更多講的是網路拓撲結構,如何去構建網路拓撲結構,然後來提升它的功能。

神經網路的模型很容易被應用到現實問題當中,而且比較難解決的,比如說語音識別,影象識別,自然語言處理,這些事物通過神經網路更深度學習,反而變得更加的簡單,而且還變得更加準確。

2、神經網路例項與概念

什麼是神經網路?一隻貓大約有十億個神經元,一隻老鼠大約有7500萬個神經元。什麼是神經元?神經元就是神經網路裡面的一個單元,在神經網路裡面有很多個神經元,它們通過某種方式連線在一起,就構成了一個網路。一隻蟑螂大約有100萬個神經元,人大概有140億個神經元,人類的神經元更多。

換句話說,人身體或者生物身體裡面都會有神經網路,理解為一個演算法。人看各種各樣的資料,讀個本書,看各種各樣的景、圖片,聽各種各樣的聲音,都帶到生物裡面的神經網路演算法裡面了,然後在不斷的學習的過程當中,不自然地就生成了模型。

一個女孩站在面前,說這個女孩長得漂亮還是難看,它取決於你這個模型給它的答案,為什麼會給答案,因為你在之前訓練這樣的模型,其它的事情都是舉一反三。

相比之下,許多人工神經網路的神經元要少的多,就是咱們去做人工智慧裡面的神經網路,它包含的神經元要比生物裡面的神經元少得多。第一點就是包括老鼠、人,生物裡面要去學的內容是方方面面的,比如聽、說、讀、寫、看等等的表達理解,情感,它們需要很多的神經元才能構成複雜的一個網路,然後才能去解決各種各樣的問題。

很多時候我們去面對機器學習當中的一個點,比如說我們正在預測某隻股票在漲還是跌;預測某個城市裡面路段它擁堵還是不擁堵,解決的是一個具體的問題。但是人工構建的神經網路通常沒有生物裡面的複雜。隨著人們的需求越來越大了,比如想去做智慧的機器人,它像人一樣聽、說、讀、寫、理解等等,那麼這樣神經網路就會變得越來越複雜,神經元也就變得越來越多,那樣的話就進入到深度學習學科裡面去了。

所謂的深度學習,就是神經網路的層次變得更多,每一層裡面的神經元變得更多,連線的方式也變更加的複雜,這樣就衍生出來深度學習這個學科。

通常神經網路的神經元只有成百上千個,所以我們在不久將來隨時建立一個人工大腦是沒有危險的。這句話隨著時代的發展,可能是不對的,但目前來看是沒有什麼危險的。

神經網路其實每個人身體基本都有,比如說一個小男孩和一個小女孩親嘴,嘴脣和嘴脣接觸,肯定是大腦給了一個訊號,說幹這件事情比較歡喜,比較開心。男孩和女孩親開心還是不開心,取決於大腦中給出訊號。當嘴脣接觸之後,一個神經元接觸了更多神經元,然後把訊號不斷地傳遞,然後經過身體裡神經網路的傳遞,傳遞到大腦皮層裡面去,最終大腦給出的訊號,喜歡還是不喜歡,有多喜歡或者多不喜歡。

比如說右邊這個女孩是鳳姐,有人可能喜歡她,有的人不喜歡她,喜歡不喜歡取決於每個人在腦中,根據神經網路算出演算法模型它什麼樣子,它有什麼樣的區別。   神經網路就是我們人類最重要的演算法。

3、神經元結構

我們看下神經元的結構圖:

Cell body可以理解為是一個細胞,一個神經元,signal in輸入訊號,dendrites是突觸,這些輸入訊號的連線都連線到中間的神經元,它們都做了輸入,跟機器學習聯絡一下,signal out輸出,可以寫成y,signal in可以寫成x1,x2,x3,x4,x5,稱每個x為輸入特徵,或者叫維度,每一個x都對應著一個維度,維度越多,最後影響y結果的因素就越多。

神經元中間的位置是處理、計算,對於生物來說,它會有化學的變化,當化學變化達到一定閾值的時候,它才會有signal out,如果化學變化沒有達到一定閾值,它就沒什麼反應,沒有signal out。

比如小男孩和小女孩親,沒什麼反應,這說明神經元在輸入之後不斷把它傳遞,在傳遞過程當中經過很多層的神經元,神經網路之後,它化學變化在不斷地抑制,因為達到閾值才會有signal out,也就相當於一個訊號在傳遞過程中逐漸消失了。

對於人工神經網路角度來說,它的化學變化就是一個function,化學變化的function如圖:

 

隨著x值不斷的增大,一開始沒有什麼反應,因為沒有達到閾值,當達到閾值的時候,才會有輸出。神經網路這個做法是最擬人的一個演算法。化學變化只有達到閾值才會有輸出,沒有達到閾值就沒有輸出,達到閾值之後,隨著x的值越來越大,y的值就越來越大,這種方式的函式,它完全在擬人。 對於神經元來說,就會有這樣的function函式,對應在神經元上面。

這樣圖形的啟用函式,在深度學習裡面稱之為ReLU,在深度學習裡面用的最多的啟用函式,因為它最擬人,給它輸入小的時候沒什麼反應,輸入越大,反應就越大。比如別人輕輕摸你一下,可能沒什麼反應,或者小風從你面板上吹一下,沒什麼反應,隨著風力的不斷的加大,你會覺得越來越疼。那麼它就是ReLU啟用函式的一個變化。

這個啟用函式有2個維度,就是一個x和y的一個變化,而上圖神經元的裡面有5個x,它們怎麼跟y變化?所以在神經元裡,它有一個加和,相當於它會把x1到x5的收入全部彙總到一起,之後的結果經過function的變化,得到y,再往下面去傳遞。

對於人工神經網路來說,它會把這樣的一個變化,首先通過加和把它們彙總到一起,然後再經過一個啟用函式,變換之後得到最終的結果y,再傳遞下去。那麼這樣去傳遞,就結束了嗎?其實在神經網路裡面一個神經元的輸出會變成下一層神經元的輸入,作為x1,再進行加和,再經過function的變化,然後輸出,逐層的往後去傳遞。

對於人工智慧機器學習來說就是在做模型,有模型才能去做預測,模型本質上其實就是引數。資料是x,y;演算法就是一個式子,一個公式;模型的本質是引數。所以機器學習就是一個解方程,找到最優解的一個過程。

有引數才有模型,那麼對於神經網路來說些引數應該在哪?在輸入的連線上面,比如x1,x2,x3,x4,x5,然後要去算每一個維度它所對應的一個權重值w1,w2,w3,w4,w5,如圖:

有了維度,有了w之後,求和∑xi*wi,然後輸出,這裡有個問題,求和之後是直接輸出嗎?會有一些變化或者處理嗎?也就是說∑xi*wi是直接輸出還是變化輸出?直接輸出對應著線性變化,不是直接輸出對應著非線性變化?

如果是線性變化的話,線性變化的xi,wi不能解決特別複雜的問題,比如線性迴歸就不能預測複雜的變化。

所以線性的辦法不能達到很好的一個預測效果。這個時候怎麼辦?人類也是一樣,不是線性去想事情的,人類是有一個化學變化的。

所以人工的神經網路在cell body 這個地方加和之後,用了function,比如ReLU做擬人,先是橫的沒有任何的反應,然後接著又以45度上升。如果是這樣一個圖形,它的x和y將不是線性變化。

所以神經網路就是為了去擬合更加複雜的事情,每個神經元在加和之後,它會做一個非線性的變化,根據啟用函式ReLU,或者其它一些啟用函式,不管是哪一種啟用函式,它一定是非線性的變化。

經過分析的變化之後,如果是ReLU的話,如圖,x與y相交的位置一定是0,也就是沒達到刺激之前能輸入給y的訊號都為0。刺激點角度是45度,如果寫成公式的話,就叫做max(0,x)。如果x>0,結果就是x本身;如果x<0的話,結果是0。

神經網路要把x相加之後,再去經歷一個非線性的變化,得到y結果再往下面去傳遞,下一個神經元把傳遞結果作為輸入,迴圈往復,最後得到最後一層的結果。

神經網路要把x相加之後,再去經歷一個非線性的變化,得到y結果再往下面去傳遞,下一個神經元把傳遞結果作為輸入,迴圈往復,最後得到最後一層的結果。

4、神經元拓撲總結

從生物神經元到人工神經元,我們可以把人工神經元畫成這樣如圖:

首先它有加和,然後經過變化、輸出,每個連線上有對應的w權重值。在這裡面可以單獨加一條線對應w0,那麼它前面的輸入就是1。所以每個神經元我們也可以給它加一個截距x0=1。

這裡面注意三點:

第一點:啟用函式:將神經元的輸入訊號轉換成單一的輸出情況,以便進一步在網路中傳播,function函式叫啟用函式,圖中為f,它可以有各種各樣的啟用函式。

第二點:網路拓撲,我們在考慮一個神經網路的時候,就不單單是一個神經元了,而考慮它的網路拓撲,就是有N個神經元,怎麼給它構建成一個網路?換成什麼形狀的網路?

網路拓撲描述了模型跟神經元的數量以及層數和它們的連線方式。網路拓撲就是由數量,層數和連線方式構成的。

比如有五個神經元,可以構建成什麼樣的網路呢?有很多,可以是一層,一層裡有5個神經元。如上圖,也可以是5層,每層一個神經元;

也可以是前面2個,後面3個連線起來:

等等。如果前面2層,後面3層,前後兩兩之間連線起來,這種連線方式叫全連線。

在網路拓撲裡面,有時候不用全連線,用區域性連線,比如說卷積神經網路,層與層連線時,不是全連線,而是區域性連線。全連線需要算的引數多,區域性連線算的引數會更少一些。

第三點:訓練演算法:就是在求最優解的過程當中,找求最優解的演算法。梯度下降裡的SGD,這是求最優解的方式方法;還有L-BFGS牛頓法,也是比較常見。這兩個都是訓練的時候用到的演算法。

在深度學習裡面,L-BFGS不會用,基本都是使用SGD隨機梯度下降。以後我們還要去講更多的求解最優解的方法,它們其實都是基於SGD的變形。

現在去做人工神經網路的時候,我們需要考慮的事情是:網路拓撲是什麼?啟用函式的選擇是什麼?選擇的是什麼訓練演算法?未來寫程式碼完成任務的時候,就要考慮這三點。

5、邏輯迴歸和神經元神經網路的關係

之前學過一個演算法叫LR邏輯迴歸,跟神經元,神經網路有什麼關係?

邏輯迴歸的公式是: ,寫成另一種方式就是 ,那麼 表示的就是神經網路裡面的∑這一部分。

邏輯迴歸還有一個S曲線,是Sigmoid函式,是一個非線性的變化, ,對應神經元裡f啟用函式這一部分,只不過在邏輯迴歸裡,啟用函式不是ReLU,是Sigmoid函式。

在深度學習裡面,Sigmoid函式就是另外一種啟用函式。啟用函式有很多種,但是常用的是ReLU和Sigmoid函式。

如果把神經元裡function函式換成Sigmoid函式,第一點,啟用函式有了。第二點,網路拓撲就是,1層,1個神經元。第三點,訓練演算法,選擇SGD或者選擇L-BFGS,還可以想到什麼?所以一個神經元,一層,且啟用函式是Sigmoid函式,它就是一個邏輯迴歸。

神經網路可以有多層,每一層裡面有個神經元連線在一起。 如果我們把神經網路裡面多層,多個神經元裡的每一個啟用函式都設定成Sigmoid函式,這個神經網路就相當於是無數個邏輯迴歸在疊加組合。

所以神經網路可以做更加複雜的事情,在機器學習裡面,輕易不會用神經網路這個演算法,因為一般淺層的演算法都能解決這件事情,解決特殊的問題,用不著這種深層的演算法來做。

為什麼邏輯迴歸是淺層的,因為它只一層,一個神經元,如果層次越多越深入,就是越深層的演算法。神經網路用來解決比較複雜問題, 比如影象識別,淺層演算法效果不好, 就用深度學習來