上節課我們主要對深度學習(Deep Learning)的概念做了簡要的概述。我們先從房價預測的例子出發,建立了标準的神經網絡(Neural Network)模型結構。然後從監督式學習入手,介紹了Standard NN,CNN和RNN三種不同的神經網絡模型。接着介紹了兩種不同類型的資料集:Structured Data和Unstructured Data。最後,我們解釋了近些年來深度學習性能優于傳統機器學習的原因,歸結為三個因素:Data,Computation和Algorithms。本節課,我們将開始介紹神經網絡的基礎:邏輯回歸(Logistic Regression)。通過對邏輯回歸模型結構的分析,為我們後面學習神經網絡模型打下基礎。
1Binary Classification
我們知道邏輯回歸模型一般用來解決二分類(Binary Classification)問題。二分類就是輸出y隻有{0,1}兩個離散值(也有{-1,1}的情況)。我們以一個圖像識别問題為例,判斷圖檔中是否有貓存在,0代表noncat,1代表cat。主要是通過這個例子簡要介紹神經網絡模型中一些标準化的、有效率的處理方法和notations。
如上圖所示,這是一個典型的二分類問題。一般來說,彩色圖檔包含RGB三個通道。例如該cat圖檔的尺寸為(64,64,3)。在神經網絡模型中,我們首先要将圖檔輸入x(次元是(64,64,3))轉化為一維的特征向量(feature vector)。方法是每個通道一行一行取,再連接配接起來。由于64x64x3=12288,則轉化後的輸入特征向量次元為(12288,1)。此特征向量x是列向量,次元一般記為nx。
如果訓練樣本共有m張圖檔,那麼整個訓練樣本X組成了矩陣,次元是(nx,m)。注意,這裡矩陣X的行nx代表了每個樣本x(i)特征個數,列m代表了樣本個數。這裡,Andrew解釋了X的次元之是以是(nx,m)而不是(m,nx)的原因是為了之後矩陣運算的友善。算是Andrew給我們的一個小小的經驗吧。而所有訓練樣本的輸出Y也組成了一維的行向量,寫成矩陣的形式後,它的次元就是(1,m)。
2Logistic Regression
接下來我們就來介紹如何使用邏輯回歸來解決二分類問題。邏輯回歸中,預測值h^=P(y=1 | x)表示為1的機率,取值範圍在[0,1]之間。這是其與二分類模型不同的地方。使用線性模型,引入參數w和b。權重w的次元是(nx,1),b是一個常數項。這樣,邏輯回歸的線性預測輸出可以寫成:
值得注意的是,很多其它機器學習資料中,可能把常數b當做w0處理,并引入x0=1。這樣從次元上來看,x和w都會增加一維。但在本課程中,為了簡化計算和便于了解,Andrew建議還是使用上式這種形式将w和b分開比較好。
上式的線性輸出區間為整個實數範圍,而邏輯回歸要求輸出範圍在[0,1]之間,是以還需要對上式的線性函數輸出進行處理。方法是引入Sigmoid函數,讓輸出限定在[0,1]之間。這樣,邏輯回歸的預測輸出就可以完整寫成:
Sigmoid函數是一種非線性的S型函數,輸出被限定在[0,1]之間,通常被用在神經網絡中當作激活函數(Activation function)使用。Sigmoid函數的表達式和曲線如下所示:
從Sigmoid函數曲線可以看出,當z值很大時,函數值趨向于1;當z值很小時,函數值趨向于0。且當z=0時,函數值為0.5。還有一點值得注意的是,Sigmoid函數的一階導數可以用其自身表示:
這樣,通過Sigmoid函數,就能夠将邏輯回歸的輸出限定在[0,1]之間了。
3Logistic Regression Cost Function
邏輯回歸中,w和b都是未知參數,需要反複訓練優化得到。是以,我們需要定義一個cost function,包含了參數w和b。通過優化cost function,當cost function取值最小時,得到對應的w和b。
如何定義所有m個樣本的cost function呢?先從單個樣本出發,我們希望該樣本的預測值y^與真實值越相似越好。我們把單個樣本的cost function用Loss function來表示,根據以往經驗,如果使用平方錯誤(squared error)來衡量,如下所示:
但是,對于邏輯回歸,我們一般不使用平方錯誤來作為Loss function。原因是這種Loss function一般是non-convex的。non-convex函數在使用梯度下降算法時,容易得到局部最小值(local minumum),即局部最優化。而我們最優化的目标是計算得到全局最優化(Global optimization)。是以,我們一般選擇的Loss function應該是convex的。
Loss function的原則和目的就是要衡量預測輸出y^與真實樣本輸出y的接近程度。平方錯誤其實也可以,隻是它是non-convex的,不利于使用梯度下降算法來進行全局優化。是以,我們可以建構另外一種Loss function,且是convex的,如下所示:
我們來分析一下這個Loss function,它是衡量錯誤大小的,Loss function越小越好。
是以,這個Loss function能夠很好地反映預測輸出y^與真實樣本輸出y的接近程度,越接近的話,其Loss function值越小。而且這個函數是convex的。上面我們隻是簡要地分析為什麼要使用這個Loss function,後面的課程中,我們将詳細推導該Loss function是如何得到的。并不是憑空捏造的哦。。。
還要提一點的是,上面介紹的Loss function是針對單個樣本的。那對于m個樣本,我們定義Cost function,Cost function是m個樣本的Loss function的平均值,反映了m個樣本的預測輸出y^與真實樣本輸出y的平均接近程度。Cost function可表示為:
Cost function已經推導出來了,Cost function是關于待求系數w和b的函數。我們的目标就是疊代計算出最佳的w和b值,最小化Cost function,讓Cost function盡可能地接近于零。
其實邏輯回歸問題可以看成是一個簡單的神經網絡,隻包含一個神經元。這也是我們這裡先介紹邏輯回歸的原因。
4Gradient Descent
我們已經掌握了Cost function的表達式,接下來将使用梯度下降(Gradient Descent)算法來計算出合适的w和b值,進而最小化m個訓練樣本的Cost function,即J(w,b)。
由于J(w,b)是convex function,梯度下降算法是先随機選擇一組參數w和b值,然後每次疊代的過程中分别沿着w和b的梯度(偏導數)的反方向前進一小步,不斷修正w和b。每次疊代更新w和b後,都能讓J(w,b)更接近全局最小值。梯度下降的過程如下圖所示。
梯度下降算法每次疊代更新,w和b的修正表達式為:
梯度下降算法能夠保證每次疊代w和b都能向着J(w,b)全局最小化的方向進行。其數學原理主要是運用泰勒一階展開來證明的,可以參考我的另一篇部落格中的Gradient Descent有提到如何推導:
https://mp.weixin.qq.com/s?__biz=MzIwOTc2MTUyMg==&mid=2247483791&idx=1&sn=b632090d86a07fdc42a793dfde1002a4&chksm=976fa412a0182d040076d37bef5ca92028a749794590062efb5ebc32014ad558bd6ea8a2bcdb&scene=21#wechat_redirect台灣大學林軒田機器學習基石課程學習筆記10 – Logistic Regression
5
Derivatives
這一部分的内容非常簡單,Andrew主要是給對微積分、求導數不太清楚的同學介紹的。梯度或者導數一定程度上可以看成是斜率。關于求導數的方法這裡就不再贅述了。
6More Derivative Examples
Andrew給出了更加複雜的求導數的例子,略。
7Computation graph
整個神經網絡的訓練過程實際上包含了兩個過程:正向傳播(Forward Propagation)和反向傳播(Back Propagation)。正向傳播是從輸入到輸出,由神經網絡計算得到預測輸出的過程;反向傳播是從輸出到輸入,對參數w和b計算梯度的過程。下面,我們用計算圖(Computation graph)的形式來了解這兩個過程。
舉個簡單的例子,假如Cost function為J(a,b,c)=3(a+bc),包含a,b,c三個變量。我們用u表示bc,v表示a+u,則J=3v。它的計算圖可以寫成如下圖所示:
令a=5,b=3,c=2,則u=bc=6,v=a+u=11,J=3v=33。計算圖中,這種從左到右,從輸入到輸出的過程就對應着神經網絡或者邏輯回歸中輸入與權重經過運算計算得到Cost function的正向過程。
8Derivatives with a Computation Graph
上一部分介紹的是計算圖的正向傳播(Forward Propagation),下面我們來介紹其反向傳播(Back Propagation),即計算輸出對輸入的偏導數。
還是上個計算圖的例子,輸入參數有3個,分别是a,b,c。
首先計算J對參數a的偏導數。從計算圖上來看,從右到左,J是v的函數,v是a的函數。則利用求導技巧,可以得到:
9Logistic Regression Gradient Descent
現在,我們将對邏輯回歸進行梯度計算。對單個樣本而言,邏輯回歸Loss function表達式如下:
首先,該邏輯回歸的正向傳播過程非常簡單。根據上述公式,例如輸入樣本x有兩個特征(x1,x2),相應的權重w次元也是2,即(w1,w2)。則z=w1x1+w2x2+b,最後的Loss function如下所示:
10Gradient descent on m examples
上一部分講的是對單個樣本求偏導和梯度下降。如果有m個樣本,其Cost function表達式如下:
這樣,每次疊代中w和b的梯度有m個訓練樣本計算平均值得到。其算法流程圖如下所示
經過每次疊代後,根據梯度下降算法,w和b都進行更新:
這樣經過n次疊代後,整個梯度下降算法就完成了。
值得一提的是,在上述的梯度下降算法中,我們是利用for循環對每個樣本進行dw1,dw2和db的累加計算最後再求平均數的。在深度學習中,樣本數量m通常很大,使用for循環會讓神經網絡程式運作得很慢。是以,我們應該盡量避免使用for循環操作,而使用矩陣運算,能夠大大提高程式運作速度。關于vectorization的内容我們放在下次筆記中再說。
11Summary
本節課的内容比較簡單,主要介紹了神經網絡的基礎——邏輯回歸。首先,我們介紹了二分類問題,以圖檔為例,将多元輸入x轉化為feature vector,輸出y隻有{0,1}兩個離散值。接着,我們介紹了邏輯回歸及其對應的Cost function形式。然後,我們介紹了梯度下降算法,并使用計算圖的方式來講述神經網絡的正向傳播和反向傳播兩個過程。最後,我們在邏輯回歸中使用梯度下降算法,總結出最優化參數w和b的算法流程。