機器學習之邏輯迴歸基礎

原文作者:daniel-D 出處:http://www.cnblogs.com/daniel-D/archive/2013/05/30/3109276.html

 0. 前言

  這學期 Pattern Recognition 課程的 project 之一是手寫數字識別,之二是做一個網站驗證碼的識別(鴨梨不小哇)。麪包要一口一口喫,先嚐試把模式識別的經典問題——手寫數字識別做出來吧。這系列博客參考deep learning tutorial ,記錄下用以下三種方法的實現過程:

  1. Logistic Regression - using Theano for something simple
  2. Multilayer perceptron - introduction to layer
  3. Deep Convolutional Network - a simplified version of LeNet5

  目的在於一方面從理論上幫自己理順思路,另一方面作爲課程最後一課 presentation 的材料。這三種方法從易到難,準確率也由低到高,我們先從簡單的入手。

1. Binomial logistic regression model

  儘管線性分類器方法足夠簡單並且使用廣泛,但是線性模型對於輸出的 y 沒有界限,y 可以取任意大或者任意小(負數)的值,對於某些問題來說不夠 adequate, 比如我們想得到 0 到 1 之間的 probability 輸出,這時候就要用到比 linear regression 更加強大的 logistic regression 了。

 y = w • x

  直覺上,一個線性模型的輸出值 y 越大,這個事件 P(Y=1|x) 發生的概率就越大。 另一方面,我們可以用事件的機率(odds)來表示事件發生與不發生的比值,假設發生的概率是 p ,那麼發生的機率(odds)是 p/(1-p) , odds 的值域是 0 到正無窮,機率越大,發生的可能性越大。將我們的直覺與機率聯繫起來的就是下面這個(log odds)或者是 logit 函數 (有點牽強 - -!):

  進而可以求出概率 p 關於 w 點乘 x 的表示:

  (注:爲什麼要寫出中間一步呢?看到第三部分的你就明白啦!)

  這就是傳說中的 sigmoid function 了,以 w 點乘 x 爲自變量,函數圖像如下:

(注:從圖中可以看到 wx 越大,p 值越高,在線性分類器中,一般 wx = 0 是分界面,對應了 logistic regression 中 p = 0.5)

2. Parameter Estimation

  Logsitic regression 輸出的是分到每一類的概率,參數估計的方法自然就是最大似然估計 (MLE) 咯。對於訓練樣本來說,假設每個樣本是獨立的,輸出(標籤)爲 y = {0, 1},樣本的似然函數就是將所有訓練樣本 label 對應的輸出節點上的概率相乘, 令 p = P(Y=1|x) ,如果 y = 1, 概率就是 p, 如果 y = 0, 概率就是 1 - p ,(好吧,我是個羅嗦的傢伙),  將這兩種情況合二爲一,得到似然函數:

  嗯?有連乘,用對數化爲累加, balabala 一通算下來,就得到了對數似然函數爲

  應用梯度下降法或者是擬牛頓法對 L(w) 求極大值,就可以得到 w 的估計值了。

3. Softmax regression

  這一小節旨在弄清 softmax regression 和 logistic regression 的聯繫,更多細節請參考 Andrew Ng 的英文資料,需要快速瀏覽也可以看看中文翻譯版本,或者 wiki 一下。

  logistic regression 在多類上的推廣又叫 softmax regression, 在數字手寫識別中,我們要識別的是十個類別,每次從輸入層輸入 28×28 個像素,輸出層就可以得到本次輸入可能爲 0, 1, 2… 的概率。得花點時間畫個簡易版本的,看起來更直觀:

  OK, 左邊是輸入層,輸入的 x 通過中間的黑線 w (包含了 bias 項)作用下,得到 w.x, 到達右邊節點, 右邊節點通過紅色的函數將這個值映射成一個概率,預測值就是輸入概率最大的節點,這裏可能的值是 {0, 1, 2}。在 softmax regression 中,輸入的樣本屬於第 j 類的概率可以寫成:

  (注:對比第一部分提到過的中間一步,有什麼不同?)   

     注意到,這個迴歸的參數向量減去一個常數向量,會有什麼結果:

  沒有變化!這說明如果某一個向量是代價函數的極小值點,那麼這個向量在減去一個任意的常數向量也是極小值點,這是因爲 softmax 模型被過度參數化了。(題外話:回想一下在線性模型中,同時將 w 和 b 擴大兩倍,模型的分界線沒有變化,但是模型的輸出可信度卻增大了兩倍,而在訓練迭代中, w 和 b 絕對值越來越大,所以 SVM 中就有了函數距離和幾何距離的概念)

  既然模型被過度參數化了,我們就事先確定一個參數,比如將 w1 替換成全零向量,將 w1.x = 0 帶入 binomial softmax regression ,得到了我們最開始的二項 logistic regression (可以動手算一算), 用圖就可以表示爲

  (注:虛線表示爲 0 的權重,在第一張圖中沒有畫出來,可以看到 logistic regression 就是 softmax regression 的一種特殊情況)

  在實際應用中,爲了使算法實現更簡單清楚,往往保留所有參數,而不任意地將某一參數設置爲 0。我們可以對代價函數做一個改動:加入權重衰減 (weight decay)。 權重衰減可以解決 softmax 迴歸的參數冗餘所帶來的數值問題。並且此時代價函數變成了嚴格的凸函數, Hessian矩陣變爲可逆矩陣,保證有唯一的解。(感覺與線性分類器裏限制 ||w|| 或者設置某一個 w 爲全零向量一樣起到了減參的作用,但是這個計算起來簡單清晰,可以用高斯分佈的 MAP 來推導,其結果是將 w 軟性地限制在超球空間,有一點 “soft” 的味道,個人理解^ ^)

  加入權重衰減後的代價函數是:

  等號右邊第一項是訓練樣本 label 對應的輸出節點上的概率的負對數,第二項是 weight decay ,可以使用梯度下降法和 L-BFGS 等算法可以保證收斂到全局最優解。總結起來,logistic regression 是 softmax regression 的一種特殊形式,前者是二類問題,後者是多類問題,前者的非線性函數的唯一確定的 sigmoid function (默認 label 爲 0 的權重爲全零向量的推導結果), 後者是 softmax, 有時候我們並不特意把它們區分開來。

      好,基礎知識準備完畢,下面我們就要在數字手寫識別項目裏面實戰一下了。(^_^)

  


參考資料:

[1] 統計學習方法, 李航 着

[2] http://deeplearning.stanford.edu/wiki/index.php/UFLDL_Tutorial  

 

 

作者:daniel-D 出處:http://www.cnblogs.com/daniel-D

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章