Fatorization Machine(FM)

machine learing

Fatorization machine FM 实现

1. 公式

这里考虑FM的输入是只有一个field (fields一般有 User, Item, Tag等不同的fields。如果在DeepFM里面有多个fields(每个field有多个embedding vectors和对应的feature values), 那么就先把每个field里面的embedding vectors先加起来,这样每个field对应一个pooling后的embedding vector, 之后再做FM的交叉)的feature vector x (只有一个field直接FM交叉多个embedding vectors,如果有多个field,先pooling embedding vector使每个field只有一个embedding后再交叉), 里面可以是continuous value也可以是sparse value,每个value都有对应的embedding vector,交叉时要把continuous value和 embedding vector element-wise相乘作为rescale,而sparse feature作为lookup table的形式选择

2. 化简

第二项可以化简成一个 时间复杂度为O(kn)的计算形式, FM的计算是完全是线性的, 这也是FM的一个相对于传统人工交叉特征的优势

另外如果最外层的loop 不把k个value相加,就会得到一个交叉后的embedding vector, 这个vector可以用作Neural FM的DNN的输入进行学习

3. PyTorch Code

4. Reference

https://github.com/rixwew/pytorch-fm/blob/f74ad19771eda104e99874d19dc892e988ec53fa/torchfm/layer.py#L64

Last updated

Was this helpful?