深度学习详解与用户画像标签应用实例

对于今天人工智能领域的研究者或应用实践者来说,深度学习作为区别于一般机器学习算法的模型,在AI理论界可以说掀起了人工智能领域的一个小高潮,在数据挖掘、搜索技术、自然语言处理、语音识别等应用实践中取得了非凡的成就。本人作为一名人工智能爱好和实践者,广泛搜集相关资料,总结提炼相关概念并结合实际应用场景和数据搭建深度学习模型,尝试探索如何去解决实际业务问题。本文重点介绍深度学习的基础概念和模型,并以用户画像标签建设中运用深度学习建模的过程为例,论述其中遇到的一些问题和思考与各位共同探讨,也期望有大咖或爱好者一起讨论、共同学习和提升。

深度学习是何方神圣???

对于深度学习,人工智能大师YoshuaBengio这样评价,大意是计算机将增加人类的认知能力和智力,这些变化和突破在很大程度上正是由于深度学习的进步。那么追溯大师之言,让我们去了解深度学习是如何定义的。

深度学习定义:

深度学习简而言之是一种含有隐藏的多层特征感知学习结构的神经网络,即具有更深层次学习能力的模型。从统计学的角度看,深度学习是预测数据的分布,从数据中学习得到一个模型再通过这个模型去预测新的数据,这就要求训练和测试数据都是服从于相同的概率分布。从人脑视角看,深度学习是在模拟人脑的工作机制,它的基本特点是试图模仿大脑神经元之间的传递、信息处理模式。

深度学习模型定义需要明确这几点,一是**函数,即对输入神经元的**值,一般有logistic 、tanh、及ReLU;二是代价函数,学习过程都是优化问题,代价函数一般采用欧式距离;三是优化策略,最简单的用剃度下降,根据剃度更新权重,进而减小代价函数。由于多层神经网络通常模型很复杂,为此还需解决过拟合问题,目前比较有效的是通过数据增广和dropout技术。

与一般机器学习算法不同,深度学习能自动学习特征,不用人工定义特征,所以在实际应用场景中可不必事先定义太多特征,不需要开发人员十分懂业务知识,深度学习算法会自动去学习相关的特征,这也是前述为何深度学习增强了计算机认知能力和智力的根本原因。

深度学习诞生背景:

深度学习最早可追溯到它的核心计算模型——人工神经网络诞生之日,1943年神经科学家WarrenMc Cullcdh和Walter Pitts提出人类神经节沿着网状结构传递和处理信息的模型假说,被计算机科学家借鉴用于人工智能研究中,即是人工神经网络。【摘自人工智能】后续研究者们将人工神经网络用于机器学习,并逐渐发展成为多层的深度学习网络。

深度学习的诞生,一方面得益于人工神经网络的进步,另一方面受益于大规模分布式计算技术的发展。由于神经网络的计算量非常大,刚开始受限于基础设施计算能力限制进展并不大,很长时间处于蛰伏期。随着大数据时代到来,以谷歌为代表的前沿科技企业在分布式计算方面取得了突破进展,大数据技术体系带来海量存储和分布式的高性能计算,为深度学习走向应用提供了支持。随着深度学习泰斗辛顿一篇名为《一种深度置信网络的快速学习算法》的论文发表,宣告深度学习时代的开启。(感兴趣的可以下载论文研读)

深度学习模型:

深度学习模型通常分为卷积神经网络(Convolutional neural networks,简称CNN)和深度置信网(Deep Belief Nets,简称DBN)。其主要思想是模拟人的神经元,每个神经元接受到信息,处理完后传递给与之相邻的所有神经元即可。

深度学习详解与用户画像标签应用实例

如上图所示,从最左边x1、x2、x3的输入层到最右边的输出层,共四层,从左到右,每一层相当于一个判断策略,由易到难,并作为下一层的输出,直到最右边。经历层次的数目即”隐藏层“越多,越是可以判断复杂的选择问题,除层数多外,每层神经元即上图橙色小圆圈数目也要多。如AlphaGo的策略网络是13层且每一层神经元数量多达192个。

