《轉》Logistic迴歸 多分類問題的推廣算法--Softmax迴歸

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

簡介

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


回想一下在 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 按行羅列起來獲得的,以下所示: spa


\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\} 是示性函數,其取值規則爲:3d

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


\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
相關文章
相關標籤/搜索