week7

237 阅读7分钟

AlphaGo主逻辑

AI = Policy Value Network + MCTS

Policy Value Network,策略价值网络

策略网络,输入当前的状态,神经网络输出在这个状态下采取每个动作的概率

价值网络,对于价值网络,当前局面的价值=对终局的估计

MCTS,蒙特卡洛树搜索

可以提供很好的策略改善,它的输入是个普通的策略(normal policy),我们可以通过MCTS得到一个更好的策略(good policy)输出

通过MCTS完成自我对弈,从而更新策略网络

MCTS节点的定义

节点的定义(通过TreeNode构造树)

树节点,每个节点都记录了自己的Q值,先验概率P和 UCT值第二项,即调整后的访问次数u(用于exploration)

MCTS树的创建和使用

树结构:树结构定义了一个可行解的解空间,每一个叶子节点到根节点的路径都对应了一个解(solution)

蒙特卡洛方法:MSTC不需要事先给定打标样本,随机统计方法充当了驱动力的作用,通过随机统计实验获取观测结果

损失评估函数:提供一个可量化的确定性反馈,用于评估解的优劣 => MCTS是通过随机模拟寻找损失函数代表的背后“真实函数”

反向传播线性优化:每次获得一条路径的损失结果后,采用反向传播(Backup)对整条路径上的所有节点进行整体优化

启发式搜索策略:算法遵循损失最小化的原则在整个搜索空间上进行启发式搜索,直到找到一组最优解或者提前终止

基于MCTS的AI Player

class MCTSPlayer(object):

def __init__(self, policy_value_function,

c_puct=5, n_playout=2000, is_selfplay=0):

# 使用MCTS进行搜索

self.mcts = MCTS(policy_value_function, c_puct, n_playout)

self._is_selfplay = is_selfplay

# 设置player index

def set_player_ind(self, p):

self.player = p

# 获取AI下棋的位置

def get_action(self, board, temp=1e-3, return_prob=0):

# 获取所有可能的下棋位置

sensible_moves = board.availables

# MCTS返回的pi向量,基于alphaGo Zero论文

move_probs = np.zeros(board.width*board.height)

if len(sensible_moves) > 0:

acts, probs = self.mcts.get_move_probs(board, temp)

move_probs[list(acts)] = probs

if self._is_selfplay:

# 为探索添加Dirichlet噪声(需要进行自我训练)

move = np.random.choice(acts,p=0.75*probs + 0.25*np.random.dirichlet(0.3*np.ones(len(probs))))

# 更新根节点,重新使用搜索树

self.mcts.update_with_move(move)

else:

# 默认temp=1e-3, 几乎等同于选择概率最大的那一步

move = np.random.choice(acts, p=probs)

# 重置根节点 reset the root node

self.mcts.update_with_move(-1)

if return_prob:

return move, move_probs

else:

return move

else:

print("WARNING: the board is full")

策略价值网络Policy Value Network实现

Policy Value Network实现细节:

神经网络架构的定义(PyTorch)

训练一步,在进行反向传播之前,需要用zero_grad()清空梯度

loss的定义(loss = value_loss + policy_loss)

神经网络参数的获取,保存,与加载

AI主流程:

通过MCTS收集自我对弈数据

通过自我对弈数据,进行Policy Value Network更新

对当前Policy Value Network进行胜率评估

判断当前模型的表现,保存最优模型

强化学习

强化学习不需要训练数据的Label,但是它需要每一步行动环境给予反馈(奖励or惩罚)=> 通过反馈,不断调整训练对象的行为

强化学习的策略:Policy-Based(Policy Gradients)和Value-Based(Q-Learning)

Policy-Based 直接预测环境状态下应采取的Action

Value-Based 预测环境状态下所有Action期望价值(Q值),选择Q值最高Action执行

Value-Based适合少量离散取值Action,Policy-Based适合Aciton种类多或连续取值Action环境

人机对弈

强化学习与推荐系统

强化学习:

属于机器学习的分支(其他还有监督学习、无监督学习)

与其他学习方法不同之处在于:强化学习是智能体从环境到行为映射的学习,目标是让奖励最大化。

如果智能体的某个行为决策得到了正向奖励,那么智能体在后续使用这个行为的决策趋势就会加强

强化学习是最接近于自然界的学习方式

强化学习与深度学习结合,可以解决海量数据泛化的问题(比如DeepMind的AlphaGO)

构建智能体与环境的反馈机制

以往的学习方式,大多为基于监督学习的方式 => 缺少有效的探索能力,造成system倾向给consumer推送曾经发生行为的item(比如商品、店铺、问题)

强化学习可以有效建立consumer与system之间的交互过程,同时可以最大化过程积累收益,在业务场景有很好的应用

搜索场景:

在电商领域中,用户浏览购买行为可以看成Markov过程,对马尔科夫决策过程进行建模,实现基于强化学习的排序决策决策模型,可以使得搜索更加智能化

天猫双11,通过强化学习搜索排序指标提升了20%

携程在酒店搜索排序中引入强化学习,来预测那些未知的情况,这里就需要一定的“随机探索”,只有这样我们才能知道实际中用户的反馈

随机探索所带来的短期损失是无法完全避免的,但最终的目标是在于探索所带来的收益能够弥补并超过其带来的损失

推荐场景:

使用强化学习与自适应在线学习,通过持续机器学习和模型优化建立决策引擎,对海量用户行为以及item特征进行实时分析,帮用户快速发现喜欢的item

item 可以是文章,商品等

淘宝的猜你喜欢,通过引入强化学习,帮助每一个用户迅速发现喜欢的商品,提高人与商品之间的匹配效率,效果指标提升10%-20%

智能客服:

将智能客服机器人作为Agent,Agent的决策不是单一节点的直接收益来确定的,而是一个较为长期的人际交互的过程

把消费者与平台的互动看做一个马尔科夫决策过程,使用强化学习,可以建立一个消费者与系统互动的反馈系统

系统的决策是建立在最大化过程收益的基础上 => 达到一个系统与用户的动态平台

如何定义episode, reward,state, action是关键:

Episode,比如在订机票场景中,当用户和系统进行会话时,如果系统第一次判断当前用户意图为“购买机票”,这就可以作为一个episode开始,如果用户购买了机票或者退出会话,则认为是episode结束

Reward,收集用户的反馈,比如用户下单、退出等行为

State,User Question Embedding,抽取slot状态和历史slot信息,接入全连接神经网络,最后连接softmax层到各个动作

Action,在订机票场景中,action空间是离散的,主要包括对各个slot的反问和下单(order),比如反问时间、反问出发地、目的地和Order

广告系统:

如果广告主能够根据每一条流量的价值进行单独出价,广告主就可以在各自的高价值流量上提高出价,而在普通流量上降低出价,这样就可以获得更好的ROI

同时,平台也可以提高广告与访问用户之间的匹配效率

通过强化学习,可以进行智能调价技术,对于每一位访问用户,根据他们当前状态来决定如何操作调价,给他们展示特定的广告,引导他们的状态向我们希望的方向上转移

天猫双11,点击率CTR、CPM以及GMV都有大幅提升