根据学习任务不同,深度学习常用模型包括前馈神经网络(Feedforward Neural Networks——FNN),卷积神经网络(Convolutional Neural Networks——CNN)和循环神经网络(Recurrent Neural Networks——RNN)。其中,卷积神经网络常常用于机器视觉,而循环神经网络则用于自然语言处理。深度学习的训练过程与一般机器学习模型相似,在深度学习中,主要寻找每层神经元的权重,通过定义的损失函数实现,利用梯度下降来不断减小定义的损失函数,最终实现收敛。在深度学习训练中,反向传播(Backpropagation, BP)是最为常见的训练方法,该算法会先按前向传播方式计算(并缓存)每个节点的输出值,然后再按反向传播遍历图的方式计算损失函数值相对于每个参数的偏导数。

深度学习主要框架:

目前主流的深度学习框架是PyTorch、Caffe2 和TensorFlow, Google的TensorFlow是开源深度学习系统一个比较好的实现,支持CNN、RNN和LSTM算法。也有keras这样的开源人工神经网络库,可以作为TensorFlow的高阶应用程序接口,进行深度学习模型的开发和调试、评估和应用及可视化。

用户画像是对用户某一类属性进行一定抽象后的用户特征表示,如用户的性别、年龄、消费能力等都是用户画像的标签。这些标签帮助理解用户,将用户进行分类、个性化运营,如可以针对高消费人群展示比较有品味的服装给用户。

用户画像标签建模方法为两大类,一类是规则模型,凭借业务经验定义一个标签的计算规则,通过大数据ETL计算出结果;另一类是机器学习建模,通过机器对标注样本数据的多次迭代学习,并通过对样本数据、模型结构及参数的调整逐步优化模型,当达到符合业务运营条件时则使用这个机器学习模型来自动建立用户画像标签。一般在实际场景,两种手段结合起来使用。

深度学习应用实例:

下面以识别用户是否为孕妇的画像标签建模实例,来探索深度学习模型在用户画像建模中的应用实践。

简单模型:

以用户各品类购买行为作为模型训练的特征,并通过划分和孕妇明显相关的品类(如孕期护理,孕妇装,高跟鞋,彩妆等),由这些品类的购买行为筛选出训练的正负样本,如按一年统计用户对各个品类的购买次数,若孕妇相关品类购买次数超过5次,则标识为正样本,若非相关类购买次数超过5次,则标识为负样本。先构造一个浅层神经网络模型,看模型能否自我训练学习,模型最初如下:

深度学习详解与用户画像标签应用实例

最初版模型直接用Keras构造,非常简单,可直接看到实时训练情况。5万的样本训练数据,大概几分钟就可以发现模型的Training accuracy和Validate accuracy都达到了0.9以上。验证模型的效果很容易发现模型的问题:是对几个月前是孕妇,现在已经是妈妈的情况,没有准确识别出来。因为模型输入的数据是过去一年的购买记录,模型无法感知数据在时间维度上的变化。

时序模型:

由于标签的时间敏感性,模型需要考虑时间维度,如6个月前有购买孕妇类、最近2个月已经不再买了,而开始买婴幼品类商品,说明现在已经不再是孕妇,应该打上新生妈妈的标签。因此,首先在模型的特征维度上将一年的购买行为按时间间隔(月)拆开,同时将用户的购买行为数据放在一个时间轴上,这样可提供更立体的特征数据给模型训练。选用可感知时序数据的RNN模型,对用户某段短时间内的购买行为综合分析学习,这样模型更容易准确地判断出孕妇标签。比如,用户购买平底鞋这个行为,一般情况下对孕妇标签的判断没有太大的作用,但如果用户购买平底鞋的时候,还买了孕妇裤,这就不同了,购买平底鞋这个行为就变得和孕妇行为相关了,和标签结果有一定的相关性。就是因为加上用户前后购买行为这个Context,而让数据更立体,更丰富,模型对标签的判断也就更准确。

