一文带你理解深度强化学习!

这里贴上一篇好的知乎回答:https://zhuanlan.zhihu.com/p/25239682

接下来就是WYY博主的边学边整理的笔记了~

这位正在看屏幕的同学,你知道什么是深度强化学习吗?如果你不知道,请往下看吧~

第一部分:DRL的基础知识

      DRL(Deep Reinforcement Learning)分为model-based和model-free两种方法。Model of the environment:model是对真实世界(environment)的模拟,model建模的是agent采样action后环境的反应。RL中,使用model和planning的方法被称为model-based,反之不使用model而是通过try-and-error学习policy的方法被称为model-free。本文范畴即是model-free。其中model-free中有Value-based和Policy-base两种主要的方法,由于我接下来的工作需要用到Value-based中的DQN算法,所以我主要学习这种算法,关于其他的,大家可以看上面的知乎中的链接,写的很好。

好啦,跟着阿鸵一起来看一下深度强化学习的基础知识吧!

       深度强化学习的四元组是:状态、动作、奖励和策略,最不好理解的便是“策略(policy)”, Policy是指Agent是在状态s时,所要做出action的选择。policy可以视为在Agent感知到环境s后到动作a的一个mapping。如果策略是随机的,policy是根据每个动作概率选择动作;如果策略是确定性的,policy则是直接根据状态s选择出动作。(好啦,看了上面的话,不仅没有搞清楚什么是策略,反而把策略和动作搞混了,不要紧,再继续看一下下面的,或许会清晰一些)

大神说,策略不就是,怎么动作嘛~

       奖励,是指智能体和环境交互之后,环境给智能体的反馈,即这个动作是好还是坏。智能体的目标并不是当前奖励最大,而是平均累计回报最大。

       Value function(值函数)是策略在某状态下的长期期望收益。与之类似的一个函数是Q函数,在某状态下,采取某动作的长期期望收益。

哦!原来是这么一回事啊,我总算对以上的概念有了一个清晰的理解了。对了,最近刚用上粉底液和粉扑,感觉一秒磨皮!我去喝点水,回来继续写!(听说戴口罩可以保持脸部皮肤湿润哟,怪不得最近感觉皮肤也挺好的)

       继续看,强化学习最重要的基础是MDP(Markov Decision Process)马尔可夫决策过程。马儿最明显的一个特征是,在某状态下,采取某动作之后的奖励,只跟当前的状态和动作有关,与历史状态无关(如果跟历史状态有关,就把这个状态封装到当前状态就好了)。❤Bellman等式:

Bellman等式是指某状态下,采取某策略后,下一时刻奖励值以及折扣因子乘以值函数后的平均奖励。Bellman最优等式是指,把上面的策略,换成能够使奖励最大的策略。

❤ MC、TD方法:

Monte-Carlo method适用于“情节式任务”(情节任务序列有终点,与“情节式任务”相对应的是“连续型任务”)。Q(s,a)就是整个序列的期望回报。MC增量更新中的Monte-Carlo error:



TD(Time Difference) method
,是Monte-Carlo和Dynamic Programming 方法的一个结合。相比MC方法,TD除了能够适用于连续任务外,和MC的差异从下图可以清楚看到。MC需要回退整个序列更新Q值,而TD只需要回退1步或n步更新Q值。因为MC需要等待序列结束才能训练,而TD没有这个限制,因此TD收敛速度明显比MC快,目前的主要算法都是基于TD。下图是TD和MC的回退图,很显然MC回退的更深。

知乎文章作者举的这个例子特别好:

直观理解MC error和TD error的差异,假设RL的任务要预估的是上班的"到公司时长",状态是目前的位置,比如“刚出门”“到地铁了”“到国贸站了”...。MC方法需要等到真正开到公司才能校验“刚出门”状态时预估的正确性,得到MC error;而TD则可以利用“刚出门”和“到地铁了”两个状态预测的差异的1-step TD error来迭代。

1-step TD error:

n-steps TD error:

TD(\lambda )error:

事实上,MC error可以视为一个情节任务的max-step TD error。另外,一般来说,在TD error中,n越大,用到的真实回报信息更多,收敛也会越快。

