邏輯回歸,多分類推廣算法softmax回歸中


轉自 http://ufldl.stanford.edu/wiki/index.php/Softmax%E5%9B%9E%E5%BD%92

簡介

在本節中,我們介紹Softmax回歸模型,該模型是logistic回歸模型在多分類問題上的推廣,在多分類問題中,類標簽 \textstyle y 可以取兩個以上的值。 Softmax回歸模型對於諸如MNIST手寫數字分類等問題是很有用的,該問題的目的是辨識10個不同的單個數字。Softmax回歸是有監督的,不過后面也會介紹它與深度學習/無監督學習方法的結合。(譯者注: MNIST 是一個手寫數字識別庫,由NYU 的Yann LeCun 等人維護。http://yann.lecun.com/exdb/mnist/ )


回想一下在 logistic 回歸中,我們的訓練集由 \textstyle m 個已標記的樣本構成:\{ (x^{(1)}, y^{(1)}), \ldots, (x^{(m)}, y^{(m)}) \} ,其中輸入特征x^{(i)} \in \Re^{n+1}。(我們對符號的約定如下:特征向量 \textstyle x 的維度為 \textstyle n+1,其中 \textstyle x_0 = 1 對應截距項 。) 由於 logistic 回歸是針對二分類問題的,因此類標記 y^{(i)} \in \{0,1\}。假設函數(hypothesis function) 如下:

\begin{align}
h_\theta(x) = \frac{1}{1+\exp(-\theta^Tx)},
\end{align}


我們將訓練模型參數 \textstyle \theta,使其能夠最小化代價函數 :


\begin{align}
J(\theta) = -\frac{1}{m} \left[ \sum_{i=1}^m y^{(i)} \log h_\theta(x^{(i)}) + (1-y^{(i)}) \log (1-h_\theta(x^{(i)})) \right]
\end{align}


在 softmax回歸中,我們解決的是多分類問題(相對於 logistic 回歸解決的二分類問題),類標 \textstyle y 可以取 \textstyle k 個不同的值(而不是 2 個)。因此,對於訓練集 \{ (x^{(1)}, y^{(1)}), \ldots, (x^{(m)}, y^{(m)}) \},我們有 y^{(i)} \in \{1, 2, \ldots, k\}。(注意此處的類別下標從 1 開始,而不是 0)。例如,在 MNIST 數字識別任務中,我們有 \textstyle k=10 個不同的類別。


對於給定的測試輸入 \textstyle x,我們想用假設函數針對每一個類別j估算出概率值 \textstyle p(y=j | x)。也就是說,我們想估計 \textstyle x 的每一種分類結果出現的概率。因此,我們的假設函數將要輸出一個 \textstyle k 維的向量(向量元素的和為1)來表示這 \textstyle k 個估計的概率值。 具體地說,我們的假設函數 \textstyle h_{\theta}(x) 形式如下:


\begin{align}
h_\theta(x^{(i)}) =
\begin{bmatrix}
p(y^{(i)} = 1 | x^{(i)}; \theta) \\
p(y^{(i)} = 2 | x^{(i)}; \theta) \\
\vdots \\
p(y^{(i)} = k | x^{(i)}; \theta)
\end{bmatrix}
=
\frac{1}{ \sum_{j=1}^{k}{e^{ \theta_j^T x^{(i)} }} }
\begin{bmatrix}
e^{ \theta_1^T x^{(i)} } \\
e^{ \theta_2^T x^{(i)} } \\
\vdots \\
e^{ \theta_k^T x^{(i)} } \\
\end{bmatrix}
\end{align}


其中 \theta_1, \theta_2, \ldots, \theta_k \in \Re^{n+1} 是模型的參數。請注意 \frac{1}{ \sum_{j=1}^{k}{e^{ \theta_j^T x^{(i)} }} } 這一項對概率分布進行歸一化,使得所有概率之和為 1 。


為了方便起見,我們同樣使用符號 \textstyle \theta 來表示全部的模型參數。在實現Softmax回歸時,將 \textstyle \theta 用一個 \textstyle k \times(n+1) 的矩陣來表示會很方便,該矩陣是將 \theta_1, \theta_2, \ldots, \theta_k 按行羅列起來得到的,如下所示:


\theta = \begin{bmatrix}
\mbox{---} \theta_1^T \mbox{---} \\
\mbox{---} \theta_2^T \mbox{---} \\
\vdots \\
\mbox{---} \theta_k^T \mbox{---} \\
\end{bmatrix}

代價函數

現在我們來介紹 softmax 回歸算法的代價函數。在下面的公式中,\textstyle 1\{\cdot\} 是示性函數,其取值規則為:

\textstyle 1\{ 值為真的表達式\textstyle \}=1, \textstyle 1\{ 值為假的表達式 \textstyle \}=0。舉例來說,表達式 \textstyle 1\{2+2=4\} 的值為1 ,\textstyle 1\{1+1=5\}的值為 0。我們的代價函數為:


\begin{align}
J(\theta) = - \frac{1}{m} \left[ \sum_{i=1}^{m} \sum_{j=1}^{k}  1\left\{y^{(i)} = j\right\} \log \frac{e^{\theta_j^T x^{(i)}}}{\sum_{l=1}^k e^{ \theta_l^T x^{(i)} }}\right]
\end{align}


值得注意的是,上述公式是logistic回歸代價函數的推廣。logistic回歸代價函數可以改為:


\begin{align}
J(\theta) &= -\frac{1}{m} \left[ \sum_{i=1}^m   (1-y^{(i)}) \log (1-h_\theta(x^{(i)})) + y^{(i)} \log h_\theta(x^{(i)}) \right] \\
&= - \frac{1}{m} \left[ \sum_{i=1}^{m} \sum_{j=0}^{1} 1\left\{y^{(i)} = j\right\} \log p(y^{(i)} = j | x^{(i)} ; \theta) \right]
\end{align}


可以看到,Softmax代價函數與logistic 代價函數在形式上非常類似,只是在Softmax損失函數中對類標記的 \textstyle k 個可能值進行了累加。注意在Softmax回歸中將 \textstyle x 分類為類別 \textstyle j 的概率為:


p(y^{(i)} = j | x^{(i)} ; \theta) = \frac{e^{\theta_j^T x^{(i)}}}{\sum_{l=1}^k e^{ \theta_l^T x^{(i)}} }
.

對於 \textstyle J(\theta) 的最小化問題,目前還沒有閉式解法。因此,我們使用迭代的優化算法(例如梯度下降法,或 L-BFGS)。經過求導,我們得到梯度公式如下:


\begin{align}
\nabla_{\theta_j} J(\theta) = - \frac{1}{m} \sum_{i=1}^{m}{ \left[ x^{(i)} \left( 1\{ y^{(i)} = j\}  - p(y^{(i)} = j | x^{(i)}; \theta) \right) \right]  }
\end{align}

讓我們來回顧一下符號 "\textstyle \nabla_{\theta_j}" 的含義。\textstyle \nabla_{\theta_j} J(\theta) 本身是一個向量,它的第 \textstyle l 個元素 \textstyle \frac{\partial J(\theta)}{\partial \theta_{jl}} 是 \textstyle J(\theta)\textstyle \theta_j 的第 \textstyle l 個分量的偏導數。


有了上面的偏導數公式以后,我們就可以將它代入到梯度下降法等算法中,來最小化 \textstyle J(\theta)。 例如,在梯度下降法的標准實現中,每一次迭代需要進行如下更新: \textstyle \theta_j := \theta_j - \alpha \nabla_{\theta_j} J(\theta)(\textstyle j=1,\ldots,k)。

當實現 softmax 回歸算法時, 我們通常會使用上述代價函數的一個改進版本。具體來說,就是和權重衰減(weight decay)一起使用。我們接下來介紹使用它的動機和細節。

 

Softmax回歸模型參數化的特點

Softmax 回歸有一個不尋常的特點:它有一個“冗余”的參數集。為了便於闡述這一特點,假設我們從參數向量 \textstyle \theta_j 中減去了向量 \textstyle \psi,這時,每一個 \textstyle \theta_j 都變成了 \textstyle \theta_j - \psi(\textstyle j=1, \ldots, k)。此時假設函數變成了以下的式子:


\begin{align}
p(y^{(i)} = j | x^{(i)} ; \theta)
&= \frac{e^{(\theta_j-\psi)^T x^{(i)}}}{\sum_{l=1}^k e^{ (\theta_l-\psi)^T x^{(i)}}}  \\
&= \frac{e^{\theta_j^T x^{(i)}} e^{-\psi^Tx^{(i)}}}{\sum_{l=1}^k e^{\theta_l^T x^{(i)}} e^{-\psi^Tx^{(i)}}} \\
&= \frac{e^{\theta_j^T x^{(i)}}}{\sum_{l=1}^k e^{ \theta_l^T x^{(i)}}}.
\end{align}


換句話說,從 \textstyle \theta_j 中減去 \textstyle \psi 完全不影響假設函數的預測結果!這表明前面的 softmax 回歸模型中存在冗余的參數。更正式一點來說, Softmax 模型被過度參數化了。對於任意一個用於擬合數據的假設函數,可以求出多組參數值,這些參數得到的是完全相同的假設函數 \textstyle h_\theta


進一步而言,如果參數 \textstyle (\theta_1, \theta_2,\ldots, \theta_k) 是代價函數 \textstyle J(\theta) 的極小值點,那么 \textstyle (\theta_1 - \psi, \theta_2 - \psi,\ldots,
\theta_k - \psi) 同樣也是它的極小值點,其中 \textstyle \psi 可以為任意向量。因此使 \textstyle J(\theta) 最小化的解不是唯一的。(有趣的是,由於 \textstyle J(\theta) 仍然是一個凸函數,因此梯度下降時不會遇到局部最優解的問題。但是 Hessian 矩陣是奇異的/不可逆的,這會直接導致采用牛頓法優化就遇到數值計算的問題)


注意,當 \textstyle \psi = \theta_1 時,我們總是可以將 \textstyle \theta_1替換為\textstyle \theta_1 - \psi = \vec{0}(即替換為全零向量),並且這種變換不會影響假設函數。因此我們可以去掉參數向量 \textstyle \theta_1 (或者其他 \textstyle \theta_j 中的任意一個)而不影響假設函數的表達能力。實際上,與其優化全部的 \textstyle k\times(n+1) 個參數 \textstyle (\theta_1, \theta_2,\ldots, \theta_k) (其中 \textstyle \theta_j \in \Re^{n+1}),我們可以令 \textstyle \theta_1 =
\vec{0},只優化剩余的 \textstyle (k-1)\times(n+1) 個參數,這樣算法依然能夠正常工作。


在實際應用中,為了使算法實現更簡單清楚,往往保留所有參數 \textstyle (\theta_1, \theta_2,\ldots, \theta_n),而不任意地將某一參數設置為 0。但此時我們需要對代價函數做一個改動:加入權重衰減。權重衰減可以解決 softmax 回歸的參數冗余所帶來的數值問題。

 

權重衰減

我們通過添加一個權重衰減項 \textstyle \frac{\lambda}{2} \sum_{i=1}^k \sum_{j=0}^{n} \theta_{ij}^2 來修改代價函數,這個衰減項會懲罰過大的參數值,現在我們的代價函數變為:


\begin{align}
J(\theta) = - \frac{1}{m} \left[ \sum_{i=1}^{m} \sum_{j=1}^{k} 1\left\{y^{(i)} = j\right\} \log \frac{e^{\theta_j^T x^{(i)}}}{\sum_{l=1}^k e^{ \theta_l^T x^{(i)} }}  \right]
              + \frac{\lambda}{2} \sum_{i=1}^k \sum_{j=0}^n \theta_{ij}^2
\end{align}


有了這個權重衰減項以后 (\textstyle \lambda > 0),代價函數就變成了嚴格的凸函數,這樣就可以保證得到唯一的解了。 此時的 Hessian矩陣變為可逆矩陣,並且因為\textstyle J(\theta)是凸函數,梯度下降法和 L-BFGS 等算法可以保證收斂到全局最優解。


為了使用優化算法,我們需要求得這個新函數 \textstyle J(\theta) 的導數,如下:


\begin{align}
\nabla_{\theta_j} J(\theta) = - \frac{1}{m} \sum_{i=1}^{m}{ \left[ x^{(i)} ( 1\{ y^{(i)} = j\}  - p(y^{(i)} = j | x^{(i)}; \theta) ) \right]  } + \lambda \theta_j
\end{align}


通過最小化 \textstyle J(\theta),我們就能實現一個可用的 softmax 回歸模型。

 

Softmax回歸與Logistic 回歸的關系

當類別數 \textstyle k = 2 時,softmax 回歸退化為 logistic 回歸。這表明 softmax 回歸是 logistic 回歸的一般形式。具體地說,當 \textstyle k = 2時,softmax 回歸的假設函數為:


\begin{align}
h_\theta(x) &=

\frac{1}{ e^{\theta_1^Tx}  + e^{ \theta_2^T x^{(i)} } }
\begin{bmatrix}
e^{ \theta_1^T x } \\
e^{ \theta_2^T x }
\end{bmatrix}
\end{align}


利用softmax回歸參數冗余的特點,我們令 \textstyle \psi = \theta_1,並且從兩個參數向量中都減去向量 \textstyle \theta_1,得到:


\begin{align}
h(x) &=

\frac{1}{ e^{\vec{0}^Tx}  + e^{ (\theta_2-\theta_1)^T x^{(i)} } }
\begin{bmatrix}
e^{ \vec{0}^T x } \\
e^{ (\theta_2-\theta_1)^T x }
\end{bmatrix} \\


&=
\begin{bmatrix}
\frac{1}{ 1 + e^{ (\theta_2-\theta_1)^T x^{(i)} } } \\
\frac{e^{ (\theta_2-\theta_1)^T x }}{ 1 + e^{ (\theta_2-\theta_1)^T x^{(i)} } }
\end{bmatrix} \\

&=
\begin{bmatrix}
\frac{1}{ 1  + e^{ (\theta_2-\theta_1)^T x^{(i)} } } \\
1 - \frac{1}{ 1  + e^{ (\theta_2-\theta_1)^T x^{(i)} } } \\
\end{bmatrix}
\end{align}


因此,用 \textstyle \theta'來表示\textstyle \theta_2-\theta_1,我們就會發現 softmax 回歸器預測其中一個類別的概率為 \textstyle \frac{1}{ 1  + e^{ (\theta')^T x^{(i)} } },另一個類別概率的為 \textstyle 1 - \frac{1}{ 1 + e^{ (\theta')^T x^{(i)} } },這與 logistic回歸是一致的。

 

Softmax 回歸 vs. k 個二元分類器

如果你在開發一個音樂分類的應用,需要對k種類型的音樂進行識別,那么是選擇使用 softmax 分類器呢,還是使用 logistic 回歸算法建立 k 個獨立的二元分類器呢?

這一選擇取決於你的類別之間是否互斥,例如,如果你有四個類別的音樂,分別為:古典音樂、鄉村音樂、搖滾樂和爵士樂,那么你可以假設每個訓練樣本只會被打上一個標簽(即:一首歌只能屬於這四種音樂類型的其中一種),此時你應該使用類別數 k = 4 的softmax回歸。(如果在你的數據集中,有的歌曲不屬於以上四類的其中任何一類,那么你可以添加一個“其他類”,並將類別數 k 設為5。)

如果你的四個類別如下:人聲音樂、舞曲、影視原聲、流行歌曲,那么這些類別之間並不是互斥的。例如:一首歌曲可以來源於影視原聲,同時也包含人聲 。這種情況下,使用4個二分類的 logistic 回歸分類器更為合適。這樣,對於每個新的音樂作品 ,我們的算法可以分別判斷它是否屬於各個類別。

現在我們來看一個計算視覺領域的例子,你的任務是將圖像分到三個不同類別中。(i) 假設這三個類別分別是:室內場景、戶外城區場景、戶外荒野場景。你會使用sofmax回歸還是 3個logistic 回歸分類器呢? (ii) 現在假設這三個類別分別是室內場景、黑白圖片、包含人物的圖片,你又會選擇 softmax 回歸還是多個 logistic 回歸分類器呢?

在第一個例子中,三個類別是互斥的,因此更適於選擇softmax回歸分類器 。而在第二個例子中,建立三個獨立的 logistic回歸分類器更加合適。

 

中英文對照

Softmax回歸 Softmax Regression
有監督學習 supervised learning
無監督學習 unsupervised learning
深度學習 deep learning
logistic回歸 logistic regression
截距項 intercept term
二元分類 binary classification
類型標記 class labels
估值函數/估計值 hypothesis
代價函數 cost function
多元分類 multi-class classification
權重衰減 weight decay


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM