劉平
2019年9月4日
核心思想
-
基於DSGD對NMF非負矩陣分解算法進行優化。
-
DSGD指通過對訓練數據集進行一定的劃分,在劃分的每個數據子集裏運行SSGD,通過每個子結果得到整個訓練數據的結果。
算法流程和感想
-
NMF非負矩陣分解:
NMF矩陣分解常採用的損失函數是:
-
優化損失函數時,採用隨機梯度下降法(SGD),在每一次迭代時不同於梯度下降法每一次迭代都是用所有訓練數據來計算,而是一次迭代僅採用一個樣本來計算,進而大大加快算法運行速度。
-
標準的隨機梯度下降法(SSGD)要實現收斂,對步長、損失函數的形式等有一定的要求,在滿足條件:
之後,通過對算法的具體設計來滿足步長不在目標處無限振盪、有足夠速度收斂到目標點,損失函數一階可微等其他可被調整設計進而滿足的條件。 -
有以上基礎準備後,DSGD優化的大規模矩陣的分解算法可以描述爲:對總體訓練數據進行分層,較優的分層方法是隨機不放回分層(Without-replacement selection),利用MapReduce的框架實現分佈式計算,將每一層的計算分配到不同主機,再分別獨立運行SSGD,每一層的結果的再彙總,進而得到整體訓練數據的結果。
-
每層的訓練結果可以進行彙總,主要是因爲:
因而可以直接將分佈式的每個層次更新的結果累加到整體的結果上。
- 在這種更新條件下,WRS選擇的不同的層次貢獻的更新有可能存在衝突重寫,即兩者對於總體的貢獻抵消,這種情況下似乎會存在某種情況使得總體結果不收斂。但我們討論的是Large-Scale的矩陣,在其足夠稀疏的情況下,即使有衝突重寫,結果依然可以收斂。(Hsieh C,Dhillon I S.Fast coordinate descent methods with variable selection for non-negative matrix factorization)