0%

CTR简介

FM/FFM

摘要

在计算广告领域点击率CTR和转化率CVR是衡量广告流量的两个关键指标.准确的估计CTR、CVR对于提高流量的价值, 增加广告收入有重要的指导作用.
预估CTR或CVR, 业界常用的方法有:
–人工特征+LR
–GBDT+LR
–FM
–FFM


  1. LR模型优缺点:
    1
    2
    3
    4
    优点:
    --算法简单, 易并行和工程化, 可以处理高纬度稀疏问题, 模型可解释性强, 通过ftrl算法方便实时对online模型进行更新
    缺点:
    --需要大量特征工程预先分析出有效的特征、特征组合, 从而去间接增强LR的非线性学习能力, 但又无法直接通过特征笛卡尔积解决, 只能依靠人工经验, 耗时耗力同时并不一定会带来效果提升

  1. 二阶多项式模型:

线性模型只考虑了单一特征对预测结果的影响, 没有考虑特征组合对结果的影响.常用的特征组合方式是多项式模型:

multinomial

那么, 如何解决二次项参数的训练问题呢?矩阵分解提供了一种解决思路.在model-based的协同过滤中, 一个rating矩阵可以分解为user矩阵和item矩阵, 每个user和item都可以采用一个隐向量表示

mf


  1. FM模型:

fm

FM二次项化简过程如下:

derivative

最终, 采用SGD训练模型, 模型各个参数的梯度更新公式如下:

sgd


  1. FFM模型:

FFM(Field-aware Factorization Machine)最初的概念来自Yu-Chin Juan(阮毓钦, 毕业于中国台湾大学, 现在美国Criteo工作)与其比赛队员, 是他们借鉴了来自Michael Jahrer的论文的field概念提出了FM的升级版模型.通过引入field的概念, FFM把相同性质的特征归于同一个field.

FFM


  1. FM在深度学习中的应用:

深度学习目前应用现状:
–深度学习目前比较成熟的应用主要集中在:机器视觉、语音识别、自然语言处理这些课题上, 这些应用领域的共同特点是它们的数据集是连续的.
–但在推荐系统、广告展示及搜索领域, 这些领域的数据集大部分是Multi-field Categorical类型的, 主要呈现以下特征:有多个域, 每个域上的数据以ID格式呈现.Multi-field Categorical Data与上述这些连续或是序列数据是有区别的, Multi-field Categorical Data会有多种不同的字段, 那这样就很难识别这些特征之间的关系, 需要消耗大量人力做一些高阶特征组合.
–如果直接用One-Hot Binary进行编码, 那输入特征至少有一百万, 第一层至少需要500个节点, 那么第一层我们就需要训练5亿个参数, 那就需要20亿或是50亿的数据集, 而要获得如此大的数据集基本上是很困难的事情

因为上述原因, 我们需要将非常大的特征向量嵌入到低维向量空间中来减小模型复杂度, 而FM无疑是被业内公认为最有效的embedding model

FM embedding

–第一部分仍然为Logistic Regression
–第二部分是通过两两向量之间的点积来判断特征向量之间和目标变量之间的关系

我们就基于这个模型来考虑神经网络模型, 其实这个模型本质上就是一个三层网络:

FM architecture

FM = LR+ embedding
可以看成底层为特征维度为n的离散输入, 经过embedding层后, 对embedding层线性部分(LR)和非线性部分(特征交叉部分)累加后输出.


  1. FNN模型:

用FM算法对底层field进行embeddding, 在此基础上面建模就是FNN(Factorisation-machine supported Neural Networks)模型:
–FNN假设每个field有且只有一个值为1, 其他均为0.x为原始输入的特征, 它是大规模离散稀疏的.它可以分成n个field, 每一个field中, 只有一个值为1, 其余都为0(即one hot)

网络结构如下:

FNN

FNN具有以下几个特点:

  • FM参数需要预训练:
    –FM部分的embedding需要预先进行训练, 所以FNN不是一个end-to-end模型.
  • 无法拟合低阶特征:
    –FM得到的embedding向量直接concat连接之后作为MLP的输入去学习高阶特征表达, 最终的DNN输出作为ctr预估值.因此, FNN对低阶信息的表达比较有限.
  • 每个field只有一个非零值的强假设:
    –FNN假设每个fileld只有一个值为非零值, 如果是稠密原始输入, 则FNN失去意义.对于一个fileld有几个非零值的情况, 例如用户标签可能有多个, 一般可以做average/sum/max等处理.

FNN = LR + DEEP = LR + embedding + MLP


  1. PNN模型:

FNN的embedding层直接concat连接后输出到MLP中去学习高阶特征. PNN, 全称为Product-based Neural Network, 认为在embedding输入到MLP之后学习的交叉特征表达并不充分, 提出了一种product layer的思想, 既基于乘法的运算来体现体征交叉的DNN网络结构, 如图所示.

PNN

对比FNN网络, PNN的区别在于中间多了一层Product Layer层, 除了Product layer不同, PNN和FNN的MLP结构是一样的:
–Product Layer层由两部分组成, 左边z为embedding层的线性部分, 右边为embedding层的特征交叉部分.
–这种product思想来源于, 在ctr预估中, 认为特征之间的关系更多是一种and“且”的关系, 而非add”加”的关系.例如, 性别为男且喜欢游戏的人群, 比起性别男和喜欢游戏的人群, 前者的组合比后者更能体现特征交叉的意义.
–根据product的方式不同, 可以分为inner product(IPNN)(点乘)和outer product(OPNN)(矩阵乘法).

