FM & FFM

也是一篇早就要写的文章,对 https://www.jianshu.com/p/152ae633fb00 和 https://www.jianshu.com/p/781cde3d5f3d 做的总结

FM的基础我感觉是LR(震惊,好像都没有sigmoid,就是纯线性),在线性的基础上加上更多的人工特征组合,方便模型进行记忆(比如user特征gender_id和item特征某店铺shop_id,组合一下就可能和label很相关,类似女性+雅诗兰黛?);

但是如果是有很多id类特征又是做的one-hot而不是embedding,那就会多出很多参数(每one-hot一次再一组合就多一堆参数,比如说总共两个特征shop和gender,shop有五个选择,gender有两个,那除了原有的5+2个又多了(5+2)*(5+2-1)/2个,都是shopid下的也要组合一次)

所以为了减少参数的数量,同时也方便进行参数的学习,FM的做法就是给每个one-hot之后的特征(比如shop就是5个特征了)配一个辅助向量,用到的时候就用辅助向量和对方特征的辅助向量相乘,作为组合特征的参数:


思想就是上面这样,求解的方式就是细枝末节了,也贴一下吧,利用了(矩阵-对角线)/2求解:

FFM在FM上的修改呢,就是把每个辅助向量做了影分身,也就是说shop和shop组合的时候的辅助向量,与shop和gender组合的时候的辅助向量是两个,这里的shop和gender被叫做不同的filed:

比如这里有四类特征user movie genre和price,除了genre外其他的都只有一个值,那就是说one-hot也只有一维,总共5维(同一个filed的genre有两维),组合特征就是有5*4/2=10项

这里红色是field编号,蓝色是特征编号,以第一个为例就是user针对movie的影分身向量和movie针对user的影分身向量乘在了一起;其他类似

这里重点在于第三列,就是对于还是genre这个filed下的特征4,特征1、2、3都用的还是genre这个影分身向量(红色的3)。

所以FFM就是对不同的filed会用不同的影分身,在同一个filed内用相同的影分身的FM。

最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。

推荐阅读更多精彩内容