要提升微信看一看推荐混排的长期收益?试试深度强化学习

文章作者:rysanwang

内容来源:微信AI

导语

相比于传统的监督学习方法,强化学习能够最大化长期收益,正是推荐系统更加需要的。做好当下做好固然重要,但放眼未来才能看得更远。
本文主要是在看一看算法推荐算法过程中的实践,文章主要从强化学习的基本概念、为什么要用强化学习、强化学习在混排中的应用和一些思考四个方面展开论述。

什么是强化学习

(1)基本概念

<A, S, R, P>就是RL中经典的四元组了。A代表的是Agent的所有动作;State是Agent所能感知的世界的状态;Reward是一个实数值,代表奖励或惩罚;P则是Agent所交互世界,也被称为model。

(2)与监督学习,非监督学习的区别

简单来看就是,强化学习与其他最显著的区别就是最大化了长期收益。

(3)Multi-armed bandit 多臂赌博机

作为大家在推荐算法中最常用的强化学习算法系列,MAB相关算法基本大部分人都很了解,基本思想就是对于未知进行explore,当对于未知有一定认知之后,就用认知到的信息就行exploit。

(4)强化学习的算法和AlphaGo

对于绝大多数的人来说,第一次听说强化学习,还是从AlphaGo战胜李世石了解到的。
强化学习中常用的算法主要分为两类,policy-based和value-based,而在AlphaGo中就同时应用了这两种类型的网络,分别建立了分析当前局面的值网络和根据当前局面下棋的策略网络。

(5)强化学习实践

如果大家要实践自己的强化学习算法,可以在OpenAI的GYM上去实践。
比如,我们看最经典的CartPole这个游戏:
我们去尝试用经典的QLearning方法来做,
上下滑动查看

import gym

import random

import numpy

N_BINS = [5, 5, 5, 5]

LEARNING_RATE=0.05

DISCOUNT_FACTOR=0.9

EPS = 0.3

MIN_VALUES = [-0.5,-2.0,-0.5,-3.0]

MAX_VALUES = [0.5,2.0,0.5,3.0]

BINS = [numpy.linspace(MIN_VALUES[i], MAX_VALUES[i], N_BINS[i]) for i in xrange(4)]

def discretize(obs):

return tuple([int(numpy.digitize(obs[i], BINS[i])) for i in xrange(4)])

qv = {}

env = gym.make('CartPole-v0')

print(env.action_space)

print(env.observation_space)

an = env.action_space.n

def get(s, a):

global qv

if (s, a) not in qv:

return 0

return qv[(s, a)]

def update(s, a, s1, r):

global qv

nows = get(s, a)

m0 = get(s1, 0)

m1 = get(s1, 1)

if m0 < m1:

m0 = m1

qv[(s, a)] = nows + LEARNING_RATE * (r + DISCOUNT_FACTOR * m0 - nows)

for i in range(500000):

obs = env.reset()

if i % 1000 == 0:

print i

for _ in range(5000):

s = discretize(obs)

s_0 = get(s, 0)

nowa = 0

s_1 = get(s, 1)

if s_1 > s_0:

nowa = 1

if random.random() <= EPS:

nowa = 1 - nowa

obs, reward, done, info = env.step(nowa)

s1 = discretize(obs)

if done:

reward = -10

update(s, nowa, s1, reward)

if done:

break

for i_episode in range(1):

obs = env.reset()

for t in range(5000):

env.render()

s = discretize(obs)

maxs = get(s, 0)

maxa = 0

nows = get(s, 1)

if nows > maxs:

maxa = 1

obs, reward, done, info = env.step(maxa)

if done:

print('Episode finished after {} timesteps'.format(t+1))

break

为什么用强化学习

(1)看一看混排

做混排有几个难点:
数据异构:不同的数据包含不同的特征。
目标不同:不同内容的各自优化目标不同,很难做统一的内容排序。
运算量大:总的计算量高达业务数*每个业务的精排数量。
内容的质量不同:点击率高的优质内容,比如高点击率的视频,会挤压低点击率的业务。

