-->

深度学习推荐系统实战_24_17_EmbeddingMLP如何用TensorFlow实现经典的深度学习模型

你好,我是王哲。

今天,我们正式进入深度学习模型的实践环节,来一起学习,实现一种最经典的模型结构。

Embedding加MLP.它不仅经典,还是我们后续实现其他深度学习模型的基础。

所以你可一定要掌握好,这里面的embedding,我们已经很熟悉了。

那什么叫做MLP呢?它其实是multi layer perception,多层感知机的缩写。

那感知机是神经元的另外一种叫法,所以多层感知机就是说的多层神经网络。

讲到这里啊,我想你脑海中已经有了这个模型结构的大致图像了。

那今天我们就以微软著名的深度学习模型deep crossing为例,来给你详细讲一讲embedding MLP模型的结构构和实现方法。

我们直接看文稿中的图一,也就是微软在二零一六年提出的深度学习模型。

Deep crossing.微软把它用在了广告推荐这个业务场景上,它展示了一个经典的embedding加MLP模型的结构。

我们可以看到,deep crossing从下到上分为五层,分别是fiure层、embedding层、stacking层、scl p层和scoring层。

那接下来我们就从下往上来给你讲一讲。

每一层的功能是什么?以及他们的技术细节分别是什么样的。

我们先来看feature层啊,feature层也叫做输入特征层,它在deep crossing的最底部是整个模型的输入。

仔细来看图一的话,你一定会发现不同特征在细节上有一些区别。

那比如说feature一向上连接到了embedding层,但是feature二就直接连接到了更方方的bebedding层,这是怎么dding呢?原因就是feature一代表的是类别性特征,经过one how的编码后生成的特征向量,而feature二代表的是数值型特征。

大家都知道one how特征太稀疏,了不适合直接输入到后续的神经网络中,直接进行训练。

所以我们需要通过连接到embedding层的方式,把这个稀疏的one号特征转换成比较稠密的embedding向量。

好,我们接着来看embedding层。

Embedding层就是为了把稀疏的弯号的向量转换成稠密的embedding向量而设置的那这里我们需要注意的是,embedding层并不是全部连接起来的,而是说每一个特征对应一个独立的embedding层不同embedding层之间互不干涉。

那embedding层的内部结构到底是什么样的呢?我想先问问你,你还记得what to work的原理吗?那embedding层结构就是what to work.模模从输入神经元到隐隐神神元元部分分,那参文文稿的示示图图我们可以看到这部分就是一个从输入层到隐层特间的全连接网络。

那一般来说,embeding项量量的度度该远远远于原原始稀疏特征量量。

按照经验来说,到上百维维一般能够够足足求求了,这样它才能够实现从稀疏特征向稠密特征的转换。

下一个我们来看层,那stacstacking层中文叫做堆叠层,我们也经经常把它叫做连接层。

它作用比较简单,就是把不同的embedding特征分其它数据型特征的拼接在接起,形成新的包含隐部特征的特征向量。

那再往上MRP层,就是我们开头提到的多层神经网络层。

那在图一中指的就是multiple retidue unistem,那中文叫做多层残插网络啊,微软在实现deep crossing时,针对特定的问题选择了残差神经元。

但是事实上神经元的选择有非常多种。

比如说我们之前讲过,以sigmoid函函数、激活函数的神经元和使用tinning、 h raalu等其他激活函数的神经元,具体选择哪种,这是一个调三的问题。

那一般来说,reall最经常使用在隐层神经元上,sigmoid则多使用。

在输出神经元实践中,我们也可以选择性的尝试,其他神经元根据效果做出最后的决定。

不过,不管选择哪种神经元,MRP层的特点都是全连接,就是不同层的神经元,两两之间都有连接。

就像我在文稿中给出的示意图中的两层神经网络结构一样,它们两两连接只是连接连元,只过梯度反向传播的学习过程中发生改变。

Mrp层的作用是让特征向量不同维度之间做充分的交叉,让模型能够抓取到更多的非线性特征和组合特征的信息。

这就让深度学习模型在表达能力上比传统的机器学习模型增强了很多。

最后,我们再来看scoring层,它也被称作输出层。

