见微知著,你真的搞懂 Google 的 Wide&Deep 模型了吗?

作者: 王喆
公众号: 王喆的机器学习笔记

为什么在 Google 的 Wide&Deep 模型中,要使用带 L1 正则化项的 FTRL 作为 wide 部分的优化方法,而使用 AdaGrad 作为 deep 部分的优化方法?

论文原文的描述是这样的:

In the experiments, we used Follow- the-regularized-leader (FTRL) algorithm with L1 regularization as the optimizer for the wide part of the model, and AdaGrad for the deep part.

这个问题是一个很有意思的问题,因为原文中一带而过,所以很多同学也没有注意到这一点。但深究起来,这又是一个关键的问题,它涉及到不同训练方法的区别联系,涉及到模型的稀疏性,甚至涉及到特征选择和业务理解。

我们这篇文章就深入到 Wide&Deep 模型中去,从 FTRL 和 AdaGrad 出发,再剖析一次 Wide&Deep 模型(简称 W&D)。

一句话概括 W&D

由于 W&D 被剖析过太多次,也被应用过太多次,所以原理上这里不再赘述,一句话概括:

W&D 由浅层(或单层)的 Wide 部分神经网络和深层的 Deep 部分多层神经网络组成,输出层采用 softmax 或 logistics regression 综合 Wide 和 Deep 部分的输出。

Wide&Deep 模型示意图

一句话概括此结构的优点:

Wide 部分有利于增强模型的“记忆能力”,Deep 部分有利于增强模型的“泛化能力”。

相信大家对这些知识点都已经驾轻就熟,那就直接进入这篇文章的主要切入点,为什么 Wide 部分要用 FTRL 训练?

为什么 Wide 部分要用 L1 FTRL 训练?

这个问题是一个很有意思的问题,可能近几年毕业的同学都不大清楚 FTRL 是什么了。四五年前 FTRL 曾风靡全部互联网头部公司,成为线性模型在线训练的主要方法。

彻底解释清楚 FTRL 并不是一件容易的事情,可能要花上 10-20 页左右的篇幅,感兴趣的同学可以参考冯扬当时的著名文章“在线最优化求解”。

这里简要介绍一下,你可以把 FTRL 当作一个稀疏性很好,精度又不错随机梯度下降****方法。由于是随机梯度下降,当然可以做到来一个样本就训练一次,进而实现模型的在线更新。所以在四五年前,大部分公司还是线性模型为主的时代,FTRL 凭借非常好的在线学习能力成为主流。

说完了 FTRL,再说 L1 正则化,参加过算法岗面试的同学可能都碰到过那个经典面试题“为什么 L1 正则化比 L2 正则化更容易产生稀疏解?”。问题的答案现在当然已经是显学了,但这里“稀疏”这个性质又冒出来了。也就是说 FTRL with L1 非常注重模型的稀疏性。这也就是问题的答案,W&D 采用 L1 FTRL 是想让 Wide 部分变得更加稀疏。



再白话一点就是,L1 FTRL 会让 Wide 部分的大部分权重都为 0,我们准备特征的时候就不用准备那么多 0 权重的特征了,这大大压缩了模型权重,也压缩了特征向量的维度。

Wide 部分的稀疏性为什么这么关键?

稀疏性不见得一直是一个好东西,它不管怎样都会让模型的精度有一定的损伤。肯定是特征向量维度过高导致“稀疏性”成为了关键的考量。这就涉及到 Google Wide 部分的特征选取了,到底 Google 选了什么特征需要这么注重稀疏性。我们回到他的业务场景中来。

Wide 部分

大家可以看到红圈内的 Wide 部分采用了什么特征,它居然采用了两个 id 类特征的乘积,这两个 id 类特征是:

User Installed App Impression App

这篇文章是 Google 的应用商店团队 Google Play 发表的,我们不难猜测 Google 的工程师使用这个组合特征的意图,他们是想发现当前曝光 app 和用户安装 app 的关联关系,以此来直接影响最终的得分。

但是两个 id 类特征向量进行组合,在维度爆炸的同时,会让原本已经非常稀疏的 multihot 特征向量,变得更加稀疏。正因如此,wide 部分的权重数量其实是海量的。为了不把数量如此之巨的权重都搬到线上进行 model serving,采用 FTRL 过滤掉哪些稀疏特征无疑是非常好的工程经验。

为什么 Deep 部分不特别考虑稀疏性的问题?

大家注意观察可以发现 Deep 部分的输入,要么是 Age,#App Installs 这些数值类特征,要么是已经降维并稠密化的 Embedding 向量,工程师们不会也不敢把过度稀疏的特征向量直接输入到 Deep 网络中。所以 Deep 部分不存在严重的特征稀疏问题,自然可以使用精度更好,更适用于深度学习训练的 AdaGrad 去训练。

再说回模型的泛化能力和记忆能力

我想到这应该把文首的问题回答清楚了。最后我想再说回所谓 wide 部分的“记忆能力”。其实大家可以看到,所谓的“记忆能力”,可以简单理解为发现“直接的”、“暴力的”、“显然的”关联规则的能力。比如该问题中,Google W&D 期望在 wide 部分发现这样的规则:

用户安装了应用 A,此时曝光应用 B,用户安装的 B 概率大。

而 Deep 部分就更黑盒一些,它把能想到的所有特征扔进这个黑盒去做函数的拟合,显然这样的过程会“模糊”一些直接的因果关系,泛化成一些间接的,可能的相关性。

从这个角度来说,所谓“泛化能力”和“记忆能力”就更容易被直观的理解了。

最后,感谢当初网友的提问,注重细节,见微知著我想永远是一个算法工程师可贵的能力。

卖书

关于 W&D 的细节讨论亦收录在我的新书「深度学习推荐系统」 中,这本书系统性地整理、介绍了专栏中所有的重点内容,如果您曾在 「王喆的机器学习笔记」 中受益,欢迎购买。


本文地址:https://www.6aiq.com/article/1590621527145
本文版权归作者和AIQ共有,欢迎转载,但未经作者同意必须保留此段声明,且在文章页面明显位置给出