提示:最近系统性地学习推荐系统的课程。我们以小红书的场景为例,讲工业界的推荐系统。
我只讲工业界实际有用的技术。说实话,工业界的技术远远领先学术界,在公开渠道看到的书、论文跟工业界的实践有很大的gap,
看书学不到推荐系统的关键技术。
看书学不到推荐系统的关键技术。
看书学不到推荐系统的关键技术。
王树森娓娓道来**《小红书的推荐系统》**
GitHub资料连接:http://wangshusen.github.io/
B站视频合集:https://space.bilibili.com/1369507485/channel/seriesdetail?sid=2249610
基础知识:
【1】一文看懂推荐系统:概要01:推荐系统的基本概念
【2】一文看懂推荐系统:概要02:推荐系统的链路,从召回粗排,到精排,到重排,最终推荐展示给用户
【3】一文看懂推荐系统:召回01:基于物品的协同过滤(ItemCF),item-based Collaboration Filter的核心思想与推荐过程
【4】一文看懂推荐系统:召回02:Swing 模型,和itemCF很相似,区别在于计算相似度的方法不一样
【5】一文看懂推荐系统:召回03:基于用户的协同过滤(UserCF),要计算用户之间的相似度
【6】一文看懂推荐系统:召回04:离散特征处理,one-hot编码和embedding特征嵌入
【7】一文看懂推荐系统:召回05:矩阵补充、最近邻查找,工业界基本不用了,但是有助于理解双塔模型
【8】一文看懂推荐系统:召回06:双塔模型——模型结构、训练方法,召回模型是后期融合特征,排序模型是前期融合特征
【9】一文看懂推荐系统:召回07:双塔模型——正负样本的选择,召回的目的是区分感兴趣和不感兴趣的,精排是区分感兴趣和非常感兴趣的
【10】一文看懂推荐系统:召回08:双塔模型——线上服务需要离线存物品向量、模型更新分为全量更新和增量更新
【11】一文看懂推荐系统:召回09:地理位置召回、作者召回、缓存召回
【12】一文看懂推荐系统:排序01:多目标模型
【13】一文看懂推荐系统:排序02:Multi-gate Mixture-of-Experts (MMoE)
【14】一文看懂推荐系统:排序03:预估分数融合
【15】一文看懂推荐系统:排序04:视频播放建模
【16】一文看懂推荐系统:排序05:排序模型的特征
【17】一文看懂推荐系统:排序06:粗排三塔模型,性能介于双塔模型和精排模型之间
【18】一文看懂推荐系统:特征交叉01:Factorized Machine (FM) 因式分解机
【19】一文看懂推荐系统:物品冷启01:优化目标 & 评价指标
【20】一文看懂推荐系统:物品冷启02:简单的召回通道
【21】一文看懂推荐系统:物品冷启03:聚类召回
【22】一文看懂推荐系统:物品冷启04:Look-Alike 召回,Look-Alike人群扩散
【23】一文看懂推荐系统:物品冷启05:流量调控
【24】一文看懂推荐系统:物品冷启06:冷启的AB测试
【25】推荐系统最经典的 排序模型 有哪些?你了解多少?
【26】一文看懂推荐系统:排序07:GBDT+LR模型
【27】一文看懂推荐系统:排序08:Factorization Machines(FM)因子分解机,一个特殊的案例就是MF,矩阵分解为uv的乘积
【28】一文看懂推荐系统:排序09:Field-aware Factorization Machines(FFM),从FM改进来的,效果不咋地
【29】一文看懂推荐系统:排序10:wide&deep模型,wide就是LR负责记忆,deep负责高阶特征交叉而泛化
【30】一文看懂推荐系统:排序11:Deep & Cross Network(DCN)
【31】一文看懂推荐系统:排序12:xDeepFM模型,并不是对DeepFM的改进,而是对DCN的改进哦
提示:文章目录
原来是想把FNN和PNN放到一篇博客里一起写了,
主要原因有两个:
1. 是这两个模型都是交大张伟楠老师及合作者的成果;
2. PNN也是对FNN的改进,两者之间存在一定关联。
但最终还是决定分开写,因为放到一起会略显杂乱。
因此,这篇博客的篇幅应该会相对较短,看起来会很舒服。
言归正传,FNN全称Factorisation Machine supported Neural Network,
如果用一句简短的话概括FNN那就是:FM+MLP,
如果再用一句稍显复杂的话概括FNN那就是:
FNN是一个两阶段训练的模型,
阶段一,先训练一个FM模型得到每个field的embedding向量,
阶段二,基于阶段一的embedding向量初始化MLP的embedding层,然后训练一个MLP(DNN)。
这种就比较简单的想法
FNN的整体网络结构如下图所示(图片摘自原论文):

FNN的训练方式带有传统机器学习浓厚的烙印,
并不想深度学习模型那样是end-to-end的,而是两阶段训练方式。
阶段一:使用FM模型训练得到每个field的embedding向量。
阶段二:基于阶段一的embedding向量初始化MLP里的embedding向量,也就是上图中的Dense Real Layer。
然后训练MLP网络得到最终的模型。
至于FM训练得到的embedding向量如何初始化MLP中的embedding向量,
借用一张图能够清晰的看到(图片来自王喆《深度学习推荐系统》):

一般在end-to-end训练DNN(MLP)的embedding层向量时,都是随机初始化的。
而FNN把FM训练好的embedding向量用于初始化DNN的embedding向量,
相当于在初始化DNN的embedding向量时引入了先验知识,
因此能够更好更快的收敛DNN。
正如张伟楠老师在PNN那篇论文中所提到的那样,FNN主要有两个比较大的局限性:
DNN的embedding层质量受限于FM的训练质量。
在FM中进行特征交叉时使用的是隐向量点积,
把FM预训练得到的embedding向量送入到MLP中的全链接层,
MLP的全链接层本质上做的是特征间的线性加权求和,
即做的是『add』的操作,这与FM有点不太统一。
另外,MLP中忽略了不同的field之间的区别,全部采用线性加权求和。
PNN论文中原话如下:
the quality of embedding initialization is largely limited by the factorization machine.
More importantly, the “add” operations of the perceptron layer might not be useful to explore the interactions of categorical data in multiple fields.
关于PNN将在下一篇博客中介绍。
提示:如何系统地学习推荐系统,本系列文章可以帮到你
(1)找工作投简历的话,你要将招聘单位的岗位需求和你的研究方向和工作内容对应起来,这样才能契合公司招聘需求,否则它直接把简历给你挂了
(2)你到底是要进公司做推荐系统方向?还是纯cv方向?还是NLP方向?还是语音方向?还是深度学习机器学习技术中台?还是硬件?还是前端开发?后端开发?测试开发?产品?人力?行政?这些你不可能啥都会,你需要找准一个方向,自己有积累,才能去投递,否则面试官跟你聊什么呢?
(3)今日推荐系统学习经验:两阶段FM+MLP