diff --git a/docs/chapter1/chapter1.md b/docs/chapter1/chapter1.md index dd20976..209715a 100644 --- a/docs/chapter1/chapter1.md +++ b/docs/chapter1/chapter1.md @@ -7,30 +7,31 @@ * **强化学习讨论的问题是一个智能体(agent) 怎么在一个复杂不确定的环境(environment)里面去极大化它能获得的奖励。** * 示意图由两部分组成:agent 和 environment。 -* 在强化学习过程中,agent 跟 environment 一直在交互。Agent 在环境里面获取到状态,agent 会利用这个状态输出一个 action,一个决策。然后这个决策会放到环境之中去,环境会通过这个 agent 采取的决策,输出下一个状态以及当前的这个决策得到的奖励。Agent 的目的就是为了尽可能多地从环境中获取奖励。 +* 在强化学习过程中,agent 跟 environment 一直在交互。Agent 在环境里面获取到状态,agent 会利用这个状态输出一个动作(action),一个决策。然后这个决策会放到环境之中去,环境会通过这个 agent 采取的决策,输出下一个状态以及当前的这个决策得到的奖励。Agent 的目的就是为了尽可能多地从环境中获取奖励。 ![](img/1.2.png) **我们可以把强化学习跟监督学习做一个对比。** -* 举个图片分类的例子,`监督学习( supervised learning)`就是说我们有一大堆标注的数据,比如车、飞机、凳子这些标注的图片,这些图片都要满足 i.i.d 分布,就是它们之间是没有关联的一个分布。 - -* 然后我们训练一个分类器,比如说右边这个神经网络。为了分辨出这个图片是车辆还是飞机,训练过程中,我们把真实的 label 给了这个网络。当这个网络做出一个错误的预测,比如现在输入了汽车的图片,它预测出来是飞机。我们就会直接告诉它,你这个预测是错误的,正确的 label 应该是车。然后我们把这个错误写成一个`损失函数(loss function)`,通过 Backpropagation 来训练这个网络。 +* 举个图片分类的例子,`监督学习(supervised learning)`就是说我们有一大堆标注的数据,比如车、飞机、凳子这些标注的图片,这些图片都要满足独立同分布(i.i.d.),就是它们之间是没有关联的。 +* 然后我们训练一个分类器,比如说右边这个神经网络。为了分辨出这个图片是车辆还是飞机,训练过程中,我们把真实的标签给了这个网络。当这个网络做出一个错误的预测,比如现在输入了汽车的图片,它预测出来是飞机。我们就会直接告诉它,你这个预测是错误的,正确的标签应该是车。然后我们把这个错误写成一个`损失函数(loss function)`,通过反向传播(Backpropagation)来训练这个网络。 * 所以在监督学习过程中,有两个假设: * 输入的数据(标注的数据)都是没有关联的,尽可能没有关联。因为如果有关联的话,这个网络是不好学习的。 - * 我们告诉这个 learner 正确的标签是什么,这样它可以通过正确的标签来修正自己的这个预测。 + * 我们告诉学习器(learner)正确的标签是什么,这样它可以通过正确的标签来修正自己的预测。 + +> 通常假设样本空间中全体样本服从一个未知分布,我们获得的每个样本都是独立地从这个分布上采样获得的,即独立同分布(independent and identically distributed,简称 i.i.d.)。 ![](img/1.3.png) 在强化学习里面,这两点其实都不满足。举一个 Atari Breakout 游戏的例子,这是一个打砖块的游戏,控制木板,然后把这个球反弹到上面来消除这些砖块。 -* 在游戏过程中,大家可以发现这个 agent 得到的观测不是个 i.i.d 的分布,上一帧下一帧其实有非常强的连续性。 +* 在游戏过程中,大家可以发现这个 agent 得到的观测不是个独立同分布的分布,上一帧下一帧其实有非常强的连续性。 * 另外一点,在玩游戏的过程中,你并没有立刻获得这个反馈。比如你现在把这个木板往右移,那么只会使得这个球往上或者往左上去一点,你并不会得到立刻的反馈。所以强化学习这么困难的原因是没有得到很好的反馈,然后你依然希望这个 agent 在这个环境里面学习。 ![](img/1.4.png) -强化学习的训练数据就是这样一个玩游戏的过程。你从第一步开始,采取一个决策,比如说你把这个往右移,接到这个球了。第二步你又做出决策,得到的 training data 是一个玩游戏的序列。 +强化学习的训练数据就是这样一个玩游戏的过程。你从第一步开始,采取一个决策,比如说你把这个往右移,接到这个球了。第二步你又做出决策,得到的训练数据是一个玩游戏的序列。 比如现在是在第三步,你把这个序列放进去,你希望这个网络可以输出一个决策,在当前的这个状态应该输出往右移或者往左移。这里有个问题,就是我们没有标签来说明你现在这个动作是正确还是错误,必须等到这个游戏结束可能,这个游戏可能十秒过后才结束。现在这个动作往左往右到底是不是对最后游戏的结束能赢有帮助,其实是不清楚的的。这里就面临一个`延迟奖励(Delayed Reward)`,所以就使得训练这个网络非常困难。 @@ -38,25 +39,27 @@ **我们对比下强化学习和监督学习。** -* 首先强化学习输入的序列的数据并不是像 supervised learning 里面这些样本都是独立的。 -* 另外一点是 learner 并没有被告诉你每一步正确的行为应该是什么。Learner 需要自己去发现哪些行为可以使得它最后得到这个奖励,只能通过不停地尝试来发现最有利的 action。 - -* 这里还有一点是 agent 获得自己能力的过程中,其实是通过不断地试错(trial-and-error exploration)。Exploration 和 exploitation 是强化学习里面非常核心的一个问题。Exploration 是说你会去尝试一些新的行为,这些新的行为有可能会使你得到更高的奖励,也有可能使你一无所有。Exploitation 说的是你就是就采取你已知的可以获得最大奖励的行为,你就重复执行这个 action 就可以了,因为你已经知道可以获得一定的奖励。因此,我们需要在 exploration 和 exploitation 之间取得一个权衡,这也是在监督学习里面没有的情况。 - +* 首先强化学习输入的序列的数据并不是像监督学习里面这些样本都是独立的。 +* 另外一点是学习器并没有被告诉你每一步正确的行为应该是什么。学习器需要自己去发现哪些行为可以使得它最后得到这个奖励,只能通过不停地尝试来发现最有利的动作。 +* 这里还有一点是 agent 获得自己能力的过程中,其实是通过不断地试错探索(trial-and-error exploration)。 + * 探索(exploration)和利用(exploitation)是强化学习里面非常核心的一个问题。 + * 探索是说你会去尝试一些新的行为,这些新的行为有可能会使你得到更高的奖励,也有可能使你一无所有。 + * 利用就是就采取你已知的可以获得最大奖励的行为,你就重复执行这个动作就可以了,因为你已经知道可以获得一定的奖励。 + * 因此,我们需要在探索和利用之间取得一个权衡,这也是在监督学习里面没有的情况。 * 在强化学习过程中,没有非常强的 supervisor,只有一个`奖励信号(reward signal)`,就是环境会在很久以后告诉你之前你采取的行为到底是不是有效的。Agent 在这个强化学习里面学习的话就非常困难,因为你没有得到即时反馈。当你采取一个行为过后,如果是监督学习,你就立刻可以获得一个指引,就说你现在做出了一个错误的决定,那么正确的决定应该是谁。而在强化学习里面,环境可能会告诉你这个行为是错误的,但是它并没有告诉你正确的行为是什么。而且更困难的是,它可能是在一两分钟过后告诉你错误,它再告诉你之前的行为到底行不行。所以这也是强化学习和监督学习不同的地方。 ![](img/1.6.png)通过跟监督学习比较,我们可以总结出强化学习的一些特征。 * 强化学习有这个 `trial-and-error exploration`,它需要通过探索环境来获取对这个环境的理解。 * 强化学习 agent 会从环境里面获得延迟的奖励(delayed reward)。 -* 在强化学习的训练过程中,时间非常重要。因为你得到的数据都是有这个时间关联的,而不是这个 i.i.d 分布的。在机器学习中,如果观测数据有非常强的关联,其实会使得这个训练非常不稳定。这也是为什么在监督学习中,我们希望 data 尽量是 i.i.d 了,这样就可以消除数据之间的相关性。 +* 在强化学习的训练过程中,时间非常重要。因为你得到的数据都是有这个时间关联的,而不是独立同分布的。在机器学习中,如果观测数据有非常强的关联,其实会使得这个训练非常不稳定。这也是为什么在监督学习中,我们希望数据尽量是独立同分布,这样就可以消除数据之间的相关性。 * Agent 的行为会影响它随后得到的数据,这一点是非常重要的。在我们训练 agent 的过程中,很多时候我们也是通过正在学习的这个 agent 去跟环境交互来得到数据。所以如果在训练过程中,这个 agent 的模型很快死掉了,那会使得我们采集到的数据是非常糟糕的,这样整个训练过程就失败了。所以在强化学习里面一个非常重要的问题就是怎么让这个 agent 的行为一直稳定地提升。 ![](img/1.7.png) 为什么我们关注强化学习,其中非常重要的一点就是强化学习得到的这个模型可以取得超人类的结果。 -* 监督学习获取的这些监督数据,其实是让人来标注的。比如说 ImageNet,这些图片都是人类标注的。那么我们就可以确定这个算法的 upper bound(上限),人类的这个标注结果决定了它永远不可能超越人类。 +* 监督学习获取的这些监督数据,其实是让人来标注的。比如说 ImageNet,这些图片都是人类标注的。那么我们就可以确定这个算法的上限(upper bound),人类的这个标注结果决定了它永远不可能超越人类。 * 但是对于强化学习,它在环境里面自己探索,有非常大的潜力,它可以获得超越人的能力的这个表现,比如说 AlphaGo,谷歌 DeepMind 的 AlphaGo 这样一个强化学习的算法可以把人类最强的棋手都打败。 ![](img/1.8.png) @@ -64,7 +67,7 @@ 这里给大家举一些在现实生活中强化学习的例子。 * 国际象棋是一个强化学习的过程,因为这个棋手就是在做出一个选择来跟对方对战。 -* 在自然界中,羚羊其实也是在做一个强化学习,它刚刚出生的时候,可能都不知道怎么站立,然后它通过 `trial- and-error` 的一个尝试,三十分钟过后,它就可以跑到每小时 36 公里,很快地适应了这个环境。 +* 在自然界中,羚羊其实也是在做一个强化学习,它刚刚出生的时候,可能都不知道怎么站立,然后它通过试错的一个尝试,三十分钟过后,它就可以跑到每小时 36 公里,很快地适应了这个环境。 * 你也可以把股票交易看成一个强化学习的问题,就怎么去买卖来使你的收益极大化。 * 玩雅达利游戏或者一些电脑游戏,也是一个强化学习的过程。 @@ -78,7 +81,7 @@ 在这个 pong 的游戏里面,决策其实就是两个动作:往上或者往下。如果强化学习是通过学习一个 policy network 来分类的话,其实就是输入当前帧的图片,然后 policy network 就会输出所有决策的可能性。 ![](img/1.11.png) -在这种情况下面,对于监督学习的话,我们就可以直接告诉这个 agent 正确的 label 是什么。在这种游戏情况下面,我们并不知道它的正确的标签是什么。 +在这种情况下面,对于监督学习的话,我们就可以直接告诉这个 agent 正确的标签是什么。在这种游戏情况下面,我们并不知道它的正确的标签是什么。 ![](img/1.12.png) 在强化学习里面,我们是通过让它尝试去玩这个游戏,然后直到游戏结束过后,再去说你前面的一系列动作到底是正确还是错误。 @@ -92,14 +95,14 @@ \tau=\left(s_{0}, a_{0}, s_{1}, a_{1}, \ldots\right) $$ -* 最后结束过后,你会知道你到底有没有把这个球击到对方区域,对方没有接住,你是赢了还是输了。我们可以通过观测序列以及 eventual reward 来训练这个 agent ,使它尽可能地采取可以获得这个 eventual reward 的动作。 +* 最后结束过后,你会知道你到底有没有把这个球击到对方区域,对方没有接住,你是赢了还是输了。我们可以通过观测序列以及最终奖励(eventual reward)来训练这个 agent ,使它尽可能地采取可以获得这个最终奖励的动作。 * 一场游戏叫做一个 `episode(回合)` 或者 `trial(试验)`。 ![](img/1.14.png) 强化学习是有一定的历史的,只是最近大家把强化学习跟深度学习结合起来,就形成了`深度强化学习(Deep Reinforcemet Learning)`。这里做一个类比,把它类比于这个传统的计算机视觉以及深度计算机视觉。 -* 传统的计算机视觉由两个过程组成。你给一张图,我们先要提取它的特征,用一些设计好的 feature,比如说 HOG、DPM。提取这些 feature 后,我们再单独训练一个分类器。这个分类器可以是 SVM、Boosting,然后就可以辨别这张图片是狗还是猫。 +* 传统的计算机视觉由两个过程组成。你给一张图,我们先要提取它的特征,用一些设计好的特征(feature),比如说 HOG、DPM。提取这些特征后,我们再单独训练一个分类器。这个分类器可以是 SVM、Boosting,然后就可以辨别这张图片是狗还是猫。 * 2012 年过后,我们有了卷积神经网络,大家就把特征提取以及分类两者合到一块儿去了,就是训练一个神经网络。这个神经网络既可以做特征提取,也可以做分类。它可以实现这种端到端的训练,它里面的参数可以在每一个阶段都得到极大的优化,这样就得到了一个非常重要的突破。 @@ -108,7 +111,7 @@ 我们可以把神经网络放到强化学习里面。 * 之前的强化学习,比如 TD-Gammon 玩 backgammon 这个游戏,它其实是设计特征,然后通过训练价值函数的一个过程,就是它先设计了很多手工的特征,这个手工特征可以描述现在整个状态。得到这些特征过后,它就可以通过训练一个分类网络或者分别训练一个价值估计函数来做出决策。 -* 现在我们有了深度学习,有了神经网络,那么大家也把这个过程改进成一个 end-to-end training 的过程。你直接输入这个状态,我们不需要去手工地设计这个特征,就可以让它直接输出 action。那么就可以用一个神经网络来拟合我们这里的 value function 或 policy network,省去 了 feature engineering 的过程。 +* 现在我们有了深度学习,有了神经网络,那么大家也把这个过程改进成一个端到端训练(end-to-end training)的过程。你直接输入这个状态,我们不需要去手工地设计这个特征,就可以让它直接输出动作。那么就可以用一个神经网络来拟合我们这里的价值函数或策略网络,省去了特征工程(feature engineering)的过程。 ![](img/1.16.png) @@ -123,10 +126,10 @@ ![](img/1.17.png) 接下来给大家再看一些强化学习里面比较有意思的例子。 -* **第一个例子是 DeepMind 研发的一个走路的 agent。**这个 agent 往前走一步,你就会得到一个 reward。这个 agent 有不同的这个形态,可以学到很多有意思的功能。比如怎么跨越这个障碍物,就像那个蜘蛛那样的 agent 。怎么跨越障碍物,像这个人有双腿一样, 这个 agent 往前走。以及像这个人形 的agent,怎么在一个曲折的道路上面往前走。这个结果也是非常有意思,这个人形 agent 会把手举得非常高,因为它这个手的功能就是为了使它身体保持平衡,这样它就可以更快地在这个环境里面往前跑,而且这里你也可以增加这个环境的难度,加入一些扰动,这个 agent 就会变得更鲁棒。 +* **第一个例子是 DeepMind 研发的一个走路的 agent。**这个 agent 往前走一步,你就会得到一个 reward。这个 agent 有不同的这个形态,可以学到很多有意思的功能。比如怎么跨越这个障碍物,就像那个蜘蛛那样的 agent 。怎么跨越障碍物,像这个人有双腿一样, 这个 agent 往前走。以及像这个人形的 agent,怎么在一个曲折的道路上面往前走。这个结果也是非常有意思,这个人形 agent 会把手举得非常高,因为它这个手的功能就是为了使它身体保持平衡,这样它就可以更快地在这个环境里面往前跑,而且这里你也可以增加这个环境的难度,加入一些扰动,这个 agent 就会变得更鲁棒。 * **第二个例子是机械臂抓取。**因为这个机械臂的应用自动去强化学习需要大量的 rollout,所以它这里就有好多机械臂,分布式系统可以让这个机械臂尝试抓取不同的物体。你发现这个盘子里面物体的形状、形态其实都是不同的,这样就可以让这个机械臂学到一个统一的行为。然后在不同的抓取物下面都可以采取最优的一个抓取特征。你的这个抓取的物件形态存在很多不同,一些传统的这个抓取算法就没法把所有物体都抓起来,因为你对每一个物体都需要做一个建模,这样的话就是非常花时间。但是通过强化学习,你就可以学到一个统一的抓取算法,在不同物体上它都可以适用。 * **第三个例子是 OpenAI 做的一个机械臂翻魔方**。这里它们 18 年的时候先设计了这个手指的一个机械臂,让它可以通过翻动手指,使得手中的这个木块达到一个预定的设定。人的手指其实非常精细,怎么使得这个机械手臂也具有这样灵活的能力就一直是个问题。它们通过这个强化学习在一个虚拟环境里面先训练,让 agent 能翻到特定的这个方向,再把它应用到真实的手臂之中。这在强化学习里面是一个比较常用的做法,就是你先在虚拟环境里面得到一个很好的 agent,然后再把它使用到真实的这个机器人中。因为真实的机械手臂通常都是非常容易坏,而且非常贵,你没法大批量地购买。2019 年对手臂进一步改进了,这个手臂可以玩魔方了。这个结果也非常有意思,到后面,这个魔方就被恢复成了个六面都是一样的结构了。 -* **第四个例子是一个穿衣服的 agent ,就是训练这个 agent 穿衣服。**因为很多时候你要在电影或者一些动画实现这个人穿衣的这种场景,通过手写执行命令让机器人穿衣服其实非常困难。很多时候穿衣服也是一个非常精细的操作,那么它们这个工作就是训练这个强化学习 agent,然后就可以实现这个穿衣功能。这里你还可以加入一些扰动,然后 agent 可以抗扰动。可能有这种 failure case, agent 就穿不进去,就卡在这个地方。 +* **第四个例子是一个穿衣服的 agent ,就是训练这个 agent 穿衣服。**因为很多时候你要在电影或者一些动画实现这个人穿衣的这种场景,通过手写执行命令让机器人穿衣服其实非常困难。很多时候穿衣服也是一个非常精细的操作,那么它们这个工作就是训练这个强化学习 agent,然后就可以实现这个穿衣功能。这里你还可以加入一些扰动,然后 agent 可以抗扰动。可能有这种失败的情况(failure case), agent 就穿不进去,就卡在这个地方。 ## Introduction to Sequential Decision Making @@ -159,7 +162,7 @@ 在一个强化学习环境里面,agent 的目的就是选取一系列的动作来极大化它的奖励,所以这些采取的动作必须有长期的影响。但在这个过程里面,它的奖励其实是被延迟了,就是说你现在采取的某一步决策可能要等到时间很久过后才知道这一步到底产生了什么样的影响。 -这里一个示意图就是我们玩这个 Atari 的 Pong 游戏,你可能只有到最后游戏结束过后,才知道这个球到底有没有击打过去。中间你采取的 up 或 down 行为,并不会直接产生奖励。强化学习里面一个重要的课题就是近期奖励和远期奖励的一个 trade-off。怎么让 agent 取得更多的长期奖励是强化学习的问题。 +这里一个示意图就是我们玩这个 Atari 的 Pong 游戏,你可能只有到最后游戏结束过后,才知道这个球到底有没有击打过去。中间你采取的 up 或 down 行为,并不会直接产生奖励。强化学习里面一个重要的课题就是近期奖励和远期奖励的一个权衡(trade-off)。怎么让 agent 取得更多的长期奖励是强化学习的问题。 ![](img/1.22.png) 在跟环境的交互过程中,agent 会获得很多观测。在每一个观测会采取一个动作,它也会得到一个奖励。**所以历史是观测、行为、奖励的序列:** @@ -200,7 +203,7 @@ POMDP 可以用一个 7 元组描述:$(S,A,T,R,\Omega,O,\gamma)$,其中 $S$ ![](img/1.25.png) 对于一个强化学习 agent,它有如下组成成分: -* 首先 agent 有一个 `policy function`,agent 会用这个函数来选取下一步的动作。 +* 首先 agent 有一个 `策略函数(policy function)`,agent 会用这个函数来选取下一步的动作。 * 然后它也可能生成一个`价值函数(value function)`。我们用价值函数来对当前状态进行估价,它就是说你进入现在这个状态,可以对你后面的收益带来多大的影响。当这个价值函数大的时候,说明你进入这个状态越有利。 @@ -217,7 +220,7 @@ Policy 决定了这个 agent 的行为,它其实是一个函数,把输入的 * 一种是 `deterministic policy(确定性策略)`,就是说你这里有可能只是采取它的极大化,采取最有可能的动作。你现在这个概率就是事先决定好的。 -从 Atari 游戏来看的话,policy function 的输入就是游戏的一帧,它的输出决定你是往左走或者是往右走。 +从 Atari 游戏来看的话,策略函数的输入就是游戏的一帧,它的输出决定你是往左走或者是往右走。 通常情况下,强化学习一般使用`随机性策略`。随机性策略有很多优点: @@ -229,7 +232,7 @@ Policy 决定了这个 agent 的行为,它其实是一个函数,把输入的 ![](img/1.27.png) **价值函数是未来奖励的一个预测,用来评估状态的好坏**。 -价值函数里面有一个 `discount factor`,我们希望尽可能在短的时间里面得到尽可能多的奖励。如果我们说十天过后,我给你 100 块钱,跟我现在给你 100 块钱,你肯定更希望我现在就给你 100 块钱,因为你可以把这 100 块钱存在银行里面,你就会有一些利息。所以我们就通过把这个 discount factor 放到价值函数的定义里面,价值函数的定义其实是一个期望。这里有一个期望 $\mathbb{E}_{\pi}$,这里有个小角标是 $\pi$ 函数,这个 $\pi$ 函数就是说在我们已知某一个 policy function 的时候,到底可以得到多少的奖励。 +价值函数里面有一个 `discount factor(折扣因子)`,我们希望尽可能在短的时间里面得到尽可能多的奖励。如果我们说十天过后,我给你 100 块钱,跟我现在给你 100 块钱,你肯定更希望我现在就给你 100 块钱,因为你可以把这 100 块钱存在银行里面,你就会有一些利息。所以我们就通过把这个折扣因子放到价值函数的定义里面,价值函数的定义其实是一个期望。这里有一个期望 $\mathbb{E}_{\pi}$,这里有个小角标是 $\pi$ 函数,这个 $\pi$ 函数就是说在我们已知某一个策略函数的时候,到底可以得到多少的奖励。 我们还有一种价值函数:Q 函数。Q 函数里面包含两个变量:状态和动作。所以你未来可以获得多少的奖励,它的这个期望取决于你当前的状态和当前的行为。这个 Q 函数是强化学习算法里面要学习的一个函数。因为当我们得到这个 Q 函数后,进入某一种状态,它最优的行为就可以通过这个 Q 函数来得到。 @@ -237,9 +240,9 @@ Policy 决定了这个 agent 的行为,它其实是一个函数,把输入的 ![](img/1.28.png) 第三个组成部分是模型,**模型决定了下一个状态会是什么样的,就是说下一步的状态取决于你当前的状态以及你当前采取的行为。**它由两个部分组成, -* 一个是 probability,它这个转移状态之间是怎么转移的。 +* 概率:这个转移状态之间是怎么转移的。 -* 另外是这个奖励函数,当你在当前状态采取了某一个行为,可以得到多大的奖励。 +* 奖励函数:当你在当前状态采取了某一个行为,可以得到多大的奖励。 ![](img/1.29.png) @@ -274,7 +277,7 @@ Policy 决定了这个 agent 的行为,它其实是一个函数,把输入的 **根据强化学习 agent 的不同,我们可以把 agent 进行归类。** * `基于价值的 agent(value-based agent)`。这一类 agent 显式地学习的是价值函数,隐式地学习了它的策略。策略是从我们学到的价值函数里面推算出来的。 -* `基于策略的 agent(policy-based agent)`。这一类 agent 直接去学习 policy,就是说你直接给它一个 state,它就会输出这个动作的概率。在这个 policy-based agent 里面并没有去学习它的价值函数。 +* `基于策略的 agent(policy-based agent)`。这一类 agent 直接去学习 policy,就是说你直接给它一个状态,它就会输出这个动作的概率。在这个 policy-based agent 里面并没有去学习它的价值函数。 * 把 value-based 和 policy-based 结合起来就有了 `Actor-Critic agent`。这一类 agent 把它的策略函数和价值函数都学习了,然后通过两者的交互得到一个最佳的行为。 Q: 基于策略迭代和基于价值迭代的强化学习方法有什么区别? @@ -291,7 +294,7 @@ A: 对于一个状态转移概率已知的马尔可夫决策过程,我们可 **另外,我们是可以通过 agent 到底有没有学习这个环境模型来分类。** * 第一种是 `model-based(有模型)` RL agent,它通过学习这个状态的转移来采取动作。 -* 另外一种是 ` model-free(免模型)` RL agent,它没有去直接估计这个状态的转移,也没有得到环境的具体转移变量。它通过学习 value function 和 policy function 进行决策。Model-free 的模型里面没有一个环境转移的模型。 +* 另外一种是 ` model-free(免模型)` RL agent,它没有去直接估计这个状态的转移,也没有得到环境的具体转移变量。它通过学习价值函数和策略函数进行决策。Model-free 的模型里面没有一个环境转移的模型。 我们可以用马尔可夫决策过程来定义强化学习任务,并表示为四元组 $$,即状态集合、动作集合、状态转移函数和奖励函数。如果这四元组中所有元素均已知,且状态集合和动作集合在有限步数内是有限集,则机器可以对真实环境进行建模,构建一个虚拟世界来模拟真实环境的状态和交互反应。 @@ -326,7 +329,7 @@ A: 针对是否需要对真实环境建模,强化学习可以分为有模型 ![](img/1.36.png) -把几类模型放到同一个饼图里面。饼图有三个组成部分:value function、policy、model。按一个 agent 具不具有三者中的两者或者一者可以把它分成很多类。 +把几类模型放到同一个饼图里面。饼图有三个组成部分:价值函数、策略和模型。按一个 agent 具不具有三者中的两者或者一者可以把它分成很多类。 ## Learning and Planning @@ -336,7 +339,7 @@ Learning 和 Planning 是序列决策的两个基本问题。 ![](img/learning.png) -在 reinforcement learning 中,环境初始时是未知的,agent 不知道环境如何工作,agent 通过不断地与环境交互,逐渐改进策略。 +在强化学习中,环境初始时是未知的,agent 不知道环境如何工作,agent 通过不断地与环境交互,逐渐改进策略。 ### Planning @@ -353,29 +356,29 @@ Learning 和 Planning 是序列决策的两个基本问题。 ![](img/1.37.png) 在强化学习里面,`Exploration` 和` Exploitation` 是两个很核心的问题。 -* Exploration 是说我们怎么去探索这个环境,通过尝试不同的行为来得到一个最佳的策略,得到最大奖励的策略。 +* 探索是说我们怎么去探索这个环境,通过尝试不同的行为来得到一个最佳的策略,得到最大奖励的策略。 -* Exploitation 是说我们不去尝试新的东西,就采取已知的可以得到很大奖励的行为。 +* 利用是说我们不去尝试新的东西,就采取已知的可以得到很大奖励的行为。 -因为在刚开始的时候强化学习 agent 不知道它采取了某个行为会发生什么,所以它只能通过试错去探索。所以 Exploration 就是在试错来理解采取的这个行为到底可不可以得到好的奖励。Exploitation 是说我们直接采取已知的可以得到很好奖励的行为。所以这里就面临一个 trade-off,怎么通过牺牲一些短期的 reward 来获得行为的理解。 +因为在刚开始的时候强化学习 agent 不知道它采取了某个行为会发生什么,所以它只能通过试错去探索。所以 探索就是在试错来理解采取的这个行为到底可不可以得到好的奖励。利用是说我们直接采取已知的可以得到很好奖励的行为。所以这里就面临一个权衡,怎么通过牺牲一些短期的奖励来获得行为的理解。 ![](img/1.38.png) -这里我给大家举一些例子来说明 Exploration 和 Exploitation 的定义。 +这里我给大家举一些例子来说明探索和利用的定义。 * 以选择餐馆为例, - * Exploitation 是说我们直接去你最喜欢的餐馆,因为你去过这个餐馆很多次了,所以你知道这里面的菜都非常可口。 - * Exploration 是说你把手机拿出来,你直接搜索一个新的餐馆,然后去尝试它到底好不好吃。这里的结果就是有可能这个新的餐馆非常不满意,你就这个钱就浪费了。 + * 利用:我们直接去你最喜欢的餐馆,因为你去过这个餐馆很多次了,所以你知道这里面的菜都非常可口。 + * 探索:你把手机拿出来,你直接搜索一个新的餐馆,然后去尝试它到底好不好吃。这里的结果就是有可能这个新的餐馆非常不满意,你就这个钱就浪费了。 * 以做广告为例, - * Exploitation 就是说我们直接采取最优的这个广告策略。 - * Exploration 就是说我们换一种广告方式,然后看这个新的广告策略到底可不可以得到奖励。 + * 利用:我们直接采取最优的这个广告策略。 + * 探索:我们换一种广告方式,然后看这个新的广告策略到底可不可以得到奖励。 * 以挖油为例, - * Exploitation 就是说我们直接在已知的地方挖油,我们就可以确保挖到油。 - * Exploration 就是说我们在一个新的地方挖油,就有很大的概率,你可能不能发现任何油,但也可能有比较小的概率可以发现一个非常大的油田。 + * 利用:我们直接在已知的地方挖油,我们就可以确保挖到油。 + * 探索:我们在一个新的地方挖油,就有很大的概率,你可能不能发现任何油,但也可能有比较小的概率可以发现一个非常大的油田。 * 以玩游戏为例, - * Exploitation 就是说你总是采取某一种策略。比如说,你可能打街霸,你采取的策略可能是蹲在角落,然后一直触脚。这个策略很可能可以奏效,但可能遇到特定的对手就失效。 - * Exploration 就是说你可能尝试一些新的招式,有可能你会发出大招来,这样就可能一招毙命。 + * 利用:你总是采取某一种策略。比如说,你可能打街霸,你采取的策略可能是蹲在角落,然后一直触脚。这个策略很可能可以奏效,但可能遇到特定的对手就失效。 + * 探索:你可能尝试一些新的招式,有可能你会发出大招来,这样就可能一招毙命。 ### K-armed Bandit ![](img/1.39.png ':size=450') @@ -436,7 +439,7 @@ $python ![](img/1.45.png) -强化学习的这个交互就是由 agent 跟环境进行交互。所以算法的 interface 也是用这个来表示。比如说我们现在安装了 OpenAI Gym。那我们这里就可以直接调入 Taxi-v2 的环境,就建立了这个环境。初始化这个环境过后,就可以进行交互了。Agent 得到这个观测过后,它就会输出一个 action。然后这个 action 会被这个环境拿进去执行这个 step,然后环境就会往前走一步,然后返回新的 observation 和 reward 以及一个 flag variable 就决定你这个游戏是不是结束了。几行代码就实现了强化学习里面的 framework。 +强化学习的这个交互就是由 agent 跟环境进行交互。所以算法的 interface 也是用这个来表示。比如说我们现在安装了 OpenAI Gym。那我们这里就可以直接调入 Taxi-v2 的环境,就建立了这个环境。初始化这个环境过后,就可以进行交互了。Agent 得到这个观测过后,它就会输出一个 action。然后这个动作会被这个环境拿进去执行这个 step,然后环境就会往前走一步,然后返回新的 observation 和 reward 以及一个 flag variable 就决定你这个游戏是不是结束了。几行代码就实现了强化学习里面的 framework。 ![](img/1.46.png) 在 OpenAI Gym 里面有很经典的控制类游戏。