1 背景
推荐系统中有很多多值特征,文中假设所有特征字段都是多值的,定义为以下形式:
传统的池化对所有特征使用统一的池化算子来压缩信息,忽略了特征分布之间的差异。因此,需要更多区分不同领域的池化方法。
因此提出了 AutoPooling 来自适应学习合适的池化算子,提升模型对于多值特征的学习能力。
2 AutoPooling
可以自动搜索每个特征的最佳池化算子,这个过程可以看作是搜索池化层的最佳子结构,这个子结构是搜索空间中预定义的池化算子。
AutoPooling(图 1 的上半部分)为池化层构建了一个池化算子搜索空间 P,并设计了一种搜索策略来为每个字段找到最佳搜索空间。所以,最佳子结构的搜索转换为架构参数的搜索。通过这种方式,将各种池化层集成到加权和中:
通过优化架构参数 α 找到最佳池化算子。
AutoPooling 使用两阶段的方法进行训练,分为搜索阶段和重训练阶段(AP-2stage)。
2.1 搜索阶段
将整个系统的参数分为超参数 α 和模型可学习的参数 W,搜索阶段的主要目的是得到超参数 α 的较优值。使用可微架构搜索 (DARTS) 技术。根据 DARTS,可以优化训练集中的主网络参数 W,并在验证集上优化架构参数 α。
因此将损失函数定义为两部分:训练集的损失 Ltrain (W,α) 和验证集的损失 Lval(α,W(α)),其中 W(α) 表示固定 $\alpha $ 后的网络参数 W。
直接对公式11进行求解计算代价比较高,因此可以采用近似的方法:
其中 β 是学习率,整个过程描述如下:
输入:feature 和 label
输出:学习到的架构参数 α∗
- 若未收敛:
- 获取一小批验证数据
- 通过下降 ∇αLval(W∗,α) 更新 α
- 获取一小批训练数据
- 模型输出预测的值 y^
- 通过下降 ∇WLtrain (W,α) 更新 W
训练结束后,为每一个特征选择权重最大的池化方法。
2.2 重训练阶段
基于上述训练得到的最优池化算子,重新训练模型参数。
可以发现,两阶段的方法是比较耗时的,在第二阶段只选择一个池化算子。在此基础上提出 AP-Hybrid 方法,
2.3 AP-Hybrid
AP-Hybrid 只执行 AP-2 阶段的第一阶段,仅将 Softmax 函数应用于等式 8。然后,APHybrid 在训练阶段结束时混合由 DARTS 过程(算法 1)优化的架构参数 α。通过这种方式,AP-Hybrid 可以研究多值特征的分布,并自适应地混合来自不同池化算子的信息。
3 模型结构图
主要的改进是在池化层,因此可以很很方便的应用于不同的模型架构中。
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55
| graph TD subgraph 输入层 A1[单值特征<br>userId/movieId/year] A2[多值特征<br>user_genre/urb/movie_genre/movie_tag] end
subgraph Embedding层 B1[单值Embedding<br>size=16] B2[多值Embedding<br>size=16] A1 --> B1 A2 --> B2 end
subgraph 池化层 C1[多种池化方式] C2[Sum池化] C3[Mean池化] C4[Max池化] C5[Min池化] C6[K阶池化] C7[注意力池化] B2 --> C1 C1 --> C2 C1 --> C3 C1 --> C4 C1 --> C5 C1 --> C6 C1 --> C7 end
subgraph 权重融合 D1[Softmax权重] D2[加权池化结果] C2 & C3 & C4 & C5 & C6 & C7 --> D1 D1 --> D2 end
subgraph DNN层 E1[特征拼接<br>单值+多值] E2[FC层 64] E3[FC层 32] E4[FC层 1] B1 --> E1 D2 --> E1 E1 --> E2 E2 --> E3 E3 --> E4 end
subgraph 输出层 F1[Sigmoid] F2[预测概率] E4 --> F1 F1 --> F2 end
|