CS229筆記:分類與邏輯回歸
邏輯回歸
對於一個二分類(binary classification)問題,\(y \in \left\{0, 1\right\}\),如果直接用線性回歸去預測,結果顯然是非常不準確的,所以我們采用一種新的假設函數:
\[
h_{\theta}(x) = g(\theta^{T}x) = \frac{1}{1 + e^{-\theta^{T}x}}
\]
其中
\[
g(z) = \frac{1}{1 + e^{-z}}
\]
被稱為sigmoid函數,這個函數的的值域是\((0, 1)\),且在定義域上單調遞增,當\(z \rightarrow +\infty\)時,\(g(z) \rightarrow 1\)
sigmoid函數求導很容易,而且關於導數,它有一個很不錯的性質:
\[
\begin{align*}
g'(z) &= -\frac{1}{(1 + e^{-z})^{2}} \cdot-e^{-z}\&=\frac{1}{1 + e^{-z}} \cdot \left(1 - \frac{1}{1 + e^{-z}}\right)\&= g(z)(1-g(z))
\end{align*}
\]
我們在求優化目標函數時,會用到這一性質。
優化目標函數及其梯度
和線性回歸一樣,我們給出幾個概率假設,希望在給定的概率假設下,利用最大似然求出代價函數。
假設\(y|x;\theta \sim Bernoulli(h_{\theta}(x))\),則:
\[
P(y|x;\theta) = (h_{\theta}(x))^{y}(1-h_{\theta}(x))^{1-y}
\]
因為我們處理的是二分類問題,所以這是一個很合理的假設。我們再次假設所有的訓練樣本是獨立的,則似然函數值是:
\[
\begin{align*}
L(\theta) &= \prod_{i=1}^{m}P(y^{(i)}|x^{(i)};\theta)\&= \prod_{i=1}^{m}(h_{\theta}(x^{(i)}))^{y^{(i)}}(1-h_{\theta}(x^{(i)}))^{1-y^{(i)}}
\end{align*}
\]
對數似然函數是:
\[ \begin{align*} l(\theta) &= \log L(\theta)\&= \log \prod_{i=1}^{m}(h_{\theta}(x^{(i)}))^{y^{(i)}}(1-h_{\theta}(x^{(i)}))^{1-y^{(i)}}\&= \sum_{i=1}^{m}y^{(i)}\log h_{\theta}(x^{(i)}) + (1-y^{(i)})\log (1-h_{\theta}(x^{(i)}))\\end{align*} \]
這也就是我們的優化目標函數,我們希望找到使\(l(\theta)\)最大的\(\theta\),這裏同樣可以用梯度下降法。引入梯度的概念:假設\(\theta \in \mathbb{R}^{n+1}\),\(l: \mathbb{R}^{n+1} \rightarrow \mathbb{R}\),則\(\nabla l(\theta) \in \mathbb{R}^{n+1}\),其中\(\left(\nabla l(\theta)\right)_j = \frac{\partial l(\theta)}{\partial \theta_{j}}\)。我們可以求出\(l(\theta)\)的梯度:
\[ \begin{align*} \nabla l(\theta) &= \sum_{i=1}^{m}y^{(i)}\frac{g(\theta^{T}x^{(i)})(1-g(\theta^{T}x^{(i)}))}{g(\theta^{T}x^{(i)})}x^{(i)} +(1-y^{(i)})\frac{-g(\theta^{T}x^{(i)})(1-g(\theta^{T}x^{(i)}))}{1-g(\theta^{T}x^{(i)})}x^{(i)}\&= \sum_{i=1}^{m}(y^{(i)}-h_{\theta}(x^{(i)}))x^{(i)}\\end{align*} \]
由於我們的目的是最大化\(l(\theta)\),所以我們的叠代公式是:
\[ \theta_j := \theta_j + \alpha \sum_{i=1}^{m}(y^{(i)}-h_{\theta}(x^{(i)}))x^{(i)}_{j} = \theta_j - \alpha \sum_{i=1}^{m}(h_{\theta}(x^{(i)}) - y^{(i)})x^{(i)}_j \]
這與LMS算法中的叠代公式在形式上是一樣的,只是\(h_{\theta}(x)\)的定義有差異。
用牛頓法求\(l(\theta)\)的最大值點
給定一個函數\(f(\theta)\),牛頓法可以用來求函數的零點(這裏的\(\theta\)是標量):
\[
\theta := \theta - \frac{f(\theta)}{f'(\theta)}
\]
利用上式進行叠代,可以很快地接近\(f(\theta)\)的零點。
如果是求最值點呢?沒錯,最值點對應著一階導數的零點,所以,為了求\(l(\theta)\)的最大值點,我們只需令\(f(\theta) = l'(\theta)\),那麽更新叠代公式變為:
\[
\theta := \theta - \frac{l'(\theta)}{l''(\theta)}
\]
利用上式叠代,我們可以很快地接近\(l(\theta)\)的最大值點。在很多情況下,\(\theta\)是一個向量,此時更新叠代公式為:
\[
\theta := \theta - H^{-1}\nabla l(\theta)
\]
其中,\(H\)是海森矩陣(Hessian matrix),定義為:
\[
H_{ij} = \frac{\partial^{2}l(\theta)}{\partial\theta_i \partial\theta_j}
\]
可以看出,海森矩陣其實就是由\(l(\theta)\)對\(\theta\)各分量的二階偏導數構成的矩陣。我們嘗試計算一下\(l(\theta)\)的海森矩陣,上文已經得到:
\[
\frac{\partial}{\partial \theta_i}l(\theta) = \sum_{k=1}^{m} (y^{(k)} - h_{\theta}(x^{(k)}))x^{(k)}_i
\]
所以:
\[
\begin{align*}
H_{ij} &= \sum_{k=1}^{m}\frac{\partial}{\partial \theta_j}(-h_{\theta}(x^{(k)})x^{(k)}_i)\&= -\sum_{k=1}^{m}h_{\theta}(x^{(k)})(1-h_{\theta}(x^{(k)}))x^{(k)}_i x^{(k)}_j\H &= -\sum_{k=1}^{m}h_{\theta}(x^{(k)})(1-h_{\theta}(x^{(k)}))x^{(k)}(x^{(k)})^{T}
\end{align*}
\]
CS229筆記:分類與邏輯回歸