林軒田機器學習基石課程學習筆記10 — Logistic Regression

紅色石頭發表於2018-07-24

上一節課,我們介紹了Linear Regression線性迴歸,以及用平方錯誤來尋找最佳的權重向量w,獲得最好的線性預測。本節課將介紹Logistic Regression邏輯迴歸問題。

一、Logistic Regression Problem

一個心臟病預測的問題:根據患者的年齡、血壓、體重等資訊,來預測患者是否會有心臟病。很明顯這是一個二分類問題,其輸出y只有{-1,1}兩種情況。

二元分類,一般情況下,理想的目標函式f(x)>0.5,則判斷為正類1;若f(x)<0.5,則判斷為負類-1。

但是,如果我們想知道的不是患者有沒有心臟病,而是到底患者有多大的機率是心臟病。這表示,我們更關心的是目標函式的值(分佈在0,1之間),表示是正類的概率(正類表示是心臟病)。這跟我們原來討論的二分類問題不太一樣,我們把這個問題稱為軟性二分類問題(’soft’ binary classification)。這個值越接近1,表示正類的可能性越大;越接近0,表示負類的可能性越大。

對於軟性二分類問題,理想的資料是分佈在[0,1]之間的具體值,但是實際中的資料只可能是0或者1,我們可以把實際中的資料看成是理想資料加上了噪聲的影響。

如果目標函式是f(x)=P(+1|x)\in[0,1]的話,我們如何找到一個好的Hypothesis跟這個目標函式很接近呢?

首先,根據我們之前的做法,對所有的特徵值進行加權處理。計算的結果s,我們稱之為’risk score’:

但是特徵加權和s\in(-\infty,+\infty),如何將s值限定在[0,1]之間呢?一個方法是使用sigmoid Function,記為\theta(s)。那麼我們的目標就是找到一個hypothesis:

h(x)=\theta(w^Tx)

二、Logistic Regression Error

現在我們將Logistic Regression與之前講的Linear Classification、Linear Regression做個比較:

這三個線性模型都會用到線性scoring function s=w^Tx。linear classification的誤差使用的是0/1 err;linear regression的誤差使用的是squared err。那麼logistic regression的誤差該如何定義呢?

先介紹一下“似然性”的概念。目標函式f(x)=P(+1|x),如果我們找到了hypothesis很接近target function。也就是說,在所有的Hypothesis集合中找到一個hypothesis與target function最接近,能產生同樣的資料集D,包含y輸出label,則稱這個hypothesis是最大似然likelihood。

如果將w代入的話:

為了把連乘問題簡化計算,我們可以引入ln操作,讓連乘轉化為連加:

接著,我們將maximize問題轉化為minimize問題,新增一個負號就行,並引入平均數操作\frac1N

將logistic function的表示式帶入,那麼minimize問題就會轉化為如下形式:

至此,我們得到了logistic regression的err function,稱之為cross-entropy error交叉熵誤差:

三、Gradient of Logistic Regression Error

我們已經推導了E_{in}的表示式,那接下來的問題就是如何找到合適的向量w,讓E_{in}最小。

Logistic Regression的E_{in}是連續、可微、二次可微的凸曲線(開口向上),根據之前Linear Regression的思路,我們只要計算E_{in}的梯度為零時的w,即為最優解。

E_{in}計算梯度,學過微積分的都應該很容易計算出來:

最終得到的梯度表示式為:

為了計算E_{in}最小值,我們就要找到讓\nabla E_{in}(w)等於0的位置。

上式可以看成\theta(-y_nw^Tx_n)-y_nx_n的線性加權。要求\theta(-y_nw^Tx_n)-y_nx_n的線性加權和為0,那麼一種情況是線性可分,如果所有的權重\theta(-y_nw^Tx_n)為0,那就能保證\nabla E_{in}(w)為0。\theta(-y_nw^Tx_n)是sigmoid function,根據其特性,只要讓-y_nw^Tx_n≪0 ,即y_nw^Tx_n≫0 y_nw^Tx_n≫0 表示對於所有的點,y_nw^Tx_n都是同號的,這表示資料集D必須是全部線性可分的才能成立。

