[机器学习笔记]Note6--神经网络:表达
繼續是機器學習課程的筆記,這節課會介紹神經網絡的內容。
非線性假設
在之前的課程中,我們看到使用非線性的多項式能夠幫助我們建立更好的分類模型。假設我們有非常多的特征,例如100個變量,我們希望用這100個特征來構建一個非線性的多項式模型,結果將是數量非常驚人的特征組合,即便我們只采用兩兩特征的組合(x1x2+x1x3+x1x4+…+x2x3+x2x4+…+x99x100),那么我們也會有近5000個組合而成的特征。這對于一般的邏輯回歸來說需要計算的特征太多了。
當我們希望訓練一個模型來識別視覺對象,比如識別一張圖片上是否是一輛汽車,一種實現方法是利用許多汽車和非汽車的圖片,然后利用圖片上一個個像素的值(飽和度或亮度)來作為特征。這也是因為在計算機中,一張圖片其實就一個包含所有像素值的矩陣。
如果我們選擇的是灰度圖片,每個像素則只有一個值,而非RGB值,我們可以選擇圖片上兩個不同位置的兩個像素,然后訓練一個邏輯回歸算法利用這兩個像素的值來判斷圖片上是否是汽車。
但假設我們采用的是50*50像素的小圖片,并且我們將所有的像素視為特征,那么就會有2500個特征,而如果我們進一步將兩兩特征組合構成一個多項式模型,則會有約250022,即接近三百萬個特征。普通的邏輯回歸模型,不能有效地處理那么多的特征,這個時候就需要神經網絡。
神經網絡介紹
神經網絡算法源自于對大腦的模仿。神經網絡算法在八十到九十年代被廣為使用過,但是之后由于其計算量大的原因逐漸減少了使用,而最近,從2006年開始,到后來2012年ImageNet比賽中CNN取得非常大的提升效果,現在神經網絡變得非常流行,準確地說是深度神經網絡。原因也是因為神經網絡是非常依賴計算能力的,而要實現深度神經網絡,也就是神經網絡的層數更多,需要的計算量更大,但是現在隨著計算機硬件的提高,還有就是數據量的增加,使得神經網絡又開始流行起來了。
神經網絡算法的目的是發現一個能模型人類大腦學習能力的算法。研究表明,如果我們將視覺信號傳導給大腦中負責其他感覺的大腦皮層處,則這些大腦組織將能學會如何處理視覺信號。
模型表達
為了構建神經網絡模型,我們會參考大腦中的神經網絡。每個神經元可以被認為是一個處理單元/神經核(processing unit/Nucleus),它含有許多輸入/樹突(input/Dendrite),并且有一個輸出/軸突(output/Axon)。神經網絡是大量神經元相互鏈接并通過電脈沖來交流的一個網絡,如下圖所示:
神經網絡是模型就是建立在很多神經元之上的,每個神經元又是一個個學習模型。這些神經元(也叫激活單元,activation unit)采納一些特征作為輸入,并且根據本身的模型提供一個輸出。下圖是一個以邏輯回歸模型作為自身學習模型的神經元示例,在神經網絡中,參數又可被稱為權重(weight)。
上圖中輸入是有4個特征,包括人工加入的x0=1,以及x1,x2,x3,其輸出就是假設hθ(x)=11+e?θTx,也就是之前邏輯回歸中的假設,而黑色的直線表示的就是每種特征的權重值。此外,x0也被稱為偏置單元(bias unit),中間紅色的圈表示的就是使用的激活函數,這里是使用S形函數,也就是g(z)=11+e?z。
由上圖還可以知道,其實神經網絡模型是許多邏輯單元按照不同層級組織起來的網絡,每一層的輸出變量都是下一層的輸入變量。
下圖是一個3層的神經網絡,第一層是輸入層,最后一層是輸出層,中間一層是隱藏層。我們為每一層都增加一個偏置單元。
下面引入一些標記來幫助描述模型:
- a(j)i 代表第j層的第i個激活單元
- θ(j) 代表從第j層映射到第j+1層時的權重的矩陣,例如θ(1)代表從第一層到第二層的權重的矩陣,其尺寸為:**以第j層的激活單元數量為行數,第j+1層的激活單元數為列數的矩陣,即Sj+1?(Sj+1)。所以如上圖的神經網站中θ(1)的尺寸是3*4。
對于上圖所示的模型,激活單元和輸出分別表達為:
正向傳播
相對于使用循環來編碼,利用向量化的方法會使得計算更為簡便。以上面的神經網絡為例,試著計算第二層的值:
我們令z(2)=θ(1)x,則a(2)=g(z(2)),計算后添加a(2)0=1,計算輸出的值:
我們令z(2)=θ(1)x,則a(2)=g(z(2)),計算后添加a(2)0=1,計算輸出的值:
![此處輸入圖片的描述][5]
令z(3)=θ(2)a(2),則hθ(x)=a(3)=g(z(3)).
前向傳播是一個從輸入層到隱藏層再到輸出層依次計算激勵,即激活函數a的過程。
對神經網絡的理解
本質上講,神經網絡能夠通過學習得出其自身的一系列特征。在普通的邏輯回歸中,我們被限制為使用數據中的原始特征x1,x2,…,xn,我們雖然可以使用一些二項式項來組合這些特征,但是我們仍然受到這些原始特征的限制。而在神經網絡中,原始特征只是輸入層,在上面三層的神經網絡例子中,第三層也就是輸出層所做出的預測是利用第二層的特征,而非輸入層的原始特征,我們可以認為第二層中的特征是神經網絡通過學習后自己得出的一系列用于預測輸出變量的新特征。
神經網絡示例:二元邏輯運算符
當輸入特征是布爾值(0或1)時,我們可以用一個單一的激活層作為二元邏輯運算符,為了表示不同的運算符,我們只需要選擇不同的權重即可。
下圖的神經元(三個權重分別為-30,20,20)可以被視為作用同于邏輯與(AND):
其表達式是hθ(x)=g(?30+20x1+20x2),其可能的輸出如下圖所示:
同理,下面的神經元,三個權重分別是-10,20,20,可以被視為作用等同于邏輯或(OR)
下面的神經元,兩個權重分別為-10,20,可以視作邏輯非(NOT)
上面是一些基本的邏輯運算符,我們還可以用神經元來組成更為復雜的神經網絡以實現更復雜的運算。例如實現XNOR,即異或,即只有輸入的兩個值都相同,均為1或0時,輸出才是1,也就是XNOR=(x1?AND?x2)OR?((NOT?x1)?AND?(NOT?x2))
其實現如下所示:
首先分別列出三個部分的神經元的實現,
然后組合起來就得到最終的結果:
我們就實現了一個XNOR運算符功能的神經網絡。
多類分類
假如我們要訓練一個神經網絡算法來識別路人、汽車、摩托車和卡車,那么在輸出層我們應該有4個值,例如,第一個值為1或0用于預測是否是行人,第二個值用來判斷是否為汽車。
下面是該神經網絡的可能結構示例:
那么神經網絡算法的輸出結果是下列四種可能情形之一:
小結
本節課是介紹了神經網絡的基礎知識,包括產生的背景,模型表達以及正向傳播的內容。暫時還沒有涉及到更深層次的知識。總結
以上是生活随笔為你收集整理的[机器学习笔记]Note6--神经网络:表达的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: Android文字图像识别并翻译的简单实
- 下一篇: 后端:414 Request-URI T