深度强化学习入门

作者: xiaobaichao | 来源:发表于2018-09-04 14:39 被阅读47次

    概述

    机器学习领域目前可以分为有监督学习,无监督学习,强化学习,迁移学习四个方向。本文将尽可能以通俗的语言带你入门深度强化学习DQN。

    强化学习的定义

    首先我们来了解一下什么是强化学习。目前来讲,机器学习领域可以分为有监督学习,无监督学习,强化学习,迁移学习四个方向。那么
    强化学习就是能够使得我们训练的模型完全通过自学来掌握一门本领,能在一个特定场景下做出最优决策的一种算法模型。就好比是一个小孩在慢慢成长,当他做错的事情时家长给予惩罚,当他做对的事情时家长给他奖励。这样,随着小孩子慢慢长大,他自己也就学会了怎样去做正确的事情。那么强化学习就好比小孩,我们需要根据它做出的决策给予奖励或者惩罚,直到它完全学会了某种本领(在算法层面上,就是算法已经收敛)。在下图中给出了强化学习的一个框架,Agent就可以比作小孩,环境就好比家长。Agent根据环境的反馈r去做出动作a,做出动作之后,环境给予反应,给出Agent当前所在的状态与奖励或者惩罚。其原理结构图如下所示:

    结构图

    强化学习模型的结构

    强化学习模型由五部分组成,分别是Agent,Action,State,Reward,Environment。Agent代表一个智能体,其根据其输入State来做出相应的Action,Environment接收Action并返回State和Reward。不断重复这个过程,直到Agent能在任意的State下做出最优的Action,即完成模型学习过程。

    智能体(Agent):智能体的结构可以是一个神经网络,可以是一个简单的算法,智能体的输入通常是状态State,输出通常是策略Policy。

    动作(Actions):动作空间。比如小人玩游戏,只有上下左右可移动,那Actions就是上、下、左、右。

    状态(State):就是智能体的输入。

    奖励(Reward):进入某个状态时,能带来正奖励或者负奖励。

    环境(Environment):接收action,返回state和reward。

    示意图

    深度强化学习算法

    强化学习的学习过程实质是在不断更新一张表的过程。这张表一般称之为Q_Table,此张表由State和Action作为横纵轴,每一个格就代表在当前State下执行当前Action能获得的价值回馈,用Q(s,a)表示,称为Q值。获得整个决策过程最优的价值回馈的决策链是唯一的,完善了此张表,也就完成了Agent的学习过程。但是试想一下,当State和Action的维度都很高时,此张表的维度也会相应非常高,我们不可能获得每一个State下执行Action能获得的Q值,这样在高纬度数据下每次去维护Q_Table的做法显然不可行。那么有没有办法来解决这个问题呢,答案肯定是有的!所谓的机器学习,深度学习不就是基于当前数据集去预测未知数据的一些规律嘛,那么我们的Q_Table也可以用机器学习或者深度学习来完善啊。一个显然的方法就是可以使用一种算法来拟合一个公式,输入是State和Action,输出是Q值。那么深度强化学习算法显然就是深度学习与强化学习的结合了,我们基于当前已有数据,训练神经网络从而拟合出一个函数f,即f(s,a)=Q(s,a)。使用有限的State_action集合去拟合函数从而可以获得整张表的Q值。此时的Q值是预测值,有一定的误差,不过通过不断的学习,我们可以无限减小这个误差。

    训练策略

    深度强化算法训练过程中,每一轮训练中的每一步,需要使用一个policy根据State选择一个action来执行,那么这个policy是怎么确定的呢。目前有两种做法

    1. 随机的生成一个动作
    2. 根据当前的Q值计算出一个最优的动作,这个policy称之为greedy policy贪婪策略。也就是

    使用随机的动作称之为exploration,也就是探索未知的动作会产生的效果,有利于更新Q值,避免陷入局部最优解,获得更好的policy。而基于greedy policy则称为exploitation,即根据当前模型给出的最优动作去执行,这样便于模型训练,测试算法是否真正有效。将两者结合起来就称为EE policy。

    DQN(Deep Qtable NetWork)

    神经网络的训练是一个最优化问题,最优化一个损失函数loss function,也就是标签和网络输出的偏差,目标是让损失函数最小化。为此,我们需要有样本,有标签数据,然后通过反向传播使用梯度下降的方法来更新神经网络的参数。所以,要训练Q网络,我们要能够为Q网络提供有标签的样本。在DQN中,我们将目标Q值和当前Q值来作为loss function中的两项来求偏差平方

    上式中的target中的s,a分别是下一个状态和动作。下一步来看看算法怎么训练。

    NIPS 2013

    算法流程

    对上面的算法逻辑进行总结,直观来讲就是反复试验,然后存储数据。当数据存储到一定数量时,就在记忆池中采样数据,使用梯度下降训练神经网络。

    NIPS 2015

    在2015版的DQN中做了改进,使用另外一个神经网络target_Q来产生Q值,其网格参数是定期由MainNet中的参数复制而来的。这样,在一段时间里,目标Q值时保持不变的,一定程度降低了当前Q值和目标Q值的相关性,提高了算法稳定性。

    image

    算法流程图

    image

    Loss Function构造

    image

    参考

    强化学习及Python代码示例
    深度强化学习——DQN

    相关文章

      网友评论

        本文标题:深度强化学习入门

        本文链接:https://www.haomeiwen.com/subject/opvgwftx.html