Logistic 與 softmax


之前寫的一篇感覺太 Naive ,這里重新寫一篇作為總結。Logistic 與 Softmax 都是一種概率判別模型(PRML p203),Softmax 通常用在 Neural Network 里最后全連接層 ,Logistic 在業界更是普及,因為簡單有效、便於並行、計算量小快,適合大規模數據等優點,而且采用 SGD 的 Logistic 相當於直接 Online Learning ,非常方便。本文將對兩個模型展開詳細介紹,從 exponential family 到 parallel 等都會涉及

Sigmod Function

Logistic Regression 是用來處理二分類問題的,它與一個函數密切相關,即 sigmod 函數:

\[h(z)  = \frac{ e^z}{1+ e^z}= \frac{ 1}{1+ e^{-z}} \]

通過 sigmod 函數可以將函數值映射到 $(0,1)$ 區間,這里 $h$ 即代表了 sigmod 函數,其圖形如下:1_thumb5_thumb

Logistic Regression 正是在線性回歸的基礎上加了 sigmod 而得到的

對數幾率比解釋

線性回歸中,值域落在 $(-\infty,+\infty)$,然而對於二分類來說只需兩種取值 0、1 即可,線性回歸中事件發生的幾率用 $\frac{p}{1-p}$ 表示的話,其值域為 $[0,\infty)$ ,然而二分類中模型取值落在 $[0,1]$ 之間,還需要滿足的是 $w^Tx$ 越大,則事件發生的幾率越大,所以使用對數幾率比即可:

\[\log odds =\log \frac{z}{1-z}\]

1
與線性模型對應可得:

\[\log \frac{z}{1- z} = w^Tx\]

綜上便得到了 Logistic Regression 的模型, $z$ 便為模型的輸出:

\[ z = \frac{e^{w^Tx}}{1+e^{w^Tx}} = \frac{1}{1+e^{-w^Tx}} \]

Generalized Liner Model 解釋

從概率概率判別模型的角度來講,Logistic Regression 是一種廣義線性模型。所以需要注意給定自變量 $X$ 之后因變量 $Y$ 的條件期望值 $E(Y|X;w)$ 與變量 $X$ 之間的關系,這個對應關系便為所求解的模型,假設 $y \sim Bernoulli(z)$ ,同時 $y \sim ExponentialFamily(\eta)$,只需把 Bernoulli 化成 exponential family 的形式便可得到 $z$ 與 $\eta$ 的對應關系,這里直接給出結果,具體參考 廣義線性模型 GLM

\[ P(Y =1|X = x) = E[y|x;w] = z = \frac{1}{1+e^{-\eta}} = \frac{1}{1+e^{-w \cdot x}} \]

可見以上兩種解釋方式都得到了對 $x$ 的線性組合 $w^T \cdot x$ 做 sigmod 映射的形式,這邊是模型的假設函數,接下來便可根據假設函數建立損失函數,並且進行參數估計與模型的求解.

參數估計

接下來需要對參數 $w$ 進行估計,方法很多,極大似然估計MLE負log損失或者叫做交叉熵損失,先看 MLE ,給定數據集 $\left\{(x_i,y_i)\right\}_{i=1}^N$ ,寫出其似然函數 :

\[\prod_ip(y_i|x_i;z_i) = \prod_iz_i^{y_i}(1-z_i)^{1-y_i}\]

其中 $z_i = \frac{1}{1+e^{-w^T x_i}}$,轉換為對數似然形式,最終只需極大化以下似然函數即可:

\[L(w) = \sum_iy_ilogz_i+(1-y_i)log(1-z_i)\]

 

