Stochastic Gradient Descent


一、從Multinomial Logistic模型說起

1、Multinomial Logistic       

       令X\in R^nd維輸入向量;

            C  \in \{0,1,......k-1\}為輸出label;(一共k類);

            \beta \in \{\beta_0,....\beta_{k-2}\} \in R^n為模型參數向量;

Multinomial Logistic模型是指下面這種形式:

                                                        p(c|x,\beta)=\begin{equation}
\begin{cases}
\frac{e^{\beta_c \cdot x}}{Z_x}\quad &if \quad c<k-1\\
\frac{1}{Z_x} \quad& if \quad c=k-1
\end{cases}
\end{equation}

其中:

                                                        \beta_c \cdot x=\sum\limit_{i<d}{\beta_{c,i} \cdot x_i}

                                                        Z_x=1+\sum\limit_{c<k-1}e^{\beta_c \cdot x}

例如:k=2時,輸出label為0和1,有:

                                                        p(c|x,\beta)=\begin{equation}
\begin{cases}
\frac{e^{\beta_c \cdot x}}{1+e^{\beta_c \cdot x}}\quad &if \quad c=0\\
\frac{1}{1+e^{\beta_c \cdot x}} \quad& if \quad c=1
\end{cases}
\end{equation}

 

2、Maximum Likelihood Estimate and Maximum a Posteriori Estimate

(1)、Maximum Likelihood Estimate

        假設有數據集D =<x_j,c_j>_{j<n},為了訓練一個模型通常使用極大似然法來確定模型參數:

                                                          \beta\limit^{\^}=arg\limit_\beta max \quad p(D|\beta)=arg\limit_\beta max \quad log{\Pi}\limit_{j<n}p(c_j|x_j,\beta)

                                                             =arg\limit_\beta max \sum\limit_{j<n}log \quad p(c_j|x_j,\beta)

(2)、Maximum a Posteriori Estimate       

        假設模型參數\beta的分布服從p(\beta),那么在給定數據集上我們想要找到的最佳參數滿足以下關系:

                                                          \beta\limit^{\^}=arg\limit_\beta max\quad p(\beta|D)

                                                             =arg\limit_\beta max \quad\frac{p(D|\beta)p(\beta)}{p(D)}

                                                             =arg\limit_\beta max\quad p(D|\beta)p(\beta)

利用上面的式子可以定義求解該問題的損失函數:

                                                          \beta\limit^{\^}=arg\limit_\beta max\quad p(D|\beta)p(\beta)

                                                             =arg\limit_\beta min\quad -p(D|\beta)p(\beta)

                                                             \Leftrightarrow  arg\limit_\beta min\quad -log(p(D|\beta)p(\beta))

                                                             \Leftrightarrow  arg\limit_\beta min\quad -[log \quad p(D|\beta)+log \quad p(\beta)]

                                                             \Leftrightarrow  arg\limit_\beta min\quad -[ \sum\limit_{j<n}log \quad p(c_j|x_j,\beta)+ \sum\limit_{j<n}log \quad p(\beta_j|\delta^2)
]

個人認為,從統計學習的角度來說,上面式子第一部分描述了偏差(經驗風險),而第二部分描述了方差(置信風險)。

3、L1-regularized model and L2-regularized model

        對模型參數\beta的分布p(\beta),可以有下面的假設:

(1)、Gaussian Prior

                                                        p(\beta) =\Pi\limit_{c<k-1}\Pi\limit_{i<d}Norm(0,\delta_i^2)(\beta_{c,i})

                                                         Norm(0,\delta_i^2)=\frac{1}{\delta_i\sqrt{2\pi}}\cdot e^{-\frac{\beta_{c,i}^2}{2\delta_i^2}}

(2)、Laplace Prior

                                                         p(\beta) =\Pi\limit_{c<k-1}\Pi\limit_{i<d}Laplace(0,\delta_i^2)(\beta_{c,i})

                                                         Laplace(0,\delta_i^2)=\frac{1}{\delta_i\sqrt{2}}\cdot e^{-\sqrt{2}\cdot \frac{|\beta_{c,i}|}{\delta_i^}}

\beta \~Gaussian Prior時,叫做L2-regularized:

                                                         \beta_{MAP}=arg\limit_\beta min\quad -[ \sum\limit_{j<n}log \quad p(c_j|x_j,\beta)- C \cdot \sum\limit_{j<n}\beta_{j}^2]