大神说,那TD不是就是贪心的吗?
好啦,恭喜你,已经把DL相关的基础知识都看完了,接下来开始进修了!

第二部分.DRL:from Q-learning to DQN

确认过眼神,是饿了的人。但是还是要写一会,再学习20min。

        Q-learning是一种TD方法,也是一种Value-based的方法。所谓Value-based方法,就是先评估每个action的Q值(Value),再根据Q值求最优策略的方法。强化学习的最终目标是求解policy,因此Value-based的方法是一种“曲线救国”。Q-learning算法的核心就是我们前面Bellman optimality equation,即:

       Q-learning是RL的很经典的算法,但有个很大的问题在于它是一种表格方法,也就是说它根据过去出现过的状态,统计和迭代Q值。一方面Q-learning适用的状态和动作空间非常小;另一方面但如果一个状态从未出现过,Q-learning是无法处理的。也就是说Q-learning压根没有预测能力,也就是没有泛化能力

太神奇了吧,昨天大神就说那是不是一个状态如果没出现,就没办法┐(゚~゚)┌处理。

       为了能使得Q-learning能够带有预测能力,熟悉机器学习的同学很容易想到这就是一个回归问题啊!用函数拟合Q:

\theta 代表的是模型参数

       模型有很多种选择,线性的或非线性的。传统的非深度学习的函数拟合更多是人工特征+线性模型拟合。这几年伴随着深度学习最近几年在监督学习领域的巨大成功,用深度神经网络端到端的拟合Q值,也就是DQN,似乎是个必然了。

DQN终于出现,也就是说DQN是利用了深度神经网络来拟合Q值,使Q-learning带有预测能力。

      deepmind 在2013年的 Playing Atari with Deep Reinforcement Learning 提出的DQN算是DRL的一个重要起点了,也是理解DRL不可错过的经典模型了。网络结构设计方面,DQN之前有些网络是左图的方式,输入为S,A,输出Q值;DQN采用的右图的结构,即输入S,输出是离线的各个动作上的Q值。之所以这样,左图方案相对右图最大的缺点是对于每个state,需要计算|A|次前向计算,而右图则只需要一次前向计算即可,因此左图的前向计算成本与action的数量成正比

论文中,解决的问题是Atari游戏问题,输入数据(状态S)就是游戏原始画面的像素点,动作空间是摇杆方向等。
问:为啥是左图做了A次前向运算但是右图做了1次呢?答: 右图中输出是离线的各个动作上的Q值。  即根据现在状态预测所有动作的奖励。也就是只进行了一次前向计算。

先写这么多,回来再继续写。不能赶,要保证理解和质量。

毛血旺可真辣,甜点叫豌豆黄~
继续开始了下午的学习,大神说他做一个研究的一般步骤是:1)先看一下这个领域的资料,对该领域有一个大致了解;2)读一下最新的论文,看看解决了什么问题;3)思考一下未解决的问题是什么,应该如何解决。
DQN具体的网络结构见下:实际输入是游戏的连续4帧画面,不只使用1帧画面是为了感知环境的动态性,接两层CNN,两层FNN,输出各个动作的Q值。

       因为DQN本身是个回归问题,模型的优化目标是最小化1-step TD error的平方loss,梯度的计算也很直接了,见下图。

DQN最终能够取得成功的一方面是采用了DNN网络进行Q值的函数拟合,end-to-end的模型训练。更重要的是引入了以下两个点:

(1)Experience Replay: Deep Learning取得重大进展的监督学习中,样本间都是独立同分布的。而RL中的样本是有关联的,非静态的(highly correlated and non-stationary),训练的结果很容易难以收敛。Experience Replay机制解决这个问题思路其实很简单,构建一个存储把样本都存储下来,通过随机采样去除相关性。(当然没有天下免费的午餐,这种方法也有弊端,比如off-policy受到了限制,也不是真正的online-learning,具体在A3C部分会展开分析)

上述加粗部分的内容,在文章开头的知乎里面,想了解的可以看一下。

(2)separate Target Network:原始的Q-learning中,在1-step TD return,样本标签y使用的是和训练的Q-network相同的网络。这样通常情况下,能够使得Q大的样本,y也会大,这样模型震荡和发散可能性变大。而构建一个独立的慢于当前Q-Network的target Q-Network来计算y,使得训练震荡发散可能性降低,更加稳定。

