因子分解机公式推导(Factorization Machine)

基本定义

在逻辑回归的分类公式中,传入给sigmoid函数的参数是特征的线性组合,计算如公式1所示。该公式的不足之处是没有考虑特征间的相互作用,而特征的相互作用(即特征交叉)是很重要的,例如在CTR预估场景,性别和购买行为就有很强的关联性,女性更愿意购买化妆品,而男性更愿意购买运动产品。为了考虑特征的相互作用,因子分解机(Factorization Machine,简称FM)显示地对两两特征交叉进行建模,计算如公式2所示。
y ( x ) = w 0 + ∑ i = 1 n w i x i (1) \begin{aligned} y(\mathbf x) & =w_0 + \sum_{i=1}^n w_i x_i \tag{1} \end{aligned} y(x)=w0+i=1nwixi(1)

y ( x ) = w 0 + ∑ i = 1 n w i x i + ∑ i = 1 n ∑ j = i + 1 n w i j x i x j (2) \begin{aligned} y(\mathbf x) & =w_0 + \sum_{i=1}^n w_i x_i + \sum_{i=1}^n \sum_{j=i+1}^n w_{ij} x_i x_j \tag{2} \end{aligned} y(x)=w0+i=1nwixi+i=1nj=i+1nwijxixj(2)

对于离散特征而言,特征通常通过one-hot进行编码,one-hot编码后样本变得很稀疏,其中很多特征的取值为0,取值为1的特征只占很少部分。对于这样的样本,在学习交叉特征的权重 w i j w_{ij} wij时会变得困难,例如当样本的特征 x i x_i xi和特征 x j x_j xj取值为0时,权重 w i j w_{ij} wij无法学习。为了更好的学习交叉特征的权重,需要对权重矩阵分解,分解后权重 w i j w_{ij} wij可以表示为两个隐向量的内积,计算如公式3所示。

y ( x ) = w 0 + ∑ i = 1 n w i x i + ∑ i = 1 n ∑ j = i + 1 n < v i , v j > x i x j (3) \begin{aligned} y(\mathbf x) & =w_0 + \sum_{i=1}^n w_i x_i + \sum_{i=1}^n \sum_{j=i+1}^n <\mathbf v_i,\mathbf v_j>x_i x_j \tag{3} \end{aligned} y(x)=w0+i=1nwixi+i=1nj=i+1n<vi,vj>xixj(3)

其中隐向量 v i \mathbf v_i vi可以表示为 v i \mathbf v_i vi=( v i , 1 v_{i,1} vi,1, v i , 2 v_{i,2} vi,2,…, v i , k v_{i,k} vi,k),k为隐向量的维度,进一步可以得到因子分解机(FM)的计算公式。

y ( x ) = w 0 + ∑ i = 1 n w i x i + ∑ i = 1 n ∑ j = i + 1 n ∑ t = 1 k v i , t v j , t x i x j (4) \begin{aligned} y(\mathbf x) & =w_0 + \sum_{i=1}^n w_i x_i + \sum_{i=1}^n \sum_{j=i+1}^n \sum_{t=1}^k v_{i,t} v_{j,t} x_i x_j \tag{4} \end{aligned} y(x)=w0+i=1nwixi+i=1nj=i+1nt=1kvi,tvj,txixj(4)

数学推导

首先公式4中的交叉项可以推导简化,具体推导过程如下:

∑ i = 1 n ∑ j = i + 1 n < v i , v j > x i x j = 1 2 ( ∑ i = 1 n ∑ j = 1 n < v i , v j > x i x j − ∑ i = 1 n < v i , v i > x i x i ) = 1 2 ( ∑ i = 1 n ∑ j = 1 n ∑ t = 1 k v i , t v j , t x i x j − ∑ i = 1 n ∑ t = 1 k v i , t v i , t x i x i ) = 1 2 ∑ t = 1 k ( ∑ i = 1 n ∑ j = 1 n v i , t v j , t x i x j − ∑ i = 1 n v i , t v i , t x i x i ) = 1 2 ∑ t = 1 k ( ( ∑ i = 1 n v i , t x i ) ( ∑ j = 1 n v j , t x j ) − ∑ i = 1 n v i , t 2 x i 2 ) = 1 2 ∑ t = 1 k ( ( ∑ i = 1 n v i , t x i ) 2 − ∑ i = 1 n v i , t 2 x i 2 ) \begin{aligned} \sum_{i=1}^n \sum_{j=i+1}^n <\mathbf v_i,\mathbf v_j> x_i x_j & = \frac 12 (\sum_{i=1}^n\sum_{j=1}^n <\mathbf v_i,\mathbf v_j>x_i x_j -\sum_{i=1}^n<\mathbf v_i,\mathbf v_i> x_i x_i) \\ & =\frac 12 (\sum_{i=1}^n \sum_{j=1}^n \sum_{t=1}^k v_{i,t} v_{j,t} x_i x_j-\sum_{i=1}^n \sum_{t=1}^k v_{i,t} v_{i,t} x_i x_i) \\ & = \frac 12 \sum_{t=1}^k(\sum_{i=1}^n \sum_{j=1}^n v_{i,t} v_{j,t} x_i x_j-\sum_{i=1}^n v_{i,t} v_{i,t} x_i x_i) \\ & = \frac 12 \sum_{t=1}^k \Biggl((\sum_{i=1}^n v_{i,t}x_i)( \sum_{j=1}^nv_{j,t}x_j)-\sum_{i=1}^n v_{i,t}^2x_i^2\Biggr) \\ & =\frac 12 \sum_{t=1}^k\Biggl((\sum_{i=1}^n v_{i,t}x_i)^2-\sum_{i=1}^n v_{i,t}^2x_i^2\Biggr) \end{aligned} i=1nj=i+1n<vi,vj>xixj=21(i=1nj=1n<vi,vj>xixji=1n<vi,vi>xixi)=21(i=1nj=1nt=1kvi,tvj,txixji=1nt=1kvi,tvi,txixi)=21t=1k(i=1nj=1nvi,tvj,txixji=1nvi,tvi,txixi)=21t=1k((i=1nvi,txi)(j=1nvj,txj)i=1nvi,t2xi2)=21t=1k((i=1nvi,txi)2i=1nvi,t2xi2)

为了求得最优的参数 w i w_i wi v i , t v_{i,t} vi,t,可以应用随机梯度下降算法对参数求偏导数,具体的推导公式如下:

∂ y ( x ) ∂ θ = { 1 i f θ = w 0 x i i f θ = w i x i ∑ i = 1 n v i , t x i − v i , t x i 2 i f θ = v i , t \frac{\partial y(\mathbf x)}{\partial \theta}=\begin{cases} 1 & if \theta=w_0\\ x_i & if \theta=w_i\\ x_i\sum_{i=1}^nv_{i,t}x_i- v_{i,t}x_i^2 & if \theta=v_{i,t} \end{cases} θy(x)=1xixii=1nvi,txivi,txi2ifθ=w0ifθ=wiifθ=vi,t

将求得的偏导带入梯度下降公式,可以得到参数 θ \theta θ的更新公式如下:

θ : = θ − α ∂ y ( x ) ∂ θ (5) \begin{aligned} \theta:= \theta - \alpha \frac{\partial y(\mathbf x)}{\partial \theta}\tag{5} \end{aligned} θ:=θαθy(x)(5)

代码实现

相关代码实现后面统一发布到github上面。

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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值