推荐算法(二)DeepFM

  • PNN:在P部分会损失一些关键信息,因为使用的是降维
  • DeepCrossing:会将所有特征进行交叉,没有针对性
  • 简单模型:泛化能力不足,忽略高阶的交互
  • FM:只考虑二阶交叉,高阶会增加计算量,复杂度高
  • DNN/MLP:天然高阶,低阶的交叉会忽略

DeepFM理论:

        组合其他模型,改进了LR、FM、DNN。在wide&deep的基础上,将wide部分的LR,换成能考虑低阶交叉的FM

层级结构

  • 特征域 sparse features作为第一层,稀疏,然后放入dense embeddings全连接网络embedding层,然后分别放入FM layer和Hidden layer全连接层,两者结合再output units。
  • embedding特点:黑线表示embedding的参数是通过hidden端深度神经网络进行更新的,更新好了之后,红线FM端直接拿结果来用,无需同时进行参数更新
  • FM部分
  • Deep部分:全连接层,用于学习高阶特征之间的交互
  • FM和DNN共享embedding的好处:同时学习低阶和高阶的特征交互,不需要专业的特征工程
  • 特征交互:
  1. 同时考虑多个特征(组合多个特征)来进行CTR预估,特征之间的联动,一个特征伴随着另一个特征的出现。
  2. 二阶特征交互:如在用餐时间下载外卖app,代表应用类别和时间戳之间的交互。
  3. 三阶/高阶特征交互:如男性青少年喜欢射击游戏,就是应用类别、用户性别和年龄的交互。
  • MLP经验:

  1. embedding的维度一般不超过50维,10-50
  2. 层数一般不超过3层,2层即可
  3. 神经元个数一般128,不超过500

与PNN、FNN、W&D进行对比

  • FNN:以预训练FM为底层,使模型能力受限于FM表征能力的上限,且只考虑高阶交互,因为底层是串联的结构,所以最后的维度是越交互越复杂
  • PNN:IPNN的内积计算非常复杂,OPNN的外积近似计算损失很多信息,结果不稳定,且忽略了低阶交互,因为整个网络是越来越复杂
  • W&D:虽然考虑到了低阶和高阶的交互,兼顾了模型的泛化和记忆,但wide部分输入需要专业的特征工程经验,考虑了低阶部分去保留信息但是需要人工组合

DeepFM:在wide&deep的基础上,将wide部分的LR,换成能考虑低阶交叉的FM,并wide部分和deep部分通过低阶和高阶特征交互来影响特征表示,从而更精确的对特征表示进行建模的策略共享了特征embedding,解决了上面的问题。

pytorch搭建DeepFM

  • 数据集处理
  • 实现网络class DeepFM:
  1. 构建embedding层级
  2. hidden插入0维,将两个维度结合起来,代表所有神经元的个数
  3. 定义fm layer:传入embedding维度,神经元个数,输入维度,最后一层是逻辑回归层

  • 定义前向传播:
  1. 把离散特征和连续特征进行拼接作为fm和dnn的输入,x维度
  2. wide维度:1
  3. deep维度:dnn之后的维度再经过一层线性层,维度会变成1
  • 实现网络class FM:
  1. 输入embedding维度,和所有神经元个数
  2. 按照公式去定义一些训练参数,w0是0维的,用0进行初始化,w1是个一阶向量,维度是feature_num,有多少个x就有多少个w,数量要对应
  3. 二阶维度w2:
  4. 一阶交叉&二阶交叉:从公式到代码

  •  公式到代码

  • 1
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

想要好好撸AI

你的鼓励就是我最大的创作动力!

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值