本文主要是介绍总结提纲--经典算法(推荐系统),希望对大家解决编程问题提供一定的参考价值,需要的开发者们随着小编来一起学习吧!
2016--Yoube--视频推荐DNN
召回阶段也用了DNN(别人家都是用CF、基于内容、基于社交网络等): 输入是{用户画像(包括用户行为video集合+用户行为过的搜索词集合+用户属性),context(地理位置信息...)},输出是(百万个video,每个是一个类别);损失函数是softmax+交叉熵损失;用户实际观看完的video做正样本,用negative-sampling选负样本(一个正样本和上千个负样本,在一次softmax里进行更新);
召回阶段,训练时DNN的输出u视作用户编码向量,和百万个w向量点乘,得到百万个z,通过softmax得到百万个概率p;预测时,可以把百万个w向量看作video编码向量(因为要求的是u和w点乘最大的那上百个w们),所以可以把w放到库里,用KNN检索来近似点乘内积最大;
Ranking阶段: 输入是:{用户画像(包括用户行为video集合+用户属性),context,一个候选video(主要是ID)}; 输出是:一个经过sigmoid后的概率p;
2016--Google--应用商店推荐Wide&Deep
wide侧:人工做特征交叉,负责记忆,倾向于给用户推他已经点击过的东西;
deep侧:embedding+DNN,负责泛化,倾向于给用户推的东西更多样性;(注意:deep侧最后一层的几百个输出值,要和wide几百个交叉后的特征,一起加权相加,再经过softmax,也就是几百对几百,才平衡)
2017--华为--应用商店推荐DeepFM
和Wide&Deep的区别:wide侧用的FM二阶特征交叉,比之前手工特征工程要高效;FM向量和Deep向量是复用的,联合训练;
2017--Google--广告CTR预估公开数据集上的Deep&Cross
和Wide&Deep的区别:wide侧用Cross网络来自动构造有限高阶的交叉特征; 比Deep侧的参数少很多( O(层数*w的维度))
Cross结构:竖着的原始输入x0 * 横着的上层网络输出 * 竖着的权重向量w + bias向量b + 竖着的上层网络输出x(这项是借鉴了ResNet,让前面的网络只拟合残差)
2018--MSRA--xDeepFM
自动构造输入向量的“高阶”特征组合;可惜工业界实际效果一般比不过Wide&Deep和DeepFM;时间复杂度高是痛点;容易过拟合(可对特征做离散化,加dropout来解决)
2018--阿里妈妈--转化率CVR预估
1. ESMM 根据用户行为序列,显示引入CTR和CTCVR作为辅助任务,“迂回” 学习CVR,从而在完整样本空间下进行模型的训练和预测,解决了CVR预估中的2个难题。
2. 可以把 ESMM 看成一个新颖的 Multi-Task-Learning 框架,其中子任务的网络结构是可替换的,当中有很大的想象空间。
2018--阿里--电商广告CTR上的DIN
在Embedding+DNN的基础上,用候选Item和用户行为Item的Attention做权重,对用户行为Item序列做了带权pooling
原理是对用户行为序列进行了按候选Item的不同而区分性对待,每个行为的权重是不同的;
2018--阿里--电商广告CTR上的DIEN
(和DIN的区别只有用户行为序列编码那里)
1.引入RNN对用户行为序列建模;(用户行为序列是时间上的序列,所以很自然联想到RNN)
2.对序列里的中间兴趣和下一时刻的输入行为,进行了相关度建模(附加损失函数对RNN进行了增强);
3.用每时刻的兴趣和该ad特征进行了相关性概率计算,作为下一层GRU单元的update-gate的输入,影响“当前兴趣”和“记忆兴趣”之间的取舍程度;(借鉴了AGRU,把Attention引入RNN,即用户的总的兴趣只和一部分用户行为有关)
2019--阿里--淘宝电商推荐的BST(Transformer)
(和DIN的区别只有用户行为序列编码那里)
用Transformer把用户行为序列和候选item放一起进行特征抽取,所有时刻的输出向量都concatenate起来(行为序列固定长度20,不够就padding)
Transformer的套路:Multi-Head Self-Attention,FFN,position embedding
2019--Facebook--DLRM(主要是工程方面;效果和DCN基本持平,还号称state-of-the-art)
dense特征,经过bottom MLP的变换,得到一个embedding; 和类别特征的embedding们(可选的经过MLP后的向量),两两之间做向量点乘(类似FM的思想),得到的很多乘积串成一个向量,输入到top MLP里面,最后过sigmoid得到点击概率;
Model并行:输入Embedding占内存太大,所以存放在多个device上;
Data并行:top MLP的参数量小,所以每个device上都复制一份,但是处理不同的训练数据;
Embedding的All-to-All通信;MLP梯度的AllReduce;
2016--微软--Item2Vec
把同一个用户点击过的item集合视为sentence,把item视为word,窗口无限大,进行skip-gram&negative-sampling训练,得到的词向量就是item-embedding; 可用于神经网络的输入初始化值,以加快收敛;
同理,User2Vec也行,把item上点击过的用户集合视为sentece, 把用户视为word,得到user-embedding;
本质是基于ItemCF/UserCF协同过滤的,用户点击item的行为为依据;
我的想法:训练item2vec的时候,把该用户对应的集合也用一个embedding表示,参与训练,也能捎带得到user-embedding啊,类似sentence-embedding那种;
这篇关于总结提纲--经典算法(推荐系统)的文章就介绍到这儿,希望我们推荐的文章对编程师们有所帮助!