AutoDim:自动Embedding维度寻优,如何节省70%的存储空间同时还能大幅提效?
Memory-efficient Embedding for Recommendations (WWW21)!
在工业界使用深度学习算法做大规模的搜索推荐问题,不可避免的都会碰到下面的几个问题:
本文我们重点讨论第二个问题,因为大量的特征Filed以及Embedding维数与特征分布和神经网络结构之间的微妙关系,在实际的推荐系统中手工分Embedding的维数是非常困难的,本文提出了一个基于AutoML的框架AutoDim,该框架能够以数据驱动的方式自动选择不同特征Filed的维数 。
本文提出的框架如上所示,一共分为两个阶段:
1. 维度搜索阶段
它的目的是为每个特征Field寻找最佳的Embedding维数。
更具体地说,我们首先通过embedding lookup 步将具有不同维度的候选嵌入分配给特定的分类特征;然后,我们通过一个变换步骤来统一这些候选嵌入的维数,这是因为第一个MLP层的输入维数是固定的;
接下来,我们通过计算所有变换后的候选嵌入的加权和,得到该分类特征的形式化嵌入,并将其输入到MLP组件中。在训练集上学习DLRS参数,包括嵌入和MLP层,而在验证集上优化候选嵌入的体系结构权重,从而防止框架选择过拟合训练集的嵌入维度[24,29]。
在实践中,在DLRS参数和体系结构权重的替代训练之前,我们首先为所有候选embeddings分配等效的体系结构权重。固定这些体系结构权重并预训练DLRS,包括所有候选embedding。
2. 参数再训练阶段
根据在维度搜索阶段学习到的框架的权重,为每个特征字段选择embedding维度,并在训练数据集上以端到端的方式重新训练DLRS参数的参数(即MLPs和选定的embedding)。注意:
- 再训练阶段是必要的,因为在维数搜索阶段,模型的性能也受到次优embedding维数的影响,而在实际的推荐系统中,次优embedding维数是不理想的;
- 由于大多数现有的深度推荐模型通过嵌入向量上的交互操作(如内积)捕获两个特征字段之间的交互,新的embedding仍然统一到同一维度。这些交互操作限制了embedding向量需要拥有相同的维数。
请注意,数值特征将通过bucketing转换为类别特征。
不同的特征域具有不同的基数和对最终预测的不同贡献。所以我们应该为不同的特征域提供不同的embedding维数。然而,由于特征域的数量庞大,以及embedding维数与特征分布和神经网络结构之间的复杂关系,传统的降维方法很难人工选择emebdding维数。
- 一个直观方法是为每个特征域分配多个不同维数的embedding空间,然后DLRS自动为每个特征域选择最优的嵌入维数。
1. Embedding Lookup Trick
2. 权重共享embedding框架
对一个特征x,我们仅赋予d维度的emebdding,这么做的好处和坏处是:
- 大大节省了存储空间;
- 增加了训练时间;
由于现有DLRSs中第一MLP层的输入维数通常是固定的,因此它们很难处理各种候选维数。此处我们使用两种方式来处理
1. 线性变换
通过线性变化,我们将所有不同维度的向量映射到同一维度,然后我们再做BatchNormalization,并最终相加。
2. Zero填充
我们先做BatchNormalization, 然后通过使用0填充,得到相同的维度。
由于维度搜索阶段的次优Embedding维数也会影响模型的训练,因此需要一个只训练最优维数模型的再训练阶段来消除这些次优影响。
1. 离散维数的推导
在在此训练的阶段,gumbel-softmax操作就不需要了,
2. 模型再训练
此处我们注意:
- 现有的大多数深度推荐算法通过交互操作(如内积和Hadamard积)捕获特征字段之间的交互。这些交互操作要求所有字段的嵌入向量具有相同的维数。
所以我们仍然需要转化到相同的维度,此处类似的,我们使用:
- 线性变换:来自一个特征Field的所有嵌入共享相同的权重矩阵和偏差向量;
- 零填充:不引入额外的可训练参数
- AutoDim可显著提高推荐性能,并节省70%∼ 80% embedding参数。
本文提出的AutoDim,通过数据驱动的方式自动为不同的特征字段分配不同的嵌入维数。在现实世界的推荐系统中,由于特征场的数量庞大,以及嵌入维数、特征分布和神经网络结构之间的高度复杂关系,很难在可能的情况下将不同的维数手动分配给不同的特征场。因此,我们提出了一个基于AutoML的框架来自动选择不同的嵌入维度。
具体地,本文首先提出了一种端到端的可微模型,该模型以软连续的形式同时计算不同特征域在不同维度上的权重,并提出了一种基于AutoML的优化算法;然后根据最大权值,导出离散嵌入结构,并对DLRS参数进行重新训练。基于广泛使用的基准数据集,我们通过大量实验对AutoDim框架进行了评估。结果表明,我们的框架可以保持或实现稍好的性能,同时embedding空间也小了很多。
AutoDim,如何节省70%的存储空间同时还能大幅提效?总结
以上是生活随笔为你收集整理的AutoDim:自动Embedding维度寻优,如何节省70%的存储空间同时还能大幅提效?的全部内容,希望文章能够帮你解决所遇到的问题。
- 上一篇: 做向量召回 All You Need i
- 下一篇: 用XGBoost调XGBoost?我调我