文章目录

  • 深度学习模型需要加强处理特征交叉的能力
  • 传统的机器学习模型FM
  • 深度学习模型DeepFM
  • 特征交叉新方法:元素积操作
  • DeepFM的TensorFlow实现

深度学习模型需要加强处理特征交叉的能力

  • 传统的Embedding MLP和Wide&Deep模型都没有针对性的处理特征交叉问题。虽然MLP有拟合任意函数的能力,但这是建立在MLP有任意多层网络,以及任意多个神经元的前提下的。因为在训练资源有限,调参时间有限的现实情况下,MLP对于特征交叉的处理其实还比较低效。
  • MLP是通过concatenate层把所有特征连接在一起成为一个特征向量的,这里面没有特征交叉,两两特征之间没有发生任何关系。
  • 这个时候,人为地加入一些负责特征交叉的模型结构,其实对提升模型效果会非常有帮助。例如在Sparrow RecSys项目的训练样本中其实有两个这样的特征,一个是用户喜欢的电影风格,一个是电影本身的风格,这两个特征明显具有很强的相关性。如果我们能让模型利用起这样的相关性,肯定会对最后的推荐效果有正向的影响。

传统的机器学习模型FM

  • 因子分解机模型(Factorization Machine)简称FM,是一种解决特征交叉的机器学习模型。
  • FM模型架构图
  • 从上图中可以看到底层One-hot特征通过embedding层转换为稠密的embedding向量。 FM层是用来来专门处理特征之间的交叉问题的,FM层中有多个内积操作单元对不同特征向量进行两两组合,这些操作单元会把不同特征的内积操作的结果输入最后的输出神经元,以此来完成最后的预测。

深度学习模型DeepFM

  • 我们可以把FM跟其他深度学习模型组合起来,生成一个全新的既有强特征组合能力,又有强拟合能力的模型。最终就诞生了DeepFM模型。
  • DeepFM模型架构图:
  • 如上图,DeepFM利用了Wide&Deep组合模型的思想,用FM替换了 Wide&Deep左边的Wide部分,加强了浅层网络部分特征组合的能力,而右边的部分跟Wide&Deep的Deep部分一样,主要利用多层神经网络进行所有特征的深层处理,最后的输出层是把FM部分的输出和 Deep 部分的输出综合起来,产生最后的预估结果。这就是DeepFM的结构。

特征交叉新方法:元素积操作

  • FM和DeepFM中进行特征交叉的方式,都是进行Embedding向量的点积操作。当然,特征交叉还有新的方法叫元素积操作。举个例子,NFM(Neural Factorization Machines,神经网络因子分解机)采用的就是元素积操作,架构图如下:
  • Embedding层和MLP层中间添加了Bi-Interaction Pooling层(两两特征交叉池化层)。假设 Vx 是所有特征域的 Embedding 集合,那么特征交叉池化层的具体操作公式如下:
  • 元素积也称为哈达玛乘积或舒尔积,具体的定义为:若两个矩阵AB具有相同的维度m × n,则它们的哈达玛积A ∘ B是一个具有相同维度的矩阵,其元素值为:
  • 在进行两两特征Embedding向量的元素积操作后,再求取所有交叉特征向量之和,我们就得到了池化层的输出向量。接着,我们再把该向量输入上层的多层全连接神经网络,就能得出最后的预测得分。
  • 总的来说,NFM使用元素积的操作,在得到交叉特征向量之后,采用了求和的池化操作,把它们叠加起来。

DeepFM的TensorFlow实现

  • 读取数据,定义特征,训练模型等实现代码之前已经实现,本章节主要是从模型定义来进行代码实现:
item_emb_layer = tf.keras.layers.DenseFeatures([movie_emb_col])(inputs)
user_emb_layer = tf.keras.layers.DenseFeatures([user_emb_col])(inputs)
item_genre_emb_layer = tf.keras.layers.DenseFeatures([item_genre_emb_col])(inputs)
user_genre_emb_layer = tf.keras.layers.DenseFeatures([user_genre_emb_col])(inputs)# FM部分
product_layer_item_user = tf.keras.layers.Dot(axes=1)([item_emb_layer, user_emb_layer])
product_layer_item_genre_user_genre = tf.keras.layers.Dot(axes=1)([item_genre_emb_layer, user_genre_emb_layer])
product_layer_item_genre_user = tf.keras.layers.Dot(axes=1)([item_genre_emb_layer, user_emb_layer])
product_layer_user_genre_item = tf.keras.layers.Dot(axes=1)([item_emb_layer, user_genre_emb_layer])# Deep部分
deep = tf.keras.layers.DenseFeatures(deep_feature_columns)(inputs)
deep = tf.keras.layers.Dense(64, activation='relu')(deep)
deep = tf.keras.layers.Dense(64, activation='relu')(deep)# 连接FM部分与Deep部分
concat_layer = tf.keras.layers.concatenate([product_layer_item_user, product_layer_item_genre_user_genre,product_layer_item_genre_user, product_layer_user_genre_item, deep], axis=1)
output_layer = tf.keras.layers.Dense(1, activation='sigmoid')(concat_layer)model = tf.keras.Model(inputs, output_lay)
  • 在构建FM部分的时候,先为FM部分选择了4个用于交叉的类别型特征,分别是用户ID、电影ID、用户喜欢的风格和电影自己的风格。接着使用Dot layer把用户特征和电影特征两两交叉,这就完成了FM部分的构建。
  • Deep部分的实现,其实和之前Wide&Deep模型的Deep部分完全一样。只不过最终使用concatenate层,去把FM部分的输出和Deep部分的输出连接起来,输入到输出层的sigmoid神经元,从而产生最终的预估分数。