深度学习详解与用户画像标签应用实例

模型的特征是用户每个月对各品类的购买次数,比如我们对最近18个月的,2000个品类进行统计,得到18*2000的矩阵,作为一个用户的特征表示,所以模型的inputs维度是:user_num * months * categorys (e.g. 10000 * 18 * 2000),output targets维度是:user_num * 1 (e.g. 10000 * 1),模型采用LSTM,对LSTM的最后一个output通过sigmoid映射到[0,1]后和target对比,计算得出cost函数。模型训练完后,再用测试数据校验,已经可以准确区分出新生妈妈和孕妇。但这个模型的输入特征不够丰富,用户的行为除购买之外,点击行为也可以作为输入特征,让学习维度更加丰富。

多时序模型:

从用户的浏览->点击->购买这个转化漏斗可以知道,用户的点击行为远比购买行为更频繁。以月为单位,一个用户在某个品类的购买次数一般为1次,很少超过10次。但点击不同,以月为单位统计点击的数量会很大。假设按自然月统计,如果一个用户在1号那天就对某个品类点击次数达到10次,我们知道用户对这个品类是有偏好的,但如果放到1个月统计这个维度,10次可能还没达到模型认为有强相关的程度。换句话说,就是模型无法实时感知到用户的偏好变化。所以针对点击行为,采用以天为单位统计用户在各个品类下的点击次数,作为模型的输入,这样就出现购买行为和点击行为的两套时序模型,他们的时间维度不同,不能放在一套LSTM模型里,只能分开两套,再通过一层fully connected layer,将两套LSTM的输出作为这层的输入,得到最终的模型结果。

深度学习详解与用户画像标签应用实例

模型调优:

结合点击和购买时序行为模型,使用样本筛选规则得到的数据,都可以准确识别出结果,但模型的泛化能力如何,会不会overfit,由于缺乏更丰富的数据样本,并不好验证这点。所以,对于模型的评估,我们采取人工伪造数据的方式来校验,比如将训练样本中的购买数据全部抹掉,这样用一份只有点击的数据来校验模型对点击行为的学习能力;再比如将训练样本中强孕妇相关品类的购买,点击数据抹掉,来验证模型对其他“潜在”的相关维度的学习能力。值得一提的是,模型的训练样本是按照一定的规则进行人工筛选标注完成的,而筛选的条件同时也是模型的学习维度中的一部分,这意味着模型很容易学习到这些“人工设定”的规则,而忽略那些“潜在”的维度和结果之间的相关性。模型容易出现“Memorize more than Learning”,也就是缺失泛化能力。如何提高模型的泛化能力:减少Hidden Size,降低模型记忆单元数,增加Dropout,通过随机抹掉部分hidden layer的节点,类似通过让模型变得简单,同时通过将多个简单的模型的结果综合起来,达到提高泛化能力的目的,同时采用L2 Regularizer,通过对权重的惩罚,来提高模型泛化能力提供更丰富的训练样本,让模型接触更多不一样的数据。

如果您是一个大数据和人工智能爱好者,正在努力学习这方面专业技能,那么请关注本公众号并后台回复关键词【大数据】,获取本号助手微信添加后将拉你进入【大数据人工智能联盟群】,与各路志同道合者共同进步、共同分享。

总结思考:

深度学习模型无法通过因果关系进行逻辑推导,和一般机器学习模型一样只能通过不同的数据不断尝试和学习,仍然是一个黑盒。在用户画像建模中,用户的很多特征都会随着时间变化,因此在选取特征时需要考虑时间维度。用户画像标签模型的数据样本获取成本大,通过规则筛选的数据,不够丰富,在深度学习训练中也容易使模型记忆训练数据,导致模型泛化能力差。但相对一般机器学习模型,深度学习模型可以兼容不同的时间维度特征,具有多层感知学习能力,依然是更强大有效的模型。