这一章其实是前面的知识了,只是后面我在看到了FNN,DeepFM那里就看不懂,发现是漏了这几张没看,就很麻,后面再把写好的GBDT给发到这来。
1. 逻辑回归
逻辑回归我想应该非常重要,至今我看招聘要求里面有一个要求就是要熟悉这个。而且它也是正式从只用物品,用户矩阵进行推荐(协同过滤)慢慢过滤到用深度学习的方法,把更多的特征信息引入,包括上下文特征,更多的数值型特征给引入,从而能更好地提高推荐效果,也就是提高模型的泛化能力。
逻辑回归就是一个将推荐问题转换成一个点击率的预测问题。而点击率正好是一个典型的二分类问题,非常适合做推荐处理。
逻辑回归的推荐过程如下:
1. 将用户年龄,性别,物品属性等特征转换成数值型特征向量
2. 确定逻辑回归模型的优化目标,利用已有样本数据对逻辑回归模型进行训练,确定逻辑回归内部参数
3. 在模型服务的阶段,就将特征向量输入逻辑回归模型,经过模型的推理(inference),得到用户点击物品的概率。
4. 利用点击概率对所有候选物品进行排序,得到推荐列表
我们可以看到,训练样本这里是把特征都给转换成一个列向量了,里面有用户特征+物品特征+上下文特征进行训练
然后所有输入都会有一个权重参数,一起求和(中间那个大大的求和符号),然后经过一个大大的sigmod函数,最终得到一个分布在0到1之间的值,然后卡阈值区分推荐还是不推荐。从而得到label,然后要优化的函数是这个:
然后对上面的求导:
用梯度下降,牛顿法,拟牛顿法进行权值的更新。这里就完成了逻辑回归模型的更新了
LR的优点:
1. 逻辑回归作为广义线性模型的一种,他的假设就是因变量y(也就是点击概率)是服从波努力分布的。而在CTR预估的这个问题上,点击事件也是服从伯努利分布的,所以采用逻辑回归作为CTR模型是符合点击这个事件的物理意义的。
2. 利用模型对特征进行加权求和就非常符合不同的特征应该有不同的权重去分配这个事实,也就是有得特征比较重要,我的权重应该重一点,而且最后的sigmod函数的输出就输出到0-1之间,这就是符合CTR预估的物理意义
3. 逻辑回归的模型易于并行化,模型简单,训练开销小这个特点。非常轻便
LR的局限性:
1. 表达能力不强,无法做特征交叉,特征筛选。就是多个特征经过一些互操作变成一个。
2. 需要花费大量的人工去做特征交叉,这是一个需要经验的工作,所以不可取
2. POLY2模型
上面我们提到了逻辑回归不可以做特征交叉,所以会漏掉一些非常有价值的信息,也就是有一些特征你单独看是觉得没有什么,但是一旦加多一个特征一起看,就会发现,在这种特征的配合下,用户对某一类的物品的点击率非常高,这就是逻辑回归做不到的。所以我们必须要引入特征交叉去提高模型的拟合能力。
于是就有一种非常暴力的特征组合方式出现了,采用POLY2模型对所有特征都做一个两两交叉,然后计算出一个权值,进行输出。
因为LR做不了特征匹配,所以这里就把POLY直接加在LR里面:
但是POLY就是因为非常暴力,我们在处理数据的时候,经常采用Onehot编码区处理类别型数据,于是导致向量非常的稀疏,POLY2模型进行无选择的也特征交叉,让原本就稀疏的向量更加稀疏了,导致了大部分交叉特征的权重缺乏有效的数据训练,无法收敛。 而且因为无选择地选择了特征交叉,所以这里就会引入了n*n个权重参数。也就是增加了模型的复杂性,需要更多的数据去训练。
3. FM模型
为了解决POLY2模型的缺陷,FM模型就被提出了,主要思想就是用两个向量的内积来取代了单一的权重系数
,也就是说FM为每个特征学习了一个隐权重向量,在特征交叉时,使用两个特征隐向量的内积作为交叉特征的权重。
这多少有点像之前协同过滤改进的引入隐向量来增加模型的拟合能力了。
于是,我们的预测公式,在LR的基础上换成:
这里应该换成这么写比较正式:
其中是交叉特征的参数,它由一组参数定义:
可以从后面的求和看出,其实就是一个内积的处理了,也就是就是一个数了。
模型的待求解参数就是:
1. 是全局的偏置
2. 就是用来捕捉第i个特征对应的关系(权重)
3. 用来表达二路交叉特征和目标之间的关系(权重)
4. d 就是隐向量的维度
5. 就是第i个特征对应的隐向量
其中,FM模型的复杂度从原来的POLY2的 O(N*N) 变成了现在的 O(N*N*d) 但是经过数学转换后的复杂度可以降低到 O(N*d)
(这里还要提到一句, 其实还是两个特征向量的内积,这里在后面的DeepFM会成立,因为引入了Embedding了)
所以最后有:(这里其实是做完了所有特征的二路交叉了,并不是单单两个特征做交叉,)
这里可以跟后面提到NFM模型给联系起来,我们首先可以这么理解,在POLY2,我们的权值是只有一个值,,那现在我用了FM模型(假设隐向量的维度是d),我相当于把这个权值的维度从1扩大到了d,变成一个d维的向量。然后,我们再把这d个权值累加到一起,形成最后的权值,这就是FM模型,而NFM模型就少了最后这一步,它没做“把这d个权值累加到一起”,而是形成一个d维的隐向量,直接参与后面的运算。
这一块引用华哥的结论,这是一块比较有总结性的笔记
FM
模型可以处理不同类型的特征:1. 离散型特征
categorical
:FM
对离散型特征执行one-hot
编码。如,性别特征:“男” 编码为(0,1)
,“女” 编码为(1,0)
。2. 离散集合特征
categorical set
:FM
对离散集合特征执行类似one-hot
的形式,但是执行样本级别的归一化。如,看过的历史电影。假设电影集合为:“速度激情9,战狼,泰囧,流浪地球”。如果一个人看过 “战狼,泰囧,流浪地球”, 则编码为(0,0.33333,0.33333,0.33333)
。3. 数值型特征
real valued
:FM
直接使用数值型特征,不做任何编码转换。
FM的优点:
在POLY2模型里面,只有当两个特征的vlaue同时为1,才可以对对应的权重进行更新。但是引入了FM后,就相当于只要我可以更新我自己的隐权重向量,A和B自己更新自己的(A和B可以更新A,A和C可以更新A),不会因为A和B同时为1才去更新。这就是FM比POLY2好的点了。这在交叉特征高度稀疏的情况下,参数仍然可以估计。
当出现了一个从未出现过的特征组合(B和C),由于模型之前已经分别学习过B和C的隐向量了,具备了计算该特征组合权重的能力。也就是可以最终泛化到这个从未出现过的交叉特征。
4. FFM模型
相比于FM模型,FFM模型引入了特征域感知的这个概念,使得模型的表达能力更强。
为什么要引入特征域这个概念呢,我们的FM模型的隐向量其实是计算了所有交叉特征后的结果(考虑全部的与其交互的特征),也就是我们的隐向量要考虑到权衡所有特征,但是我们有时候会发现,有一些类别的特征与一些类别其实相关性不是那么高的,而与另外一些特征则有非常强的联系,所以,决定对一些特征先进行分类,就是再已有的特征上给他们分配一个大类。这样,也就是每一个特征都会有对不同大类特征的权重,这就可以很好地区分开,不用因为要顾全大局而委屈自己了。
用一句话去概括就是,引入了域的概念,对每个特征,针对不同的交叉域可以学习到不同的隐向量特征。
这里再写一个例子去描述,和FM模型进行对比。
假设Publisher:A,B,C,Advertiser有:nike,adidas,gucci
假设有一个案例:制造商:A,广告商:nike,性别:男,是否点击:是
我们用FM就是 (简单写明主要的区别哈)
我们用FFM就是
这就非常直观了,也就是当 特征要和
特征进行交叉时,
会先从
的这一组隐向量中挑出与特征
的域
对应的隐向量
进行交叉,同理
会先从
的这一组隐向量中挑出与特征
的域
对应的隐向量
进行交叉。
于是,就有下面的公式:(也是加上了LR模型)
其中,表示第i个特征所属的域,也就是nike的大类(advertiser)
假设一共有K个域,那时间复杂度就变成了从FM的 O(N*d) 变成了 FFM的O(N*d*K) 就是多了域这个维度。