没有合适的资源?快使用搜索试试~ 我知道了~
从FM推演各深度CTR预估模型(附代码)1
需积分: 0 1 下载量 157 浏览量
2022-08-04
00:27:34
上传
评论
收藏 3.65MB PDF 举报
温馨提示
试读
24页
1.引言点击率(click-through rate, CTR)是互联网公司进行流量分配的核心依据之一。比如互联网广告平台,为了精细化权衡和保障用户、广告、平台
资源详情
资源评论
资源推荐
从
FM
推
演
各
深
度
CTR
预
估
模
型
(
附
代
码
)
多年以后,当资深算法专家们看着无缝对接用户需求的广告收入节节攀升时,他们可能会想起自己之前痛苦推导FM
与深度学习公式的某个夜晚……
——题记
1.
引
言
点击率(click-through rate, CTR)是互联网公司进行流量分配的核心依据之一。比如互联网广告平台,为了精细化权衡
和保障用户、广告、平台三方的利益,准确的CTR预估是不可或缺的。CTR预估技术从传统的逻辑回归,到近两年大
火的深度学习,新的算法层出不穷:DeepFM, NFM, DIN, AFM, DCN…… 然而,相关的综述文章不少,但碎片罗列的
居多,模型之间内在的联系和演化思路如何揭示?怎样才能迅速get到新模型的创新点和适用场景,快速提高新论文
速度,节约理解、复现模型的成本?这些都是亟待解决的问题。
我们认为,从FM及其与神经网络的结合出发,能够迅速贯穿很多深度学习CTR预估网络的思路,从而更好地理解和
应用模型。
2.
本
文
的
思
路
与
方
法
我们试图从原理上进行推导、理解各个深度CTR预估模型之间的相互关系,知其然也知其所以然。(以下的分析与拆
解角度,是一种我们尝试的理解视角,并不是唯一的理解方式)
推演的核心思路:“通过设计网络结构进行组合特征的挖掘。”
具体来说有两条:其一是从FM开始推演其在深度学习上的各种推广(对应下图的红线),另一条是从
embedding+MLP自身的演进特点结合CTR预估本身的业务场景进行推演(对应下图黑线部分)。
为了便于理解,我们简化了数据案例——只考虑离散特征数据的建模,以分析不同神经网络在处理相同业务问题时的
不同思路。
同时,我们将各典型论文不同风格的神经网络结构图统一按照计算图来绘制,以便于对比不同模型。
3.FM
:
降
维
版
本
的
特
征
二
阶
组
合
CTR预估本质是一个二分类问题,以移动端展示广告推荐为例,依据日志中的用户侧的信息(比如年龄,性别,国
籍,手机上安装的app列表)、广告侧的信息(广告id,广告类别,广告标题等)、上下文侧信息(渠道id等),去
建模预测用户是否会点击该广告。 FM出现之前的传统的处理方法是人工特征工程加上线性模型(如逻辑回归
Logistic Regression)。为了提高模型效果,关键技术是找到到用户点击行为背后隐含的特征组合。如男性、大学生
用户往往会点击游戏类广告,因此“男性且是大学生且是游戏类”的特征组合就是一个关键特征。但这本质仍是线性模
型,其假设函数表示成内积形式一般为:
其中x为特征向量,w为权重向量,σ()为sigmoid函数。
但是人工进行特征组合通常会存在诸多困难,如特征爆炸、特征难以被识别、组合特征难以设计等。为了让模型自动
地考虑特征之间的二阶组合信息,线性模型推广为二阶多项式(2d−Polynomial)模型:
其实就是对特征两两相乘(组合)构成新特征(离散化之后其实就是“且”操作),并对每个新特征分配独立的权重,通
过机器学习来自动得到这些权重。将其写成矩阵形式为:
其中W^(2)为二阶特征组合的权重矩阵,是对称矩阵。而这个矩阵参数非常多,为O(n^2)。为了降低该矩阵的维度,
可以将其因子分解(FactorizationFactorization)为两个低维(比如n∗k)矩阵的相乘。则此时WW矩阵的参数就大
幅降低,为O(nk)。公式如下:
这就是Rendle等在2010年提出因子分解机(Factorization Machines,FM)的名字的由来。FM的矩阵形式公式如
下:
将其写成内积的形式:
利用:
可以将上式进一步改写成求和式的形式:
其中vi向量是矩阵W的第i列。为了去除重复项与特征平方项,上式可以进一步改写成更为常见的FM公式:
对比二阶多项式模型,FM模型中特征两两相乘(组合)的权重是相互不独立的,它是一种参数较少但表达力强的模
型。
此处附上FM的TensorFlow代码实现,完整数据和代码请
参
考
网
盘
。
网盘链接:
https://pan.baidu.com/s/1eDwOxweRDPurI2fF51EALQ
注意FM通过内积进行无重复项与特征平方项的特征组合过程使用了一个小trick,就是:
class FM(Model):
def __init__(self, input_dim=None, output_dim=1, factor_order=10, init_path=None,
opt_algo='gd', learning_rate=1e-2,
l2_w=0, l2_v=0, random_seed=None):
Model.__init__(self)
# 一次、二次交叉、偏置项
init_vars = [('w', [input_dim, output_dim], 'xavier', dtype),
('v', [input_dim, factor_order], 'xavier', dtype),
('b', [output_dim], 'zero', dtype)]
self.graph = tf.Graph()
with self.graph.as_default():
if random_seed is not None:
tf.set_random_seed(random_seed)
self.X = tf.sparse_placeholder(dtype)
self.y = tf.placeholder(dtype)
self.vars = init_var_map(init_vars, init_path)
w = self.vars['w']
v = self.vars['v']
b = self.vars['b']
# [(x1+x2+x3)^2 - (x1^2+x2^2+x3^2)]/2
# 先计算所有的交叉项,再减去平方项(自己和自己相乘)
X_square = tf.SparseTensor(self.X.indices, tf.square(self.X.values),
tf.to_int64(tf.shape(self.X)))
xv = tf.square(tf.sparse_tensor_dense_matmul(self.X, v))
p = 0.5 * tf.reshape(
tf.reduce_sum(xv - tf.sparse_tensor_dense_matmul(X_square, tf.square(v)),
1),
[-1, output_dim])
xw = tf.sparse_tensor_dense_matmul(self.X, w)
logits = tf.reshape(xw + b + p, [-1])
剩余23页未读,继续阅读
八位数花园
- 粉丝: 42
- 资源: 282
上传资源 快速赚钱
- 我的内容管理 展开
- 我的资源 快来上传第一个资源
- 我的收益 登录查看自己的收益
- 我的积分 登录查看自己的积分
- 我的C币 登录后查看C币余额
- 我的收藏
- 我的下载
- 下载帮助
最新资源
- 51单片机学习(1)-软件keil下载
- 历届(第1-21届)希望杯数学竞赛初一试题及答案(最新整理).doc全国数学邀请赛(264页资料)
- 水滴.psd
- TokenPocket_V2.1.2_release.apk
- Apache-druid-kafka-rce.yaml
- 基于C#的ASP.NET数据库原理及应用技术课程指导平台的开发
- 基于ROS的智能车轨迹跟踪算法的仿真与设计源码运用PID跟踪算法.zip.zip
- Bug Bounty Tip - i春秋Self-XSS变废为宝的奇思妙想
- 1991-2015年全国初中化学竞赛复赛试题汇编(212页)(24年竞赛复赛真题).docx天原杯
- Apache Flink 未授权访问+远程代码执行.pdf
资源上传下载、课程学习等过程中有任何疑问或建议,欢迎提出宝贵意见哦~我们会及时处理!
点击此处反馈
安全验证
文档复制为VIP权益,开通VIP直接复制
信息提交成功
评论0