昨天记得笔记(最上面的粉色字)部分就是在说这样一件事,大概意思就是有一个target q network,更新的比q network要慢,然后用它来学习策略。如果是同步的,那就是q越大的策略 采取这个策略的可能就越大。
具体解释:所以这个v是根据之前采取的策略学习的,然后采取什么策略又是根据v决定的,所以如果同步更新那就会一开始偏好哪个策略,然后就会哪个策略越来越多,然后就会越来越偏。因为这个表格里面只有这个策略有值,然后就会不断的选择它,然后这个表格里的这个策略就更多了。但是如果这个v比较慢,就有可能遍历更多的策略,这样就学的好。

另外,TD-error也被clip到[-1,1]区间,增加模型的稳定性。部分思路和我们后续分享的的TRPO算法的置信区间相关。

我们前面提到的两种方法都以依赖于 Q-Table,但是其中存在的一个问题就是当 Q-Table 中的状态比较多,可能会导致整个 Q-Table 无法装下内存。因此,DQN 被提了出来,DQN 全称是 Deep Q Network,Deep 指的是通的是深度学习,其实就是通过神经网络来拟合整张 Q-Table。

DQN 能够解决状态无限,动作有限的问题;具体来说就是将当前状态作为输入,输出的是各个动作的 Q 值。以 Flappy Bird 这个游戏为例,输入的状态近乎是无限的(当前 bird 的位置和周围的水管的分布位置等),但是输出的动作只有两个(飞或者不飞)。实际上,已经有人通过 DQN 来玩这个游戏了,具体可参考这个DeepLearningFlappyBird

所以在 DQN 中的核心问题在于如何训练整个神经网络,其实训练算法跟 Q-Learning 的训练算法非常相似,需要利用 Q 估计和 Q 现实的差值,然后进行反向传播。

这里放上提出 DQN 的原始论文Playing atari with deep reinforcement learning中的算法流程图

原博客链接:https://www.cnblogs.com/shixiangwan/p/11351782.html

详细的DQN算法:

附DQN15年发表在nature的文章 Human-level control through deep reinforcement learning

补充一个我自己画的图:

发现了一个写的很好的:

上面的算法跟 Q-Learning 最大的不同就是多了Experience Replay这个部分,实际上这个机制做的事情就是先进行反复的实验,并将这些实验步骤获取的 sample 存储在 memory 中,每一步就是一个 sample,每个sample是一个四元组,包括:当前的状态,当前状态的各种action的 Q 值,当前采取的action获得的即时回报,下一个状态的各种action的Q值。拿到这样一个 sample 后,就可以根据上面提到的 Q-Learning 更新算法来更新网络,只是这时候需要进行的是反向传播。

Experience Replay 机制的出发点是按照时间顺序所构造的样本之间是有关的(如上面的ϕ(st+1)会受到ϕ(st)的影响)、非静态的(highly correlated and non-stationary),这样会很容易导致训练的结果难以收敛。通过 Experience Replay 机制对存储下来的样本进行随机采样,在一定程度上能够去除这种相关性,进而更容易收敛。当然,这种方法也有弊端,就是训练的时候是 offline 的形式,无法做到 online 的形式。

除此之外,上面算法流程图中的 aciton-value function 就是一个深度神经网络,因为神经网络是被证明有万有逼近的能力的,也就是能够拟合任意一个函数;一个 episode 相当于 一个 epoch;同时也采用了ϵ−greedyϵ−greedy策略。

后续关于DQN有三个主要改进点:

(1)Double Q-Network:思路并不新鲜,仿照Double Q-learning,一个Q网络用于选择动作,另一个Q网络用于评估动作,交替工作,解决upward-bias问题,效果不错。三个臭皮匠顶个诸葛亮么,就像工作中如果有double-check,犯错的概率就能平方级别下降。Silver15年论文Deep Reinforcement Learning with Double Q-learning

