天天看點

MATLAB手撕神經網絡實作手寫數字的識别——神經元介紹

最近對神經網絡比較感興趣,于是開始了神經網絡的學習,首先神經網絡最基礎的就是BP神經網絡,後面就為大家介紹通過BP神經網絡實作手寫數字識别。

首先簡單詳細介紹一下BP神經網絡:BP(back propagation)神經網絡是1986年由Rumelhart和McClelland為首的科學家提出的概念,是一種按照誤差逆向傳播算法訓練的多層前饋神經網絡,是目前應用最廣泛的神經網絡。

BP神經網絡的分析過程主要分為兩個階段:

第一階段是信号的前向傳播,從神經網絡的輸入層輸入,經過隐含層,最後在輸出層輸出結果;第二個階段就是誤差的反向傳播,通過建構誤差函數,通過梯度下降原則,不斷修正神經元中的權重和偏置值,最終使神經網絡的效果達到最優。

神經元介紹

介紹BP神經網絡,首先應該介紹一下其組成的基本單元——神經元:

MATLAB手撕神經網絡實作手寫數字的識别——神經元介紹

上圖所示的就是一個簡單的神經元,從圖中可以看出一個神經元周圍有很多突觸與其他神經元相連,并接受來自其他神經元的信号,該神經元對這些信号以不同的權重系數進行累加後,經過激活函數激活目前神經元,産生信号傳遞給與它相鄰的下一個神經元。數以萬計個神經元相連便形成了複雜的神經網絡,可以實作非常複雜事情的處理。

圖中Y即為從其他傳來的信号,W為每個突觸的權重系數,b為該神經元的偏置,該神經元将與其連接配接的所有突觸傳來的信号按照權重系數累加起來:

MATLAB手撕神經網絡實作手寫數字的識别——神經元介紹

如果該神經元将y_out結果作為輸出傳給下一個神經元的話,那麼整個神經元就相當于一個線性系統,很多非線性的問題将無法解決,限制神經網絡的應用。是以研究學者們引入了激活函數将該神經元(非線性函數)進行激活,進而實作非線性問題的解決,常使用的激活函數有:sigmoid函數、雙曲正切函數和softmax函數等,不同的激活函數效果不同。

①我們在手寫數字識别項目中使用的激活函數是sigmoid激活函數,其函數表達式如下:

MATLAB手撕神經網絡實作手寫數字的識别——神經元介紹

 下面是sigmoid激活函數的函數圖:

MATLAB手撕神經網絡實作手寫數字的識别——神經元介紹

②softmax激活函數的表達式為:

MATLAB手撕神經網絡實作手寫數字的識别——神經元介紹

 下面這個圖(來源自網絡)可以很清楚的講解softmax函數是怎麼計算的:

MATLAB手撕神經網絡實作手寫數字的識别——神經元介紹

 ③ReLu激活函數(線性整流激活函數)其表達式為:

MATLAB手撕神經網絡實作手寫數字的識别——神經元介紹

 下面是ReLu激活函數的函數圖:

MATLAB手撕神經網絡實作手寫數字的識别——神經元介紹

到此為止,我們對神經網絡的基本單元——神經元,有了初步的了解,後面的部落格我将詳細介紹多個神經元連接配接起來組成的BP神經網絡,并通過BP神經網絡實作手寫數字的識别。

繼續閱讀