神經網絡概述
神經元模型
以上就是經典的“M-P神經元模型”。在這個模型中,神經元接收來自n個其他神經元傳遞過來的輸入信號,這些輸入信號通過帶權重的連接進行傳遞,神經元接收到的總輸入值將於神經元的閾值進行比較,然後通過“激活函數”處理以產生神經元的輸出。
感知機
感知機(Perceptron)是由兩層神經元組成,輸入層接收外界輸出信號後傳遞給輸出層,輸出層是M-P神經元,也稱爲“閾值邏輯單元”。
感知機能夠很容易的實現邏輯與、或、非運算,但是由於其只有輸出層神經元進行激活函數處理,即只擁有一層功能神經元,所以學習能力非常有限。此時就產生了多層感知機(MLP)來處理這些更加複雜的運算。
對於以上的感知機,我們可以建立模型:
其中激活函數 act 可以使用{sign, sigmoid, tanh}之一,個人感覺這種建模方式就是將每個神經元的輸入作爲笛卡爾座標系中的x軸的值,對應的輸出值作爲y軸上的值,通過這些已知的訓練集合中的值來進行擬合,根據訓練集在座標系中的分佈特徵來選擇不同的激活函數,也即是擬合方式的不同,就比如下面的線性迴歸,邏輯迴歸以及softmax迴歸。
- 激活函數使用符號函數 sign ,可求解損失函數最小化問題,通過梯度下降確定參數
- 激活函數若使用一次多項式進行擬合,就成爲了線性迴歸,但是一般不用此種迴歸方法來擬合。
- 激活函數使用 sigmoid (或者 tanh ),即解決的問題爲二分問題,則分類器事實上成爲Logistic Regression,可通過梯度上升極大化似然函數,或者梯度下降極小化損失函數,來確定參數。
- 如果需要多分類,則事實上成爲Softmax Regression。
- 如要需要分離超平面恰好位於正例和負例的正中央,則成爲支持向量機(SVM)。
多層感知機
感知機存在的問題是,對線性可分數據工作良好,如果設定迭代次數上限,則也能一定程度上處理近似線性可分數據。但是對於非線性可分的數據,比如最簡單的異或問題,感知器就無能爲力了。這時候就需要引入多層感知器這個大殺器。
多層感知器的思路是,儘管原始數據是非線性可分的,但是可以通過某種方法將其映射到一個線性可分的高維空間中,從而使用線性分類器完成分類。下面卷積神經網絡概述神經網絡的大體結構圖中,從X到O這幾層,正展示了多層感知器的一個典型結構,即輸入層-隱層-輸出層。
輸入層-隱層
是一個全連接的網絡,即每個輸入節點都連接到所有的隱層節點上。更詳細地說,可以把輸入層視爲一個向量 x ,而隱層節點 j有一個權值向量
也就是每個隱層節點都相當於一個感知器。每個隱層節點產生一個輸出,那麼隱層所有節點的輸出就成爲一個向量,即
若輸入層有
隱層-輸出層
可以視爲級聯在隱層上的一個感知器。若爲二分類,則常用Logistic Regression;若爲多分類,則常用Softmax Regression。
解決非線性最優問題的常見算法
爲討論下面幾種算法,採用最簡單的線性迴歸作爲例子。相關的參數如下(一般機器學習中都相關問題都是採用下列的參數):
(此處注意上面推出的這個迭代式,下面要與邏輯迴歸中推出的迭代式進行比較)
(3)隨機梯度下降法(stochastic gradient descent,SGD)
SGD是最速梯度下降法的變種。
使用最速梯度下降法,將進行N次迭代,直到目標函數收斂,或者到達某個既定的收斂界限。每次迭代都將對m個樣本進行計算,計算量大。
爲了簡便計算,SGD每次迭代僅對一個樣本計算梯度,直到收斂。僞代碼如下(以下僅爲一個loop,實際上可以有多個這樣的loop,直到收斂):
1、由於SGD每次迭代只使用一個訓練樣本,因此這種方法也可用作online learning。
2、每次只使用一個樣本迭代,若遇上噪聲則容易陷入局部最優解。
(4)牛頓法
(5)高斯牛頓法
以上兩種方法的詳細數學推導http://blog.csdn.net/jinshengtao/article/details/51615162
線性迴歸和邏輯迴歸
線性迴歸的一個具體實現可以從上面解決非線性最優問題的常見算法的例子裏學習,下面首先給出一個對於線性迴歸的一個可能的解釋。
Probabilistic Interpretation
局部加權迴歸(Locally weight regression,Loess/Lowess)
邏輯迴歸(Logistic Regression)
誤差逆傳播(BP)算法
通過以上的介紹我們弄清楚了神經網絡的結構,常見的神經網絡有多層前饋網絡(每層神經元與下一層神經元全連接,神經元之間不存在同層連接,也不存在跨層連接),下面就是介紹訓練類似的多層網絡(即估計權重和閾值這些參數)的方法了。對於一般的問題,可以通過求解損失函數極小化問題來進行參數估計。但是對於多層感知器中的隱層,因爲無法直接得到其輸出值,當然不能夠直接使用到其損失了。這時,就需要將損失從頂層反向傳播(Back Propagate)到隱層,來完成參數估計的目標。
首先,我們給出下面的BP網絡(用BP算法訓練的多層前饋神經網絡):
給定訓練集
具體推導過程如下兩張圖片所示:
最後補充幾個常用的激活函數的導數結果:
將以上的數學推導過程轉化成僞代碼爲:
卷積神經網絡概述
卷積神經網絡沿用了普通的神經元網絡即多層感知器的結構,是一個前饋網絡(網絡拓撲結構上不存在環或者回路)。以應用於圖像領域的CNN爲例,大體結構如下圖所示:
很明顯,這個典型的結構分爲四個大層次:
- 輸入圖像I。爲了減小複雜度,一般使用灰度圖像。當然,也可以使用RGB彩色圖像,此時輸入圖像有三張,分別爲RGB分量。輸入圖像一般需要歸一化,如果使用sigmoid激活函數,則歸一化到[0, 1],如果使用tanh激活函數,則歸一化到[-1, 1]。
- 多個卷積(C)-下采樣(S)層。將上一層的輸出與本層權重W做卷積得到各個C層,然後下采樣(池化)得到各個S層。這些層的輸出稱爲Feature Map。
- 光柵化(X)。是爲了與傳統的多層感知器全連接。即將上一層的所有Feature Map的每個像素依次展開,排成一列。
- 傳統的多層感知器(N&O)。最後的分類器一般使用Softmax Regression(針對多分類問題),如果是二分類,當然也可以使用Logistic Regression。
根據上面的基本結構,我們就逐層進行分析。
卷積層和下采樣層
以上介紹的多層感知機存在一定的問題,它是一個全連接的網絡,因此在輸入比較大的時候,權值會特別多。比如一個有1000個節點的隱層,連接到一個1000×1000的圖像上,那麼就需要 10^9 個權值參數(外加1000個偏置參數)!這個問題,一方面限制了每層能夠容納的最大神經元數目,另一方面也限制了多層感知器的層數即深度。
多層感知器的另一個問題是梯度發散。一般情況下,我們需要把輸入歸一化,而每個神經元的輸出在激活函數的作用下也是歸一化的;另外,有效的參數其絕對值也一般是小於1的;這樣,在BP過程中,多個小於1的數連乘,得到的會是更小的值。也就是說,在深度增加的情況下,從後傳播到前邊的殘差會越來越小,甚至對更新權值起不到幫助,從而失去訓練效果,使得前邊層的參數趨於隨機化(補充一下,其實隨機參數也是能一定程度上捕捉到圖像邊緣的)。
有關神經網絡訓練過程中梯度的有關問題可以詳細見:
https://hit-scir.gitbooks.io/neural-networks-and-deep-learning-zh_cn/content/chap5/c5s0.html
既然多層感知器存在問題,那麼卷積神經網絡的出現,就是爲了解決它的問題。卷積神經網絡的核心出發點有三個。
- 局部感受野。形象地說,就是模仿你的眼睛,想想看,你在看東西的時候,目光是聚焦在一個相對很小的局部的吧?嚴格一些說,普通的多層感知器中,隱層節點會全連接到一個圖像的每個像素點上,而在卷積神經網絡中,每個隱層節點只連接到圖像某個足夠小局部的像素點上,從而大大減少需要訓練的權值參數。舉個栗子,依舊是1000×1000的圖像,使用10×10的感受野,那麼每個神經元只需要100個權值參數;不幸的是,由於需要將輸入圖像掃描一遍,共需要991×991個神經元!參數數目減少了一個數量級,不過還是太多。
- 權值共享。形象地說,就如同你的某個神經中樞中的神經細胞,它們的結構、功能是相同的,甚至是可以互相替代的。也就是,在卷積神經網中,同一個卷積核內,所有的神經元的權值是相同的,從而大大減少需要訓練的參數。繼續上一個栗子,雖然需要991×991個神經元,但是它們的權值是共享的呀,所以還是只需要100個權值參數,以及1個偏置參數。從MLP的 10^9 到這裏的100,就是這麼狠!作爲補充,在CNN中的每個隱藏,一般會有多個卷積核。
- 池化。形象地說,你先隨便看向遠方,然後閉上眼睛,你仍然記得看到了些什麼,但是你能完全回憶起你剛剛看到的每一個細節嗎?同樣,在卷積神經網絡中,沒有必要一定就要對原圖像做處理,而是可以使用某種“壓縮”方法,這就是池化,也就是每次將原圖像卷積後,都通過一個下采樣的過程,來減小圖像的規模。以最大池化(Max Pooling)爲例,1000×1000的圖像經過10×10的卷積核卷積後,得到的是991×991的特徵圖,然後使用2×2的池化規模,即每4個點組成的小方塊中,取最大的一個作爲輸出,最終得到的是496×496大小的特徵圖。
更加生動形象的對於這三個問題的解釋可以參考以下的文章:
http://blog.csdn.net/stdcoutzyx/article/details/41596663/
現在來看,需要訓練參數過多的問題已經完美解決。關於梯度發散,因爲多個神經元共享權值,因此它們也會對同一個權值進行修正,積少成多,積少成多,積少成多,從而一定程度上解決梯度發散的問題!
接下來有關卷積的問題可以參考下面這兩篇文章:
卷積神經網絡全面解析(之前的很多內容也是參考這篇文章裏面的)
以及一些有關圖像語義分割的反捲積的知識:圖像卷積與反捲積
Softmax Regression
指數分佈族(The Exponential Family)
如果一個分佈可以用如下公式表達,那麼這個分佈就屬於指數分佈族:
公式中y是隨機變量;
η稱爲分佈的自然參數(natural parameter),也稱爲標準參數(canonical parameter);
T(y)稱爲充分統計量,通常情況下T(y)=y;
a(η)稱爲對數分割函數(log partition function),本質上是一個歸一化常數,確保概率和爲1。
當T(y)被固定時,a(η)、b(y)就定義了一個以η爲參數的一個指數分佈。我們變化η就得到不同的概率分佈。
在
下面是幾個小例子:
廣義線性模型(GLM)
在分類和迴歸問題中,我們通過構建一個關於x的模型來預測y。這種問題可以利用廣義線性模型(Generalized linear models,GMLs)來解決。構建廣義線性模型我們基於三個假設,也可以理解爲我們基於三個設計決策,這三個決策幫助我們構建廣義線性模型:
y|x;θ∽ExponentialFamily(η) ,假設y|x;θ 滿足一個以爲參數的指數分佈。例如,給定了輸入x和參數θ,那麼可以構建y關於η的表達式。- 給定x,我們的目標是要確定T(y),即
h(x)=E[T(y)|x] 。大多數情況下T(y)=y ,那麼我們實際上要確定的是。即給定x,假設我們的目標函數是h(x)=E[T(y)|x] 。 - 假設自然參數η和x是線性相關,即假設:
η=θTx 。
相關問題可以參考:
http://www.cnblogs.com/BYRans/p/4735409.html
多分類問題
多分類問題符合多項分佈。有許多算法可用於解決多分類問題,像決策樹、樸素貝葉斯等。這篇文章主要講解多分類算法中的Softmax迴歸(Softmax Regression)
推導思路爲:首先證明多項分佈屬於指數分佈族,這樣就可以使用廣義線性模型來擬合這個多項分佈,由廣義線性模型推導出的目標函數
上面的推導過程是參考:http://www.cnblogs.com/BYRans/p/4905420.html這篇博文的,有關於Softmax迴歸的更多問題可以看:
Softmax迴歸
至此,整個卷積神經網絡的相關知識就總結完了,其中參考了很多大牛們的博客,寫這篇博客也是爲了自己總結梳理相關的知識,本人的能力有限,如有錯誤的地方還請大家留言指正。