但虽然深度学习模型的结构可以非常复杂,但最终我们要预测的目标就是一个分类的概率。

如果是点击率,预估就是一个二分类问题,那我们就可以用逻辑回归作为输出层神经元。

而如果是类似图像分类这样的多分类问题,我们往往在输出层采用的是soft max这样的多分类模型。

好了,到这里我们就讲完了。

Embedding加MRP的五层结构,它的结构重点用一句话总结,就是对于类别特征,先利用embedding层进行特征重密化,再利用staggling层连接其他的扔输入MIP的多层结构,最后用scoring层预估结果。

现在我们已经从整体上了解了。

Embedding加MLP模型的结构,可能你对其中的细节实践还是有些疑问。

那别着急,下面我就带你用spare reses来实现一个embedding加MRP的推荐模型,帮你扫清这些疑问。

那实战中我们按照构建推荐模型经典的步骤来进行实现。

那它包括五步特征选择模型设计模型,实现模型训练和最后的模型评估。

首先我们来看看特征选择和模型设计在上一节的实践准备。

课中,我们已经为模型训练准备好了可用的训练样本和特征。

那秉着类别性特征embedding化,数值性特征直接输入MRP的原则。

我们选择了movie ID uda ID movii java、 u vie java作为embedding化的特征选择物品和用户的统计性特征,作为直接输入MRP的数值性特征。

那具体的特征选择你可以看看。

一、在文稿中总结的原则,选择好特征后,就是MRP部分的模型设计。

我们选择了一个三层层的MRP结构,其中前两层是一百二十八维的全连特层。

我们这采采用c评差的作样型,本标后选择好解的是一个类似CTR预估的二分类问题。

那对于二分类问题,我们最后一层采用了单个CTI部型的原则作为输出,这就可以了。

当然我知道你肯定对这一步的细节实现有很多问题。

那比如说为什么要选择三层的结构啊,为什么要选择sigmoid作为激活函数等等。

那其实我们对模型层数和每个层内维度的选择还是一个超参数调优的问题。

那这里的选择不能保证最优。

我们需要在实战中根据模型的效果进行超参数的搜索课,到最适合你的实际问题的模型参数。

那确定好了模型结构和特征,万事俱备,只限实现了。

下面我们就利用TNRFLO的ros接口来实现embedding加MIP的结构。

那总的来来模模型实实现有七个步骤,那总为这是我们课程中的第一个TELF low实现,所以会讲的详细细些来。

而我已经把全部的参参代代码在在了。

项目中TFF remomol模块的embedding MIP文件。

我建议你先看看文稿中的关键代码,听听我的讲解,课后再找到所有的代码进行查看。

我们先来看第一步导入TNL floor包。

如果你按照实践准备一的步骤配置好了,TNRFOW的python环境就可以成功的导入TNFFOW包了。

那接下来你要做的就是定义好训练数据的路径,train data UL.那这里你需要根据自己训练数据的本地路径来替换参考代码中的路径,这就可以了。

那第二步是载入训练数据,我们利用teninl flow自带的CSV数据集的接口来载入训练数据。

那注意这里有两个比较重要的参数,一个是label name,它指定了CSV数据集中的标签列。

那另一个是batch sites,它指定了训练过程中一次输入几条训练数据进行梯度下降的训练。

那载入训练数据之后,我们把它们分割成了测试集和训练集。

第三步是载入类别型特征。

我们用到的类别型特征主要有三类,分别是java、 user、 ID和movie ID.在载入java类特征的时候,我们采用了叫vocabugical column with category list方法,把字符串型的特征转换成了y号特征。

在这个转换过程中,我们需要用到一个词表。

你可以看到我在开头就定义好了,包含所有java类别的词表java vocap.那在转换u si DD和vivie ID特征的时候,方法又变了。

我们使用了categical column with identity方法,把ID转化成one特征。

那这个方法就不用次表了,它就直接把hoi d值对应的那个维度置为一。

那举个例子来说,比如我们输入的ID是三百四十,作为movie ID.那总的movie的数量假如说是一千零一,那使用这个方法就会把这个一千零一维的one hot movie ID向量,其中的第三百四十位置为一,那其余的当然都为零。

