人工神經網絡是如何運作的

本文主要介紹人工神經網絡是如何運作的,這個交叉連接的網絡如何進行學習的。

吐槽一下網上的各種關於人工神經網絡的講解,要麼就是長篇大論,要麼就是公式漫天飛,代碼到處是,非常不好理解,本文儘量避免這些,用一個網頁搜索的例子來理解人工神經網絡。

1.神經網絡模型

上圖中有三個層級:輸入層(用來感知,暫且類比爲手,腳等器官)、隱藏層(用來分析,類比隱藏在腦子裏的神經)、輸出層(輸出結果,類比人體響應動作)。除了這三個層級之外,還有許多連線,這些連線代表這從一個節點到另一個節點的關聯程度。

舉個例子:你的手(感知節點1)被針刺了一下,信號是需要傳入到與手連接的神經元(中間節點1)中,最後再將信號傳給控制縮回手的肌肉(輸出節點1)中去。完成這個動作,並不需要中間節點2、3的配合,也沒必要給予輸出節點2、3反應,所以在這個動作中,感知節點1到中間節點1的連線就需要大權重,中間2、3節點就不需要怎麼大的權重了,輸出節點同理。

看到這你可能有疑問,在一個計算機中,如何將實際問題與這個模型關聯起來呢?下面將帶來一個網頁搜索的例子來詳細講解人工神經網絡如何應用以及其原理。

2.前饋法——初步建立網絡的基本結構

舉個例子:你需要搜索electronic science這兩個關鍵詞,搜索引擎如何在龐大的網頁中返回結果呢?

將electronic和science這兩個關鍵詞傳入輸入層的兩個感知節點賦值爲1,其他節點都賦值爲0,第一層次的連線權重賦值爲-0.2(如果賦0將一直陷入0中無法跳出),第二層的連線權重賦值爲0,這就建立了該搜索模型的基本結構,現在開始利用前饋法,初步確定各項參數。

1.確定h1節點的活躍度值,計算方法:先sum=1*(-0.2)+1*(-0.2)+0*(-0.2),再h1=tanh(sum),h1的值就是該點活躍度值,其他節點同理。(計算示意圖見下圖)

拓展一下tanh函數(反雙曲正切函數):sum=0時,函數斜率大易變化,sum=1時,函數斜率小基本不變化,所以當活躍度接近1或-1的時候,再怎麼訓練網絡,活躍度的值變化比較小。用這個函數可以有效的激活節點。

2.輸出層的節點也同樣確定,利用剛纔計算的隱藏層節點,再次使用上述方法確定。sum=h1*0+h2*0+h3*0

有一個問題出現了:這次的連接線權值都爲0,sum不管怎麼計算都是0,url1=tanh(sum)=0,輸出節點全部都是0,這時訓練集的作用就開始出現了,接下來將利用訓練集使用反向傳播法進行訓練模型。

3.利用反向傳播法進行訓練

反向傳播法顧名思義,反向進行訓練,即輸出層-->隱藏層-->輸入層

再舉個例子:現有一個訓練集,其中有100個人搜索electronic science這兩個關鍵詞,他們點擊網頁的所有記錄。即有輸入層和輸出層的數據。

假設訓練集中,搜索electronic時,用戶點擊url2的次數比較多。也就是說,用戶在搜索electronic時,期望的目標是url2,利用這個期望來調整連線權值以及節點活躍度。

1.建立一個誤差矩陣error,表示當前節點的活躍度與期望目標的差值(計算示意圖見下圖)

2.使用一個dtanh(x)函數y=1-x^2來判斷這個誤差矩陣的接受程度。out_error=dtanh(x)*error(dtanh函數見下圖)

其中x爲輸出節點的活躍度,如果x=1,dtanh(x)=0就不接受誤差,因爲活躍度接近爲1的節點誤差對其不產生很大影響,而x=0,則該節點的活躍度需要做出改變,誤差將需要接受。

3.將輸出節點誤差out_error與隱藏層節點的活躍度相乘,便得到從該節點到下一節點權重需要改變的值,然後把改變的值與原來的權重相加,就得到了新的權重。

(隨着1,2,3步驟的迭代次數越來越多,權重和活躍度也變得越來越穩定)

4.同理可計算出輸入層到隱藏層各連線的權重。

隱藏層誤差矩陣h_error的計算方法爲:輸出層的誤差矩陣out_error乘各當前隱藏節點到輸出層各節點的權值,再與隱藏節點的dtanh值相乘(示意圖如下)

隱藏層誤差矩陣求出來後,將h_error與輸入節點的權值相乘得到改變值change,再與當前連接權值相加就得到第一級的新權值。

4.結論

在此總結一下,建立人工神經網絡的步驟:

1.搭建人工神經網絡的基本框架(輸入層節點,隱藏層節點,輸出層節點,以及各層之間連線的權值)

2.前饋法使用tanh函數,計算各節點的活躍度

3.反向傳播法使用期望誤差的方式,計算各層級之間連接的權值(建議這部分詳細看,人工神經網絡的關鍵也在此)

4.利用訓練集不斷訓練,得到確定的節點活躍度以及連接線權值

5.開始使用這個網絡

 

PS:文中使用網頁搜索的例子可能不恰當,實際網頁搜索中可能經常使用的是TF-IDF(詞頻-逆文本頻率指數)和pagerank值來判定網頁的排名。

圖片都自己親手畫的,不如網上的好看。文中沒有代碼的具體實現,如果附上代碼這篇文章就有點長了。希望本文能給各位有些許幫助。

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章