type
status
date
slug
summary
tags
category
icon
password
Deep & Cross Network
1️⃣论文出处
2️⃣论文解读
3️⃣模型结构

4️⃣解决问题
在Wide部分,仍然需要人工地设计特征叉乘。面对高维稀疏的特征空间、大量的可组合方式,基于人工先验知识虽然可以缓解一部分压力,但仍需要不小的人力和尝试成本,并且很有可能遗漏一些重要的交叉特征。Deep & Cross Network,将Wide部分替换为由特殊网络结构实现的Cross,自动构造有限高阶的交叉特征,并学习对应权重,告别了繁琐的人工叉乘。
5️⃣损失函数 | 目标函数 | 公式推导
带L2正则的交叉熵损失函数。
6️⃣代码实现
cross layer
正确的实现方式不是先计算,而是先计算,因为的计算结果是一个标量,几乎不占用存储空间。
7️⃣论文细节
特征处理
- 对sparse特征进行embedding,对于multi-hot的sparse特征,embedding之后再做一个简单的average pooling
- 对dense特征归一化,然后和embedding特征拼接,作为随后Cross层与Deep层的共同输入
Cross Layer


Cross Layer细节:
- 每层的神经元个数都相同,都等于输入的维度 d,也即每层的输入输出维度都是相等的
- 受残差网络(Residual Network)结构启发,每层的函数拟合的是的残差,残差网络有很多优点,其中一点是处理梯度消失的问题,使网络可以“更深”.

从上图可知包含了原始特征从一阶到二阶的所有可能叉乘组合,而包含了其从一阶到三阶的所有可能叉乘组合。
Cross的巧妙设计使得模型具备以下能力:
- 有限高阶:叉乘阶数由网络深度决定,深度对应最高阶的叉乘
- 自动叉乘:Cross输出包含了原始特征从一阶(即本身)到 阶的所有叉乘组合,而模型参数量仅仅随输入维度成线性增长:
- 参数共享:不同叉乘项对应的权重不同,但并非每个叉乘组合对应独立的权重(指数数量级), 通过参数共享,Cross有效降低了参数量。此外,参数共享还使得模型有更强的泛化性和鲁棒性 。例如,如果独立训练权重,当训练集中这个叉乘特征没有出现 ,对应权重肯定是零,而参数共享则不会,类似地,数据集中的一些噪声可以由大部分正常样本来纠正权重参数的学习
注意点:
文中将dense特征和embedding特征拼接后作为Cross层和Deep层的共同输入。这对于Deep层是合理的,但我们知道人工交叉特征基本是对原始sparse特征进行叉乘,那为何不直接用原始sparse特征作为Cross的输入呢?联系这里介绍的Cross设计,每层layer的节点数都与Cross的输入维度一致的,直接使用大规模高维的sparse特征作为输入,会导致极大地增加Cross的参数量。当然,可以畅想一下,其实直接拿原始sparse特征喂给Cross层,才是论文真正宣称的“省去人工叉乘”的更完美实现,但是现实条件不太允许。所以将高维sparse特征转化为低维的embedding,再喂给Cross,实则是一种trade-off的可行选择。
设初始输入维度为 ,Deep和Cross层数分别为和,假设Deep每层神经元个数为,则两部分的参数量为:

可以看到Cross的参数量随增大仅呈“线性增长”!相比于Deep部分,对整体模型的复杂度影响不大,这得益于Cross的特殊网络设计,对于模型在业界落地并实际上线来说,这是一个相当诱人的特点。
- Author:liamtech
- URL:https://liamtech.top/article/10e9746b-4e13-8116-bd1f-e3c374c37bca
- Copyright:All articles in this blog, except for special statements, adopt BY-NC-SA agreement. Please indicate the source!