• 用 tensorflow实现DeepFM


    http://www.fabwrite.com/deepfm

    文章DeepFM: A Factorization-Machine based Neural Network for CTR Prediction介绍了一种深度学习模型,以实现点击率预估。用 tensorflow 试着写了 DeepFM,见https://github.com/zgw21cn/DeepFM

    1. FNN、PNN、wide&deep等此前几种深度模型

    见下图。 image.png(1) FNN,见图左边。用 FM 预训练embedding layer,然后DNN训练。作者认为有两点局限:embedding layer 的参数会受到 FM 的影响;预训练计算量大,效率问题。同时 FNN仅能捕捉高阶特征,相比之下,DeepFM 无需预训练,且能捕捉高阶和低阶特征。

    (2) PNN,见图中间。为了捕捉高阶特征间的组合作用,PNN在 embedding layer 和首层 hidden layer 间引入了 product layer。根据 product 类型的不同,有多种类型的 product layer。product 类型有内积、外积、内积和外积的混合。

    PNN的局限在于,外积由于是近似计算会丢失信息而比内积不可靠;内积更可靠,但是仍会计算量大。类似于 FNN,PNN忽略了低阶特征。

    (3) Wide&Deep,见图右边。Google 提出的 Wide&Deep可以同时刻画低阶和高阶特征,但是在wide 部分仍需要做人工特征工程。

    对比表格如下。

    image.png

    2. DeepFM

    (1) DeepFM 类似于Wide&Deep模型的结构,由 FM 和 DNN 两部分组成。FM描述低阶特征,而 DNN 描述高阶特征。不同于 Wide&Deep,DeepFM 无需特征工程。

    (2) 不同于 Wide&Deep,DeepFM 共享相同的输入和 embedding 向量,训练更高效。Wide&Deep 模型中的 Wide 需要人工设计交互特征。

    结构如下图。

    image.png

    设DeepFM 的输入为{x,y}{x,y},这里xx包括category 特征及 continuous 特征。category 特征已经过 one-hot 编码,所以xx 是高阶且稀疏的。

    DeepFM 包括 FM和 DNN两部分,最终输出也由这两部分联合训练。 math hat{y}=sigmoid(y_{FM}+y_{DNN})

    (1) FM 部分

    image.png

    FM 部分的输出如下。

    yFM=w,x+dj1=1dj2=j1+1Vi,Vjxj1xj2yFM=⟨w,x⟩+∑j1=1d∑j2=j1+1d⟨Vi,Vj⟩xj1⋅xj2

    (2) DNN 部分

    image.png

    DNN 部分主要是为了刻画高维特征。由于 CTR预估的输入是高维稀疏、category 和 continuous 混合的向量,在输入给第一层隐藏层前,需要增加一个 embedding层,以将上述向量压缩为低维、稠密的实向量。

    这里 的DNN模型有两个特点:(1) 不同长度的输入向量,其在隐藏层的长度是相同的。(2) FM 中的隐藏向量VV,现在作为将 one-hot 编码后的输入向量到embedding层的权重。

    如下图。

    image.png

    这里假设a(0)=(e1,e2,...em)a(0)=(e1,e2,...em)表示 embedding层的输出,那么a(0)a(0) 作为下一层 DNN隐藏层的输入,其前馈过程如下。 math a^{(l+1)}= sigma (W^{(l)}a^{(l)}+b^{(l)})

  • 相关阅读:
    在zend framework框架中try{}catch(Exception e){}的跳转问题
    【上】安全HTTPS-全面具体解释对称加密,非对称加密,数字签名,数字证书和HTTPS
    iOS 图像处理-剪裁图像
    Delphi DBGrid记录全选和反选拖动处理
    在DbGrid中,不按下Ctrl,单击鼠标如何实现多选?谢谢
    在DBGrid中实现多选功能
    回车跳到下一个EDIT
    远程控制篇:用Delphi模拟键盘输入/鼠标点击
    SQL的拼接语句在DELPHI中怎么写
    Delphi DbGridEh实现表格没有内容的渐变效果
  • 原文地址:https://www.cnblogs.com/DjangoBlog/p/10752563.html
Copyright © 2020-2023  润新知