强化学习在新闻推荐中的应用



转载请注明 AIQ - 最专业的机器学习大数据社区  http://www.6aiq.com

AIQ 机器学习大数据 知乎专栏 点击关注

导读

      随着 AlphaGO 在围棋界接连战胜世界冠军,其背后的技术 - 强化学习逐渐获得学术界、工业界的青睐。在新闻推荐任务中,传统的推荐算法无法考虑单个请求内新闻之间的关联,也无法考虑多个请求之间的关系,而强化学习,通过学习推荐策略给解决上述问题带来了可能。

1. 强化学习理论简单回顾

1.1 基本概念

    强化学习是人工智能的一大重要分支,模拟的是人类通用的解决序列决策问题的思维,它的总体目标是通过和环境的不断交互,选择一系列的行为让整体获得收益的最大化(虽然有可能在某个单步执行的时候收益并不是最大)。如图 1-1 所示,强化学习主要包括 Agent、Action、Environment、State、Reward 5 个主体。

图 1-1. 强化学习整体框图

    Agent 通过从 Environment 观测到的 State 和 Reward,会执行一个 Action(这个 Action 通过策略π获得)。Environment 则会产生新的 State 和 Reward,而 Agent 通过新的反馈执行下一步的行为,如此往复,这就是强化学习的工作过程。强化学习的最终目标是最大化 Value Function或者 Action-Value Function从而学到一组最优的策略。

1.2 和有监督学习的区别

    有监督学习指的是对每个样本都带有标注信息的任务,例如图像分类,目标检测,ctr 预估等等。它和强化学习有显著的不同,主要体现在以下几点:

① 有监督学习中含有类别,数值等作为 ground truth。强化学习没有,这些目标信息是通过和环境交互中获得。

② 强化学习中的反馈(Reward)通常是延迟的,有监督学习可以立即获得。

③ 强化学习中,一系列 State,Action 时间上高度相关,动态产生。有监督学习中仅仅取决于实现定义好的样本。

④ 强化学习中当前执行的 Action 影响未来。有监督学习只是简单的拟合当前样本的数据,和过去无关,和未来无关。

1.3 强化学习方法概览

    对于 State 离散有限,Action 离散有限较为简单的问题,可以使用查表的方法保存各种状态下的 V 值或是 Q 值。此种情况下,如果模型已知(状态转移方程已知),可以使用的方法包括动态规划,策略迭代和值迭代等等。如果模型未知(model free),则可以使用 Monte-Carlo,Q-learning 和 Sarsa 等方法。

    然而在实际情况中,State 通常连续或者搜索空间无穷,所以不能简单的利用上述的查表法,而得借助于神经网络对 State 进行建模。这种情况下,如果 Action 离散,且只有 1 维,现有的在学术界和工业界被证明工作良好的方法有 DQN,DDQN 和其他针对 DQN 改进的方法,这类算法都属于值函数近似,或者是 REINFORCE,Actor-Critic 等 Policy Gradient 的方法。值函数近似的实质是拟合 Q 值,策略梯度则是关注最优的 Action 本身。

    如果 Action 连续或者离散高维,则可以使用 DPG、DDPG 等确定性方法,它们在机器人的连续控制中有着成功的运用。

    特别强调的一点是值函估计中 Q-learning 近似的方法是对每个 State-Action 对预测 Q 值,然后选择使得 Q 值最大的 Action,限定了 Action 为离散低维,如果 Action 高维或者连续,搜索出是 Q 最大的 Action 会非常困难。

    策略梯度这一类基于策略的方法则为直接对策略建模,模型的输出即为执行各 Action 的概率(stochastic policies),或者输出单个确定的 Action (deterministic policies)。它的优势是更好的收敛特性和对于 Action 是高维或连续空间更有效(Q-learning 其实做不了)。相应的略势为容易收敛到局部最小值(这个问题在深度学习中更常见)及策略评估的高方差。图 1-2 展示了强化学习方法的简单汇总。

图 1-2. 强化学习方法纵览

2. 新闻推荐建模

2.1 新闻推荐主体定义

    如图 2-1 所示,一次完整的推荐过程包含以下几个过程:一个用户点击 app 底部刷新或者下拉,后台获取到用户请求,并根据用户的标签召回候选新闻,推荐引擎则对候选新闻进行排序,最终给用户推出 10 条新闻,如此往复,直到用户关闭 app,停止浏览新闻。如果将用户持续浏览新闻的推荐过程看成一个序列决策过程,就可以通过强化学习学习每一次推荐的最佳策略,从而使得用户从开始打开 app 开始到关闭 app 这段时间内的点击量最高

图 2-1. 搜狐资讯版一次推荐

整体过程中各部分主体定义如下:

Agent:推荐引擎。

