咱們在設計機器學習系統時,特別但願可以創建相似人腦的一種機制。神經網絡就是其中一種。可是考慮到實際狀況,通常的神經網絡(BP網絡)不須要設計的那麼複雜,不須要包含反饋和遞歸。
人工智能的一大重要應用,是分類問題。本文經過分類的例子,來介紹神經網絡。算法
一個最簡單的分類,是在平面上畫一條直線,左邊爲類0,右邊爲類1,直線表示爲z網絡
這是一個分類器,輸入(x,y),那麼,要求的參數有三個:a,b,c。另外注意c的做用,若是沒有c,這條直線必定會過原點。
所以,咱們能夠設計一個簡單的神經網絡,包含兩層,輸入層有三個節點,表明x,y,1,三條線分別表明a,b,cg(z)對傳入的值x進行判別,並輸出結果。
機器學習
可是,因爲z的值可能爲[−∞,+∞],爲了方便處理,須要將其壓縮到一個合理的範圍,還需sigmoid函數:
函數
這樣的激勵函數,可以將剛纔的區間,壓縮到[0,1]性能
。
至於如何訓練,會在以後的章節中講解。學習
剛纔展現了最簡單的二分類,若是有四個分類,那一條線就沒法知足要求了。想象兩條直線,就會將平面劃分爲四個區域,一個三角區域至關於兩個子平面求交集。
所以直覺告訴咱們,若是有多個神經元,那麼這樣的問題能表現爲問題的「邏輯與」操做。將第一節中介紹的神經網絡的輸出,再作一個判斷層,即多層網絡。
可是,如何實現邏輯與呢?用下面的圖一目瞭然:
仔細看下,這至關於建立一條線,除非x1人工智能
和x2都等於1,不然hθ(x)<0atom
。
進一步地,若是咱們可以對區域求並集,那麼總能夠對不一樣的子區域求並。而實現並操做和與操做是相似的:
此處就能看到sigmoid函數的做用了,若是沒有它對數值的放縮,並和與的操做就沒法實現了。
輸出還能做爲下一級的輸入,從而增長了一個隱層,產生了單隱層神經網絡,再複雜一些,若是網絡層數特別多,則叫作深度學習網絡,簡稱深度學習。
以前針對一個線性不可分的區域,須要將其變換到更高維度的空間去處理。但若是用神經網絡,你總能夠經過n條直線,將整個區間圍起來。只要直線數量夠多,總能繪製出任意複雜的區域。每個子區域都是凸域:
簡直不能更酷!下面這張圖總結了不一樣類型的神經網絡具有的功能:
數學家證實了,雙隱層神經網絡可以解決任意複雜的分類問題。但咱們的問題到此爲止了嗎?不見得!
這裏還有幾個問題:spa
若是一個平面,有6個點,分紅三類。如何設計呢?
一種最狂暴的方法,是對每個點都用四條線圍起來,以後,再對六個區域兩兩取並集。造成下面這張超複雜的圖:
解釋一下爲何要有這麼多個節點:
第一層:x,y再加bias,三個
第二層:每一個點須要四條線圍起來,加上bias,總共4*6+1=25個
第三層:一個節點處於該類的條件是在四條線的中間(交集),所以每四個點匯成一個點,24/4+1=7個
第四層:三分類問題,須要對每兩個區域求並集,所以須要6/2+1=4個設計
但這樣的解法,使用了3+25+7+4=39個節點,須要111個參數。這樣的系統很是複雜,對未知節點幾乎沒有任何擴展性。
仔細思考這個問題, 咱們可以經過更少的節點和層數,來簡化這個問題嘛?只要三條直線就能夠!節點數量大大減小。不只訓練效率更高,並且可擴展能力很強。對更復雜的例子,咱們又不是神仙,怎麼知道設計幾個隱層和多少個節點呢?
所謂超參數,就是模型以外的參數,在這個例子中,就是隱層的數量和節點的數量。一般來講,線性分類器(迴歸)只須要兩層便可,對於通常的分類問題,三層足夠。
一個三層的神經網絡,輸入和輸出節點的數量已經肯定,那如何肯定中間層(隱層)的節點數量呢?通常有幾個經驗:
如何表示一個神經網絡?網絡有m層,每層的節點分別爲nod
,節點最多的層,有m個節點,那麼咱們能夠將其表達爲一個矩陣W,規模爲m∗n,內部有些值是沒有定義的。
若是輸入和輸出是線性關係(或者是正相關),那麼想象咱們在調節一個參數時,當輸出過大,那就把輸入調小一些,反之調大一些,最後當輸出和咱們想要的很是接近時,訓練結束。這個就比如,在平面上,若是一個點被分配到了錯誤的輸出,就應該對直線平移和扭轉,減小該直線到這個點的距離,從而實現從新分區。
進一步地,若是向量的多個份量互相獨立,那麼方法也和上面的相似x1=>y
,分別調節x1和x2
的參數,最終讓結果接近,訓練結束。
而一個感知器結構可表示以下:
反思上面的過程,咱們其實是在衡量偏差,根據偏差來修改權重。
其幾何意義就是,偏差的偏導,等於在X位置上的值,乘以偏差,再乘以激勵函數的偏導。
因此,每次的權重矩陣W的修改,應當經過求偏差的偏導(梯度)來實現。比以前的直接經過偏差來調整,具有更好的適應性。
可是,這樣的梯度法,對於實際學習來講,效率仍是太慢,咱們須要更快的收斂方法。
更有趣的是,sigmoid求導以後,特別像高斯(正態)分佈,並且sigmoid求導很是容易。
這樣的一篇文章真是夠長了,本來還想再介紹一個神經網絡的Python實現,但是考慮到篇幅的限制,最終做罷。在下一期繼續介紹如何實現BP神經網絡和RNN(遞歸神經網絡)。