低维的嵌入学习是离线 DNN 优化泛化能力的关键,它等价于做稀疏矩阵分解,因此,整个模型泛化能力提升的关键就在于如何使得参数规模与样本数能够更好地匹配 。
从多个方面来进行优化:
- 首先是从嵌入维度方面,因为不同特征的展现量差异是很大的,有些特征的展现量非常高,比如头部的资源、头部的用户,可以使用更长的嵌入维度,这就是常见的动态嵌入维度的思想 , 即展现越充分嵌入维度越长 。当然如果要做得更 fancy,可以用 autoML 等方式做强化学习,自动搜索最优嵌入长度 。
- 第二个方面是创建阈值,由于不同资源展现量不同 , 因此 , 何时为特征创建嵌入表征也是需要考量的 。

文章插图
业界通常是采用两阶段训练抗过拟合的方式 。整个模型由两层组成 , 一个是很大的离散矩阵层,另一个是很小的稠密参数层 。离散矩阵层是非常容易过拟合的,所以业界实践通常都是采用 One Pass TrAIning , 即 online learning , 所有的数据都过一遍,并不会像学术界一样的做 batch training 。
另外,业界通常会利用时序 Validation Set 来解决稀疏层的 overfitting 问题 。把整个训练数据集按时间维度切分成很多个 Delta,T0,T1,T2,T3 不同的 Delta 。每次训练是用前几小时训练好的离散参数层固定住 , 再用下一个 Delta 的数据 f.NETune dense 网络 。也就是通过固定稀疏层、重训其它参数的方式来缓解模型的过拟和问题 。
这种做法也会带来另外一个问题,因为训练是切分开的,并且每次都需要固定 T0 时刻的离散参数,再用 t+1 时刻重训 join 阶段 , 这样会拖累整个训练速度,带来扩展性方面的挑战 。所以近年来都是采用单阶段训练,即将离散表征层与稠密网络层在一个 Delta 中同时更新 。而单阶段训练也存在一个问题 , 因为整个模型除了 embedding 特征之外,还有很多连续值特征,这些连续值特征会统计每个离散特征的展现点击情况,因此,可能带来数据穿越的风险 。所以在具体实践时,第一步会先除掉统计量的特征,第二步使得稠密网络与离散表征一起训练,使用单阶段的方式训练 。另外整个嵌入的长度,都是自动可伸缩的方式 。通过这一系列方法,可以使得模型训练提速 30% 左右 。实践表明,该方法过拟合程度很轻微,训练跟测试的 AUC 的差距也都是 1/ 1000 或者更低的程度 。
四、架构接下来介绍架构设计上的思考和经验 。
1、系统分层设计原理

文章插图
系统设计的核心原则是分治法 。召回需要有多个通道,核心的目标是要提升召回率,以及召回资源的丰富程度 。同时召回也要考虑探索跟利用的问题,是推荐效果的基础保证 。粗排做第一层的过滤 , 主要做轻量级点预估,承上启下 。精排通常是做重计算,也是做点预估,跟重排之间的关系非常紧密,通常会使用非常复杂的结构,也是业界研究的重点 。重排是最后一层,重排是具体面对用户的 , 决定了最终的展现序列,基于精排的结果考虑上下文然后来做复杂的序列预估 , 即 list wise 的排序 。重排序需要考虑很多业务的约束,里面有很多规则,包括打散、LCN、退场等等,是规则与模型双重驱动的模块 。
推荐系统各层的目标基本一致 , 但是各层侧重不太一样 。召回和粗排侧重的是泛化以及召回率,精排侧重的是单点 AUC 的精度,重排侧重的是整体序列最优 。从数据上来看,越靠近召回粗排 , 越泛化,越靠近精排重排,越要求精度 。越靠近召回源,性能受限越严重,因为候选资源越多计算量越大 。粗排只需要对齐精排是一个误区,粗排需要考虑与精排的一致性,但是并不能只对齐精排 。如果粗排什么都不做,只是做对齐精排,会带来非常严重的马太效应 。因为精排不是 ground truth,用户的行为才是,需要学习好用户行为,而不是学习精排,这是很重要的一点提示 。
2、多阶段模型联合训练

文章插图
精排跟重排之间的关系是非常紧密的,早年重排是直接用精排的打分来做训练的,一方面耦合很严重,另一方面直接使用精排打分来做训练 , 很容易产生线上的波动 。
推荐阅读
- 面膜排行榜前十名 按照效果排名的面膜推荐
- 谁说国货护肤品现在不好?平替外国大牌的国货护肤品推荐
- 猫薄荷对猫有什么作用百度百科 猫薄荷对猫有什么作用
- 2024最火女发推荐:从烫到染,引领潮流的100多款发型
- 盘龙香百度百科 盘龙香的养殖方法与注意事项
- 如何在百度上回答别人的问题
- 什么样的内容是百度认为的优质内容
- 面向推荐系统的深度强化学习算法研究与应用
- 检测文章原创度的免费软件有哪些,百度检测文章原创
- 推荐一部历史古装美剧,要剧情有剧情,要看点有看点
