推荐系统 之 AutoRec和Deep Crossing

本文介绍了如何将深度学习应用于推荐系统,重点讲解了AutoRec(结合AE与协同过滤)和DeepCrossing(特征交叉与多层网络优化)模型的工作原理、结构与应用。通过实例解析了AE的降维和预测能力在AutoRec中的作用,以及DeepCrossing如何处理稀疏数据和特征组合。

与之前的GBDT+LR,协同过滤以及其变种,这些都是一些机器学习的模型,下面我们要将神经网络引入推荐领域了

 

与传统的机器学习模型相比,深度学习模型的表达能力更强,能够挖掘出数据里更多的潜在的隐藏信息,并且深度学习的模型结构非常的灵活,可以根据业务场景和数据特点做出调整。

上面是路线进化图,暂时没有这么一本书可以从如此大局观地去引导读者学习,这书确实不错,之前分析过AE到VAE的文章,现在正好结合上推荐一起分析AutoRec了,然后后面是Deep Crossing,这里面图提到了ResNet,也可以一块看了。真不错!

1. AutoRec(自编码器推荐)

        它将自动编码器(AutoEncoder)和协同过滤结合在一起了,利用AE的单层网络结构,来实现推荐的目的。

        其实原理非常简单,首先回顾一下AE到底干嘛了,流程就是,将样本变成输入向量,然后经过特征处理,将数据降维到一个向量M,通常向量M的维度都比输入向量的维度要小得多,截止到这里,就代表编码完成了。然后我们用这个压缩后的特征向量去反编码成和原来输入向量维度一样的输出向量。

        所以我们可以看出,编码器就相当于做了数据的压缩和降维,并且AE的Loss函数是:

Loss= argmin(\sum^N_{i=1}(Y_i-AE(I_i,\theta))^2)

        也就是一个不断去修改我们的编码能力,从而找到比较好的value去表达出我们的样本。经过AE的输出向量,由于经过了AE的学习和泛化,不会完全等同于输入向量的。所以因此也具备了一定的确实维度的预测能力,这也是AE能用于推荐系统的原因了。

        下面讲AutoRec:      

        我们的训练样本就是一个协同过滤的共现矩阵,然后我们现在就是用AutoRec去学习这个共现矩阵,使得编码器自己输出的评分向量与原评分向量的平方残差和最小。

        得到编码器后,我们要怎样才获得推荐列表呢?,这是两个重要的问题,一个是怎么学,一个是怎么获得推荐列表

         其中V是输入层到隐藏层的参数矩阵,Wji是隐藏层到输出层的参数矩阵,而k代表隐藏层的神经元个数,通常k是远小于输入层向量的维度的。

        我们把经过AR的输出向量给表示出来:

h(r;\theta)=f(W*g(V*r+\mu)+b)

        为了防止过拟合,我们加上L2的正则化项:

min_\theta \sum_N_{i=1}(r_i - h(r_i;\theta))^2 + \frac{\lambda}{2}(|W|^2 + |V|^2)

        然后我们用梯度下降去更新两个变量,W和V,也就是两个矩阵的vlaue

        这就讲完了AutoRec了,后面讲第二个问题,他是怎么做推荐的。

        我们不是要给用户推荐商品嘛,然后也就是我们要给所有的商品做一个排序,于是我们先把一个商品的评分向量(所有用户对这个商品i的评分向量)给输入进去,然后我们就会得到一个由AE预测出来所有用户对商品i的评分预测,那么其中第u维就是用户u对物品i的预测了,接着遍历输入物品向量就可以得到用户u对所有物品的评分预测了,进而根据评分预测排序的到推荐列表。

        同理,因为我们现在的输入是一个商品的得分向量(Item based AutoRec),假如我们输入变成用户的评分向量,就直接出来当前用户对所有商品的评分了,也就是我只进一次模型就可以做一个预测(这个算法也称为User based AutoRec)相比Item based AutoRe,我们进模型N(商品数)才可以得到预测列表,这个只需进一次即可。但是用户向量的稀疏姓会影响模型的效果。

2. Deep Crossing

        Deep Crossing 模型能够完整地解决从特征工程,稀疏向量稠密化,多层神经网络进行优化目标你和的那个一些列深度学习在推荐系统中的应用问题。

        首先我们先将数据处理三种类型:

  • 第一类是可以被处理成one-hot/ multi-hot向量的类别型特征
  • 第二类是数字型特征
  • 第三类是需要进一步处理的特征,不能直观进行分类

        下面我们来看它是如何解决以下三个问题:

  • 如何解决稀疏特征向量稠密化的问题
  • 如何既觉特征自动交叉组合的问题
  • 如何在输出层回到问题设定的优化目标

        首先先来了解Deep Crossing的结构:

        Embedding层的作用就是将稀疏的类别类型特征转换成稠密的Embedding向量。

        stacking层的作用就是把不同的Embedding特征和数值型特征拼接到一起,从而形成新的包含全部特征的特征向量 (就真的是当前送进来网络的 所有的embedding向量+所有数值型特征向量,不包括batch里面有多少个啊,就单单这个指样本)

        Multiple Residual Units层:该层的主要结构是多层感知机, 但DeepCrossing采用了残差网络进行的连接,然后这里的神经单元不是简单的一个神经元,而是残差单元!通过多层残差对特征网络各个维度进行充分的交叉组合,使模型能够抓取到更多的非线性特征的组合特征

        感知机是什么,其实一般感知机指单层人工神经网络,最简单感知机就是一个三层的网络,一层输入,一层隐藏层,一层输出。然后多层感知机,就是一个神经网络的意思。

         什么是残差单元?

        就是输入x现在分两条路,

        1. 一条是经过一次线性变换+一次Relu激活+一次线性变换 = A

        2. 一条是 不做任何线性变换 直接原封不动地拿过去 = B

        3. 然后再做一个Relu激活:Relu(A+B) = output

        以上三步就是残差单元。

        跳跃连接(捷径,shortcut),就是指这个输入x跳过一层或者好几层,从而将信息传递到神经网络的更深层。

         Scoring层:对于二分类问题,scoring层采用逻辑回归模型,对于多分类问题,scoring层采用softmax模型

        然后到最后采用梯度下降取更新value

PS:

1. 这里只是简单的理解了表层的Residual,但是还没有完全理解Ret Net,

2. 为什么这个残差单元可以拟合出输入和输出的残差

3. 为什么残差可以实现特征交叉

4. 为什么Deep Crossing 可以通过通过调整 神经网络的深度进行特征之间的“深度交叉”,这和上面的残差有什么联系?

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值