輕鬆機器學習-兩層神經網路
每天機器學習,輕鬆人工智慧!
---作者
知道了單個神經元後,我們需要把多個神經元組合成為一個神經網路,就類似人腦的神經網路一樣,這樣才能具有更強大的功能。從今天開始,有兩個討論者也加入討論,他們是彪哥和郁姐,就是他們兩位:郁姐、彪哥。
1943年,心理學家W·Mcculloch和數理邏輯學家W·Pitts在分析、總結神經元基本特性的基礎上首先提出神經元的數學模型。40年後,美國的物理學家Hopfield於1982年和1984年在美國科學院院刊上發表了兩篇關於人工神經網路研究的論文,引起了巨大的反響。人們重新認識到神經網路的威力以及付諸應用的現實性。隨即,一大批學者和研究人員圍繞著 Hopfield提出的方法展開了進一步的工作,形成了80年代中期以來人工神經網路的研究熱潮。
為了方便講述,我們以兩層神經網路為例,兩層神經網路也叫多層感知機,具有非常好的分類效果。顧名思義,兩層的結構可以具有簡單的感知功能,這也是人工智慧的初步。正是多層感知機的出現,神經網路開始了大範圍的推廣與使用。目前很多的神經網路教材,都是重點介紹兩層神經網路。
兩層神經網路除了包含一個輸入層,一個輸出層以外,還增加了一個中間層。例如下圖所示:
可以看到中間層有2個神經元,a1和a2。分別接受輸入層x1、x2、x3的數值,和邊線上的數值w進行計算。計算的公式是這樣的:
也就是說,輸入的每一個值(x1、x2、x3)都要與圖中相連接的邊上的權值w相乘,然後累加成和,在通過激勵函數f得到輸出(a1、a2)。
最終的輸出y再利用中間層的輸出a1,a2接著計算:
的確,這樣寫起來比較繁瑣,這才三個輸入就很長,如果有成百上千個輸入就是災難。好在數學是很有用的,可以用簡潔的方式來表達這種相乘後累加的公式。如果忘了可以翻一翻數學書,還記得如下形式嗎?左邊的複雜的形式可以用右邊簡潔的方式表示。
如果感覺還不簡潔,可以再進一步:
有的人可能有點蒙,什麼意思?其實就是用符號表示而已!我們是把輸入(x1、x2、x3)定義成了一個3行1列的矩陣x,把(w11、w12、w13)定義成一個3行1列的矩陣w1而已,純粹是為了好看。
那個T代表轉置的意思。我們看一個動圖感受一下。
GIF
說了那麼多,總結一下。上面圖中所示的兩層神經網路,其實就是如下3個函數的運算:
由此可見,使用矩陣運算來表達是很簡潔的。因此神經網路的教程中大量使用矩陣運算來描述。
是的,為了簡潔,上面討論的神經網路中都沒有提到偏置項b(bias)。事實上,我們稍加改造就能出線偏置項。如下圖:
可以看出,偏置節點很好認,只是在神經元的輸入項中添加了一個輸入恆為1的節點,連接的權值就是b。
在考慮了偏置項以後這個神經網路的矩陣運算就編程了如下形式:
其它兩個同理,變成了:
激勵函數也稱作激活函數(active function)。需要說明的是,在兩層神經網路中,我們一般不再使用閾值函數作為激活函數,而是使用Sigmoid作為激勵函數。
公式中的e叫自然常數,是一個固定的數(2.71828)。Sigmoid函數是產生一個從0-1之間的數,函數圖像是這樣的:
事實上,神經網路的本質就是通過權值與激活函數來擬合特徵輸入與目標之間的函數關係。
那我們就用一個具體的輸入數字跑一邊神經網路,看看數據是怎麼流轉的。如圖所示,我已經把輸入和權值、偏置項寫在了圖中。下面是計算過程。
輸入的(3,1,5)數字序列,最後得到了1。1一般認為是真,可以說得到了一個肯定的答覆。不過這個看上去還不是那麼有具體實用場景。理論上可以證明,兩層神經網路可以無限逼近任意連續函數。也就是說,面對複雜的非線性分類任務,兩層神經網路可以分類的更好。


※人工智慧,機器學習和深度學習之間存在著細微差別
※通過機器學習讓醫療數據更好用
TAG:機器學習 |