推荐系统模型训练DeepFM算法相关推荐

  1. 带你认识大模型训练关键算法:分布式训练Allreduce算法

    摘要:现在的模型以及其参数愈加复杂,仅仅一两张的卡已经无法满足现如今训练规模的要求,分布式训练应运而生. 本文分享自华为云社区<分布式训练Allreduce算法>,原文作者:我抽签必中. ...

  2. 推荐系统模型训练中的注意力机制

    文章目录 注意力机制 深度兴趣网络DIN 兴趣进化序列模型DIEN 注意力机制 注意力机制来源于人类天生的"选择性注意"的习惯,我们使用注意力机制就是要让机器也有用和人类一样的选择 ...

  3. 如何利用DeepFM算法设计推荐系统

    经过了十几年的发展,推荐系统在互联网行业已经变得越来越流行.从早年没有一个合适的产品形态,到如今在今日头条和抖音等商业产品中发挥重要作用,推荐系统已经越来越受到互联网公司和研究界学者的重视. 早年的推 ...

  4. 【推荐实践】推荐系统中模型训练及使用流程的标准化

    文章作者:梁超 腾讯 高级工程师 编辑整理:Hoh Xil 内容来源:DataFun AI Talk 导读:本次分享的主题为推荐系统中模型训练及使用流程的标准化.在整个推荐系统中,点击率 ( CTR ...

  5. 推荐系统[二]:召回算法超详细讲解[召回模型演化过程、召回模型主流常见算法(DeepMF/TDM/Airbnb Embedding/Item2vec等)、召回路径简介、多路召回融合]

    搜索推荐系统专栏简介:搜索推荐全流程讲解(召回粗排精排重排混排).系统架构.常见问题.算法项目实战总结.技术细节以及项目实战(含码源) 专栏详细介绍:搜索推荐系统专栏简介:搜索推荐全流程讲解(召回粗排 ...

  6. spark写出分布式的训练算法_利用 Spark 和 scikit-learn 将你的模型训练加快 100 倍...

    在 Ibotta,我们训练了许多机器学习模型.这些模型为我们的推荐系统.搜索引擎.定价优化引擎.数据质量等提供动力.它们在与我们的移动应用程序交互时为数百万用户做出预测. 当我们使用 Spark 进行 ...

  7. 独孤九剑:算法模型训练的一般流程

    这篇文章主要分享一下模型训练的一般流程,目的是让大家明白做一个算法模型过程中会涉及的流程和数据特征在算法模型中的重要性. 作为一名算法工程师训练模型可谓是家常便饭,不管是做推荐中的召回模型.排序模型还 ...

  8. Spark排序算法系列之(MLLib、ML)LR使用方式介绍(模型训练、保存、加载、预测)

    转载请注明出处:http://blog.csdn.net/gamer_gyt 博主微博:http://weibo.com/234654758 Github:https://github.com/thi ...

  9. 【算法 独孤九剑】算法模型训练的一般流程

    无意中发现了一个巨牛的人工智能教程,忍不住分享一下给大家.教程不仅是零基础,通俗易懂,而且非常风趣幽默,像看小说一样!觉得太牛了,所以分享给大家.点这里可以跳转到教程.人工智能教程 这篇文章主要分享一 ...

最新文章

  1. deeplearning 重要调参参数分析
  2. Java 项目UML反向工程转化工具
  3. c语言运算优先级记忆方法
  4. 有了Debug权限就能干坏事?小心了,你的一举一动尽在系统监控中
  5. 基于Flume的美团日志收集系统(一)架构和设计
  6. EhCache 常用配置项详解
  7. js全局变量和局部变量名称一样_微信小程序的全局变量、页面变量,你真的掌握了?...
  8. java面试关于ssh的_[Java教程]ssh面试题
  9. 无人驾驶油电混动牵引车_联合卡车新能源“秀肌肉”!客户已下单的混动/纯电重卡好在哪儿...
  10. 如何实现在已有代码之后添加逻辑之继承,组合(静态代理)实现方法
  11. oracle密码过期了,oracle密码过期的彻底解决方案
  12. JS实现轮播图(超详细代码注释)
  13. redis的基本命令
  14. Changer常用的软件
  15. (1)电源管理-S3C2440芯片电源管理模块解析
  16. 腾讯云之轻量应用服务器搭建Socks5代理服务器实现游戏单窗口单IP
  17. HTML5期末考核大作业网站——卫生与健康HTML+CSS+JavaScript
  18. linux mysql dengl_linux环境搭建(四)--MYSQL
  19. Java项目-基于Springboot实现的自动化测试平台
  20. java 入参校验_Java Validation方法入参校验实现过程解析

热门文章

  1. SYNTHIA-RAND-CITYSCAPES数据集云盘下载
  2. 词语接龙计算机教案,大班语言词语接龙教案.docx
  3. 初识LTE(三):码率匹配和码率分块
  4. 饿了么拿什么留住年轻人?
  5. PICO-8学习日志Week2.0【利用PICO-8制作Pong】
  6. 干货满满的信息可视化设计大科普(小白白篇)
  7. 5次Shift会触发粘滞键的妙用(转)
  8. html alt属性怎么加,alt属性
  9. go分割字符串,按照多个字符分割。
  10. 数据驱动编程与表驱动法(多if-else结构精简)