(2)Prioritized replay:基于优先级的replay机制,replay加速训练过程,变相增加样本,并且能独立于当前训练过程中状态的影响。这个replay权重还是和DQN error(下图)有关,Silver16年论文PRIORITIZED EXPERIENCE REPLAY

(3)Dueling network:在网络内部把Q(s,a) 分解成 V(s) + A(s, a),V(s)与动作无关,A(s, a)与动作相关,是a相对s平均回报的相对好坏,是优势,解决reward-bias问题。RL中真正关心的还是策略的好坏,更关系的是优势,另外在某些情况下,任何策略都不影响回报,显然需要剔除。ICML 2016 Best Paper:DUELING NETWORK ARCHITECTURES FOR DEEP REINFORCEMENT LEARNING 。Dueling Network网络架构如下,Dueling Network把网络分成一个输出标量V(s)另一个输出动作上Advantage值两部分,最后合成Q值。非常巧妙的设计,当然还是end-to-end的,效果也是state-of-art。Advantage是一个比较有意思的问题,A3C中有一个A就是Advantage。

上面提到的 DQN 是最原始的的网络,后面Deepmind 对其进行了多种改进,比如说 Nature DQN 增加了一种新机制separate Target Network,就是计算上图的yjyj的时候不采用网络QQ, 而是采用另外一个网络(也就是 Target Network)Q'Q′, 原因是上面计算yjyj和 Q 估计都采用相同的网络QQ,这样使得QQ大的样本,yy也会大,这样模型震荡和发散可能性变大,其原因其实还是两者的关联性较大。而采用另外一个独立的网络使得训练震荡发散可能性降低,更加稳定。一般Q'Q′会直接采用旧的QQ, 比如说 10 个 epoch 前的QQ.

除此之外,大幅度提升 DQN 玩 Atari 性能的主要就是 Double DQN,Prioritised Replay 还有 Dueling Network 三大方法;这里不详细展开,有兴趣可参考这两篇文章:DQN从入门到放弃6 DQN的各种改进深度强化学习(Deep Reinforcement Learning)入门:RL base & DQN-DDPG-A3C introduction

问题突然就来了

第三部分、Policy-Based method:概率输出&连续动作空间

DQN虽然在Atari游戏问题中取得了巨大的成功,但适用范围还是在低维、离散动作空间。DQN是求每个action的max_{a} Q(s,a),在连续空间就不适用了,原因如下:

(1) 如果采用把连续动作空间离散化,动作空间则会过大,极难收敛。而且每个动作空间划分成很多个离散动作无法做到fine-tuning,划分本身也带来了信息损失。

(2)即便是有些DQN的变种如VAE能够给出连续动作的方案,DQN的第二个问题是只能给出一个确定性的action,无法给出概率值。而有些场景,比如围棋的开局,只有一种走法显然太死板了,更多例子不再介绍了。

从另外一个角度看,DQN是Value-based方法,上一节讲到了Value-based的方法还是在间接求策略。一个自然的逻辑是为什么我们不直接求解Policy?这就是Policy Gradient方法了。

有人突然的吹口哨,也是挺奇怪的。

Deep Q-learning

2013年,DeepMind 在 NIPS workshop上提出了 Deep Q-learning,主要工作是能让 AI 从像素输入学会完 Atari游戏,后来进行了一些改进后上了 2015 年的 nature 封面。

如果状态空间是连续的,动态规划的状态数就是无限的,所以我们用深度学习网络去拟合这个 Q 函数,这就是 DQN。

通常 DQN 的实现中,会把收集的(状态、动作、执行动作后的状态和奖励)存在内存中,训练的时候多次使用,称为 memory replay。

注意到每个(状态,动作)的 Q 值要拟合 (当前得到的奖励加上(执行动作后的新状态,新动作)的 Q 值),一个函数拟合自己可能引入额外的噪声,所以通常使用一个延迟更新的函数 Q' 来求新的 Q 值,称为 target network。

不要慌,我们接下来的工作,符合这个要求。

DQN的控制空间,至少必须是离散的。

因为算法优化Q网络的时候用的Bellman Equation里面有一个求max的函数。

离散空间还能遍历一下找到max,连续空间这个过程非常耗时。

所以…离散空间DQN才适用。

连续空间请搜索DDQN,哈哈。

