FM做feature embedding表示以及CTR loss function

FM算法是CTR预估中的经典算法,其优势是能够自动学习出交叉特征.因为这种特性,FM在CTR预估上的效果会远超LR.


说明:通过FM的公式可以看出,FM自动学习交叉是通过学习到每个特征xi的向量表示vi得到的.比如说,对于field A,其特征有100w种取值,如果使用one-hot编码。那么,每个特征需要使用100w维特征表示.使用了FM算法学习之后,比如说使用vi的特征维度是10维.那么,每个特征就可以使用10维的向量表示.这个跟word embedding的思想是一致的.所以说,FM是embedding的一种方式.

我们需要将非常大的特征向量嵌入到低维向量空间中来减小模型复杂度,而FM(Factorisation machine)无疑是被业内公认为最有效的embedding model.第一部分仍然为Logistic Regression,第二部分是通过两两向量之间的点积来判断特征向量之间和目标变量之间的关系。比如上述的迪斯尼广告,occupation=Student和City=Shanghai这两个向量之间的角度应该小于90,它们之间的点积应该大于0,说明和迪斯尼广告的点击率是正相关的。这种算法在推荐系统领域应用比较广泛。

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

 它在第二层对向量做了乘积处理(比如上图蓝色节点直接为两个向量乘积,其连接边上没有参数需要学习),每个field都

只会被映射到一个 low-dimensional vector,field和field之间没有相互影响,那么第一层就被大量降维,之后就可以在此基础上应

用神经网络模型。

使用了FM提取出每个特征的embedding表示。

 Factorization Machine: Objective and Loss

FM margin的二阶项

\begin{split}~~~~~~~~~~~~~~~~~~~~ \sum_{i=1}^{n-1}\sum_{j=i+1}^{n}\langle v_i, v_j \rangle x_ix_j &= \frac12\left( \sum_{i=1}^{n}\sum_{j=1}^{n}\langle v_i, v_j \rangle x_ix_j - \sum_{i=1}^{n}\langle v_i, v_j \rangle x_ix_j \right) &\#三角阵= 0.5* (矩阵 - 对角阵)\\ &= \frac12\left( \sum_{i=1}^{n} \sum_{j=1}^{n} \sum_{l=1}^k v_{il} v_{jl} x_ix_j - \sum_{i=1}^n \sum_{l=1}^k v_{il}^2 x_i^2 \right) &\#展开特征向量\\ &= \frac12 \sum_{l=1}^k\left( \sum_{i=1}^{n} v_{il} x_i \sum_{j=1}^{n} v_{jl} x_j - \sum_{i=1}^n v_{il}^2 x_i^2 \right) &\#提取公共部分\\ &= \frac12 \sum_{l=1}^k \left[\left( \sum_{i=1}^{n} (v_{il} x_i) \right)^2 - \sum_{i=1}^n (v_{il} x_i)^2 \right] &\#转换成“和的方-方的和”形式\\ \end{split}

因此

\begin{split}~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ \phi(x) &= w_0 + \sum_{i=1}^nw_ix_i + \sum_{i=1}^{n-1}\sum_{j=i+1}^{n}\langle v_i, v_j \rangle x_ix_j \\ &= w_0 + \sum_{i=1}^nw_ix_i + \frac12 \sum_{l=1}^k \left[\left( \sum_{i=1}^{n} (v_{il} x_i) \right)^2 - \sum_{i=1}^n (v_{il} x_i)^2 \right] \end{split}

通过这种转化,可以将计算复杂度从 O(kn^2) 降低到 O(kn) 。

由于数据非常稀疏,某个feature的绝大多数项目为0,用 m(x) 表示特征 x 的非0项,用 \bar{m} 表示 m(x) 的均值,则复杂度可以表示为 O(k\bar{m}) 。

FM 的Objective和Loss基本一致,只是替换了margin \phi(x) 的写法:

\begin{split}~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ Obj &= \min_w \sum_{i=1}^m - {y^{(i)}} \log f_w(x^{(i)}) - (1-y^{(i)}) \log \left(1-f_w(x^{(i)})\right) \end{split}

损失函数Loss即

\begin{split}~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ Loss\left( f_w(x^{(i)}), y^{(i)}\right) &= - {y^{(i)}} \log f_w(x^{(i)}) - (1-y^{(i)}) \log \left(1-f_w(x^{(i)})\right) \\ &= \left\{ \begin{aligned} - \log f_w(x^{(i)}) ~~~ if ~ y =1\\ - \log (1-f_w(x^{(i)})) ~~~ if ~ y =0 \end{aligned} \right. \end{split}

其中

\begin{split}~~~~~~~~~~~~~~~~~~~~ P[click ~|~ impression] = f_w(x) &= \frac1{1+e^{-\phi(x)}} \\ &= \frac1{1+e^{-w_0 + \sum_{i=1}^nw_ix_i + \frac12 \sum_{l=1}^k \left[\left( \sum_{i=1}^{n} (v_{il} x_i) \right)^2 - \sum_{i=1}^n (v_{il} x_i)^2 \right] }} \end{split}


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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值