1 背景

推荐系统中有很多多值特征,文中假设所有特征字段都是多值的,定义为以下形式:

传统的池化对所有特征使用统一的池化算子来压缩信息,忽略了特征分布之间的差异。因此,需要更多区分不同领域的池化方法。

因此提出了 AutoPooling 来自适应学习合适的池化算子,提升模型对于多值特征的学习能力。


2 AutoPooling

可以自动搜索每个特征的最佳池化算子,这个过程可以看作是搜索池化层的最佳子结构,这个子结构是搜索空间中预定义的池化算子。

AutoPooling(图 1 的上半部分)为池化层构建了一个池化算子搜索空间 P\mathscr{P},并设计了一种搜索策略来为每个字段找到最佳搜索空间。所以,最佳子结构的搜索转换为架构参数的搜索。通过这种方式,将各种池化层集成到加权和中:

通过优化架构参数 α\alpha 找到最佳池化算子。

AutoPooling 使用两阶段的方法进行训练,分为搜索阶段和重训练阶段(AP-2stage)。

2.1 搜索阶段

将整个系统的参数分为超参数 α\alpha 和模型可学习的参数 WW,搜索阶段的主要目的是得到超参数 α\alpha 的较优值。使用可微架构搜索 (DARTS) 技术。根据 DARTS,可以优化训练集中的主网络参数 WW,并在验证集上优化架构参数 α\alpha

因此将损失函数定义为两部分:训练集的损失 Ltrain (W,α)\mathcal{L}_{\text {train }}(W, \boldsymbol{\alpha}) 和验证集的损失 Lval(α,W(α))\mathcal{L}_{v a l}(\boldsymbol{\alpha}, W(\boldsymbol{\alpha})),其中 W(α)W(\boldsymbol{\alpha}) 表示固定 $\alpha $ 后的网络参数 WW

直接对公式11进行求解计算代价比较高,因此可以采用近似的方法:

其中 β\beta 是学习率,整个过程描述如下:

输入:feature 和 label

输出:学习到的架构参数 α\alpha^{*}

  • 若未收敛:
    1. 获取一小批验证数据
    2. 通过下降 αLval(W,α)\nabla \alpha \mathcal{L}_{v a l}\left(W^{*}, \alpha\right) 更新 α\alpha
    3. 获取一小批训练数据
    4. 模型输出预测的值 y^\hat{y}
    5. 通过下降 WLtrain (W,α)\nabla W \mathcal{L}_{\text {train }}(W, \alpha) 更新 WW

训练结束后,为每一个特征选择权重最大的池化方法。

2.2 重训练阶段

基于上述训练得到的最优池化算子,重新训练模型参数。

可以发现,两阶段的方法是比较耗时的,在第二阶段只选择一个池化算子。在此基础上提出 AP-Hybrid 方法,

2.3 AP-Hybrid

AP-Hybrid 只执行 AP-2 阶段的第一阶段,仅将 Softmax 函数应用于等式 8。然后,APHybrid 在训练阶段结束时混合由 DARTS 过程(算法 1)优化的架构参数 α\alpha。通过这种方式,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