這里來看另一種方法,即用負 log 損失函數來推導出 logistic 的損失函數,負log損失定義為: $L(y,P(Y|X)) = –logP(Y|X)$ ,根\[L(y,P(Y|X)) = \left\{ \begin{aligned}
-logP(Y=1|X=x), \ y=1 \\
-logP(Y=0|X=x), \ y = 0
\end{aligned}\right.\]

$P(Y= 1| X=x) =z$ 與 $P(Y= 0| X =x) = 1-z$ 寫成緊湊的形式:$L(y,z)=-ylogz-(1-y)log(1-z)$.

 

logloss_thumb5_thumb

可以看到當$y = 1$時,$z$ 越接近 1 損失越小,當 $y = 0$ 時 , $z$ 越接近 1 損失越大,現在對於整個數據集可得:

\[ L(w) = -\sum_i[y_ilogz_i + (1-y_i)log(1-z_i)] \]

可見極大似然 MLE 正好等於極小化負 log 損失,因此兩者是等價的,交叉熵在 2 分類下就是負 log 損失,所以交叉熵在 softmax 里會提到.

得到損失函數之后,為了防止過擬合,當然需要加上正則項了,這里以 $L_2$ 正則為例,加上正則后需要極小化的損失為:

\[ L(w) = –\sum_i[y_iz_i+(1-y_i)(1-z_i)]+  \frac{\lambda}{2}||w||^2\]

接下來直接使用梯度下降的來對 $w$ 進行更新:

\[w:= w – \frac{\partial L(w)}{\partial w}\]

這里對損失函數求導可以得到:

\begin{aligned}
\frac{\partial L(w) }{\partial w}& = \frac{\partial  -\sum_i[y_ilogz_i+(1-y_i)log(1-z_i)] + \frac{\lambda}{2}||w||^2 }{ \partial w}\\
&=-\sum_i[y_i\frac{1}{z_i}+(1-y_i)\frac{1}{1-z_i}][z_i(1-z_i)]\frac{\partial w \cdot x_i}{ \partial w} +\lambda w \\
&= -\sum_i[y_i(1-z_i)-(1-y_i)z_i] \frac{\partial w \cdot x_i}{ \partial w}+ \lambda w \\
&= \sum_i(z_i -y_i) x_i + \lambda w \\
\end{aligned}

給出學習速率 $\alpha$ ,最終得到帶有正則項的 Logistic Regression 回歸的梯度下降算法:

                                  $while$ $iter < iter\_num$ $do$ :

\[w:= w – \alpha \left [\sum_i(z_i -y_i) x_i +\lambda w \right ]\]

Softmax Regression

Softmax Regression 即為一個 K 分類的概率判別模型,就是把 Logistic Regression 推廣到 K 分類的版本,把樣本 $x$ 屬於類別 $k$ 的概率用 $z_k$ 表示,即 $z_k = P(Y = k| X = x)$ ,可以得到 Softmax 的假設函數如下:

\[\left[ \begin{aligned}z_1 \\z_2 \\ ...\\z_K \end{aligned}\right]=\frac{1}{\sum_{j=1}^Ke^{w_j^Tx}}\left[ \begin{aligned}e^{w_1^Tx} \\e^{w_2^Tx} \\ ...\\e^{w_K^Tx} \end{aligned}\right]\]

建立 Softmax 模型的步驟是給定訓練數據集 $\left\{(x_i,y_i)\right\}_{i=1}^N$ ,這里 $y_i \in  \mathbb{R}^K$ ,假設 $x_i$ 屬於類別 $k$ ,則 $y_i$ 的第 $k$ 維為 1 ,其余維度為 0 。Softmax 其實就是 Logistic 的多分類的推廣,這里的變量 $Y$ 是服從多項分布的,所以可以通過多項分布極大似然的方式來推導出 Softmax 。

Softmax  參數估計

首先來個單個樣本的損失,對於單個服從多項分布的樣本,其似然函數為 $\prod_kz_k^{y_k}$ , 極大化該似然函數正好等於極小化以下交叉熵損失:

\[L(w) = -\sum_k  y_k \log z_k  \]

\[z_k = \frac{e^{w_k^Tx}}{\sum_je^{w_j^Tx}}\]

這里同樣需要對損失函數 $L(W)$ 求導,注意這里 $W$ 采用大寫,是因為 $W$ 為矩陣,其形式為 $[w_1,w_2,…,w_K]$,因為每個類別需要一組參數,求導前要明確 $z_k$ 對 $w_i$ 與 $w_k$ 的導數:

\begin{aligned}
\frac{\partial z_{k} }{\partial w_i} &= -y_k \cdot y_i \\
\frac{\partial z_{k} }{\partial w_k} &= y_k \cdot (1-y_k) \\
\end{aligned}

這里代表對 $w_k$ 求導代表 $i =k$ 時求導;對 $w_i$ 求導代表對 $i \ne k$ 求導,兩個結果是不一樣的。首先是 $z_k$ 對 $w_k$ 的導數:

\begin{aligned}
\frac{\partial z_{k} }{\partial w_k} &= \frac{\partial }{\partial w_k}\left ( \frac{e^{w_{k}x}}{\sum_je^{ w_{j}x} }\right) \\
&= [e^{w_{k}x}]_{w_k'}\frac{1}{\sum_je^{ w_{j}x} }+e^{w_{k}x}\left [\frac{1}{\sum_je^{ w_{j}x} }  \right ]_{w_k'}\\
&= \frac{\partial w_kx}{\partial w_k}\frac{e^{w_{k}x}}{\sum_je^{ w_{j}x} }-e^{w_{k}x}\frac{e^{w_{k}x}}{\left (\sum_je^{ w_{j}x}  \right )^2}\frac{\partial w_kx}{\partial w_k}\\
&=\frac{e^{w_{k}x}}{\sum_je^{ w_{j}x} } \cdot x - \left (\frac{e^{w_{k}x}}{\sum_je^{ w_{j}x}  }\right )^2 \cdot x \\
&= z_k(1-z_k)\cdot x
\end{aligned}

接下來是 $z_k$ 對 $w_i$ 的導數:

\begin{aligned}
\frac{\partial z_{k} }{\partial w_i}
&= \frac{\partial }{\partial w_i}\left ( \frac{e^{w_{k}x}}{\sum_je^{ w_{j}x} }\right) \\
&= -\frac{e^{w_{k}x}}{\left ( \sum_je^{ w_{j}x} \right)^2 }  \frac{\partial \sum_je^{ w_{j}x} }{\partial w_i} \\
&=-\frac{e^{w_{k}x}  }{\sum_je^{ w_{j}x}  } \cdot \frac{ e^{w_{i}x} }{ \sum_je^{ w_{j}x} }\cdot \frac{\partial w_ix}{\partial w_i} \\
&=-z_k z_i \cdot x
\end{aligned}

因此單個樣本損失函數對權重 $w_j$ 求損失,可得:

\begin{aligned}
\frac{\partial \left [-\sum_k y_k \log z_k  \right ] }{\partial w_j} &= -\sum_ky_k \cdot \frac{\partial \log z_k}{\partial w_j} \\
&= -\sum_ky_k \frac{1}{z_k} \frac{\partial z_k}{\partial w_j} \\
&= -y_j\frac{1}{z_j}z_j(1-z_j)x - \sum_{k \ne j} y_k \frac{1}{z_k}(-z_j z_k)x \\
&= \left (-y_j +y_jz_j+  \sum_{k \ne j}  y_kz_j  \right ) \cdot x \\
&= \left (-y_j + z_j\sum_ky_k  \right )\cdot x \\
&=\left (z_j-y_j   \right )\cdot x
\end{aligned}

得到單個樣本的導數之后,接下來結算對於整個訓練集 $\left \{(x_i,y_i) \right \}_{i=1}^N$ 的導數,這里記 $y_{ik}$ 為第 $i$ 個樣本標簽向量的第 $k$ 維度;$z_{ik}$ 代表樣本 $x_i$ 屬於類別 $k$ 的概率,即 $z_{ik} = P(Y= k | X=x_i)$ ,終可得帶有 $L_2$ 正則的損失函數為:

\[L(W) = -\sum_i\sum_k y_{ik} \log z_{ik} + \frac{1}{2} \lambda ||W||^2\]

接下來對權重 $w_k$ 求導,可得:

\[ \frac{\partial L(W)}{\partial  w_k} = \sum_i ( z_{ik}- y_{ik})x_i + \lambda w_k  \]

綜上,給出帶有 $L_2$ 正則的 Softmax Regression 的算法:

                                       $while$ $iter < iter\_num$ $do$:

                                             $for$ $k=1 …K$:

\[ w_k := w_k -\sum_i (z_{ik} -y_{ik}) \cdot x_i +  \lambda w_k \]

並行化 Logistic

工業界使用 Logistic 一般都是大規模數據,超級高的維度,所以有必要對 Logistic 進行並行化處理,以下給出三種並行方式:

1) data parallelism ,適用於維度適中的樣本,分別把數據發送到各個節點,每個節點運行各自的 SGD ,等所有節點運行完成后將結果取平均匯總,若沒達到收斂條件,則進行下一次迭代,偽代碼如下:

