DeepFM模型介绍

DeepFM模型

1.模型简介

CTR预估是目前推荐系统的核心技术,其目标是预估用户点击推荐内容的概率。DeepFM模型包含FM和DNN两部分,FM模型可以抽取low-order(低阶)特征,DNN可以抽取high-order(高阶)特征。低阶特征可以理解为线性的特征组合,高阶特征,可以理解为经过多次线性-非线性组合操作之后形成的特征,为高度抽象特征。无需Wide&Deep模型人工特征工程。由于输入仅为原始特征,而且FM和DNN共享输入向量特征,DeepFM模型训练速度很快。Wide&Deep是一种融合浅层(wide)模型和深层(deep)模型进行联合训练的框架,综合利用浅层模型的记忆能力和深层模型的泛化能力,实现单模型对推荐系统准确性和扩展性的兼顾。

2.DeepFM模型结构

为了同时利用low-order和high-order特征,DeepFM包含FM和DNN两部分,两部分共享输入特征。对于特征i,标量wi是其1阶特征的权重,该特征和其他特征的交互影响用隐向量Vi来表示。Vi输入到FM模型获得特征的2阶表示,输入到DNN模型得到high-order高阶特征。

y ^ = s i g m o i d ( y F M + y D N N ) \hat{y} = sigmoid(y_{FM} + y_{DNN}) y^=sigmoid(yFM+yDNN)

DeepFM模型结构如下图所示,完成对稀疏特征的嵌入后,由FM层和DNN层共享输入向量,经前向反馈后输出。

为什么使用FM和DNN进行结合?

  • 在排序模型刚起步的年代,FM很好地解决了LR需要大规模人工特征交叉的痛点,引入任意特征的二阶特征组合,并通过向量内积求特征组合权重的方法大大提高了模型的泛化能力。
  • 标准FM的缺陷也恰恰是只能做二阶特征交叉。

所以,将FM与DNN结合可以帮助我们捕捉特征之间更复杂的非线性关系。

为什么不使用FM和RNN进行结合?

  • 如果一个任务需要处理序列 信息,即本次输入得到的输出结果,不仅和本次输入相关,还和之前的输入相关,那么使用RNN循环神经网络可以很好地利用到这样的序列信息
  • 在预估点击率时,我们会假设用户每次是否点击的事件是独立的,不需要考虑序列信息,因此RNN于FM结合来预估点击率并不合适。还是使用DNN来模拟出特征之间的更复杂的非线性关系更能帮助到FM。

3.FM

FM(Factorization Machines,因子分解机)最早由Steffen Rendle于2010年在ICDM上提出,它是一种通用的预测方法,在即使数据非常稀疏的情况下,依然能估计出可靠的参数进行预测。与传统的简单线性模型不同的是,因子分解机考虑了特征间的交叉,对所有嵌套变量交互进行建模(类似于SVM中的核函数),因此在推荐系统和计算广告领域关注的点击率CTR(click-through rate)和转化率CVR(conversion rate)两项指标上有着良好的表现。

为什么使用FM?

  • 特征组合是许多机器学习建模过程中遇到的问题,如果对特征直接建模,很有可能忽略掉特征与特征之间的关联信息,一次可以通过构建新的交叉特征这一特征组合方式提高模型的效果。FM可以得到特征之间的关联信息。
  • 高维的稀疏矩阵是实际工程中常见的问题,并且直接导致计算量过大,特征权值更新缓慢。试想一个10000100的表,每一列都有8中元素,经过one-hot编码之后,会产生一个10000800的表。

而FM的优势就在于对这两方面问题的处理。首先是特征组合,通过两两特征组合,引入交叉项特征(二阶特征),提高模型得分;其次是高维灾难,通过引入隐向量(对参数矩阵进行分解),完成特征参数的估计。

FM模型不单可以建模1阶特征,还可以通过隐向量点积的方法高效的获得2阶特征表示,即使交叉特征在数据集中非常稀疏甚至是从来没出现过。这也是FM的优势所在。

y F M = < w , x > + ∑ j 1 = 1 d ∑ j 2 = j 1 + 1 d < V i , V j > x j 1 ⋅ x j 2 y_{FM}= <w,x> + \sum_{j_1=1}^{d}\sum_{j_2=j_1+1}^{d}<V_i,V_j>x_{j_1}\cdot x_{j_2} yFM=<w,x>+j1=1∑dj2=j1+1∑d<Vi,Vj>xj1⋅xj2