那为了把稀疏的one hot特征转换成稠密的embedding向量,我们还需要在one hot特征外包裹一层ebedding层。

你可以看到那使用embedding column方法就可以完成这样的操作。

那它把movie one hot向量映射到了一个十维的embedding层上。

接着我们来看第四步啊,数值型特征的处力。

那这一步非常简单,直接把特征值输入到MRP内,把特征逐个声明为numeric column就可以了,不需要经过特殊的处理。

那第五步是定义模型结构。

那这一步的实现代码也非常简洁。

我们直接利用dance features,把类别型、embedding特征和数值型特征连接在一起,形成稠密的全量的特征向量。

然后依次经过两层一百二十八维的全连接层,最后通过sigmoid的输入神经元产生最终的预估值。

那第六步是定义模型训练相关的参数。

那在这一步中,我们需要设置模型的损失函数梯度反向传播的优化方法和模型评估所用的指标。

那关于损失函标,我们使用的是二分类问题中最常用的。

二、分类交叉熵优化方法,使用的是深度学习中很流行的。

Adam最后是评估指标,我们使用了准确度accuracy,作为模型评估的指标。

第七步是模型的训练和评估。

沉词flow模型的训练过程和spark MML一样,都是调用fit函数,然后使用六为函数,在测试集上进行评估。

不过我们要注意,这里边有一个参数叫evirappbox,它代表了模型训练的轮数。

一轮代表着使用所有训练数据训练一遍appbox等于十,代表着训练十次。

那如果一切顺利的话,你就可以看到模型的训练过程和最终的评估结果了。

从下面的训练输出中,你可以看到每轮训练模型的损失的变化,以及模型评估指标accurry的变化过程。

你肯定会发现,随着每轮训练的loss减小,acccuracy会变高。

换句话说,每轮训练都会让模型的结果更好,这是我们期望看到的那需要注意的是,理论上来说,我们应该在模型的评估指标accacy不不变,变高时停止训练,据此确确最佳佳的ebox取值。

但是如果模型的收敛时间确实太长,我们可以设置一个IPOOS的最大值,让模型提前终止训练。

那最终的模型评估需要在测试集上进行。

从刚才的输出中我们可以看到,最终的模型在测试集上的准确度是零点七四七二。

它意味着我们的模型对于百分之七十四点七二的测试样本都做出了正确的预值。

当然了,模型的估估指标还很多,我们会在之后的模型评图片中进行更为详细的讲解。

好了,今天的课程讲完了,我们来一起做一个总结。

那这节课是我们深度学习模型实践的第一课。

我们要掌握两个重点内容,一个是知识性的,就是embedding加MRP的模型结构。

第二个是实践上的是embedding加MRP模型的tense flow事件。

那具体来讲embedding加MRP主要是由embedding部分和MRP部分这两部分组成。

那使用embedding层主要是为了将类别性特征转换成ebedding向量MLP部分是通过多层神经网络拟合优化目标,来提升模型整体的表达和拟合能力。

那具体来说,以微软的deep crossing为例,模型一共分为五层,从下到上依次是feature层、embedding层、stacking层、MRP层和scoring层。

那在TNR flow的实践部分,我们利用上节课处理好的特征和训练数据,实现了spelk recess项目中的第一个深度学习模型。

在实践过程中,我们要要重点掌握类别、性征、征处、处理方法、模型的定义方式、训练方式以及及后的模型评估方法。

那我也把这些重点的知识总结在了一张表格里,你可以利用它来认真回顾。

那今天我们一起完成了embedding MLP模型的实现。

在之后的课程中,我们会进一步实现其他的深度学习模型,并通过模型的评估进行效果上的对比。

另外,我们也会利用训练出的深度学习模型,完成项目的猜你喜欢功能,期待与你一起不断完善我们的项目。

最后我们再来看一个思考题,那在我们实现的embedding MIP模型中,也有用户的embedding层和物品。

Ebedding层。

你觉得从这两个embedding层中抽取出来的用户和物品embedding能直接用来计算用户和物品之间的相似度吗?为什么?欢迎把你的思考和疑惑写在留言区,也欢迎你把这节课转发给希望,用tennl flow实现深度推荐模型的朋友,我们下节课见。