2) data parallelism ,數據分發到各個節點,並獲取當前時刻最新的參數 $\theta^t$ ,各個計算完 $\Delta \theta$ 之后(下圖中的 $temp^{(i)}$ ),將 $\Delta \theta$ 匯總,用於計算 $\theta^{t+1} = \theta^t - \alpha \sum \Delta \theta$,偽碼如下:

1

3)將 data parallelism 與 model parallelism 結合,因為 Logistic Regression  中特征的維度通常很高,單機不一定能完成梯度計算,所以有了 Google 實現了一個 DistBelief ,采用 Parameter Server 來同步參數,異步運行,速度杠杠的,這里的 Model Replicas 是一個 Logistic Regression 模型,由幾個計算節點組成,如下圖所示:

1

模型的幾個主要特點,以下這些特點雖然有些缺乏理論基礎,但最后得到的模型效果是相當好的:

1)通過一個共享的 Parameter Server 來共享參數,每次處理一個 Mini-Batch 之前,從 Parameter Server 獲取當前的參數 $w$,求得其導數 $\Delta w$ ,並推送到 Parameter Server 進行更新;

2) Model Replicas 是異步執行的,所以省去了同步的時間;

3)每 $n_{fetch}$ 次Mini-Batch 向服務器取一次參數,每 $n_{push}$ 次 Mini –Batch 操作推送一次結果, $n_{fetch}$ 不一定等於 $n_{push}$;