4.DNN

该部分和Wide&Deep模型类似,是简单的前馈网络。在输入特征部分,由于原始特征向量多是高纬度,高度稀疏,连续和类别混合的分域特征,因此将原始的稀疏表示特征映射为稠密的特征向量。

假设子网络的输出层为:

a ( 0 ) = [ e 1 , e 2 , e 3 , . . . e n ] a^{(0)}=[e1,e2,e3,...en] a(0)=[e1,e2,e3,...en]

DNN网络第l层表示为:

a ( l + 1 ) = σ ( W ( l ) a ( l ) + b ( l ) ) a^{(l+1)}=\sigma{(W^{(l)}a^{(l)}+b^{(l)})} a(l+1)=σ(W(l)a(l)+b(l))

再假设有H个隐藏层,DNN部分的预测输出可表示为:

y D N N = σ ( W ∣ H ∣ + 1 ⋅ a H + b ∣ H ∣ + 1 ) y_{DNN}= \sigma{(W^{|H|+1}\cdot a^H + b^{|H|+1})} yDNN=σ(W∣H∣+1⋅aH+b∣H∣+1)

DNN深度神经网络层结构如下图所示:

5.Loss及Auc计算

DeepFM模型的损失函数选择Binary_Cross_Entropy(二值交叉熵)函数

H p ( q ) = − 1 N ∑ i = 1 N y i ⋅ l o g ( p ( y i ) ) + ( 1 − y i ) ⋅ l o g ( 1 − p ( y i ) ) H_p(q)=-\frac{1}{N}\sum_{i=1}^Ny_i\cdot log(p(y_i))+(1-y_i) \cdot log(1-p(y_i)) Hp(q)=−N1i=1∑Nyi⋅log(p(yi))+(1−yi)⋅log(1−p(yi))

对于公式的理解,y是样本点,p(y)是该样本为正样本的概率,log(p(y))可理解为对数概率。

Auc是Area Under Curve的首字母缩写,这里的Curve指的就是ROC曲线,AUC就是ROC曲线下面的面积,作为模型评价指标,他可以用来评价二分类模型。其中,ROC曲线全称为受试者工作特征曲线 (receiver operating characteristic curve),它是根据一系列不同的二分类方式(分界值或决定阈),以真阳性率(敏感性)为纵坐标,假阳性率(1-特异性)为横坐标绘制的曲线。

相关推荐
ConardLi42 分钟前
小白也能学会,教你低成本微调 DeepSeek,打造私人算命大师模型!
前端·人工智能·深度学习
Sherlock Ma1 小时前
Step-Video-T2V:阶跃星辰发布最强开源视频生成模型(论文详解)
图像处理·人工智能·深度学习·计算机视觉·ai作画·aigc
Watermelo6171 小时前
DeepSeek横空出世,真的拯救了算力焦虑吗?
大数据·人工智能·深度学习·神经网络·机器学习·语言模型·自然语言处理
阿崽meitoufa1 小时前
手写数字识别的神经网络 2层神经网络的类 代码详解
开发语言·python·深度学习·神经网络
不打滑的西瓜皮3 小时前
机器学习数理基础:从概率到梯度下降的全面解析
图像处理·人工智能·pytorch·python·深度学习·机器学习
charles_vaez3 小时前
开源模型应用落地-DeepSeek-R1-Distill-Qwen-7B-LoRA微调-LLaMA-Factory-单机单卡-V100(一)
深度学习·语言模型·自然语言处理
cpuCode3 小时前
BERT 大模型
人工智能·深度学习·ai·自然语言处理·大模型·llm·bert
mosquito_lover14 小时前
使用Python的OpenCV视觉库和MediaPipe面部检测模型和姿态检测模型深度学习框架来实现眼动检测和姿态检测
python·深度学习·opencv·flask·视觉检测
罗小罗同学4 小时前
人工智能(AI)在癌症休眠研究及精准肿瘤学中的应用|顶刊速递·25-02-18
人工智能·深度学习·医学人工智能·医工交叉
MUTA️5 小时前
VMamba论文精读笔记
人工智能·笔记·深度学习·计算机视觉