Environment:用户。

Reward:如果一条新闻被点击,计 +1,否则为 0。一次推荐中 10 条新闻被点击的新闻个数作为 Reward。

State:包含 3 个部分,分别是用户标签、候选新闻的新闻标签和用户前 4 屏的点击历史(如果没有就置 0)。

Action:推出的 10 篇新闻。

2.2 和 ctr 预估的区别

    Ctr 预估只考虑预测新闻的点击率,不考虑具体的推荐策略。利用 ctr 进行的推荐的流程通常是预测候选新闻的 ctr,策略部分是人为规定的规则,可以简单的取 top10 或者经过各种过滤,去掉重复,规定不同大类下的新闻个数之后取 10 个新闻,然后推荐给用户。强化学习可以说一方面在给新闻预测得分的同时,另一方面考虑了推荐的策略,也就是说策略部分也由模型自己学到。

    Ctr 模型的推荐过程只考虑了单次推荐里用户的点击率,对于不同的 Session 之间无法建模。相反,强化学习的本质是用于解决序列决策问题,在给用户第一次推荐的时候,就可以考虑之后第 5 次、第 10 次推荐的收益(由参数决定),让用户在整个浏览 app 的过程中的点击量最高,这一点是 ctr 完全无法胜任的。

    当然强化学习也有缺点,就是训练复杂,往往需要更细致的参数设置和更多训练 trick 才可能有效。Ctr 预测则是一个完全常规的有监督问题,输入用户和新闻特征,拟合 ctr,训练起来相对强化学习简单许多。

3. 具体方法

**3.1 **Deep Deterministic Policy Gradient (DDPG)

方法概述:

    随机策略是在一个状态下以概率的形式执行可能行为,确定性策略是模型的输出即为一个选中的 Action。各自定义如下:

    其中θ表示网络的参数,s,a 分别为状态和行为。

    参考原论文中的表示方法,策略梯度的损失函数或者目标函数定义成:

    其中 s 服从ρ分布,a 由决定,公式以积分的形式表示目标函数(默认了连续空间)。

    根据 Q-learning 的定义,策略提升的时候应该选择使得 Q 值最大的 Action,在 Action 为连续值的时候,这一步的操作会比较困难,所以只能在使得 Q 增大的梯度方向走一小步,迭代更新。

    参数更新公式如下:

    根据链式法则,梯度方向由 Q 对 a 的导数和 a 对θ的导数相乘而得 (如红框标注)。Action 是 Actor 和 Critic 之间的结合部分,梯度从 Critic 通过 Action 传给 Actor,也就决定了 Action 是连续的值,可以高维。

框架图

      图 3-1. DDPG 新闻推荐框图

    如图 3-1 所示,整个框架分为 Actor 和 Critic 两个部分,Actor 负责输出 Action,再传入到 Critic 中进行 Q 值的预测。

    nfm_for_candidates_user 模块表示的是候选新闻和用户前 4 屏的点击历史(outer_history)、用户标签的匹配程度,内部借助于 Neural Factorization Machine (NFM) 模型进行建模,将匹配程度表示一个向量 candidates_user_match。其中 NFM 模型简单有效,在 Ctr 预估任务中表现良好。

    Policy 模块表示的策略部分。因为一次请求会推出 10 条新闻,为了建模这 10 条新闻的顺序关系,网络结构采用 RNN 完成,每步输出选中的新闻索引(news_idx)和选中的概率 p,且每选一篇新闻都要考虑之前选出来的新闻(inner_history)。此处的 inner_history 保存一个请求内已经选出的新闻。每一步选出一篇新闻之后,将这篇新闻从候选新闻中移除,并加入 inner_hisory,最后输出这篇新闻被选中的概率和更新状态。

    Step 模块展示的是每一步的模型,由 NFM 模块和神经网络搭建。

    Critic 部分负责预测 V 值,其包含两个部分,nfm_for_recommended_user 表达的是选出来的新闻和用户标签及点击历史的匹配程度,而 nfm_for_recommended_news 则是选出的新闻和上一步 Actor 输出的 Action 结合的部分,共同预测 V 值。 最后 position 表示的是用户从开始浏览新闻在刷的第几屏。

    一次推出 10 条新闻的 Action 可以看作是一个 10 维的向量,每一维代表某条新闻被选中的概率,于是整体就可以利用 DDPG 的方法实现了(DDPG 适用于 Action 为连续高维的情况)。

    选择新闻是通过 argmax 进行操作,它仅仅是一个选择的过程,不是数值上操作,因此不可导。为了能够让 Critic 和 Actor 之间通过 Action 连通起来,只有用上新闻被选中的概率 p,才能让梯度通过 Critic 反传到 Actor。于是概率 p 在 Critic 中与被选中的新闻标签做了相乘运算。

    在如何表示新闻的问题上,新闻本身的内容和标题利用 RNN 建模,用户的点击历史同样可以用 RNN 进行序列建模,虽然这种表达方式可以尽可能保存新闻的信息,但是计算量非常复杂,线上模型难以承受,因此,直接利用新闻标签(由其他线上任务预先完成)表示新闻简单易行,也足以满足推荐的要求。