\beta \~Laplace Prior
時,叫做L1-regularized:

                                                         \beta_{MAP}=arg\limit_\beta min\quad -[ \sum\limit_{j<n}log \quad p(c_j|x_j,\beta)- C \cdot \sum\limit_{j<n}|\beta_{j}|]

在這里常數C是一個用來調節偏差與方差的調節因子:

        ●C很小時,強調likelihood,此時會造成Overfit;

        ●C很大時,強調regularization,此時會造成Underfit。

在相同\delta_i的條件下,Gaussian Prior和Laplace Prior的比較如下:

image

圖1 - 紅色為Laplace Prior,黑色為Gaussian Prior          

 

4、L1-regularized model ?or L2-regularized model?

目前主流的方法都選擇用L1-regularized,包括各種L-BFGS(如:OWL-QN)和各種SGD方法,主要原因如下:

        ●我們要優化的目標是:

                                                       \beta=  arg\limit_\beta min\quad -[ \sum\limit_{j<n}log \quad p(c_j|x_j,\beta)+ \sum\limit_{j<n}log \quad p(\beta_j|\delta^2)
]

           從圖1可以看出,要想讓log \quad p(\beta_j|\delta^2)取得最大值,權重向量需要靠近其mean值(也就是0),顯然服從Laplace Prior的權重向量下降速度要快於服從Gaussian Prior的;

        ●以k=2時的梯度下降算法為例,權重\beta的更新方式如下:

           ○ Gaussian Prior:         

                                                      \beta_{i+1}=\beta_i+\lambda_i [(y_i-p_i)x_i-\frac{\beta_i}{\delta_i^2}]

           ○ Laplace Prior:

                                 當\beta_i>0時,\beta_{i+1}=\beta_i+\lambda_i [(y_i-p_i)x_i-\frac{\sqrt{2}}{\delta_i}]

                                 當\beta_i<0時,\beta_{i+1}=\beta_i+\lambda_i [(y_i-p_i)x_i+\frac{\sqrt{2}}{\delta_i}]

                                 當y_i-p_ix_i同號時表明沒有誤分,權重的絕對值會以一個比較小的速度更新,而當y_i-p_ix_i異號時誤分發生,權重的絕對值會以一個比較大的速度更新。

        ●將權重更新看成兩個階段:likelihood + regularization,暫時不考慮likelihood,那么k次迭代后有下面關系:

           ○ Gaussian Prior:        

                                                     

           ○ Laplace Prior:

                                 當\beta_i>0時,

                                 當\beta_i<0時,

  

            當,雖然前者的極限值為0,但是不會精確為0,而后者每次更新一個常數,這就意味着理論上后者可能會精確的將權重更新為0。

        ●L1-regularized能夠獲得稀疏的feature,因此模型訓練過程同時在進行feature selection。

        ●如果輸入向量是稀疏的,那么Laplace Prior能保證其梯度也是稀疏的。

 

二、L1-Stochastic Gradient Descent

1、Naive Stochastic Gradient Descent

        隨機梯度下降算法的原理是用隨機選取的Training Set的子集來估計目標函數的梯度值,極端情況是選取的子集只包含一條Sample,下面就以這種情況為例,其權重更新方式為:

                                                       \beta_{i}^{k+1}=\beta_i^k+\lambda_k [(y_i-p_i)x_i- Csign(\beta_i)]

                                                       sign(x)=\begin{equation}
\begin{cases}
&1  &x>0\\
&0  &x=0\\
-&1 &x<0\\
\end{cases}
\end{equation}

這種更新方式的缺點如下:

        ●每次迭代更新都需要對每個feature進行L1懲罰,包括那些value為0的沒有用到的feature;

        ●實際當中在迭代時能正好把權重值更新為0的概率很小,這就意味着很多feature依然會非0。

2、Lazy Stochastic Gradient Descent

        針對以上問題,Carpenter在其論文《Lazy Sparse Stochastic Gradient Descent for Regularized Mutlinomial Logistic Regression》(2008)一文中進行了有效的改進,權重更新采用以下方式:

                                                       \beta_{i}^{k+1}=\beta_i^k+\lambda_k (y_i-p_i)x_i

                                                       if \quad\quad\quad\quad \beta_i^{k+1}>0 \quad\quad\quad\quad then

                                                             \beta_{i}^{k+1}=\max(0,\beta_i^{k+1}-C\cdot \lambda_k)

                                                       else \quad \quad if \quad\quad\quad\quad \beta_i^{k+1}<0 \quad\quad\quad\quad then

                                                             \beta_{i}^{k+1}=\min(0,\beta_i^{k+1}+C\cdot \lambda_k)

