人工智能起步-反向回饋神經網路算法(BP算法)


  本文出處

人工智能分為強人工,弱人工。

弱人工智能就包括我們常用的語音識別,圖像識別等,或者為了某一個固定目標實現的人工算法,如:下圍棋,游戲的AI,聊天機器人,阿爾法狗等。

強人工智能目前只是一個幻想,就是自主意識,具有自我成長、創造力的AI。如婦聯2里的奧創,各種電影都有這個概念了。

我希望不久的將來能目睹這一奇跡。

不積跬步無以至千里。

先從基礎講起。

目前比較先進的算法理論據我所知應該分成3大類

1,神經網絡

2,遺傳算法

3,隱馬爾柯夫鏈

這篇的主題是神經網路,其他兩種我以后可能會寫出來(可能!)。

 2018-03-09 修正 這2年一下這幾種算法的發展規模更大了。

1,深度神經網絡

2,生成對抗網絡

3,深度強化學習

4,遷移學習

5,循環神經網絡

 

神經元生物原理

百多年前腦部的生物構造被研究出來之后,有大牛就想象可以通過模擬神經系統造人。然后研究出各類神經網絡算法。所以先講這部分內容,之后理解BP算法會更帶感。

神經元是神經網絡的基本單位,先貼一張圖。

 

可以看到神經元的主要構造分為3個部分 N個樹突+細胞體 +突觸

神經元之間的連接是就是樹突連接(另一個神經元)的突觸。這種首尾相連的結構,N個樹突可以連接N個神經元。

信號的傳輸方式是由N個神經元通過樹突傳遞神經遞質,遞質上附加了生物電,當生物電累加到一定闕值時就會激發突觸發送信號出去。

基本邏輯就是這樣。下面我們看看人類的腦洞。

 

BP算法原理

BP算法由輸入層→隱層→輸出層構成。

 

輸入輸出層:這里可以看到這層可以有多個入口,也可以只有1個入口。

比如要做一個根據每期福利彩票的結果預測下期的結果。

那么輸入層就應該上一期的結果(N個數字)。輸出層就是這期(N個數字)。

隱層:隱層可以有N個節點或者N個層次。

正向過程:

輸入層分別累加到隱層的各個節點 

假設 輸入是x  隱層節點是s

那么

s1 = x1+x2+x3+x4+……

s2 = x1+x2+x3+x4+……

s3 = x1+x2+x3+x4+……

 

然后為了可以動態調整各個節點加入的權值w1 w2 w3……

就變成

 

s1 = w1*x1+w2*x2+w3*x3+w4*x4+……

s2 = w1*x1+w2*x2+w3*x3+w4*x4+……

s3 = w1*x1+w2*x2+w3*x3+w4*x4+……

順便加一個偏移值b 數學公式就成了:

Sj 還要經過傳遞函數 f() 算出 隱層節點的值

f()傳遞函數對應的過程就是:

神經元累加生物電到達一定程度時觸發放電。如果沒到達闕值這些累積的生物電就打水漂了。

舉個例子來說 

常用的一種激勵函數是sigmoid 函數圖如下

公式 f= 1/(1+e^-x)

 

這個S型函數的意義只要達到某一闕值 函數就會輸出1  就算超出闕值也不會影響輸出值。

這里原先是我理解錯了,BP算法加入sigmod函數主要的意義在於加入非線性函數來解決非線性問題。

選sigmod的好處在於 求導方便  sigmod的導數= 1 - f 

反向回饋的時候需要計算導數

 

隱層到輸出層的過程也是一樣的。

不過BP算法的重點在於反向回饋。

反向:

正向傳輸結束之后我們能夠拿到一次結果。

這個結果就可以跟預期值做比較,一般計算方差E。

那么這個誤差就可以反向的傳遞給上一層,用來調整上層節點的權值 w 。這個過程反復執行直到方差E小於期望的最小誤差。(因為現實是不可能達到0誤差,所以如果不設置最小期望誤差則程序結束不了。)

至於具體的權值調整的公式有完整的推導過程,過於復雜這里不討論。

 

核心的概念就是通過計算整體方差E對權值變量Wj 的偏微分得出 當前權值應該增加還是應該減少,上式很像n的那個字母就是指學習率。就是這里一次要調整權值時用的基本單位。

偏微分科普:

比如 一個公式有N個變量  y = aX +bY+cZ; 這里 XYZ是變量。abc是常量。

偏微分就是求單一變量的變化對y值的影響,其他變量在此被當作常量來求導。

那么y在這里求x的偏微分,就應該是 =a  ;  (bY+CZ)被當作常量。

 

小結:

那么一次正向反饋+一次反向調整權值使得全局誤差減少,做多幾次直到全局誤差符合期望的最小誤差。這就是一次訓練完成。

多次訓練需要提供不同的輸入值。

再拿上面的例子說:

就是我拿第1期的開獎結果作為輸入值,第2期的開獎結果作為預期值計算誤差,這就是一次完整的訓練。

第二次訓練就是拿第2期作為輸入值,第3期作為預期值。

以此類推直到沒有新的訓練樣本。訓練完成的神經網絡就可以用來預測往后的任何一期的開獎結果。

(當然由於福利彩票是完全隨機沒有規律的,所以其實預測結果很糟糕。)

BP算法理論上能夠逼近所有線性函數。

通俗點講,BP算法能夠在你擁有足夠的歷史數據而又不知道其中規律的情況訓練出能夠預測結果的算法。

但是必須這個要做的事情是有規律的(只是你不知道或者太過復雜),而且你的訓練集必須包含所有“有效因子”。

有效因子這個詞是我造的了。比如說你的歷史數據里有50%是會影響結果的,有另外50%跟結果一毛錢關系都沒有。這是神經算法允許的。

但是如果這50%的數據里沒有包含所有導向結果的所有因素,那么結果就會差別很大。

假設說福利彩票(又來了) 有一個因素是空氣質量(假設!),比如沒霧霾的情況下出現某個數字的概率很高。

然而你的訓練集中沒有加入這個因素,那么結果就非常不准確了。

  

目前存在的問題

目前BP算法有兩個明顯問題:

1. 容易陷入局部最小值

比如下圖:

 

明顯有個更深的坑,結果探索過程中掉進次深的坑了。

 

整個BP算法就類似求解這個函數的最小值。

但是我們看到這個函數有2個最小值,實際的情況是可能有非常多個極小值。

當我們從右到左調整權值時會到達第一個低谷。然后繼續調整權值后發現誤差值變大了,算法就誤以為找到了最小值解。然而卻沒有拿到全局的最優解。

這就是所謂的陷入局部最小值。

 

 

2.過擬合問題

 過度的符合訓練集。就像剛才我舉例說有50%的訓練數據是無關結果的。所以算法最佳的結果其實是忽略掉這50%無用訓練集。但是問題在於我們不知道規律是什么,不知道那些訓練集是有效因子(知道了就不會搞出來一個BP算法了)。

所以過度的符合訓練集也是錯誤的。

 

 

PS:BP算法數學的推導過程我這里有一個PDF。

這里是下載地址:點擊下載PDF

這個算法在人工智能領域還是算入門了,升級版還有卷積算法。

涉及的數學概念非常多,尤其是統計學方面。

附上BP算法相關內容的思維導圖

 

 

 

轉載請注明出處

 


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM