從人工智慧這個詞流行起來以後,神經網路這個詞也變得家喻戶曉了,很多人想要去學習一下神經網路方面的知識,但看到神經網路深奧的概念以及複雜的公式時,也只能放棄。不要驚慌,這篇文章會由淺入深再加例子的形式幫助你理解前饋神經網路,希望對你有幫助。
為了幫助你更好的理解前饋神經網路,我會分三部分進行講解:
- 第一部分使用例子幫你建立基礎概念
- 第二部分在概念的基礎上融合數學
- 第三部分使用數學說明前饋神經網路
一 先從小明說起
小明的面前有五堆文件,每一堆都有1000份,其中的四堆已經按照,英語、法語、德語、義大利語分類好,小明現在要做的事情就是將第五堆未分類的文件進行分類。
小明並沒有學習過那麼多的語言,所以他現在看到第五堆文件就頭大。
小明現在已經沒有時間去學習這四種語言了,但是小明想到了一個辦法,他先看了一遍已經分好類的四種語言都有哪些特徵,例如英語中的哪些字元是其他語言中沒有的,義大利語的字母一般都是什麼樣子的。
當小明學習完了這些語言的特徵以後,小明就將左側未分類的文件一個個的看一遍,當他讀取第一篇文件的時候發現了Ä字元時,就會將這篇文件放在德語類別中,當看到文件中有很多的“th”二元字元對的時候,就會將此篇文件放在英語類別中。
就這樣小明經過不斷的讀文件->看特徵->按照特徵分類,最後他將所有的文件都進行了正確的分類。
但是有意思的是小明還是不懂這幾種語言,但是他還是能夠正確的進行分類。
二 使用數學解析小明
上面的小明並不懂語言,但是卻做到了正確的分類,接下來我們使用數學解析一下這個事情。
小明找到特徵
上面的小明並不是直接將未分類的1000分文件進行分類的,他是先學習了一遍已分好類的文件中都有哪些特徵,如果使用X代表每一個文件中的二元字元對出現的頻率,使用Y代表最終的分類,那麼數學公式可以這樣表示:
Y英語 = Xaa * Waa英語 + Xab * Wab英語 + Xac * Wac英語 + ...... + Xzz * Wzz英語
Y法語 = Xaa * Waa法語 + Xab * Wab法語 + Xac * Wac法語 + ...... + Xzz * Wzz法語
Y德語 = Xaa * Waa德語 + Xab * Wab德語 + Xac * Wac德語 + ...... + Xzz * Wzz德語
Y義大利語 = Xaa * Waa義大利語 + Xab * Wab義大利語 + Xac * Wac義大利語 + ...... + Xzz * Wzz義大利語
注:W代表權重
對於上面的公式,小明已經知道了X與Y,他學習特徵的目的就是獲取每種語言最優的權重,也就是學習W。
小明進行分類
當小明在自己的腦子裡面學習到了W這個體系以後,他就開始對未分類的文件進行分類了,也就是不斷的輸入X,最後小明使用上面的公式,輸入X和W得到了文件的最終分類。
其中W指的就是我們通俗理解上的模型。小明整個分類的過程就是先使用已知的X與Y求出W,然後再使用已知的X與W求出Y。
對於上面的這種訓練模式我們叫做有監督學習。
三 公式下的前饋神經網路
針對於上面文件分類來說,輸入就是一些待分類的文件,輸出就是文件最終所屬的類別,而小明就是作為黑盒存在,現在讓我們將這個黑盒開啟。
圖中就是前饋神經網路的一個示意了,為什麼叫前饋呢?這是因為每一個神經元都只與前一層的神經元相連線。
上面的輸入層就是我們待分類的文件,輸出層就是文件的類別,中間的三個隱藏層就是各種特徵的計算。
讓我們先拿一個輸入神經元與第一層隱藏層中的一個神經元出來:
輸入層的每一個神經元都是一個二元字元對的頻率,在得到第一個隱藏層時將二元字元對頻率乘了一個權重,並且新增了一個偏置項b,公式表示:
NNMLP1(x) = x*W1 + b1
為了我們計算的便捷性,需要在神經網路中使用一些非線性函式處理隱藏層資料,以往經常使用的非線性函式是sigmoid函式,但是研究人員發現在最後結果的表現上,ReLU(修正線性單元)函式是優於sigmoid函式的。
上圖就是ReLU函式的影像。
那麼上面的公式就會是:
NNMLP1(x) = Re1(x*W1 + b1)
那麼最後我們將一層推廣到最終結果時:
NNMLP3(x) = P
h1 = Re1(x*W1 + b1)
h2 = Re2(h1*W2 + b2)
h3 = Re3(h2*W3 + b3)
P = h3 * W3
為了方便檢視上面的公式我將每一層就單獨例舉了出來。
在上面的公式中我們可以看到最後的P只是使用h3 * W3,我們將偏置向量強制為0.
最終我們得到的就是一個關於文件分類的概率。
值得注意的是,X輸入是一個向量,W是一個向量矩陣,最後得到的P也是一個向量。
總結
上面我們通過小明的例子,解釋了一下什麼是前饋神經網路,以及其公式的表示,對於神經網路我們可以使用一些已經標記好的資料,訓練得到一個合適的模型也就是W,然後我們就可以將這個模型應用在未知的資料中去。
實際上在應用前饋神經網路的時候,我們需要結合自己的訴求來界定隱藏層的層數以及偏置項,而為了防止過擬合情況的發生,我們在訓練的時候也會使用正則化或者丟棄法的方式。