這種更新方式的優點如下:

        ●通過這樣的截斷處理,使得懲罰項不會改變函數值符號方向,同時也使得0權重能夠自然而然地出現;

        ●算法中使用lazy fashion,對那些value為0的feature不予更新,從而加快了訓練速度。

這種方式的缺點:

        ●由於采用比較粗放的方式估計真實梯度,會出現權重更新的波動問題,如下圖:

image

3、Stochastic Gradient Descent with Cumulative Penalty

        這個方法來源於Yoshimasa Tsuruoka、Jun’ichi Tsujii和 Sophia Ananiadou的《Stochastic Gradient Descent Training for L1-regularized Log-linear Models with

Cumulative Penalty》(2009)一文,其權重更新方法如下:

 

                                                       \beta_{i}^{k+\frac{1}{2}}=\beta_i^k+\lambda_k (y_i-p_i)x_i

                                                       if \quad\quad\quad\quad \beta_i^{k+\frac{1}{2}}>0 \quad\quad\quad\quad then

                                                             \beta_{i}^{k+1}=\max(0,\beta_i^{k+\frac{1}{2}}- (u^k+q_i^{k-1}))

                                                       else \quad \quad if \quad\quad\quad\quad \beta_i^{k+\frac{1}{2}}<0 \quad\quad\quad\quad then

                                                             \beta_{i}^{k+1}=\min(0,\beta_i^{k+\frac{1}{2}}} + (u^k-q_i^{k-1}))

其中:

           u^k=C\cdot \sum\limit_{t=1}^k{\lambda_t},表示每個權重在第k次迭代時,理論上能夠得到的累積懲罰值;

            q_i^k=\sum\limit_{t=1}^k{(w_i^{t+1}-w_i^{t+\frac{1}{2}})} ,表示當前權重已經得到的累加懲罰值。

算法描述如下:

image

 

 

 

 

 

 

 

 

 

 

 

 

       

 

 

 

 

 

關於學習率的確定,傳統的方法是:

                                                      \lambda_k=\frac{\lambda_0}{1+k}  , 其中k為第k次迭代

這種方法在實際當中的收斂速度不太理想,這篇論文提出以下方法:

                                                      \lambda_k=\lambda_0 \alpha^{-k}, 其中k為第k次迭代

在實際當中表現更好,但要注意在理論上它不能保證最終的收斂性,不過實際當中都有最大迭代次數的限制,因此這不是什么大問題。

        與Galen Andrew and Jianfeng Gao的《 Scalable training of L1-regularized log-linear models》(2007)提出的OWL-QN方法相比較如下:

image

image

 

4、Online Stochastic Gradient Descent

        由於L1-regularized權重迭代更新項為常數,與權重無關,因此以N為單位批量更新Sample一次的效果和每次更新一個Sample一共更新N次的效果是一樣一樣的,因此采用這種方法只用在內存中存儲一個Sample和模型相關參數即可。

5、Parallelized Stochastic Gradient Descent

        Martin A. Zinkevich、Markus Weimer、Alex Smola and Lihong Li.在《Parallelized Stochastic Gradient Descent》一文中描述了簡單而又直觀的並行化方法:

image

image

 

 

 

 

以及

image

        下一步考慮把這個算法在Spark上實現試試,還得用時實踐來檢驗的。

 

三、參考資料

1、Galen Andrew and Jianfeng Gao. 2007. 《Scalable training of L1-regularized log-linear models》. In Proceedings of ICML, pages 33–40.

2、Bob Carpenter. 2008.《 Lazy sparse stochastic gradient descent for regularized multinomial logistic regression》.Technical report, Alias-i.

3、Martin A. Zinkevich、Markus Weimer、Alex Smola and Lihong Li. 《Parallelized Stochastic Gradient Descent》.Yahoo! Labs

4、John Langford, Lihong Li, and Tong Zhang. 2009. 《Sparse online learning via truncated gradient》. The Journal of Machine Learning Research (JMLR), 10:777–801.

5、Charles Elkan.2012.《Maximum Likelihood, Logistic Regression,and Stochastic Gradient Training》.

 

四、相關開源軟件

1、wapiti:http://wapiti.limsi.fr/ 

2、sgd2.0:http://mloss.org/revision/view/842/ 

3、 scikit-learn:http://scikit-learn.org/stable/

4、 Vowpal Wabbit:http://hunch.net/~vw/

5、deeplearning:http://deeplearning.net/

6、LingPipe:http://alias-i.com/lingpipe/index.html


免責聲明!

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



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