一:為什么需要神經網絡
(一)案例
為了很好的擬合數據,我們需要保留較多的相關參數,雖然可以使用正則化進行優化。但是無論是線性回歸還是邏輯回歸都有這樣一個缺點,即:當特征太多時,計算的負荷會非常大。
之前我們已經看到過,使用非線性的多項式項,能夠幫助我們建立更好的分類模型。假設我們有非常多的特征,例如大於100個變量。
我們希望用這100個特征來構建一個非線性的多項式模型,結果將是數量非常驚人的特征組合,即便我們只采用兩兩特征的組合:
我們也會有接近5000個組合而成的特征。
這對於一般的邏輯回歸來說需要計算的特征太多了。所以,當特征個數n很大時(許多實際的機器學習問題特征都是很大的),將這些高階多項式項數包含到特征里面,會導致特征空間急劇膨脹。
(二)案例二:計算機視覺
假設我們希望訓練一個模型來識別視覺對象(例如識別一張圖片上是否是一輛汽車),我們怎樣才能這么做呢?
假設使用機器學習算法,來訓練一個分類器,使它檢測一個圖像,來判斷圖像是否為一輛汽車。
我們取出這幅圖片中的一小部分,將其放大:
當人眼看到一輛汽車時,計算機實際上看到的卻是這個:一個數據矩陣,表示了像素強度值
因此,對於計算機視覺來說問題就變成了:根據這個像素點亮度矩陣,來告訴我們,這些數值代表一個汽車門把手。
具體而言,當用機器學習算法構造一個汽車識別器時,我們要做的就是提供一個帶標簽的樣本集
將這個樣本集輸入給學習算法,以訓練出一個分類器,然后我們進行測試,輸入一副新的圖片,讓分類器判定這是什么東西。理想情況下,分類器可以識別出這是一輛汽車。
(三) 引入非線性假設的必要性
從學習算法的訓練樣本中,挑出一些汽車圖片和一些非汽車圖片
讓我們從其中每幅圖片中挑出一組像素點,分別是上面的像素點1和像素點2的位置。
但上面依然是2500個像素點。因此特征向量的數量是N=2500,特征向量x就是所有像素強度的列表。
包括像素點1和像素點2的亮度等等,直到最后一個像素點的亮度。
如果是灰度圖片,那么每個像素點的值應該是0-255。如果是RGB圖像,那么n=7500
如果我們要通過包含所有的二次項特征,來學習得到非線性假設,那么這就是式子中的所有條件x_i*x_j約等於300萬個特征----計算成本過高
神經網絡:他在學習復雜的非線性假設上被證明是一種好得多的算法。即使你輸入特征空間或輸入的特征維數n很大也能輕松搞定。
二:神經網絡的表示---假設函數h(X)
運用神經網絡時,我們該如何表示我們的假設或模型
(一)神經元模型
神經元比喻模型:神經網絡是在模仿大腦中的神經元或者神經網絡時發明的。
因此,要解釋如何表示模型假設,我們先來看單個神經元在大腦中如何工作。
神經元是一個計算單元
1.是神經元有細胞主體
2.是神經元有一定數量的輸入神經,這些輸入神經叫做樹突。它們接收來自其他神經元的信息。
3.神經元有一條輸出神經,叫做軸突,這些輸出神經是用來給其他神經元傳遞信號或者傳送信息的
(二)如何表示假設---單個神經元
其中x_0被稱為偏置單元,總是為1。
θ是參數,也可以叫做模型的權重。
上圖是一個神經元。
(三)神經網絡-----一組神經元
x_i為輸入單元,同樣可以畫出x_0
a_j是神經元,這里有3個這樣的神經元。---也可以添加a_0為偏置單元
其中第3層神經元進行輸出:
總之:
第一層為輸入層,輸入特征x_i。
第二層為隱藏層(不止一個),在監督學習中,可以看到輸入,也可以看到正確的輸出,而隱藏層的值,在訓練集中是看不到的。
最后一層為輸出層,它輸出假設的最終計算結果
(四)神經網絡計算步驟
激活項(單元):由一個具體神經元計算並輸出的值
我們的神經網絡,被這些矩陣參數化。θ_j就是權重矩陣,它控制從某一層,比如說從第一層到第二層或者第二層到第三層的作用。
所以,對於上圖所示的模型,所表示的計算:
上面是第一個隱藏單元是按照上面進行計算它的值的。同樣第二三相同:
其中θ_1就是控制着從三個輸入單元到三個隱藏單元(還要包含一個偏置單元,所以實際是4個)的映射的參數矩陣。
注意:其中下標θ_ij表示的是:i同前面α下標一致,表示輸出位置。j為前面輸入位置。
最后在輸出層,我們還有一個單元(可以寫成),負責計算h(x):
(五)高效計算和一個向量化的實現方法
前向傳播相對於使用循環來編碼,利用向量化的方法會使得計算更為簡便。以上面的神經網絡為例,試着計算第二層的值:
這個計算h(x)的過程,就是前向傳播。這樣命名是因為我們從輸入層的激勵(激活項)開始,然后進行前向傳播給隱藏層並計算隱藏層的激勵,然后我們繼續前向傳播並計算輸出層的激勵。
這個從輸入層到隱藏層再到輸出層依次計算激勵的過程叫前向傳播。
我們剛剛得到了這一過程的向量化實現方法:
如果你使用右邊這些公式,實現它就會得到一個有效的計算h(x)的方法。
(六)神經網絡的作用和如何幫助我們學習非線性假設函數
為了更好了了解Neuron Networks的工作原理,我們先把左半部分遮住:
無數的邏輯回歸組成了神經網絡,神經網絡即為立體的logistic回歸。
其實神經網絡就像是邏輯回歸,但是他不是使用原本的x_1,x_2,x_3作為特征,而是使用a_1,a_2,a_3作為新的特征。
其中a_1,a_2,a_3他們是通過學習得到的函數輸入值:具體來說就是從第一層映射到第二層的函數,這個函數由其他參數θ^(1)決定。在神經網絡中,它沒有用輸入特征x1 x2 x3來訓練邏輯回歸,而是自己訓練邏輯回歸的輸入。
可以想象,如果在θ1中選擇不同的參數,有時可以學習到一些很有趣和復雜的特征,就可以得到一個更好的假設
比使用原始輸入x1 x2或x3時得到的假設更好,你也可以選擇多項式項x1 x2 x3等作為輸入項。
但這個算法可以靈活地快速學習任意的特征項。
把這些a1 a2 a3輸入這個最后的單元。
實際上它是邏輯回歸。
(七)其他神經網絡結構
(八)對比邏輯回歸和線性回歸
我們可以把a_1,a_2,a_3看成更為高級的特征值,也就是x_1,x_2,x_3的進化體,並且它們是由θ與x決定的,因為是梯度下降的,所以a是變化的,並且變得越來越厲害,所以這些更高級的特征值遠比僅僅將x次方作為特征值更厲害,也能更好的預測新數據。
這就是神經網絡相比於邏輯回歸和線性回歸的優勢。
從本質上講,神經網絡能夠通過學習得出其自身的一系列特征。
在普通的邏輯回歸中,我們被限制為使用數據中的原始特征x_1,x_2,...,x_n,我們雖然可以使用一些二項式項來組合這些特征,但是我們仍然受到這些原始特征的限制。
在神經網絡中,原始特征只是輸入層,在我們上面三層的神經網絡例子中,第三層也就是輸出層做出的預測利用的是第二層的特征,而非輸入層中的原始特征,我們可以認為第二層中的特征是神經網絡通過學習后自己得出的一系列用於預測輸出變量的新特征。
三:神經網絡是如何計算復雜的非線性函數的輸入?(1)---單層神經網絡
了解為什么神經網絡可以用來學習復雜的非線性假設。
(一)案例一 (異或)---引出and
我們有x_1,x_2兩個輸入特征(都是二進制的):
在這個例子中,只畫出了兩個正樣本和兩個負樣本。
但你可以認為這是一個更復雜的機器學習問題的簡化版本:
比起后面這種復雜的例子,左邊的例子更容易說明問題。
我們可以構建一個神經網絡來擬合這樣的訓練集。
(二)案例二---and運算
我們怎樣得到一個具有單個神經元的神經網絡,來計算這個邏輯與函數?
1.我們需要在這里加上一個偏置單元(+1單元)
2.需要對神經網絡中的權重(參數)進行賦值
得到假設函數:
查看sigmoid函數值:
(三)案例三---OR
(三)案例四---NOT
四:神經網絡是如何計算復雜的非線性函數的輸入?(2)---多層神經網絡
(一)異或
這個神經網絡,有一個隱藏層和一個輸出層,最后會得到一個非線性的決策邊界。用來計算XNOR函數
五:利用神經網絡解決多類別分類問題
在神經網絡中實現多類別分類,采用的方法本質上是一對多的擴展。
假設有一個計算機視覺的例子,我們不只要識別出圖中的汽車,還要識別出行人、摩托車、貨車。
我們要做的就是建立一個有四個輸出單元的神經網絡。
輸出變成了一個四維向量。
輸入向量x有三個維度,兩個中間層,輸出層4個神經元分別用來表示4類,也就是每一個數據在輸出層都會出現[a b c d]T,且a,b,c,d中僅有一個為1,表示當前類。下面是該神經網絡的可能結構示例:
神經網絡算法的輸出結果為四種可能情形之一: