深度学习推荐系统实战_25_18WideDeep怎样让你的模型既有想象力又有记忆力
你好,我是王哲。
今天我们来学习一个在业界有着巨大影响力的推荐模型。
Google的weden deep那可以说掌握了weden den deep,我们就抓住了深度推荐模型。
这几年发展的一个主要的方向。
那weden d模型是什么意思呢?我们把它翻译成中文就是宽并且深的模型。
这个名字看起来好像很通俗易懂,但是你真的理解其中宽和深的含义吗?我们上一节课讲过embedding MRP的经典结构,因为MRP可以有多层神经网络的结构,所以它是一个比较深的模型。
但weiden diep这个模型中说的深和MRP的深是一个意思吗?宽的部分是什么样的呢?它和深的作用有什么不同呢?以及我们为什么要把它们结合在一起,形成一个模型了。
这节课就让我们带着这些疑问,从模型的结构开始学起,这深入到wide den diep的具体应用场景中去,最后亲自动手实现这个模型。
好,我们先来看一看y den dip模型的结构。
理解了结构在深入去学习细节你才能掌握的更好。
我们直接看文稿中weiden dip模型的结构图。
它是由左侧的y的部分和右侧的d部分组成的。
Y的部分的结构太简单了,就是把输入层直接连接到输出层,中间没有做任何模型。
那deep层的结构会稍微复杂一些,但我相信你也不会陌生,因为它就是我们上节课学习的embedding MRP的模型结构。
那知道了weiden dip模型的结构之后,我们先来解决第一个问题,那就是google为什么要创造这样一个混合式的模型结构呢?那这还我们还得从y的部分和d部分的不同作用说起。
那简单来说,y的部分的主要作用是让模型具有比较强的记忆能力。
而d部分的主要作用是让模型具有泛化能力,因为只有这样的结构特点,才能让模型兼具逻辑回归和深度神经网络的优点,也就是既能快速处理和记忆大量的历史行为特征,这具有强大的表达能力,这就是google提出这个模型的动机。
那么问题又来了,所谓的记忆能力和泛化能力到底说的是什么呢?这里我们得好好聊一聊,因为理解这两种能力是彻底理解y链d模型的重点。
那所谓的记忆能力,那可以被宽泛的理解成是模型,直接学习历史数据中物品或者特征的贡献频率,并且把他们直接作为推荐依据的能力。
就像我们在电影推荐中可以发现一系列这样的规则。
那比如看了电影a的用户经常喜欢看电影b那这种因为a所以b式的规则非常直接,但是也非常的有价值。
但这类规则有两个特点,一个是数量非常多,一个记性不好的推荐模型,很难把它们都记住。
第二个是没办法推而广之,因为这类规则非常具体,没办法,或者说也没有必要跟其他特征再做进一步的组合。
就像看了电影a的用户,百分之八十都喜欢看电影。
B那这个特征本身已经非常强了,我们没必要把它跟其他特征再组合在一起。
好了,现在我们就可以回答开头的问题了。
为什么模型要有y的部分呢?就是因为y的部分可以增强模型的记忆能力,让模型记住大量并且直接而且重要的规则,这正是单层的线性模型所擅长的。
说完了记忆能力,接下来我们再来谈谈模型的泛化能力。
那这里泛化能力指的是模型对于新鲜样本以及从未出现过的特征组合的预测能力。
这怎么理解呢?我们还是来看一个例子。
那假设我们知道二十五岁的男性用户喜欢看电影a三十五岁的女性用户也喜欢看电影a那如果我们想让一个只有记忆能力的模型回答三十五岁的男性喜不喜欢看电影a这样的问题。
那这个模型就会说了,我从来没有学到过这样的知识啊,我没法回答你,这就体现出泛化能力的重要性了。
模型有了很强的泛化能力之后,才能够对一些非常稀疏的,甚至从未出现过的情况做出尽量靠谱的预测。
回到刚才的例子,有泛化能力的模型回答三十五岁的男性喜不喜欢看电影a这个问题,他思考的逻辑可能是这样的那从第一条知识二十五岁的男性用户喜欢看电影a中我们可以学到男性用户,也喜欢看电影a的。
从第二条知识,三十五岁的用户也喜欢看电影a中我们可以学到三十五岁的用户可能是喜欢看电影a的那在没有其他知识的前提下,三十五岁的男性同时包含了合适的年龄和性别这两个特征。
所以他大概率也是喜欢看电影a的这就是模型的泛化能力。
事实上,我们学过的矩阵分解算法,就是为了解决协通过率泛化能力不强而诞生的。
因为协通过率只会死板的使用用户的原始行为特征。
而矩阵分解因为生成了用户和物品的影像量,所以就可以计算任意两个用户和物品之间的相似度了,这就是泛化能力强的另一个例子。
那从上节课中我们学过深度学习模型,有很强的数据拟合能力,在多层神经网络之中,特征可以得到充分的交叉,让模型学到新的知识。
这正是增强模型泛化能力所需要的。
因此,wide den deep中模型中的第一部分就沿用了上节课介绍的embedding MRP的模型结构,来增强模型的泛化能力。
好,清楚了。
记忆能力和泛化能力是什么之后,让我们再回到y单d模型提出时的业务场景中去理解y战d模型是怎么综合性的。
学到记忆能力和泛化能力的那事实上,y单d模型是由google的应用商店团队google play提出的,在google play为用户推荐APP这样的应用场景下,y战d模型的推荐目标就显而易见了。
就是应该尽量推荐那些用户可能喜欢愿意安装的应用。
那具体到y单d模型中,google play团队是怎么为y的部分和d部分选择特征的呢?下面我们就一起来看一看。
那先来看看图二,它补充了google play y单d模型的细节,让我们可以清楚的看到各部分用的特征是什么。
我们先从右边y的部分的特征看起,这部分很简单,只利用了两个特征的交叉。
这两个特征是以安装应用和当前曝光应用。
那这样一来,外在部分想学到的知识就非常直观了,就是希望记忆好。
如果a所以b这样的简单规则在google play的场景下,就是希望记住,如果用户已经安装了应用,a是否会安装b这样的规则。
接着我们再来看一看左边的d部分,它就是一个非常典型的embedding MIP的结构呢。
我们看到其中的输入特征有很多,比如说有用户年龄、属性、特征、设备类型,还有已安装应用的embedding等等。
我们把这些特征一股脑的放进多层神经网络里面去学习之后,他们互相之间会发生多重的交叉组合,这最终会让模型具备很强的泛化能力。
比如说我们把用户年龄、人口属性和已安装应用组合起来,假设样本中有二十五岁男性安装抖音的记录,也有三十五岁女性安装抖音的记录。
那我们该怎么预测二十五岁女性安装抖音的概率呢?那这就需要用到已有特征的交叉来实现了。
虽然我们没有二十五岁女性安装抖音的样本,但模型也能通过一对已有知识的泛化,经过多层神经网络的学习来推测出这个概率。
那总的来说,y than deep,通过组合y的部分和呃线性模型和d部分的深度网络,去各自所长,得到了一个综合能力更强的组合模型。
那在理解了y占d模型的原理和技术细节之后,那就又到了shimmit code的环节了。
接下来我们就动手在spparx上实现y单d模型吧。
那通过上节l的实战,我相信信已经熟悉悉TNNLF fw的大部分操作,也清除了载入啊训练数据,创建TNRLOW所需的feature column的方法。
因此,y dend模型的实践过程中,我们会重点关注定义模型的部分。
这里呢我也会像上节课一样,继续使用TNNLOO carros接口来构建YYND模型。
具体代码你可以参考文稿。
那结合代码我们可以看到,在创建模型的时候,我们依次配置了模型的d部分和y的部分。
我们先来看第一部分,它是输入层加两层一百二十八维隐层的结构。
它的输入是类别型embedding向量和数值型特征。
实际上跟上节课的embedding MLP模型的特征是一样的。
那y的部分其实不需要有什么特殊操作,我们直接把输入特征链接到最后的输出层就可以了。
但是这里我想重点关注一下y的部分所用的特征,cross the feature.那在生成cross feature的过程中,我其实仿照了google le play的应用方生,生成了一个用用户以好评规则和当前评价电影组成的一个交叉特就让代码中的cross the feature.设置这个特征的目的在于让模型记住好评。
电影之间的相关规则,更具体一点来说,就是让模型记住一个喜欢电影a的用户也会喜欢电影b这样的规则。
当然这样的规则不是唯一的,需要你根据自己的业务特点来设计。
比如在电商网站中,这样的规则可以是购买了键盘的,用ay也会购买鼠标。
在新闻网站中,可是说说打开足足球,闻闻的用户,也会点击NBA新闻等等。
那在d部分和y的部分都构建完成后,我们要使用concatinate layer,把两部分连接起来,形成一个完整的特征向量,输入到最终的sigmoid神经元中,产生推荐分数。
总的来说,在我们上节课的embede MIP模型的基础上,实现wide deep是非常方便的,第一部分基本没有变化,我们只需要加上weite部分的特征和设置就可以了。
Wide den deep的全部相关代码,我都实现在了spirs中的wide n deep点。
Py文件中你可以直接参考源代码,但我更希望你能够尝试设置不同的特征,以及不同的参数组合,来真实的体验一下深度学习模型的调参过程。
好了,今天的课程讲完了,我们一起来做个总结。
那这节课我们学习了业界影响力非常大的深度学习模型。
Y den deep它是由y的部分和第一部分组成。
其中外外部部分要是为了增强模型型的记忆力,让我型记记。
如果a那为b这样的简单,但是数量非常多的规则。
第一部分是为了增强模型的泛化能力。
在实践部分,对于新宣样本以及从未出现过的特征组合的预测。
特力y den deep正是通过这样取长补短的方式,让模型的综合能力大幅提升。
在实践部分,我们继续使用TECFFO的caros接口,实现了weiden deep模型。
相比上节课embeding MRP模型的实现,我们新加入了用户以好评电影和当前评价电影组成的交叉能力。
Cross the feature,让y的部分学习一个喜欢a的用户,电影a的用户也会增欢电影b这样的规则。
好了,这就是我们这节课的主要内容。
同样我也把重要的知识点总结在了文稿的表格里,你可以利用它来巩固复习课程的。
最后我们再来思考一个问题,对于deep部分来说,你觉得我们一股脑的把所有特征都扔进MRP中去训练,这样的方式有没有什么改进的空间呢?那比如说用户喜欢的电影风格和电影本身的风格,这两个特征我们能不能进一步挖掘出他们之间的相关性呢?而不是简单粗暴的扔给神经网络去处理呢。
欢迎把你的思考和疑问写在留言区。
如果你的朋友也正在为外单deep模型的实现而困扰,欢迎你把这节课转发给他,我们下节课见。