3.2 Deep Q Network(DQN) / Double DQN(DDQN)

方法概述:

    著名的 DQN 算法是一种值函数近似的算法。在强化学习中,利用神经网络对值函数进行近似会造成学习过程的不稳定甚至不收敛,于是在 DQN 中采用了很多技巧,才使得 Q-learning 在实际问题中真正有效。所谓的值函数进行就是用模型来估计 V 或者 Q:

    其中为近似模型的参数,例如神经网络的参数。再使用和 MC 或者 TD learning 类似的思想进行参数的更新算法中关键的亮点,一是 Replay Buffer 对样本(transition)进行混合,减少连续时间上的相关性;二是采用 Target Network,它的结构和训练的网络完全一致,但保存了训练网络中参数的缓存,目的是为了是学习更加稳定,这样不至于让网络参数陷入局部最优。

    Double DQN(DDQN)则主要改进 DQN 中对 Q 高估的问题。通常 Q-leaning 中更新公式:

    其中 max 操作会引起值函数的高估,这个问题被称为:maximization bias,overestimate action values。

    在上述更新公式中,有一个很明显的问题在于,Action 的选择和 Q 值的估计都是一个模型,解决的办法就是把两者分开,选择 Action 和 Q 值的估计使用不同的模型。倘若用 DQN 中的 Target Network 来估计 Q 值,用 DQN 中 Online Network 选择 Action,就变成了 DDQN。更新公式如下:

框架图:

图 3-2. 新闻推荐 DQN 框图

    和 DDPG 相比,DQN 去掉了 Critic,简化了很多。中间每一步 step 的最后去掉了 softmax,对每一篇新闻预测一个值,而不是概率,然后将选中的 10 篇新闻的数值通过加和得到最后的 value。这样的做法和标准的 DQN 有些出入,它每次只是选择一个 1 维的 Action。这里新闻推荐的 Action 则是一个 10 维的向量,正确的做法是对 10 篇新闻做路径搜索,得到一条总的 Q 值最大的路径作为 Action。但是高维路径搜索的代价过高,所以这里选择了简化,在每一步挑出数值最大的新闻,来近似完成选择使得 Q 值最大的 Action。

    另外一种解决方案则是将 Action 定义成选择一条新闻。例如,原本两个请求是 2 个 Action,一次 Action 为 10 维的向量,现在变为将两个向量拼接到一起构成 20 个 1 维的 Action,如此就可以完全使用 DQN 来进行学习。

    模型很容易稳定,如下图中的实验结果,上为预测值,下为真实值。

图 3-3. DQN 训练结果

3.3、总结

    对于上述两种算法,依然有以下几点问题。

    1、在线训练和离线训练

    DDPG 用到了新闻被选中的概率,这个概率在离线数据(主要是请求点击日志)中是不存在的。问题的关键不在于 on-policy 还是 off-policy,而在于离线数据中的 Action 是否可以直接用来作为模型更新的 Action。 例如 DDPG 中的 Actor 的输出包含了新闻被选中的概率,然而离线数据中新闻只有选中和没选中,不是概率,所以无法直接拿来更新模型。考虑到直接上线会在初期严重影响用户体验,因此 DDPG 不好直接在线训练。

    解决这个问题的方法是预训练。可以从大量的离线数据中选取高 Reward 的状态行为数据 (s,a),直接进行有监督学习训练一个 Actor 网络,之后利用这个 Actor 的参数进行初始化。

    DQN 没有这个问题,它可以直接使用其他策略产生的数据进行训练。但是得设置 Action 为单独一条新闻才是标准的 DQN。

    综上,线上模型采用训练更为简单的 DQN 模型。

    2、高效样本采样

    强化学习中无效的行为远远大于有效的行为,探索利用困境容易导致模型学习很慢。DQN 的一种改进 Priority Replay Buffer 可以让模型更多的去拟合那些 TD-error 较大的样本,有效降低 loss。

    3、训练过程的不稳定

    不合理的超参数的设置有可能会带来很大的问题。随着训练的增加,Q 值估计越来越大,尖刺会越来越多,相应的 loss 也越大,有可能会在某个时间段崩溃。


更多高质资源 尽在AIQ 机器学习大数据 知乎专栏 点击关注

转载请注明 AIQ - 最专业的机器学习大数据社区  http://www.6aiq.com