inner-outer


  1. Wide&Deep模型:

前面介绍的两种变体DNN结构FNN和PNN, 都在embedding层对输入做处理后输入MLP, 让神经网络充分学习特征的高阶表达, deep部分是有了, 对高阶的特征学习表达较强, 但wide部分的表达是缺失的, 模型对于低阶特征的表达却比较有限.
google在2016年提出了大名鼎鼎的wide&Deep的结构正是解决了这样的问题.
Wide&deep结合了wide模型的优点和deep模型的优点, 网络结构如图所示, wide部分是LR模型, Deep部分是DNN模型.

wide&deep

在这个经典的wide&deep模型中, google提出了两个概念, generalization(泛化性)和memory(记忆性).

  • Memory(记忆性)
    –wide部分长处在于学习样本中的高频部分, 优点是模型的记忆性好, 对于样本中出现过的高频低阶特征能够用少量参数学习;缺点是模型的泛化能力差, 例如对于没有见过的ID类特征, 模型学习能力较差.
  • Generalization(泛化性)
    –deep部分长处在于学习样本中的长尾部分, 优点是泛化能力强, 对于少量出现过的样本甚至没有出现过的样本都能做出预测(非零的embedding向量); 缺点是模型对于低阶特征的学习需要用较多参才能等同wide部分效果, 而且泛化能力强某种程度上也可能导致过拟合出现bad case.

除此之外, wide&deep模型还有如下特点:

  • 人工特征工程
    –LR部分的特征, 仍然需要人工设计才能保证一个不错的效果.因为LR部分是直接作为最终预测的一部分, 如果作为wide部分的LR特征工程做的不够完善, 将影响整个wide&deep的模型精度.
  • 联合训练
    –模型是end-to-end结构, wide部分和deep部分是联合训练的.
  • embedding层deep部分单独占有
    –LR部分直接作为最后输出, 因此embedding层是deep部分独有的.

wide&deep = LR + embedding + MLP


9.DeepFM模型:

google提出的wide&deep框架固然强大, 但由于wide部分是个LR模型, 仍然需要人工特征工程.

但wide&deep给整个学术界和工业界提供了一种框架思想.基于这种思想, 华为诺亚方舟团队结合FM相比LR的特征交叉的功能, 将wide&deep部分的LR部分替换成FM来避免人工特征工程, 于是有了deepFM, 网络结构如图所示:

DeepFM

比起wide&deep的LR部分, deeFM采用FM作为wide部分的输出, FM部分如图所示:

fm part

fm formula

ps: 注意图中的红线部分, 是权重为1的连接, 而不是像MLP中需要学习的权重连接, 最后wide(fm)部分的输出仅仅是一个数和deep(dnn)部分合到一起做sigmoid !!!

除此之外, deepFM还有如下特点:

  • 低阶特征表达
    –wide部分取代WDL的LR, 比FNN和PNN相比能捕捉低阶特征信息.
  • embedding层共享
    –wide&deep部分的embedding层得需要针对deep部分单独设计;而在deepFM中, FM和DEEP部分共享embedding层, FM训练得到的参数既作为wide部分的输出, 也作为DNN部分的输入.
  • end-end训练
    –embedding和网络权重联合训练, 无需预训练和单独训练

deepFM = FM + embedding + DNN

同样是利用FM做embedding降维, 下面是几种模型的比较:

cmp1

cmp2

embedding vector这层的融合是深度学习模型改造最多的地方,该层是进入深度学习模型的输入层,embedding融合的质量将影响DNN模型学习的好坏.

常用的融合方式有以下几种:

cmp3


  1. 模型超参数设置:
    1
    2
    3
    4
    1、dropout,业内认为0.5是比较好的值
    2、最佳的隐层层数, 隐层层数并不是越多越好, 层数过多的模型会出现过拟合效应, 这个隐层数是跟数据集大小相关, 一般而言数据集越大所需要的隐层就越多, 我们这里模型显示的最佳隐层是3层
    3、神经网络不同层级节点数目的分布, 一下有四种不同的层级节点分布形态, 结果发现constant 和 diamond 这两种形态的表现效果比较好, increasing形态效果最差, 说明我们不应该在第一层就过度压缩特征向量
    4、不同隐层节点的Activation Functions的效果, 结果发现tanh 和 relu明显优于sigmoid

  1. Reference:
    1
    2
    3
    4
    FM原理推导: https://www.cnblogs.com/pinard/p/6370127.html
    深入FFM原理与实践: https://tech.meituan.com/deep_understanding_of_ffm_principles_and_practices.html
    wide&deep: https://ai.googleblog.com/2016/06/wide-deep-learning-better-together-with.html
    GBDT+LR: https://blog.csdn.net/shine19930820/article/details/71713680


欢迎加好友
  • 作者: wang yang
  • 版权: 本博客所有文章除特别声明外,均采用 CC BY-NC-SA 3.0 许可协议。转载请注明出处!