深度学习模型凭借其强大的表达能力和灵活的网络结构在诸多领域取得了重大突破,如何将深度学习应用到业务场景中,实现用户专属定制,达到精准营销的目的,量化团队进行了一系列学习和探索。
基于两方面业务动机尝试构建某一品类购买用户预测模型:一方面,了解该类用品购买人群特征,挖掘潜在用户可能购买的商品,定向营销,实现用户专属定制,提高用户点击率和购买量,同时挖掘用户潜在喜好商品,增强用户体验。另一方面,预测将购买该类用品人群,精准选取营销目标。
模型将通过CNN (Convolutional Neural Networks) 提取特征,并利用LSTM(Long Short-term Memory )构建模型,将CNN与LSTM相结合,从而达到预期目的。本文将主要对这两种深度学习模型展开详细介绍。
CNN(Convolutional Neural Networks)提取特征
卷积神经网络(ConvolutionalNeural Networks, CNN)的概念最早出自19世纪60年代科学家通过猫的视觉皮层细胞中每一个视觉神经元只会处理一小块区域的视觉图像,即感受野(Receptive Field),20世纪80年代,日本科学家提出神经认知机(Neocognitron)的概念,算是卷积网络的原型。
下面我们通过一个图和简单的例子,来理解CNN的结构:
如图所示:假设输入尺寸为1000像素*1000像素的图片,即100万个像素点,输入数据的维度为100万,如果连接一个相同大小(包含100万个隐含节点)的隐含层,那么连接将是100万*100万=一万亿个连接,即仅一个Fully Connected Layer就有一万亿连接权重需要训练,为了降低计算复杂度,以及避免过多连接带来的过拟合,我们采用局部连接(Locally Connect)的方式,如图中上半部分所示,设局部感受野(ReceptiveField)大小为10*10,每个隐含节点只与10*10个像素点,那么连接则为10*10*100万=1亿个,缩小10000倍。
但是还不够,这时卷积层便开始发挥作用。局部连接每一个隐含节点都拥有100个参数,而通过卷积操作,每个隐含层的参数都完全一样,那么参数则从1亿降为100,极大的缩小参数量,其中,每一个卷积核滤波得到的图像就是一类特征的映射,即如图中的一个Feature Map。不用担心有多少隐含节点或图片太大,参数量只与卷积核大小有关,即权值共享。CNN由于卷积的权值共享结构,大幅减少神经网络的参数量,防止过拟合的同时又降低了神经网络模型的复杂度。
如图中所示:一个卷积神经网络有若干卷积层、Pooling层、全连接层组成,可由L个卷积层叠加,然后(可选)叠加一个Pooling层,重复这个结构M次,最后叠加N个全连接层,我们详细看一下CNN的每一层结构:
- 卷积层(Convolutional layer),每层卷积层由若干卷积单元组成,每个卷积单元的参数通过反向传播(Backpropagation)算法优化得到。卷积运算的目的是提取输入的不同特征,多层的网络能从低级特征中迭代提取复杂的特征。
- 线性整流层(Rectified Linear Units layer, ReLU layer),这一层神经的活性化函数(Activationfunction)使用线性整流(Rectified Linear Units, ReLU)。
- 池化层(Pooling layer),通常在卷积层之后会得到维度很大的特征,池化层进行特征选择和信息过滤。
- 全连接层(Fully-Connected layer), 降采样(Down-Sampling)把所有局部特征结合变成全局特征,用来计算最后每一类的得分。
总之,CNN的要点就是局部连接(Local Connection)、权值共享(Weight Sharing)和池化层(Pooling)中的降采样(Down-Sampling)。
LSTM(Long Short-termMemory )简介
长短期记忆网络 (Long Short-term Memory, LSTM)由Hochreiter&Schmidhuber (1997)提出,论文见《Long Short-term memory》,并被AlexGraves等进行了改良和推广。基于传统RNN(RecurrentNeural Networks)网络改进的变种网络,能很好地解决梯度爆炸(exploding gradient)和梯度消失(vanishing gradient)问题,让循环网络具备更强更好的记忆性能。
➤ 整体结构(Structure)
李弘毅机器学习讲义
➤ 核心过程(Core Process)
LSTM的核心思想是细胞状态,由z至a间有一条贯穿的箭头直线,代表了LSTM的状态state,它会贯穿所有串联在一起的LSTM单元,从第一个LSTM单元一直流向最后一个LSTM单元,其中只有少量的线性干预和改变。上面了解了LSTM的整体结构后,我们分别来理解LSTM的核心过程:
- 遗忘门(forget gate)
LSTM的第一步就是决定什么信息应该被神经元遗忘。这是一个被称为“遗忘门层”的Sigmod层组成的。它输入的每个神经元状态输出0~1之间的数字。“1”表示让信息全部通过,“0”表示不允许信息传递。
- 输入门(input gate)
下一步就是决定我们要在神经元细胞中保存什么信息,这包括两个部分。首先,一个被称为“遗忘门层”的Sigmod层决定我们要更新的数值。然后,一个tanh层生成一个新的候选数值,它会被增加到神经元状态中。
- 输出门(outputgate)
最后,我们要决定要输出什么。这个输出是建立在神经元状态的基础上的,但是有一个滤波器。首先,我们使用Sigmod层决定哪一部分的神经元状态需要被输出;然后让神经元状态经过tanh(让输出值变为-1~1之间)层并且乘上Sigmod门限的输出,只输出想要输出的。
以上即LSTM的基本思想,接下来将具体介绍模型实现,以及如何将CNN (Convolutional Neural Networks)与LSTM (Long Short-term Memory)相结合运用到实际业务场景中。
模型实现
LSTM (LongShort-term Memory)适合于处理和预测时间序列(Time Series)中间隔和延迟相对较长的重要事件。使用LSTM实现购买用户预测模型。由于没有客户真实状态标签,我们利用客户的购买数据来推断她是该品类需求用户的可能性。通过与该品类强相关的三级商品分类信息,将用户第一次购买这些商品假设为特征日。
➤ 正负样本 (Sample)
随机选取一年时间的观察窗口:
- 正样本(Positive samples):选取观察期内有过购买该产品的人群
- 负样本(Negative samples):选取观察期内没有任何需求迹象的用户
训练集、验证集与测试集正负样本比例均设为1:1
➤ 特征提取 (Feature)
模型利用CNN提取特征,CNN不需要将特征提取和分类训练两个过程分开,在训练时就自动提取了最有效的特征,解决了SIFT之类的算法特征时的局限性。尝试单独使用LSTM网络和利用CNN提取特征,将CNN与LSTM相结合的算法,由于CNN权值共享的特性,能降低模型复杂度,降低计算量,并通过实验证明LSTM+CNN比单独使用LSTM学习速率更快。
➤ 数据扩充 (Data Augmentation)
位移(Shifting): 删除最近n次用户的购买行为
位移效果:选取20K用户集进行验证,模型表现为:
同时利用 XGBoost得到 F1 score: 0.87
➤ 模型效果(Model effect)
测试集数据表现(与验证集结果相似): 准确率(Precision)和召回率(Recall)均在0.8以上,达到理想的模型效果,预测之后的半个月内约24%的用户完成了大于10次超过3类的某类产品的购买。将该模型落地到业务场景后,对业务指标(如:PV、UV、转化率等)有了明显的提升。
总 结
上述预测模型利用CNN提取特征并结合LSTM处理和预测时间序列中间隔和延迟相对较长的重要事件的模型等,已渗透应用在各个业务场景,单上述案例模型可实现的业务场景就有:达人标签定义,商品精准营销,推荐达人信用卡等。
深度学习(Deep Learning)是近年来机器学习和人工智能领域中关注度最高的技术,笔者所在量化团队在深度学习方面一直在不断尝试和努力探索,并不断深化对业务场景的理解,落地到各个业务场景中。
本次主要介绍了CNN(Convolutional Neural Networks)和LSTM(Long Short-term Memory)模型的结构和应用。未来量化团队还将不断探索和创新,将深度学习模型深入应用到更多业务场景中,实现更加精准的“专属定制”。