计算广告CTR预估系列(八)--PNN模型理论与实践

计算广告CTR预估系列(八)–PNN模型理论与实践

一、介绍

非常感谢PNN论文作者,上海交通大学曲彦儒同学的耐心讲解,PNN细节的地方还是挺多的。作者的github大家也可以关注下:https://github.com/Atomu2014

1.1 名词解释

User Response Prediction:
在信息检索领域(IR,Information Retrieval),个性化任务是一类非常重要的任务。包括:推荐系统、web search、线上广告。
其核心就是User Respinse Predicton,是指给出用户关于一个预先定义好的行为的概率。这些行为包括:clicks、purchases。预测的概率代表了用户对特定物品感兴趣的程度,物品包括:新闻、商品、广告。而这会影响商家对于展示文档的排序,广告投标等。

1.2 数据特点

IR问题最大的数据特点就是multi-field categorical,举例来说:
[Weekday=Tuesday, Gender=Male, City=London],经过one-hot之后转换成高纬度稀疏的数据:
One-hot示例

一个类别型特征就是一个field,比如上面的Weekday、Gender、City这是三个field。

1.3 参数约定

我们约定参数含义如下:

  • N。Field个数,也是嵌入向量的个数。
  • M。Embedding Vector的维度。
  • D1。第一个隐藏层的神经元个数。
  • lz。Product Layer中z对应的输出,也就是lz乘以全连接权重w就得到了第一个隐层的输入的一部分。
  • lp。Product Layer中p部分对应的输出,再经过全连接权重W就得到第一个隐层的输入的一部分。

二、相关工作

在PNN之前提出了Logistic Regression、GBDT、FM等模型,期待能高效的学习线性与非线性模式,减少人工特征工程的干预。但是都不是非常理想,像LR GBDT依旧非常依赖人工特征工程,FM则缺少对高阶组合特征的建模,仅仅对特定阶的组合特征建模。

随着DNN在图像处理、语音识别、自然语言处理领域大放异彩,将DNN应用于CTR预估或者推荐系统的研究逐渐多了起来。DNN的输入往往是dense real vector 但是multi-field类别型特征起初是高维且稀疏的。常见的做法是通过加入Embedding Layer将输入映射到低维度的Embedding空间中。FNN使用FM初始化embedding vector,同时也受限于FM;CCPM利用CNN卷积来学习组合特征,但是只在相邻的特征间卷积,没有考虑到非相邻的特征的组合;

所以有了PNN,主要的做法如下:PNN包括三层:Embedding Layer、Product Layer、Full-connect Layer

  1. 最开始的输入太稀疏维度太高,没法直接放到DNN中去学习,所以比较通用的做法就是通过Embedding到一个低维的稠密的实数向量中,作为原始特征的在Embedding空间中的表示。
  2. 然后PNN利用Product Layer来学习filed之间的交互特征,这也就引入了非线性的组合特征。可以采用内积、外积、内积+外积的形式。
  3. 最后利用全连接层充分的学习高阶组合特征,并得到最终CTR预测概率。

三、损失 & 评价函数

3.1 损失函数

PNN使用的是log loss,形式化如下:
PNN log loss

3.2 评价函数

论文中给出了几种常用的评价函数,包括:AUC、log loss、RIG、RMSE。
RIG(Relative Information Gain), RIG = 1 - NE。 NE就是我们上一篇文章LR+GBDT中提到过的Normalized Cross Entropy。

四、PNN详解

4.1 架构图

PNN 架构图

我们按照上图,一层一层的来分析,看看从输入到输出,模型有哪些参数,参数的维度大小是多少,哪些需要训练,哪些不用训练:

Input
首先,一个类别型特征就是一个Field。比如用户信息包括:性别、职业等,这里的性别是一个Field,职业是另一个Field。上图中的Input是one-hot之后的,而且只给出了类别型特征。所以每个Field i都是一个向量,向量的大小就是类别型特征one-hot之后的维度。所以不同Field的维度是不同的。

Embedding Layer
上图说的非常清楚,Embedding是Field-wisely Connected。什么意思那?就是每个Field只管自己的嵌入,Field之间网络的权重毫无关系,自己学习自己的。而且只有权重,没有bias。一个Field经过嵌入后,得到一个Feature,也就是对应的Embedding Vector嵌入向量。其维度一般是预先设定好的定值,论文中采用的是10. 也就说是不同Feature的维度都是一样的。

Product Layer
重点来了,上图有个地方困扰我很久,最终跟论文作者讨论了下终于看懂了。先给出结论:

  • Product Layer中z中每个圈都是一个向量,向量大小为Embedding Vector大小向量个数 = Field个数 = Embedding向量的个数
  • Product Layer中如果是内积,p中每个圈都是一个值;如果是外积,p中每个圆圈都是一个二维矩阵

一个是向量,一个是值(也可能是矩阵),全给画成圈了(吐槽下……)
解释下怎么回事,这里对于Embedding Vector有两种处理策略:

  1. 直接和内积或外积结果拼接,输入到神经网络
  2. 先进行一次线性变换,再和内积或外积结果拼接,输入到神经网络

Embedding Layer中的那个1,其实就是直接把Embedding Vector拿来用并没有进行线性变换。这样做处理起来很简单,但是也有个缺点。Embedding Vector和内积项或外积项的数值分布差异交大,没有进行线性变换,导致分布不稳定不利于训练。不过,听作者说,在新论文中这个问题已经被很好的解决了,大家拭目以待吧~

在数据流中,假设Field个数为N,那么经过Embedding后的Field得到了N个Feature,或者说是N个嵌入向量。这N个嵌入向量直接拿过来并排放到z中就是z。这部分代表的是对低维度特征,或者说原始特征的建模。

然后,针对这N个嵌入向量,两两组合进行Product operation,把结果放到一起就得到了p。首先ÿ

  • 4
    点赞
  • 13
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值