2019年9月4日
核心思想
-
基于DSGD对NMF非负矩阵分解算法进行优化。
-
DSGD指通过对训练数据集进行一定的划分,在划分的每个数据子集里运行SSGD,通过每个子结果得到整个训练数据的结果。
算法流程和感想
-
NMF非负矩阵分解:
V n × m = W m × k H k × n V_{n \times m}=W_{m \times k}H_{k \times n} Vn×m=Wm×kHk×n
NMF矩阵分解常采用的损失函数是:
1. 平方距离: ∣ ∣ A − B ∣ ∣ 2 = ∑ i , j ( A i , j − B i , j ) 2 \mathbf{1}.平方距离:||A-B||^2=\sum_{i,j}(A_{i,j}-B_{i,j})^2 1.平方距离:∣∣A−B∣∣2=i,j∑(Ai,j−Bi,j)22. K L 散度: D ( A ∣ ∣ B ) = ∑ i , j ( A i , j l o g A i , j B i , j − A i , j + B i , j ) \mathbf{2}.KL散度:D(A||B)=\sum_{i,j}(A_{i,j}log\frac{A_{i,j}}{B_{i,j}}-A_{i,j}+B_{i,j}) 2.KL散度:D(A∣∣B)=i,j∑(Ai,jlogBi,jAi,j−Ai,j+Bi,j)
-
优化损失函数时,采用随机梯度下降法(SGD),在每一次迭代时不同于梯度下降法每一次迭代都是用所有训练数据来计算,而是一次迭代仅采用一个样本来计算,进而大大加快算法运行速度。
-
标准的随机梯度下降法(SSGD)要实现收敛,对步长、损失函数的形式等有一定的要求,在满足条件:
ϵ n − ϵ n + 1 ϵ n = O ( ϵ n ) , { ϵ n } 为步长序列;并且 ∀ θ ∈ H , lim n → ∞ ϵ n ∑ i = 0 n − 1 [ L γ i ′ ( θ ) − L ′ ( θ ) ] = 0. \frac{\epsilon _ n - \epsilon _{n+1}}{\epsilon _n}=O(\epsilon _ n),\{ {\epsilon _n } \}为步长序列;并且 \forall \theta\in H, \lim_{n\rightarrow \infin}\epsilon _n\sum_{i=0}^{n-1}[L_{\gamma_i}^{\prime}(\theta)-L^{\prime}(\theta)]=0. ϵnϵn−ϵn+1=O(ϵn),{ϵn}为步长序列;并且∀θ∈H,n→∞limϵni=0∑n−1[Lγi′(θ)−L′(θ)]=0.
之后,通过对算法的具体设计来满足步长不在目标处无限振荡、有足够速度收敛到目标点,损失函数一阶可微等其他可被调整设计进而满足的条件。 -
有以上基础准备后,DSGD优化的大规模矩阵的分解算法可以描述为:对总体训练数据进行分层,较优的分层方法是随机不放回分层(Without-replacement selection),利用MapReduce的框架实现分布式计算,将每一层的计算分配到不同主机,再分别独立运行SSGD,每一层的结果的再汇总,进而得到整体训练数据的结果。
-
每层的训练结果可以进行汇总,主要是因为:
对于每一层数据 { γ i ∣ i = 1... n } ,其两两之间具有互换性( I n t e r h a n g e a b i l i t y ) , 对于每一层数据\{\gamma_i\ | i=1...n\},其两两之间具有互换性(Interhangeability), 对于每一层数据{γi ∣i=1...n},其两两之间具有互换性(Interhangeability),也就是说整个参数更新的过程是再生过程( R e g e n e r a t i v e p r o c e s s ) . 也就是说整个参数更新的过程是再生过程(Regenerative\ process). 也就是说整个参数更新的过程是再生过程(Regenerative process).
因而可以直接将分布式的每个层次更新的结果累加到整体的结果上。
- 在这种更新条件下,WRS选择的不同的层次贡献的更新有可能存在冲突重写,即两者对于总体的贡献抵消,这种情况下似乎会存在某种情况使得总体结果不收敛。但我们讨论的是Large-Scale的矩阵,在其足够稀疏的情况下,即使有冲突重写,结果依然可以收敛。(Hsieh C,Dhillon I S.Fast coordinate descent methods with variable selection for non-negative matrix factorization)