咱們以前學到的,不管是線性迴歸仍是邏輯迴歸都有一個缺點,當特徵太多時,計算負荷會很是的大。算法
以下:網絡
只有x1和x2,但運用屢次項進行預測時,咱們的方程能夠很好的預測。使用非線性的多項式可以幫助咱們創建更好的分類模型。學習
例如咱們有不少的特徵,100個變量,用這100個特徵構建一個非線性的多項式模型,結果將是很是大的特徵組合,即便咱們只纔有兩兩特徵的組合(x1x2+x1x3+x1x4+...+x2x3+x2x4+...x99x100),也會有解決5000個組合而成的特徵,對於通常的邏輯迴歸特徵是太多了。ui
例如:spa
一張圖片,即便是50*50的圖片,也有解決2500個特徵,若是進行兩兩特徵組合構成一個多項式模型,就約有25002/2的特徵組合(接近3百萬個),在大一點的圖片特徵就更多了,計算負荷會很是的大。圖片
神經網絡興起於二十世紀八九十年代,應用得很是普遍,但因爲各類緣由,在90年代的後期應用逐漸減小。最近,神經網絡又東山再起了。input
其中一個緣由是神經網絡是計算量偏大的算法,而如今計算機的運行速度變快不少,才足以真正運行起大規模的神經網絡。it
例如咱們的聽覺和視覺:io
還有各類各樣的例子:class
在人的大腦中,每個神經元均可以被認爲是一個處理單元/神經核(processing unit/ Nucleus),它含有許多輸入/樹突(input/Dendrite),而且有一個輸出/軸突(output/Axon)
神經網絡是大量神經元相互鏈接並經過電脈來交流的一個網絡。
神經網絡模型創建在不少神經元之上,每個神經元又是一個個學習模型。這些神經元(也叫激活單元,activation unit)採納一些特徵做爲輸出,而且根據自己的模型提供一個輸
出。下圖是一個以邏輯迴歸模型做爲自身學習模型的神經元示例,在神經網絡中,參數又可被成爲權重(weight)。
神經網絡也能夠有隱藏層:
其中x1,x2,x3是輸入單元,咱們把原始數據輸入給它們,a1,a2,a3是中間單元,它們負責將數據進行處理,而後呈遞到下一層。最後是輸出單元,它負責計算h(x).
符號定義:
每一層的輸出變量都是下一層的輸入變量,第一層爲輸入層,最後一層爲輸出層,中間的爲隱藏層,每一層都有一個誤差單元。
這樣經過計算最終就能夠獲得hθ(x)的值。通常狀況下每一層都要多加入一個變量。
咱們把這樣從左往右的算法稱爲前向傳播算法(FORWARD PROPAGATION)
利用向量化的方法會使得計算更爲簡便。以上面的神經網絡爲例,計算第二層的值:
咱們令z(2) = θ(1)x,則a(2) = g(z(2)),計算後添加a(2)0 = 1。
一樣令z(2) =θ(1)a(2) ,則hθ(x) = a(3) = g(z(3))。
多層的也相似:
由上一層輸出值看成下一層輸入值進行計算獲得輸出值給下一層。
以XOR(異或)爲例:
當x1 = x2 時 y = 1 ,或者 y = 0
上面是「與」(AND)運算,輸入層由兩個變量x1和x2組成,再加上一個1,權重分別是-30,20,20。
那麼hθ(x) = a1 = g(z(1)) = g(-30+20x1+20x2),將x1,x2的值代入進去,獲得的值正好和「與」運算相符
再好比「或」(OR)運算,權重能夠設爲-10,20,20這三個,得出的結果會和「或」運算相符。
以前介紹了「或」和「與」,下面介紹下「非」運算,這個更簡單些,只須要一個變量。
有了「或」、「與」和「非」,如今就能夠計算「同或門」運算了。
因爲x1 XNOR x2 = (x1 and x2 ) or ((not x1) and (not x2))
因此咱們能夠先計算 (x1 and x2 ) 爲 a1,(not x1) and (not x2) 爲 a2. 而後在計算a1 or a2 獲得答案
過程以下:
有時候咱們有不止兩種分類,也就是y = 2, 3, 4, 5..... 那麼這種狀況怎麼辦呢?
若是咱們要訓練一個神經網絡算法來識別路人、汽車、摩托車和卡車,在輸出層咱們應該有 4 個值。
例如,第一個值爲 1 或 0 用於預測是不是行人,第二個值用於判斷是否爲汽車。
那麼[1; 0; 0; 0]能夠表示路人,[0; 1; 0; 0] 能夠表示汽車 等等。
輸入狀況就有四種了: