本文出處html
人工智能分爲強人工,弱人工。算法
弱人工智能就包括咱們經常使用的語音識別,圖像識別等,或者爲了某一個固定目標實現的人工算法,如:下圍棋,遊戲的AI,聊天機器人,阿爾法狗等。網絡
強人工智能目前只是一個幻想,就是自主意識,具備自我成長、創造力的AI。如婦聯2裏的奧創,各類電影都有這個概念了。函數
我但願不久的未來能目擊這一奇蹟。學習
不積跬步無以致千里。人工智能
先從基礎講起。spa
目前比較先進的算法理論據我所知應該分紅3大類3d
1,神經網絡htm
2,遺傳算法blog
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算法相關內容的思惟導圖
轉載請註明出處