发现了更好的一个博客:https://blog.csdn.net/qq_16234613/article/details/80268564

写的可真是太好了!

最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
  • 序言:七十年代末,一起剥皮案震惊了整个滨河市,随后出现的几起案子,更是在滨河造成了极大的恐慌,老刑警刘岩,带你破解...
    沈念sama阅读 205,236评论 6 478
  • 序言:滨河连续发生了三起死亡事件,死亡现场离奇诡异,居然都是意外死亡,警方通过查阅死者的电脑和手机,发现死者居然都...
    沈念sama阅读 87,867评论 2 381
  • 文/潘晓璐 我一进店门,熙熙楼的掌柜王于贵愁眉苦脸地迎上来,“玉大人,你说我怎么就摊上这事。” “怎么了?”我有些...
    开封第一讲书人阅读 151,715评论 0 340
  • 文/不坏的土叔 我叫张陵,是天一观的道长。 经常有香客问我,道长,这世上最难降的妖魔是什么? 我笑而不...
    开封第一讲书人阅读 54,899评论 1 278
  • 正文 为了忘掉前任,我火速办了婚礼,结果婚礼上,老公的妹妹穿的比我还像新娘。我一直安慰自己,他们只是感情好,可当我...
    茶点故事阅读 63,895评论 5 368
  • 文/花漫 我一把揭开白布。 她就那样静静地躺着,像睡着了一般。 火红的嫁衣衬着肌肤如雪。 梳的纹丝不乱的头发上,一...
    开封第一讲书人阅读 48,733评论 1 283
  • 那天,我揣着相机与录音,去河边找鬼。 笑死,一个胖子当着我的面吹牛,可吹牛的内容都是我干的。 我是一名探鬼主播,决...
    沈念sama阅读 38,085评论 3 399
  • 文/苍兰香墨 我猛地睁开眼,长吁一口气:“原来是场噩梦啊……” “哼!你这毒妇竟也来了?” 一声冷哼从身侧响起,我...
    开封第一讲书人阅读 36,722评论 0 258
  • 序言:老挝万荣一对情侣失踪,失踪者是张志新(化名)和其女友刘颖,没想到半个月后,有当地人在树林里发现了一具尸体,经...
    沈念sama阅读 43,025评论 1 300
  • 正文 独居荒郊野岭守林人离奇死亡,尸身上长有42处带血的脓包…… 初始之章·张勋 以下内容为张勋视角 年9月15日...
    茶点故事阅读 35,696评论 2 323
  • 正文 我和宋清朗相恋三年,在试婚纱的时候发现自己被绿了。 大学时的朋友给我发了我未婚夫和他白月光在一起吃饭的照片。...
    茶点故事阅读 37,816评论 1 333
  • 序言:一个原本活蹦乱跳的男人离奇死亡,死状恐怖,灵堂内的尸体忽然破棺而出,到底是诈尸还是另有隐情,我是刑警宁泽,带...
    沈念sama阅读 33,447评论 4 322
  • 正文 年R本政府宣布,位于F岛的核电站,受9级特大地震影响,放射性物质发生泄漏。R本人自食恶果不足惜,却给世界环境...
    茶点故事阅读 39,057评论 3 307
  • 文/蒙蒙 一、第九天 我趴在偏房一处隐蔽的房顶上张望。 院中可真热闹,春花似锦、人声如沸。这庄子的主人今日做“春日...
    开封第一讲书人阅读 30,009评论 0 19
  • 文/苍兰香墨 我抬头看了看天上的太阳。三九已至,却和暖如春,着一层夹袄步出监牢的瞬间,已是汗流浃背。 一阵脚步声响...
    开封第一讲书人阅读 31,254评论 1 260
  • 我被黑心中介骗来泰国打工, 没想到刚下飞机就差点儿被人妖公主榨干…… 1. 我叫王不留,地道东北人。 一个月前我还...
    沈念sama阅读 45,204评论 2 352
  • 正文 我出身青楼,却偏偏与公主长得像,于是被迫代替她去往敌国和亲。 传闻我的和亲对象是个残疾皇子,可洞房花烛夜当晚...
    茶点故事阅读 42,561评论 2 343