![构建企业级推荐系统:算法、工程实现与案例分析](https://wfqqreader-1252317822.image.myqcloud.com/cover/215/39888215/b_39888215.jpg)
上QQ阅读APP看书,第一时间看更新
7.2.3 分解机模型求解
分解机模型公式相对简单,完全可导,我们可以用平方损失函数、logit损失函数或hinge损失函数来学习FM模型。从7.2.2节的介绍我们知道,分解机模型的值可以在线性时间复杂度计算出来,因此FM的模型参数(w0,w,V)可以在工程实现上高效地利用梯度下降算法(SGD、ALS等)来训练(即我们可以通过线性时间复杂度求出下面的ex,所以在迭代更新参数时是非常高效的,见下面的迭代更新参数的公式)。结合式(7-1)和式(7-2),就很容易计算出FM模型的梯度,具体如下:
![](https://epubservercos.yuewen.com/2D1332/20784355001359006/epubprivate/OEBPS/Images/126-i.jpg?sign=1739047452-GKPPJ2JYxsJK6DEZfFGzrSvkvPECJTCu-0-abe20434def7f1f93eebf27a0a26e30b)
记,针对平方损失函数,具体的参数更新公式如下(未增加正则项,其他损失函数的迭代更新公式类似,也很容易推导出来):
![](https://epubservercos.yuewen.com/2D1332/20784355001359006/epubprivate/OEBPS/Images/126-3-i.jpg?sign=1739047452-EbBbf4NVpkluldP2AHWKNTpb0GC26VjX-0-21bc8776ebe24068c9ef69bc5f0a064a)
其中,与i无关,因此可以事先计算出来(在做预测求
或者在更新参数时,都需要计算该量)。上面的梯度可以在常数时间复杂度O(1)下计算出来。在模型训练更新时,在O(kn)时间复杂度下即可完成对样本(x,y)的更新(如果是稀疏情况,更新时间复杂度是O(km(x)),m(x)是特征x非零元素个数)。7.4节会细讲怎么进行模型训练。