(2)统一的点击率预估排序

结论:视频是业务中点击率最高的,新闻则是点击率最低的,把点击率高的业务占比提高,点击率低的业务占比降低会提高整体的点击率,但不会提高整体点击数。

(3)强化学习的引入 - 优化长期收益

用户在推荐场景浏览可以建模成 Markov Progress。
Agent是我们的推荐系统,Action是我们推荐了什么内容,Reward是反馈信息,包括点击、负反馈、退出等。
每次我们的推荐系统Agent采取某个Action,推荐了内容后,就会收到相应的反馈。

(4)强化学习的优势

为什么强化学习优于监督学习?

混排三路召回,mp,video,news合并

Case

mp,video,video(0,1,1)

video,mp,mp(1,0,0)

video,video,video(1,0,0)

监督学习预测最优解是第三种,

选择点击率最大的。

强化学习预测最优解是第一种,

选择总收益最大的。

强化学习在看一看混排中的应用

(1)Session wise recommendation

(2)Personal DQN

当用户的请求到来时会根据他之前的行为计算隐状态作为此次输入state的一部分,每次选择某个业务作为action,反馈点击作为reward。

(3)离线评估 AUC?

做算法,非常重要的一个环节就是做离线评估,传统的CTR预估用的就是AUC来评价:
我们先看看传统AUC的意义,传统AUC的意义有两种:假阳率和真阳率画出ROC曲线围成的面积表示了阈值移动情况下真阳假阳的表现。
随机取一个正值和负值,正值的预估值大于负值预估值的概率,即 P(pred(a) > pred(b) | y(a) > y(b))。
利用第二种定义,我们将其进行扩展来定义我们新的AUC:P(Q(a) > Q(b) | sum reward(a) > sum reward(b))。
为什么不像其他很多人一样利用一些模拟器的方式来做评价呢,很多实践表明,模拟器的方式有很大的偏置,利用一些模拟器可能会导致模型学偏。而这里新的AUC表征了实际数据的情况,比起利用模拟器来说更优。
我们可以看到新的AUC更符合我们长期收益的定义,即,最大化总点击数。

(4)线上效果

上线后,我们总的停留时长提高了7%,baseline对比的是规则混排,我们同样对比了相同网络的监督学习的效果,也有1-2%的提升。

(5)模型优化

Session based recommendation

利用RNN来建模session内的信息,将DQN内state用RNN的hidden来描述能更好的建模session内的特征。

(6)模型优化

 Bloom embedding & Dueling DQN

Bloom embedding用于减小hash之间的冲突利用 Dueling DQN的方式,将user context的信息抽离出来,最后利用attention的方式连接,能够让模型很好地学到时间、位置等bias信息。

(7)模型优化Double DQN & 

Dueling Double DQN (aka DDDQN)

(8)负反馈 Reward & Focal loss

我们可以把负反馈信息作为负的reward学到我们的模型里,但是有一个问题,负反馈信息过于稀疏。负反馈占总展现的比例大概千分之一,于是我们引入CV里的Focal loss做优化,对于easy case减小梯度权重,对于hard case加大权重,让稀疏的hard case能学得更好,最终使得负反馈率降低19%。

一些思考

AC 和 GAN

我也不是RL的专家,但我认为GAN是使用RL来解决生成建模问题的一种方式。GAN的不同之处在于,奖励函数对行为是完全已知和可微分的,奖励是非固定的,以及奖励是agent的策略的一个函数。但我认为GAN基本上可以说就是RL。

Ian Goodfellow(生成对抗网络之父)
我们发现强化学习的AC结构和GAN的结构非常类似,而且GAN的作者也表示GAN是一种RL,后面我们就考虑把RL和GAN做一些融合,利用相互间的优势,更好地提高我们的系统。
今天的分享就到这里,谢谢大家。

(0)

相关推荐