type
status
date
slug
summary
tags
category
icon
password
Wide & Deep
1️⃣论文出处
Wide & Deep 模型的核心思想是结合线性模型的记忆能力和 DNN 模型的泛化能力,从而提升整体模型性能。
2️⃣论文解读
3️⃣模型结构
Wide部分特征:
Wide部分的特征主要是User Installed App 和 Impression App,工程师的目的是想发现当前曝光app和用户安装app的关联关系,以此来直接影响最终的得分。两个id类特征向量进行组合,在维度爆炸的同时,会让原本已经非常稀疏的multihot特征向量,变得更加稀疏。因此,为了不把数量如此之巨的权重都搬到线上进行model serving,采用FTRL过滤掉哪些稀疏特征无疑是非常好的工程经验。
Deep部分特征:
Age,#App Installs这些数值类特征和已经降维并稠密化的Embedding向量
4️⃣解决问题
如何让模型同时拥有比较好的记忆能力和泛化能力,即让模型兼具逻辑回归和深度神经网络的优点,也就是既能快速处理和记忆大量历史行为特征,又具有强大的表达能力?
模型记忆能力:可以被宽泛地理解为模型直接学习历史数据中物品或者特征的“共现频率”,并且把它们直接作为推荐依据的能力 。
两个特点:一是数量非常多,一个“记性不好”的推荐模型很难把它们都记住;二是没办法推而广之,因为这类规则非常具体,没办法或者说也没必要跟其他特征做进一步的组合。
模型泛化能力:指的是模型对于新鲜样本、以及从未出现过的特征组合的预测能力。
5️⃣损失函数 | 目标函数 | 公式推导
binary_crossentropy交叉熵损失函数
6️⃣代码实现
问题一:为什么在Google的Wide&Deep模型中,要使用带L1正则化项的FTRL作为wide部分的优化方法,而使用AdaGrad作为deep部分的优化方法?
FERL(FTRL可以当作一个稀疏性很好,精度又不错的随机梯度下降方法)
FTRL with L1非常注重模型的稀疏性。W&D采用L1 FTRL是想让Wide部分变得更加稀疏。或者说L1 FTRL会让Wide部分的大部分权重都为0,我们准备特征的时候就不用准备那么多0权重的特征了,这大大压缩了模型权重,也压缩了特征向量的维度。
在Deep部分,输入要么是Age,#App Installs这些数值类特征,要么是已经降维并稠密化的Embedding向量,工程师们不会也不敢把过度稀疏的特征向量直接输入到Deep网络中。所以Deep部分不存在严重的特征稀疏问题,自然可以使用精度更好,更适用于深度学习训练的AdaGrad去训练。
特征交叉:
模型结构实现:
7️⃣总结
- Author:liamtech
- URL:https://liamtech.top/article/10f9746b-4e13-80be-a639-f49884ac1802
- Copyright:All articles in this blog, except for special statements, adopt BY-NC-SA agreement. Please indicate the source!