论文信息
« Self-Supervised Reinforcement Learning for Recommender Systems »
SIGIR-2020
session-based or sequential recommendation
核心思想
用强化学习引入额外的信息来辅助神经网络的训练
架构图
过程
强化学习建模
S
$s_{t} = G(x_{1:t})$
$x_{1:t}$ 是用户行为序列, G 是编码器(例如 GRU 等)
A
所有可选的物品
在离线数据中, 可以将 $x_{t+1}$ 当作 $s_t$ 的动作
R
比如下一个时间步用户点击了某商品, 那么就返回一个点击行为的奖励
比如下一个时间步用户购买了某商品, 那么就返回一个购买行为的奖励
可以对这两种行为分配不同的奖励大小使模型更偏好某种行为(比如给购买行为更多的奖励, 让系统推荐用户更可能购买的物品)
为什么不能直接用强化学习做推荐
没有在训练数据中出现过的的情况无法学习, 会导致最终直接预测 $Q(s, a)$ 是有偏差的(有些 $a$ 根本没出现过, 训练的时候只能在出现过的 $a$ 上训练, 测试的时候却是找所有 $a$ 中最大的 $a$ , 训练与测试分布不同, 存在偏差)
在训练数据中出现过的情况是可以用来辅助训练的, 因为这部分数据是无偏的
SQN
训练阶段
input: $(x_{1:t} , a_t )$
$L_{SQN} = L_{s} + L_{q}$
损失函数由两部分组成
第一部分
$L_{s}=-\sum_{i=1}^{n} Y_{i} \log \left(p_{i}\right)$
$p_{i}=\frac{e^{y_{i}}}{\sum_{i^{\prime}=1}^{n} e^{y_{i} \prime}}$
在下一个时间步, 如果用户与 i-th 物品交互了, 那么 $Y_i$ 就是1, 否则为0
$p_i$ 为物品的 classification distribution
第二部分
$L_{q}=\left(r\left(\mathrm{~s}{t}, a{t}\right)+\gamma \max {a^{\prime}} Q\left(\mathrm{~s}{t+1}, a^{\prime}\right)-Q\left(\mathrm{~s}{t}, a{t}\right)\right)^{2}$
其中 $Q$ 通过在 $s_t$ 上加一个全连接层得到
$Q\left(s_{t}, a_{t}\right)=\delta\left(s_{t} \mathbf{h}{t}^{T}+b\right)=\delta\left(G\left(x{1: t}\right) \mathbf{h}_{t}^{T}+b\right)$
为了保证学习的稳定性, 实际算法中使用的是 double Q-learning
测试阶段
用 supervised head (图 1b 左上部分)的 top-k 结果当作推荐结果
SAC
强化学习部分的 $Q$ 值可以很好的衡量第一部分的 $L_s$ 的重要性, 所以可以将 $Q$ 乘以 $L_s$ 的得到一个新的 loss
$L_{A}=L_{s} \cdot Q\left(\mathrm{~s}{t}, a{t}\right)$
为了使 Q-value 在复杂的模型 (例如 Transformer ) 下保持稳定, 设置一个超参 T, 前 T 步使用 SQN 更新, 之后使用 SAC 更新
实验
只说几个有意思的点
图4中可以看到调整购买与点击奖励比例对购买或点击 NDCG 的直接影响
图7, 8中可以看出直接用强化学习进行推荐性能很差