背景
特征工程是绕不开的话题,巧妙的特征组合也许能够为模型带来质的提升。但同时,特征工程耗费的资源也是相当可观的,对于后期模型特征的维护、模型线上部署不太友好。2016年,微软提出Deep Crossing模型,旨在解决特征工程中特征组合的难题,降低人力特征组合的时间开销,通过模型自动学习特征的组合方式,也能达到不错的效果,且在各种任务中表现出较好的稳定性。
与FNN、PNN不同的是,Deep Crossing并没有采用显式交叉特征的方式,而是利用残差网络结构挖掘特征间的关系。本文将对DeepCrossing从原理到实现细节进行详细分析。
模型结构
为了完成端到端的训练, DeepCrossing模型要在内部网络结构中解决如下问题:
(1)离散类特征编码后过于稀疏, 不利于直接输入神经网络训练, 需要解决稀疏特征向量稠密化的问题
(2)如何解决特征自动交叉组合的问题
(3)如何在输出层中达成问题设定的优化目标
DeepCrossing模型结构:
整个模型包含四种结构:Embedding,Stacking,Residual Unit,Scoring Layer。
论文中使用的目标函数为 logloss :logloss=−1N∑Ni=1(yilog(pi)+(1−yi)log(1−pi)) ,在实际应用中,可以灵活替换为其他目标函数。
一、特征抽取层:
对于基础数据的特征处理是整个推荐系统的基础,也是最重要,如何选取特征。
推荐系统常用 : 行为特征(阅读时长、关注、点赞、喜欢、评论等)、User 基本特征、item 基本特征 、统计特征(PV,UV,点击率等)
特征处理:类型特征OneHot、数字特征是否需要归一化,连续的特征是否需要cut 等
二、Embedding
https://zhuanlan.zhihu.com/p/83814532 embedding 介绍见这个blog 写的不错
Embedding的主要目的是将高维稀疏特征转化为低维稠密特征,其公式化定义为:
其中 代表输入的第 j 个特征Field,并且已经过one-hot编码表示,分别表示对应的模型参数,DeepCrossing加上了偏置 项 。公式中的 max 操作等价于使用 relu 激活函数。尽管可以通过分Field的操作,减少Embedding层的参数量,但是由于某些 高基数特征 的存在,如paper中提到的CampaignID,其对应的 仍然十分庞大。为此作者提出,针对这些高基数特征构造衍生特征,具体操作如下。根据CampaignID的历史点击率从高到低选择Top1000个,编号从0到999,将剩余的ID统一编号为 1000。同时构建其衍生特征,将所有ID对应的历史点击率组合成1001维的稠密矩阵,各个元素分别为对应ID的历史CTR,最后一个元素为剩余ID的平均CTR。通过降维引入衍生特征的方式,可以有效的减少高基数特征带来的参数量剧增问题。
三、Stacking Layer
经过Embedding之后,直接对所有的 进行拼接 Stacking, 。作者将特征embedding为256维,但是对于本身维度低于256的特征Field,无需进行Embedding,直接送入Stacking层 。
四、Multiple Resldual Units Layer (残差神经网络层)
上图描述的残差单元,残差神经网络层是有残差单元组成
① 输入层经过两次以Relu为激活函数的Full Connected操作 生成输出向量
② 输出向量和原输入向量做元素叠加生成新的输出向量 , 也就是经过①部分处理的数据 ,其实是拟合的残差。
五、 Scoring Layer
是为了拟合优化目标存在的,通常使用逻辑回归解决CTR 中的二分类问题,如果是多分类就通过softmax 处理