Reinforement Learning
Reinforcement Learning
[外链图片存储失败,源站可能有防盗链机制,建议保存图片直接上传(img-sG1oATCa-1603206541533)(img/1.1.png)] **强化学习讨论的问题是一个 智能体(agent) 如何在复杂不确定的环境中(environment)它极大化它能获得的奖励。**示意图由两部分组成:agent 和 environment。在强化学习的过程中,agent 跟 environment 一直在互动。Agent 在环境中获得状态,agent 会利用这个状态输出一个 action,一个决策。然后这个决定会放在环境中,环境会通过这个 agent 决策,输出下一个状态和当前决策的奖励。Agent 的目的就是为了尽可能多地从环境中获取奖励。
[外链图片存储失败,源站可能有防盗链机制,建议保存图片直接上传(img-21kTIMey-1603206541536)(img/1.2.png)]
对比强化学习和监督学习。 supervised learning
。以图片分类为例。监督学习意味着我们有很多校准数据,如汽车、飞机和凳子。这些图片应该得到满足 i.i.d 分布是它们之间没有关联的分布。然后我们训练一个分类器,比如右边的神经网络。为了区分这张照片是车辆还是飞机,我们在训练过程中真实 label 给了这个网络。当网络做出错误的预测时,比如现在输入汽车的图片,它预测是飞机。我们会直接告诉它,你的预测是错误的,正确的 label 应该是车。然后我们把这个错误写成一个错误损失函数(loss function)
,通过 Backpropagation 训练这个网络。因此,在监督学习的过程中,有两个假设,
- 输入的数据和校准的数据不相关,尽量不相关。因为如果是相关的,这个网络很难学习。
- 我们告诉这个 learner 什么是正确的标签,这样它就可以通过正确的标签来纠正自己的预测。
[外链图片存储失败,源站可能有防盗链机制,建议保存图片直接上传(img-ILxZWNxK-1603206541537)(img/1.3.png)]
在强化学习中,这两点实际上并不令人满意。举个例子 Atari Breakout 例如,这是一个玩砖块的游戏,控制木板,然后把球反弹到上面去除砖块。
- 你可以在游戏中找到这个 agent 观察不是一个 i.i.d 其实上一帧下一帧的分布连续性很强。
- 另一点是,在玩游戏的过程中,你没有立即得到反馈。例如,如果你现在把木板向右移动,它只会使球向上或向左移动,你不会立即得到反馈。因此,加强学习如此困难的原因是你没有得到很好的反馈,然后你仍然希望这一点 agent 在这种环境中学习。
[外链图片存储失败,源站可能有防盗链机制,建议保存图片直接上传(img-UcQiZDzb-1603206541538)(img/1.4.png)]
强化学习的训练数据就是这样一个玩游戏的过程。你从第一步开始,做出决定,比如把它向右移动,接球。第二步,你做出决定,得到什么 training data 是玩游戏的序列。
例如,现在是第三步。如果你把这个序列放进去,你希望这个网络能输出一个决策。在当前状态下,输出应向右或向左移动。这里有一个问题,我们没有标签来解释你现在是正确的还是错误的,必须等到游戏结束,游戏可能在十秒钟后结束。目前还不清楚这个动作是否能帮助最终游戏的结束。这里有一个延迟奖励(Delayed Reward)
,所以这个网络很难训练。
[外链图片存储失败,源站可能有防盗链机制,建议保存图片直接上传(img-mKCpm0bq-1603206541539)(img/1.5.png)]
-
首先,加强学习输入的序列数据不像 supervised learning 这些样本都是独立的。
-
另外一点是 learner 没有人告诉你每一步都应该做什么。Learner 我不得不发现哪些行为可以让它最终获得奖励,我只能通过不断的尝试找到最有利的 action。
-
还有一点是 agent 获得自己能力的过程中,其实是通过不断地试错(trial-and-error exploration)。Exploration 和 exploitation 是强化学习的核心问题。Exploration 也就是说,你会尝试一些新的行为,这些新的行为可能会给你更高的奖励或一无所有。Exploitation 你所说的就是采取你已知能得到最大奖励的行为,你会重复这个 action 没关系,因为你已经知道你可以得到一些奖励了。所以,我们需要在那里 exploration 和 exploitation 在监督学习中没有权衡。
-
在强化学习的过程中,不是很强 supervisor,只有一个
奖励信号(reward signal)
,也就是说,环境会告诉你你之前采取的行为是否有效。Agent 在这种强化学习中学习是非常困难的,因为你没有得到即时的反馈。当你采取行为时,如果你监督学习,你可以立即得到指导,说你现在做出了错误的决定,那么谁应该做出正确的决定。在强化学习中,环境可能会告诉你这种行为是错误的,但它并没有告诉你什么是正确的行为。更难的是,它可能会在一两分钟后告诉你错误,然后告诉你以前的行为是否可以。因此,这也是加强学习和监督学习的不同之处。
[外链图片存储失败,源站可能有防盗链机制,建议保存图片直接上传(img-ihwHHwNn-1603206541540)(img/1.6.png)]通过与监督学习相比,我们可以总结种强化学习的一些特点。
- 首先,它有这个
trial-and-error exploration
,它需要通过探索环境来理解环境。 - 二是加强学习 agent 延迟奖励将从环境中获得。
- 第三点是时间在强化学习的训练过程中非常重要。因为你得到的数据与时间有关,而不是这个 i.i.d 分布。在机器学习中,如果观测数据有很强的相关性,实际上会使训练非常不稳定。这就是为什么我们希望监督学习 data 尽量是 i.i.d 这样就可以消除数据之间的相关性。
- 这是第四点 agent 其行为会影响其随后获得的数据,这一点非常重要。在我们训练 agent 的过程中,很多时候我们也是通过正在学习的这个 agent 与环境互动获取数据。因此,如果这是在训练过程中, agent 模型很快就死了,这将使我们收集的数据非常糟糕,使整个训练过程失败。因此,强化学习中一个非常重要的问题是如何让这个问题 agent 行为稳步改善。
[外链图片存储失败,源站可能有防盗链机制,建议保存图片直接上传(img-Mx7qni2v-1603206541541)(img/1.7.png)]
为什么我们关注这种强化学习的一个非常重要的一点是,强化学习获得的模型可以获得超人类的结果。监督学习获得的这些监督数据实际上是由人们校准的。比如说 ImageNet,这些图片都是人类标定的。然后我们可以确定这个算法 upper bound(上限)人类的这个标定结果决定了它永远不会超越人类。然而,对于加强学习,它在环境中有很大的探索潜力。它可以获得超越人类能力的表现,例如 AlphaGo,谷歌 DeepMind 的 AlphaGo 这种强化学习的算法可以打败人类最强的棋手。
[外链图片存储失败,源站可能有防盗链机制,建议保存图片直接上传(img-ohILTGEa-1603206541541)(img/1.8.png)]
这里有一些在现实生活中加强学习的例子。
-
国际象棋是一个强化学习的过程,因为这位棋手正在做出与对方作战的选择。
-
在自然界中,羚羊实际上强化学习。它出生时可能不知道如何站立,然后通过它
trial- and-error
30分钟后,它可以跑到每小时 36 公里快速适应环境。 -
你也可以把股票交易看作是一个强化学习的问题,如何买卖来最大化你的收入。
-
玩雅达利游戏或一些电脑游戏也是一个强化学习的过程。
[外链图片存储失败,源站可能有防盗链机制,建议保存图片直接上传(img-uXCUCyhC-1603206541542)(img/1.9.png)]
上图是加强学习的经典例子,雅达利是一个名字 Pong 游戏。这个游戏是把球拍到左边,然后左边的球员需要把球拍到右边。训练良好的强化学习 agent 与正常选手不同,加强学习 agent 一直在做这种毫无意义的振动,而正常的选手不会有这样的行为。
[外链图片存储失败,源站可能有防盗链机制,建议保存图片直接上传(img-hjzbZCnQ-1603206541542)(img/1.10.png)]
在这个 pong 的游里面,决策其实就是两个动作:往上或者往下。如果强化学习是通过学习一个 policy network 来分类的话,其实就是输入当前帧的图片,然后 policy network 就会输出所有决策的可能性。
[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-wLhl8Yxi-1603206541542)(img/1.11.png)] 在这种情况下面,对于监督学习的话,我们就可以直接告诉这个 agent 正确的 label 是什么。在这种游戏情况下面,我们并不知道它的正确的标签是什么。
[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-YLaqW9X0-1603206541543)(img/1.12.png)] 在强化学习里面,我们是通过让它尝试去玩这个游戏,然后直到游戏结束过后,再去说你前面的一系列动作到底是正确还是错误。
[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-FoxHxX9J-1603206541543)(img/1.13.png)] 上图的过程是 rollout
的一个过程。Rollout 的意思是从当前帧去生成很多局的游戏。然后这个很多局就通过是你当前的这个网络去跟这个环境交互,你就会得到一堆这个观测。你可以把每一个观测看成一个轨迹(trajectory)
,轨迹的话就是当前帧以及它采取的策略,每一步的这个策略都有。最后结束过后,你会知道你到底有没有把这个球击到对方区域,对方没有接住,你是赢了还是输了。我们可以通过观测序列以及 Eventual Reward 来训练这个 agent ,使它尽可能地采取最后可以获得这个 Eventual Reward 的过程。
[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-UZnVRQnN-1603206541544)(img/1.14.png)] 强化学习是有一定的历史的,只是最近大家把强化学习跟深度学习结合起来,就形成了深度强化学习(Deep Reinforcemet Learning)
。这里做一个类比,把它类比于这个传统的计算机视觉以及深度计算机视觉。
-
传统的计算机视觉由两个过程组成。你给一张图,我们先要提取它的特征,用一些设计好的 feature,比如说 HOG、DPM。提取这些 feature 后,我们再单独训练一个分类器。这个分类器可以是 SVM、Boosting,然后就可以辨别这张图片是狗还是猫。
-
2012 年过后,我们有了卷积神经网络,大家就把特征提取以及分类两者合到一块儿去了,就是训练一个神经网络。这个神经网络既可以做特征提取,也可以做分类。它可以实现这种端到端的一个训练,它里面的参数可以在每一个阶段都得到极大的优化,这样就得到了一个非常重要的突破。
[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-C9Epx01m-1603206541544)(img/1.15.png)]
我们可以把神经网络放到强化学习里面。
- 之前的强化学习,比如 TD-Gammon 玩 backgammon 这个游戏,它其实是设计特征,然后通过训练价值函数的一个过程,就是它先设计了很多手工的特征,这个手工特征可以描述现在整个状态。得到这些特征过后,它就可以通过训练一个分类网络或者分别训练一个价值估计函数来做出决策。
- 现在我们有了深度学习,有了神经网络,那么大家也把这个过程改进成一个 end-to-end training 的过程。你直接输入这个状态,我们不需要去手工地设计这个特征,就可以让它直接输出 action。那么就可以用一个神经网络来拟合我们这里的 value function 或 policy network,省去 了 feature engineering 的过程。
[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-3hmUSqE4-1603206541545)(img/1.16.png)]
为什么强化学习在这几年就用到各种应用中去,比如玩游戏以及机器人的一些应用,并且取得了可以击败人类最好棋手的一个结果。
这由几点组成:
- 我们有了更多的计算能力,有了更多的 GPU,可以更快地做更多的 trial-and-error 的尝试。
- 通过这种不同尝试使得 agent 在这个环境里面获得很多信息,然后可以在这个环境里面取得很大的奖励。
- 我们有了这个端到端的一个训练,可以把特征提取和价值估计或者决策一块来优化,这样就可以得到了一个更强的决策网络。
[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-0gS3ckEx-1603206541545)(img/1.17.png)] 接下来给大家再看一些强化学习里面比较有意思的例子。
- **第一个例子是 DeepMind 研发的一个走路的 agent。**这个 agent 往前走一步,你就会得到一个 reward。这个 agent 有不同的这个形态,可以学到很多有意思的功能。比如怎么跨越这个障碍物,就像那个蜘蛛那样的 agent 。怎么跨越障碍物,像这个人有双腿一样, 这个 agent 往前走。以及像这个人形 的agent,怎么在一个曲折的道路上面往前走。这个结果也是非常有意思,这个人形 agent 会把手举得非常高,因为它这个手的功能就是为了使它身体保持平衡,这样它就可以更快地在这个环境里面往前跑,而且这里你也可以增加这个环境的难度,加入一些扰动,这个 agent 就会变得更鲁棒。
- **第二个例子是机械臂抓取。**因为这个机械臂的应用自动去强化学习需要大量的这个 rollout,所以它这里就有好多机械臂。然后分布式系统可以让这个机械臂尝试抓取不同的物体。你发现这个盘子里面物体的形状、形态其实都是不同的,这样就可以让这个机械臂学到一个统一的行为。然后在不同的抓取物下面都可以采取最优的一个抓取特征。你的这个抓取的物件形态存在很多不同,一些传统的这个抓取算法就没法把所有物体都抓起来,因为你对每一个物体都需要做一个建模,这样的话就是非常花时间。但是通过强化学习,你就可以学到一个统一的抓取算法,在不同物体上它都可以适用。
- 。这里它们 18 年的时候先设计了这个手指的一个机械臂,让它可以通过翻动手指,使得手中的这个木块达到一个预定的设定。人的手指其实非常精细,怎么使得这个机械手臂也具有这样灵活的能力就一直是个问题。它们通过这个强化学习在一个虚拟环境里面先训练,让 agent 能翻到特定的这个方向,再把它应用到真实的手臂之中。这在强化学习里面是一个比较常用的做法,就是你先在虚拟环境里面得到一个很好的 agent,然后再把它使用到真实的这个机器人中。因为真实的机械手臂通常都是非常容易坏,而且非常贵,你没法大批量地购买。2019年对手臂进一步改进了,这个手臂可以玩魔方了。这个结果也非常有意思,到后面,这个魔方就被恢复成了个六面都是一样的结构了。
- **第四个例子是一个穿衣服的 agent ,就是训练这个 agent 穿衣服。**因为很多时候你要在电影或者一些动画实现这个人穿衣的这种场景,通过手写执行命令让机器人穿衣服其实非常困难。很多时候穿衣服也是一个非常精细的操作,那么它们这个工作就是训练这个强化学习 agent,然后就可以实现这个穿衣功能。这里你还可以加入一些扰动,然后 agent 可以抗扰动。可能有这种 failure case, agent 就穿不进去,就卡在这个地方。
Introduction to Sequential Decision Making
Agent and Environment
[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-ZHs0C88n-1603206541545)(img/1.18.png)] 接下来我们讲序列决策(Sequential Decision Making)过程
。强化学习研究的问题是 agent 跟环境交互,上图左边画的是一个 agent,agent 一直在跟环境进行交互。这个 agent 把它输出的动作给环境,环境取得这个动作过后,会进行到下一步,然后会把下一步的观测跟它上一步是否得到奖励返还给 agent。通过这样的交互过程会产生很多观测,agent 就是为了从这些观测之中学到能极大化奖励的策略。
Reward
[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-nOYB4Wzo-1603206541546)(img/1.19.png)] ,这个信号指定了这个 agent 在某一步采取了某个策略是否得到奖励。强化学习的目的就是为了极大化 agent 可以获得的奖励,agent 在这个环境里面存在的目的就是为了极大它的期望积累的奖励。
[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-xH4EKgXe-1603206541547)(img/1.20.png)]
这里给大家举一些奖励的例子。不同的环境,奖励也是不同的。
- 比如说一个下象棋的选手,它的目的其实就为了赢棋。奖励是说在最后棋局结束的时候,他知道会得到一个正奖励或者负奖励。
- 羚羊站立也是一个强化学习过程,它得到的奖励就是它是否可以最后跟它妈妈一块离开或者它被吃掉。
- 在股票管理里面,奖励定义由你的股票获取的收益跟损失决定。
- 在玩雅达利游戏的时候,奖励就是你有没有在增加游戏的分数,奖励本身的稀疏程度决定了这个游戏的难度。
Sequential Decision Making
[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-KqHRBxat-1603206541547)(img/1.21.png)]
在一个强化学习环境里面,agent 的目的就是为了选取一系列的动作来极大化它的奖励,所以这些采取的措施必须有长期的影响。但在这个过程里面,它的奖励其实是被延迟了,就是说你现在采取的某一步决策可能要等到时间很久过后才知道这一步到底产生了什么样的影响。这里一个示意图就是我们玩这个 Atari 的 Pong 这个游戏,你可能只有到最后游戏结束过后,才知道这个球到底有没有击打过去。中间你采取的 up 或 down 行为,并不会直接产生奖励。强化学习里面一个重要的课题就是近期奖励和远期奖励的一个 trade-off。怎么让 agent 取得更多的长期奖励是强化学习的问题。
[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-Lhocy2dG-1603206541547)(img/1.22.png)] 在跟环境的交互过程中,agent 会获得很多观测。在每一个观测会采取一个动作,它也会得到一个奖励。 H t = O 1 , R 1 , A 1 , … , A t − 1 , O t , R t H_{t}=O_{1}, R_{1}, A_{1}, \ldots, A_{t-1}, O_{t}, R_{t} Ht=O1,R1,A1,…,At−1,Ot,Rt Agent 在采取当前动作的时候会依赖于它之前得到的这个历史, S t = f ( H t ) S_{t}=f\left(H_{t}\right) St=f(Ht) Q: 状态和观测有什么关系?
A: 状态(state)
s s s 是对世界的完整描述,不会隐藏世界的信息。观测(observation)
o o o 是对状态的部分描述,可能会遗漏一些信息。
在 deep RL 中,我们几乎总是用一个实值的向量、矩阵或者更高阶的张量来表示状态和观测。举个例子,我们可以用 RGB 像素值的矩阵来表示一个视觉的观测,我们可以用机器人关节的角度和速度来表示一个机器人的状态。
[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-SBFg8HWs-1603206541548)(img/1.23.png)] 在 agent 的内部也有一个函数来更新这个状态。当 agent 的状态跟环境的状态等价的时候,我们就说这个环境是 full observability
,就是全部可以观测。换句话说,当 agent 能够观察到环境的所有状态时,我们称这个环境是完全可观测的(fully observed)
。
[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-tJx8ptWx-1603206541548)(img/1.24.png)] 但是有一种情况是 agent 得到的观测并不能包含所有环境运作的状态,因为在这个强化学习的设定里面,环境的状态才是真正的所有状态。比如 agent 在玩这个 black jack 这个游戏,它能看到的其实是牌面上的牌。或者在玩雅达利游戏的时候,观测到的只是当前电视上面这一帧的信息,你并没有得到游戏内部里面所有的运作状态。也就是说当 agent 只能看到部分的观测,我们就称这个环境是部分可观测的(partially observed)
。在这种情况下面,强化学习通常被建模成一个 POMDP 的问题。
部分可观测马尔可夫决策过程(Partially Observable Markov Decision Processes, POMDP)
是一个马尔可夫决策过程的泛化。POMDP 依然具有马尔可夫性质,但是假设智能体无法感知环境的状态 s s s,只能知道部分观测值 o o o。比如在自动驾驶中,智能体只能感知传感器采集的有限的环境信息。
POMDP 可以用一个 7 元组描述: ( S , A , T , R , Ω , O , γ ) (S,A,T,R,\Omega,O,\gamma) (S,A,T,R,Ω,O,γ),其中 S S S 表示状态空间,为隐变量,$ A $ 为动作空间,$ T(s’|s,a) $ 为状态转移概率, R R R 为奖励函数,$ \Omega(o|s,a) $ 为观测概率,$ O $ 为观测空间, γ \gamma γ 为折扣系数。
Action Spaces
不同的环境允许不同种类的动作。在给定的环境中,有效动作的集合经常被称为动作空间(action space)
。像 Atari 和 Go 这样的环境有离散动作空间(discrete action spaces)
,在这个动作空间里,agent 的动作数量是有限的。在其他环境,比如在物理世界中控制一个 agent,在这个环境中就有连续动作空间(continuous action spaces)
。在连续空间中,动作是实值的向量。
例如,
- 走迷宫机器人如果只有东南西北这 4 种移动方式,则其为离散动作空间;
- 如果机器人向 36 0 ∘ 360^{\circ} 360∘ 中的任意角度都可以移动,则为连续动作空间。
Major Components of an RL Agent
[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-MbsnGB9p-1603206541549)(img/1.25.png)] 对于一个强化学习 agent,它有如下组成成分:
-
首先 agent 有一个
policy function
,agent 会用这个函数来选取下一步的动作。 -
然后它也可能生成一个
价值函数(value function)
。我们用价值函数来对当前状态进行估价,它就是说你进入现在这个状态,可以对你后面的收益带来多大的影响。当这个价值函数大的时候,说明你进入这个状态越有利。 -
另外一个组成成分是
模型(model)
。模型表示了 agent 对这个环境的状态进行了理解,它决定了这个世界是如何进行的。
Policy
[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-fi3W40Fs-1603206541549)(img/1.26.png)] 我们深入看这三个组成成分的一些细节。
Policy 决定了这个 agent 的行为,它其实是一个函数,把输入的状态变成行为。这里有两种 policy:
-
一种是
stochastic policy(随机性策略)
,它就是 π \pi π 函数 π ( a ∣ s ) = P [ A t = a ∣ S t = s ] \pi(a | s)=P\left[A_{t}=a | S_{t}=s\right] π(a∣s)=P[At=a∣St=s] 。当你输入一个状态 s s s 的时候,输出是一个概率。这个概率就是你所有行为的一个概率,然后你可以进一步对这个概率分布进行采样,得到真实的你采取的行为。比如说这个概率可能是有 70% 的概率往左,30% 的概率往右,那么你通过采样就可以得到一个 action。 -
一种是
deterministic policy(确定性策略)
,就是说你这里有可能只是采取它的极大化,采取最有可能的动作。你现在这个概率就是事先决定好的。
从 Atari 游戏来看的话,policy function 的输入就是游戏的一帧,它的输出决定你是往左走或者是往右走。
通常情况下,强化学习一般使用随机性策略
。随机性策略有很多优点:
-
在学习时可以通过引入一定随机性来更好地探索环境;
-
随机性策略的动作具有多样性,这一点在多个智能体博弈时也非常重要。采用确定性策略的智能体总是对同样的环境做出相同的动作,会导致它的策略很容易被对手预测。
Value Function
[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-lUnyVAmA-1603206541550)(img/1.27.png)] ,就是你通过进行某一种行为,然后你未来得到多大的奖励。
价值函数里面有一个 discount factor。我们希望尽可能在短的时间里面得到尽可能多的奖励。如果我们说十天过后,我给你 100 块钱,跟我现在给你 100 块钱,你肯定更希望我现在就给你 100 块钱,因为你可以把这 100 块钱存在银行里面,你就会有一些利息。所以我们就通过把这个 discount factor
放到价值函数的定义里面,后面得到的奖励价值函数的定义其实是一个期望。
这里有一个 E π \mathbb{E}_{\pi} Eπ 的期望,这里有个小角标是 π \pi π 函数,这个 π \pi π 函数就是说在我们已知某一个 policy function 的时候,到底可以得到多少的奖励。
对于这个奖励函数,我们另外还有一个 Q 函数。Q 函数里面包含两个变量:状态和动作。所以你未来可以获得多少的奖励,它的这个期望取决于你当前的状态和当前的行为。这个 Q 函数是强化学习算法在学习的一个函数。因为当我们得到这个 Q 函数的过后,进入某一种状态,它最优的行为其实就可以通过这个 Q 函数来得到。
Model
[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-jdu8OZFk-1603206541550)(img/1.28.png)] 第三个组成部分是模型,**模型决定了下一个状态会是什么样的,就是说下一步的状态取决于你当前的状态以及你当前采取的行为。**它由两个部分组成,一个是 probability,它这个转移状态之间是怎么转移的。另外是这个奖励函数,当你在当前状态采取了某一个行为,可以得到多大的奖励。
[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-mEStn03v-1603206541551)(img/1.29.png)]
当我们有了这三个成分过后,就形成了一个 Markov Decision Process
。这个决策过程可视化了状态之间的转移以及采取的行为。
[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-xotO05xg-1603206541551)(img/1.30.png)]
这里我们来看一个走迷宫的例子,这个例子要求 agent 从 start 开始,然后到达 goal 的位置。这里设定的奖励是每走一步,你就会得到一个负的奖励。这里可以采取的动作是往上下左右走。当前状态用现在 agent 所在的位置来描述。
[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-MuySNxpi-1603206541551)(img/1.31.png)] 我们可以用不同的强化学习算法来解这个环境,如果我们采取的是 Policy-based RL
,当我们学习好了这个环境过后,在每一个状态,我们就会得到一个最佳的行为。比如说现在在第一格开始的时候,我们知道它最佳行为是往右走,然后第二格的时候,得到的最佳策略是往上走,第三格是往右走。通过这个最佳的策略,我们就可以最快地到达终点。
[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-pTA5Q69C-1603206541552)(img/1.32.png)] 如果换成 value-based RL
这个算法,利用价值函数来作为导向,我们就会得到另外一种表征。这里就表征了你每一个状态会返回一个价值,比如说你在 start 位置的时候,价值是 -16,因为你最快可以 16 步到达终点。因为每走一步会减一,所以你这里的价值是 -16。当我们快接近最后终点的时候,这个数字变得越来越大。在拐角的时候,比如要现在在第二格 -15。然后 agent 会看上下,它看到上面值变大了,变成 -14 了,它下面是 -16,那么这个 agent 肯定就会采取一个往上走的策略。所以通过这个学习的值的不同,我们可以抽取出现在最佳的策略。
Types of RL Agents
[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-qr9m2iMr-1603206541552)(img/1.33.png)] 根据强化学习 agent 的不同,我们可以把 agent 进行归类。
- 基于价值函数的 agent。这一类 agent 显式地学习的是价值函数,隐式地学习了它的策略。因为这个策略是从我们学到的价值函数里面推算出来的。
- 基于策略的 agent,它直接去学习 policy,就是说你直接给它一个 state,它就会输出这个动作的概率。在这个 policy-based agent 里面并没有去学习它的价值函数。
- 另外还有一种 agent 是把这两者结合,把 value-based 和 policy-based 结合起来就有了
Actor-Critic agent
。这一类 agent 就把它的策略函数和价值函数都学习了,然后通过两者的交互得到一个最佳的行为。
Q: 基于策略迭代和基于价值迭代的强化学习方法有什么区别?
A: 对于一个状态转移概率已知的马尔可夫决策过程,我们可以使用动态规划算法来求解;从决策方式来看,强化学习又可以划分为基于策略迭代的方法和基于价值迭代的方法。决策方式
是智能体在给定状态下从动作集合中选择一个动作的依据,它是静态的,不随状态变化而变化。
在基于策略迭代
的强化学习方法中,智能体会制定一套动作策略
(确定在给定状态下需要采取何种动作),并根据这个策略进行操作。强化学习算法直接对策略进行优化,使制定的策略能够获得最大的奖励。
而在基于价值迭代
的强化学习方法中,智能体不需要制定显式的策略,它维护一个价值表格或价值函数
,并通过这个价值表格或价值函数来选取价值最大的动作。基于价值迭代的方法只能应用在不连续的、离散的环境下(如围棋或某些游戏领域),对于行为集合规模庞大、动作连续的场景(如机器人控制领域),其很难学习到较好的结果(此时基于策略迭代的方法能够根据设定的策略来选择连续的动作)。
基于价值迭代的强化学习算法有 Q-learning、 Sarsa 等,而基于策略迭代的强化学习算法有策略梯度算法等。此外, Actor-Critic 算法同时使用策略和价值评估来做出决策,其中,智能体会根据策略做出动作,而价值函数会对做出的动作给出价值,这样可以在原有的策略梯度算法的基础上加速学习过程,取得更好的效果。
[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-2TH2aOHZ-1603206541553)(img/1.34.png)] 另外,我们是可以通过 agent 到底有没有学习这个环境模型来分类。
- 第一种是
model-based(有模型)
RL agent,它通过学习这个状态的转移来采取措施。 - 另外一种是
model-free(免模型)
RL agent,它没有去直接估计这个状态的转移,也没有得到环境的具体转移变量。它通过学习 value function 和 policy function 进行决策。这种 model-free 的模型里面没有一个环境转移的一个模型。
我们可以用马尔可夫决策过程来定义强化学习任务,并表示为四元组 < S , A , P , R > <S,A,P,R> <S,A,P,R>,即状态集合、动作集合、状态转移函数和奖励函数。如果这四元组中所有元素均已知,且状态集合和动作集合在有限步数内是有限集,则机器可以对真实环境进行建模,构建一个虚拟世界来模拟真实环境的状态和交互反应。
具体来说,当智能体知道状态转移函数 P ( s t + 1 ∣ s t , a t ) P(s_{t+1}|s_t,a_t) P(st+1∣st,at) 和奖励函数 R ( s t , a t ) R(s_t,a_t) R(st,at) 后,它就能知道在某一状态下执行某一动作后能带来的奖励和环境的下一状态,这样智能体就不需要在真实环境中采取动作,直接在虚拟世界中学习和规划策略即可。这种学习方法称为有模型学习
。
[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-VMkiLaI8-1603206541553)(img/1.35.png)]
上图是有模型强化学习的流程图。
然而在实际应用中,智能体并不是那么容易就能知晓 MDP 中的所有元素的。通常情况下,状态转移函数和奖励函数很难估计,甚至连环境中的状态都可能是未知的,这时就需要采用免模型学习。免模型学习没有对真实环境进行建模,智能体只能在真实环境中通过一定的策略来执行动作,等待奖励和状态迁移,然后根据这些反馈信息来更新行为策略,这样反复迭代直到学习到最优策略。
Q: 有模型强化学习和免模型强化学习有什么区别?
A: 针对是否需要对真实环境建模,强化学习可以分为有模型学习和免模型学习。
-
有模型学习是指根据环境中的经验,构建一个虚拟世界,同时在真实环境和虚拟世界中学习;
-
免模型学习是指不对环境进行建模,直接与真实环境进行交互来学习到最优策略。
总的来说,有模型学习相比于免模型学习仅仅多出一个步骤,即对真实环境进行建模。因此,一些有模型的强化学习方法,也可以在免模型的强化学习方法中使用。在实际应用中,如果不清楚该用有模型强化学习还是免模型强化学习,可以先思考一下,在智能体执行动作前,是否能对下一步的状态和奖励进行预测,如果可以,就能够对环境进行建模,从而采用有模型学习。
免模型学习通常属于数据驱动型方法,需要大量的采样来估计状态、动作及奖励函数,从而优化动作策略。例如,在 Atari 平台上的 Space Invader 游戏中,免模型的深度强化学习需要大约 2 亿帧游戏画面才能学到比较理想的效果。相比之下,有模型学习可以在一定程度上缓解训练数据匮乏的问题,因为智能体可以在虚拟世界中行训练。
免模型学习的泛化性要优于有模型学习,原因是有模型学习算需要对真实环境进行建模,并且虚拟世界与真实环境之间可能还有差异,这限制了有模型学习算法的泛化性。
有模型的强化学习方法可以对环境建模,使得该类方法具有独特魅力,即“想象能力”。在免模型学习中,智能体只能一步一步地采取策略,等待真实环境的反馈;而有模型学习可以在虚拟世界中预测出所有将要发生的事,并采取对自己最有利的策略。
目前,大部分深度强化学习方法都采用了免模型学习,这是因为:
- 免模型学习更为简单直观且有丰富的开源资料,像 DQN、AlphaGo 系列等都采用免模型学习;
- 在目前的强化学习研究中,大部分情况下环境都是静态的、可描述的,智能体的状态是离散的、可观察的(如 Atari 游戏平台),这种相对简单确定的问题并不需要评估状态转移函数和奖励函数,直接采用免模型学习,使用大量的样本进行训练就能获得较好的效果。
[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-xzyW6jJg-1603206541553)(img/1.36.png)]
把几类模型放到同一个 pie chart 里面。三个组成部分:value function、policy、model。按一个 agent 具不具有三者中的两者或者一者可以把它分成很多类。
Exploration and Exploitation
[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-oANwJ7Ki-1603206541554)(img/1.37.png)] 在强化学习里面,Exploration
和Exploitation
是两个很核心的问题。
-
Exploration 是说我们怎么去探索这个环境,通过尝试不同的行为来得到一个最佳的策略,得到最大奖励的策略。
-
Exploitation 是说我们不去尝试新的东西,就采取已知的可以得到很大奖励的行为。
因为在刚开始的时候强化学习 agent 不知道它采取了某个行为会发生什么,所以它只能通过试错去探索。所以 Exploration 就是在试错来理解采取的这个行为到底可不可以得到好的奖励。Exploitation 是说我们直接采取已知的可以得到很好奖励的行为。所以这里就面临一个 trade-off,怎么通过牺牲一些短期的 reward 来获得行为的理解。
[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-gvSzAdIm-1603206541554)(img/1.38.png)] 这里我给大家举一些例子来说明 Exploration 和 Exploitation 的定义。