深度學習(一)Logistic Regression 淺析

我們知道其實 “深度學習” 是深層神經(jīng)網(wǎng)絡的重新包裝,得益于GPU和大規(guī)模數(shù)據(jù)集的出現(xiàn)以及近幾年算法的創(chuàng)新,神經(jīng)網(wǎng)絡重新煥發(fā)了生機。logistic regression 分類器可以看成一個單隱層的神經(jīng)網(wǎng)絡,若干個logistic regression單元有規(guī)律的組合就能形成可以處理復雜任務的深層神經(jīng)網(wǎng)絡,因此探討logistic regression 的運行機制對于我們理解深層神經(jīng)網(wǎng)絡有很大的好處。

1-1(A simple logistic regression unit)

目前神經(jīng)網(wǎng)絡的計算主要分為2個方向:遍歷樣本進行前向傳播產(chǎn)生預測值;計算成本進行反向傳播更新參數(shù)值。

(一)前向傳播(forward propagation)

1-2(常用符號定義)

為了方便我們以后討論問題,我們定義了如上符號。前向傳播主要分為線性運算(z=w.T*x+b)和激活運算(a=g(z)),g指的是激活函數(shù)。我們常用的激活函數(shù)有: sigmoid,? tanh, softmax,relu。在深層神經(jīng)網(wǎng)絡中我們一般采用 relu+softmax或relu+tanh,關于它們的優(yōu)缺點和應用場景可以參考:常用激活函數(shù)比較? 。在logistic regression 中我們采用 sigmoid作為激活函數(shù)。

(二)成本函數(shù)(cost function)

1-3(loss function)
1-4(cost function)

在對網(wǎng)絡進行反向傳播之前,我們首先需要對前向傳播計算的輸出值和樣本的真實值之間的誤差計算損失。loss function是在單個訓練樣本上定義的,它衡量了神經(jīng)網(wǎng)絡在單個訓練樣本上的表現(xiàn);cost function是在全體樣本上定義的, 它衡量的是神經(jīng)網(wǎng)絡在全體訓練樣本上的表現(xiàn)。

(三)反向傳播(back propagation)

反向傳播是神經(jīng)網(wǎng)絡進行訓練和優(yōu)化的重要環(huán)節(jié),在訓練集上利用優(yōu)化算法最小化成本函數(shù)J(w,b)來得出最優(yōu)的參數(shù)w.b。常見的優(yōu)化算法有: GD, SGD, RMSprop, ADAM, Adadelta等等。優(yōu)化算法的比較及代碼實現(xiàn)??

1-5(反向傳播算法的向量形式)

接著我們就可以進行n次梯度循環(huán),一步步的達到最優(yōu)值。下面我們將以吳恩達教授的貓臉識別為例詳解logistic regression 的代碼實現(xiàn)。

(四)代碼實現(xiàn)

1-1? sigmoid??

? ? ?sigmoid 用于神經(jīng)網(wǎng)絡的輸出層,它可以將一個實數(shù)映射到(0,1)的區(qū)間,可以用來做二分類

1-6 (sigmoid 圖像)

?1-2? 代碼實現(xiàn):

1-7 (sigmoid代碼實現(xiàn))

2-1? 參數(shù)初始化

當你訓練神經(jīng)網(wǎng)絡的時候,隨機初始化權重(W)非常重要。對于有多個隱藏單元的神經(jīng)網(wǎng)絡,如果將權重參數(shù)全部初始化為0,再進行梯度下降是完全無效的,因為所有的隱藏單元都是對稱的,不管你運行多長時間的梯度下降,它們都是在計算完全一樣的函數(shù),因此在多層神經(jīng)網(wǎng)絡中,不能將權重初始化為0,由于logistic regression只有一個隱藏單元,可以將權重初始化為0。對于偏置b 我們可以統(tǒng)一初始化為0。

2-2? 代碼實現(xiàn)

1-8(初始化參數(shù)代碼實現(xiàn))

3-1? 梯度循環(huán)

梯度循環(huán)分為2部分:首先進行前向傳播計算成本值;進行反向傳播計算梯度值更新參數(shù)。

3-2? 代碼實現(xiàn)

1-9(梯度循環(huán)代碼實現(xiàn))

4-1? 訓練優(yōu)化

我們可以自己嘗試設置學習率,梯度循環(huán)次數(shù)。進行多次訓練求得最優(yōu)的w,b 并且緩存w,b 作為預測模型的最終參數(shù),預測其它的照片。

4-2? 代碼實現(xiàn)

1-10(訓練優(yōu)化代碼)

5-1? 產(chǎn)生預測模型

經(jīng)過多次的訓練優(yōu)化,我們就能得到使 cost function 最小的w,b(最優(yōu)解),下面我們就可以用從訓練集上學到的最優(yōu)的w,b 對測試集的照片進行預測。

5-2? 代碼實現(xiàn)

1-11(預測模型代碼實現(xiàn))

6-1? logistic regression 函數(shù)

我們已經(jīng)實現(xiàn)了logistic regression 所需的所有子函數(shù),現(xiàn)在我們就可以把它們組合起來形成完整的logistic regression 網(wǎng)絡。

6-2? 代碼實現(xiàn)

1-12(logistic regression model)

7-1? All to all

我們可以隨意設置學習率和梯度下降循環(huán)次數(shù),觀察神經(jīng)網(wǎng)絡的運行結果,為了方便查看可以使用matplotlib 庫繪制cost 曲線。我設置了3個不同的學習率分別為0.018,0.012,0.006,循環(huán)次數(shù)為2000次,最后用三張照片測試算法的性能。

7-2? 代碼及性能展示

1-13(測試代碼)
1-14(learning_rate=0.006時的成本值)
1-15( learning_rate=0.006時的cost曲線 )
1-16(識別正確)
1-17(識別正確)
1-18(識別錯誤)

8 總結

通過以上例程,我們明白了logistic regression 運行機制。我們觀察到算法在測試集上的識別正確率約為68%,在訓練集上識別正確率約為100%,即存在較大的偏差和方差。為了提高測試集識別正確率我們可以增加訓練集的圖片數(shù)目或者采用更深層的神經(jīng)網(wǎng)絡。我們以后會用4層的神經(jīng)網(wǎng)絡來識別貓臉,你會發(fā)現(xiàn)測試集的識別正確率能達到82%。完整的程序及訓練數(shù)據(jù)集可以訪問我的?github

9? 引用

吳恩達教授在網(wǎng)易上的公開課(deep learning):http://study.163.com/my#/smarts

李飛飛教授(cs231n):http://study.163.com/course/courseMain.htm?courseId=1003223001

進擊的加菲貓:https://www.aiboy.pub/2017/09/10/A_Brief_Of_Optimization_Algorithms/#more

不會停的蝸牛:http://www.lxweimin.com/p/22d9720dbf1a

?著作權歸作者所有,轉載或內(nèi)容合作請聯(lián)系作者
平臺聲明:文章內(nèi)容(如有圖片或視頻亦包括在內(nèi))由作者上傳并發(fā)布,文章內(nèi)容僅代表作者本人觀點,簡書系信息發(fā)布平臺,僅提供信息存儲服務。

推薦閱讀更多精彩內(nèi)容