然而,保證所有的權重\theta(-y_nw^Tx_n)為0是不太現實的,總有不等於0的時候,那麼另一種常見的情況是非線性可分,只能通過使加權和為零,來求解w。這種情況沒有closed-form解,與Linear Regression不同,只能用迭代方法求解。

之前所說的Linear Regression有closed-form解,可以說是“一步登天”的;但是PLA演算法是一步一步修正迭代進行的,每次對錯誤點進行修正,不斷更新w值。PLA的迭代優化過程表示如下:

w每次更新包含兩個內容:一個是每次更新的方向y_nx_n,用v表示,另一個是每次更新的步長\eta。引數(v,\eta)和終止條件決定了我們的迭代優化演算法。

四、Gradient Descent

根據上一小節PLA的思想,迭代優化讓每次w都有更新:

我們把E_{in}(w)曲線看做是一個山谷的話,要求E_{in}(w)最小,即可比作下山的過程。整個下山過程由兩個因素影響:一個是下山的單位方向v;另外一個是下山的步長\eta

利用微分思想和線性近似,假設每次下山我們只前進一小步,即\eta很小,那麼根據泰勒Taylor一階展開,可以得到:

E_{in}(w_t+\eta v)\approx E_{in}(w_t)+\eta v^T\nabla E_{in}(w_t)

關於Taylor展開的介紹,可參考我另一篇部落格:

多元函式的泰勒(Taylor)展開式

迭代的目的是讓E_{in}越來越小,即讓E_{in}(w_t+\eta v)\le E_{in}(w_t)\eta是標量,因為如果兩個向量方向相反的話,那麼他們的內積最小(為負),也就是說如果方向v與梯度\nabla E_{in}(w_t)反向的話,那麼就能保證每次迭代E_{in}(w_t+\eta v)\le E_{in}(w_t)都成立。則,我們令下降方向v為:

v=-\frac{\nabla E_{in}(w_t)}{||\nabla E_{in}(w_t)||}

v是單位向量,v每次都是沿著梯度的反方向走,這種方法稱為梯度下降(gradient descent)演算法。那麼每次迭代公式就可以寫成:

w_{t+1}\leftarrow w_t-\eta\frac{\nabla E_{in}(w_t)}{||\nabla E_{in}(w_t)||}

下面討論一下\eta的大小對迭代優化的影響:\eta如果太小的話,那麼下降的速度就會很慢;\eta如果太大的話,那麼之前利用Taylor展開的方法就不準了,造成下降很不穩定,甚至會上升。因此,\eta應該選擇合適的值,一種方法是在梯度較小的時候,選擇小的\eta,梯度較大的時候,選擇大的\eta,即\eta正比於||\nabla E_{in}(w_t)||。這樣保證了能夠快速、穩定地得到最小值E_{in}(w)

對學習速率\eta做個更修正,梯度下降演算法的迭代公式可以寫成:

w_{t+1}\leftarrow w_t-\eta’\nabla E_{in}(w_t)

其中:

\eta’=\frac{\eta}{||\nabla E_{in}(w_t)||}

總結一下基於梯度下降的Logistic Regression演算法步驟如下:

  • 初始化w_0
  • 計算梯度\nabla E_{in}(w_t)=\frac1N\sum_{n=1}^N\theta(-y_nw_t^Tx_n)(-y_nx_n)

  • 迭代跟新w_{t+1}\leftarrow w_t-\eta\nabla E_{in}(w_t)

  • 滿足\nabla E_{in}(w_{t+1})\approx0或者達到迭代次數,迭代結束

五、總結

我們今天介紹了Logistic Regression。首先,從邏輯迴歸的問題出發,將P(+1|x)作為目標函式,將\theta(w^Tx)作為hypothesis。接著,我們定義了logistic regression的err function,稱之為cross-entropy error交叉熵誤差。然後,我們計算logistic regression error的梯度,最後,通過梯度下降演算法,計算\nabla E_{in}(w_t)\approx0時對應的w_t值。

註明:

文章中所有的圖片均來自臺灣大學林軒田《機器學習基石》課程

更多AI資源請關注公眾號:AI有道(ID:redstonewill)

相關文章