【机器学习】LR的分布式(并行化)实现
邏輯回歸(Logistic Regression,簡稱LR)是機器學習中十分常用的一種分類算法,在互聯(lián)網領域得到了廣泛的應用,無論是在廣告系統(tǒng)中進行CTR預估,推薦系統(tǒng)中的預估轉換率,反垃圾系統(tǒng)中的識別垃圾內容……都可以看到它的身影。LR以其簡單的原理和應用的普適性受到了廣大應用者的青睞。實際情況中,由于受到單機處理能力和效率的限制,在利用大規(guī)模樣本數(shù)據進行訓練的時候往往需要將求解LR問題的過程進行并行化,本文從并行化的角度討論LR的實現(xiàn)。
LR的基本原理及其推導可以參見邏輯斯蒂回歸(Logistic Regression)詳解
這里只略作回顧:
算法流程:
圖0 求解最優(yōu)化目標函數(shù)的基本步驟LR方法通常采用的是梯度下降法,梯度下降法又有相當多的種類,在這里不做具體的介紹。
回歸梯度下降法的梯度更新公式(一般會取平均值):
并行LR的實現(xiàn)
由邏輯回歸問題的求解方法中可以看出,無論是梯度下降法、牛頓法、擬牛頓法,計算梯度都是其最基本的步驟,并且L-BFGS通過兩步循環(huán)計算牛頓方向的方法,避免了計算海森矩陣。因此邏輯回歸的并行化最主要的就是對目標函數(shù)梯度計算的并行化。從梯度更新公式中可以看出,目標函數(shù)的梯度向量計算中只需要進行向量間的點乘和相加,可以很容易將每個迭代過程拆分成相互獨立的計算步驟,由不同的節(jié)點進行獨立計算,然后歸并計算結果。
將M個樣本的標簽構成一個M維的標簽向量,M個N維特征向量構成一個M*N的樣本矩陣,如圖3所示。其中特征矩陣每一行為一個特征向量(M行),列為特征維度(N列)。
圖1 樣本標簽向量?& 樣本矩陣標題如果將樣本矩陣按行劃分,將樣本特征向量分布到不同的計算節(jié)點,由各計算節(jié)點完成自己所負責樣本的點乘與求和計算,然后將計算結果進行歸并,則實現(xiàn)了“按行并行的LR”。按行并行的LR解決了樣本數(shù)量的問題,但是實際情況中會存在針對高維特征向量進行邏輯回歸的場景(如廣告系統(tǒng)中的特征維度高達上億),僅僅按行進行并行處理,無法滿足這類場景的需求,因此還需要按列將高維的特征向量拆分成若干小的向量進行求解。
????(1) 數(shù)據分割
假設所有計算節(jié)點排列成m行n列(m*n個計算節(jié)點),按行將樣本進行劃分,每個計算節(jié)點分配M/m個樣本特征向量和分類標簽;按列對特征向量進行切分,每個節(jié)點上的特征向量分配N/n維特征。如圖2所示,同一樣本的特征對應節(jié)點的行號相同,不同樣本相同維度的特征對應節(jié)點的列號相同。
圖2 并行LR中的數(shù)據分割一個樣本的特征向量被拆分到同一行不同列的節(jié)點中,即:
其中表示第?行的第?個向量,表示在第?列節(jié)點上的分量。同樣的,用?表示特征向量?在第?列節(jié)點上的分量,即:
????(2) 并行計算
觀察目標函數(shù)的梯度計算公式,其依賴于兩個計算結果:特征權重向量和特征向量的點乘,標量和特征向量的相乘。其中可以將目標函數(shù)的梯度計算分成兩個并行化計算步驟和兩個結果歸并步驟:
①?各節(jié)點并行計算點乘,計算,其中,表示第?次迭代中節(jié)點上的第?個特征向量與特征權重分量的點乘,?為第?次迭代中特征權重向量在第?列節(jié)點上的分量。
②?對行號相同的節(jié)點歸并點乘結果:
計算得到的點乘結果需要返回到該行所有計算節(jié)點中,如圖3所示。
圖3 點乘結果歸并③?各節(jié)點獨立算標量與特征向量相乘:
可以理解為由第?行節(jié)點上部分樣本計算出的目標函數(shù)梯度向量在第?列節(jié)點上的分量。
④?對列號相同的節(jié)點進行歸并:
?就是目標函數(shù)的梯度向量?在第?列節(jié)點上的分量,對其進行歸并得到目標函數(shù)的梯度向量:
這個過程如圖4所示。
圖4 梯度計算結果歸并綜合上述步驟,并行LR的計算流程如圖5所示。比較圖0和圖5,并行LR實際上就是在求解損失函數(shù)最優(yōu)解的過程中,針對尋找損失函數(shù)下降方向中的梯度方向計算作了并行化處理,而在利用梯度確定下降方向的過程中也可以采用并行化(如L-BFGS中的兩步循環(huán)法求牛頓方向)。
圖5 并行LR計算流程小結
看上面的公式什么的可能很復雜,符號標記既模糊又復雜。概括一下,其實很簡單。
1、按行并行。即將樣本拆分到不同的機器上去。其實很簡單,重新看梯度計算的公式:
其中。比如我們按行將其均分到兩臺機器上去,則分布式的計算梯度,只不過是每臺機器都計算出各自的梯度,然后歸并求和再求其平均。為什么可以這么做呢?因為公式只與上一個時刻的以及當前樣本有關。所以就可以并行計算了。
2、按列并行。按列并行的意思就是將同一樣本的特征也分布到不同的機器中去。上面的公式為針對整個,如果我們只是針對某個分量,可得到對應的梯度計算公式即不再是乘以整個,而是乘以對應的分量,此時可以發(fā)現(xiàn),梯度計算公式僅與中的特征有關系,我們就可以將特征分布到不同的計算上,分別計算對應的梯度,最后歸并為整體的,再按行歸并到整體的梯度更新。
這樣來理解其實就避免了繁雜的公式。其實,對于LR的分布式訓練,還是要自己親身體會過那種具有分布式需求的項目。我如是認為。
創(chuàng)作挑戰(zhàn)賽新人創(chuàng)作獎勵來咯,堅持創(chuàng)作打卡瓜分現(xiàn)金大獎總結
以上是生活随笔為你收集整理的【机器学习】LR的分布式(并行化)实现的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: 【机器学习】朴素贝叶斯(Naive Ba
- 下一篇: 【机器学习】主元分析(PCA)以及与SV