4)一個 Model Replicas  失效,其他的 Model Replicas 仍可以運行,所以魯棒性很強;

5)每個 Model Replicas 中的節點只需和 Parameter Server  中和該節點有關的模型參數的那部分節點進行通信;

6)每個 Model Replicas 中的 fetch compute push 操作是通過三個線程完成的,類似於流水線機制,大大加快了速度;

7)參數服務器的每個節點更新參數的次數不一定相同,有一定的隨機性.

總結

基礎好不夠扎實,缺乏實踐經驗,對  MaxEnt 與 Logistic 的關系 與 GLM 理解的不夠好,暫時告一段落.有機會繼續深入.

 

參考文獻:

Google paper: Large Scale Distributed Deep Networks

書籍: PRML ,MLAPP,統計學習方法

http://tech.meituan.com/intro_to_logistic_regression.html 有一個應用可以參考一下

http://www.cnblogs.com/ooon/p/5577241.html

http://www.cnblogs.com/ooon/p/5340071.html

http://www.cnblogs.com/ooon/p/4934413.html

http://www.cuishilin.com/2015/10/206.html 為什么選用 sigmod 和最大熵的關系

http://fibears.top/2016/04/08/LRModel/

http://blog.csdn.net/buring_/article/details/43342341 softmax 與 maxent 的等價證明

https://yq.aliyun.com/articles/8990 ***


免責聲明!

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



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