diff --git a/docs/chapter1/chapter1.md b/docs/chapter1/chapter1.md index 76de317..611ff69 100644 --- a/docs/chapter1/chapter1.md +++ b/docs/chapter1/chapter1.md @@ -3,14 +3,14 @@ ## Reinforcement Learning ![](img/1.1.png) -强化学习讨论的问题是说一个 agent 怎么在一个复杂不确定的环境里面去极大化它能获得的这个奖励。示意图由两部分组成,一部分是 agent,下面一部分是环境。然后在强化学习过程中,Agent 跟 environment 其实一直在交互。当 agent 在环境里面获取到状态,agent 会利用这个状态会输出一个 action,一个决策。然后这个决策会放到这个环境之中去,然后环境会通过这个 agent 采取的决策,输出下一个状态以及当前的这个决策得到的奖励。Agent 的目的就是为了尽可能多的从环境中获取这个奖励。 +强化学习讨论的问题是说一个 agent 怎么在一个复杂不确定的环境里面去极大化它能获得的这个奖励。示意图由两部分组成:agent 和 environment。在强化学习过程中,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 分布,就是它们之间是没有关联的一个分布。然后我们训练一个分类器,比如说右边这个神经网络。为了分辨出这个图片是车辆还是飞机。训练过程中,我们直接把真实的 label 给了这个网络。当这个网络做出一个错误的预测,比如现在输入了这个汽车的图片,然后它预测出来是飞机。我们就会直接告诉它,你这个预测是错误的,正确的 label 应该是车。然后我们把这个错误写成一个`损失函数(loss function)`,通过 Backpropagation 来训练这个网络。所以在监督学习过程中,有两个假设, -* 输入的数据。标定的数据,它都是没有关联的,尽可能没有关联。因为如果有关联的话,这个网络就是其实不好学习。 -* 我们告诉了这个 learner 正确的标签是什么,这样它可以通过正确的标签来修正自己的这个预测。 +* 输入的数据,标定的数据,它都是没有关联的,尽可能没有关联。因为如果有关联的话,这个网络其实是不好学习的。 +* 我们告诉这个 learner 正确的标签是什么,这样它可以通过正确的标签来修正自己的这个预测。 ![](img/1.3.png) @@ -91,15 +91,15 @@ * 我们有了这个端到端的一个训练,可以把特征提取和价值估计或者决策一块来优化,这样就可以得到了一个更强的一个决策网络。 ![](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,所以它这里就有好多机械臂,然后一个分布式系统,然后可以让这个机械臂尝试抓取不同的物体。你发现这个盘子里面物体的形状、形态其实都是不同的,这样就可以让这个机械臂学到一个统一的一个行为。然后在不同的这个抓取物下面都可以采取最优的一个抓取特征。你的这个抓取的物件形态存在很多不同,一些传统的这个抓取算法就没法把这些所有物体都抓起来,因为你对每一个物体都需要做一个建模,这样的话就是非常花时间。但是就通过这个强化学习,你就可以学到一个统一的一个抓取算法,在不同物体上它都可以适用。 +* **第二个例子是机械臂抓取的一个例子。**因为这个机械臂的应用自动去强化学习需要大量的这个 rollout,所以它这里就有好多机械臂,然后一个分布式系统,然后可以让这个机械臂尝试抓取不同的物体。你发现这个盘子里面物体的形状、形态其实都是不同的,这样就可以让这个机械臂学到一个统一的一个行为。然后在不同的这个抓取物下面都可以采取最优的一个抓取特征。你的这个抓取的物件形态存在很多不同,一些传统的这个抓取算法就没法把这些所有物体都抓起来,因为你对每一个物体都需要做一个建模,这样的话就是非常花时间。但是就通过这个强化学习,你就可以学到一个统一的一个抓取算法,在不同物体上它都可以适用。 -* 第三个例子是 OpenAI 做的一个机械臂翻魔方的一个结果,这里它们18年的时候先设计了一个这个手指的一个机械臂,让它可以通过翻动手指,使得这个手中的这个木块达到一个预定的这个设定。人的手指其实是一个非常精细的过程,怎么使得这个机械手臂也具有这样灵活的能力就一直是一个问题。它们就通过这个强化学习在一个虚拟环境里面先训练,让 agent 能翻到特定的这个方向,再把它应用到这个真实的手臂之中。这也其实在强化学习里面是一个比较常用的一个做法,就是你先在虚拟环境里面得到一个很好的 agent,然后再把它使用到真实的这个机器人中。因为很多时候真实的机械手臂通常都是非常容易坏,而且非常贵,你没法大批量的购买。2019年的时候让它们进一步改进,然后这个手臂就可以玩魔方了。这个结果也是非常有意思的,到后面,你看这个魔方就被恢复成了个六面都是一样的结构了。 +* **第三个例子是 OpenAI 做的一个机械臂翻魔方的例子**。这里它们18年的时候先设计了一个这个手指的一个机械臂,让它可以通过翻动手指,使得这个手中的这个木块达到一个预定的这个设定。人的手指其实是一个非常精细的过程,怎么使得这个机械手臂也具有这样灵活的能力就一直是一个问题。它们就通过这个强化学习在一个虚拟环境里面先训练,让 agent 能翻到特定的这个方向,再把它应用到这个真实的手臂之中。这也其实在强化学习里面是一个比较常用的一个做法,就是你先在虚拟环境里面得到一个很好的 agent,然后再把它使用到真实的这个机器人中。因为很多时候真实的机械手臂通常都是非常容易坏,而且非常贵,你没法大批量的购买。2019年的时候让它们进一步改进,然后这个手臂就可以玩魔方了。这个结果也是非常有意思的,到后面,你看这个魔方就被恢复成了个六面都是一样的结构了。 -* 第四个例子是一个穿衣服的 agent ,就是训练这个 agent 穿衣服。因为很多时候你要在电影或者一些动画实现这个人穿衣的这种场景,通过手写执行命令让机器人穿衣服其实是非常困难。有很多时候穿衣服也是一个非常精细的一个操作,那么它们这个工作就是通过训练这个强化学习 agent,然后就可以实现这个穿衣功能。这里你还可以加入一些扰动,然后 agent 可以抗扰动,然后可能有这种 failure case, agent 就穿不进去,就卡在这个地方。 +* **第四个例子是一个穿衣服的 agent ,就是训练这个 agent 穿衣服。**因为很多时候你要在电影或者一些动画实现这个人穿衣的这种场景,通过手写执行命令让机器人穿衣服其实是非常困难。有很多时候穿衣服也是一个非常精细的一个操作,那么它们这个工作就是通过训练这个强化学习 agent,然后就可以实现这个穿衣功能。这里你还可以加入一些扰动,然后 agent 可以抗扰动,然后可能有这种 failure case, agent 就穿不进去,就卡在这个地方。 ## Introduction to Sequential Decision Making @@ -115,7 +115,7 @@ ![](img/1.20.png) -这里给大家举一些奖励的例子。不同的环境,奖励的也是不同的。 +这里给大家举一些奖励的例子。不同的环境,奖励也是不同的。 * 比如说一个下象棋的选手,它的目的其实就为了赢棋,奖励是说在最后棋局结束的时候,他知道会得到一个正奖励或者负奖励。 * 羚羊站立也是一个强化学习过程,那它得到的奖励就是它是否可以最后跟它妈妈一块离开或者它被吃掉。 diff --git a/docs/chapter2/chapter2.md b/docs/chapter2/chapter2.md index 035349d..570d007 100644 --- a/docs/chapter2/chapter2.md +++ b/docs/chapter2/chapter2.md @@ -14,7 +14,7 @@ ![](img/2.3.png) -在介绍马尔可夫决策过程之前,我会给大家首先梳理一下马尔可夫、马尔可夫奖励过程。这两个过程是马尔可夫决策过程的一个基础。 +在介绍马尔可夫决策过程之前,先给大家梳理一下马尔可夫、马尔可夫奖励过程。这两个过程是马尔可夫决策过程的一个基础。 ## Markov Process(MP) @@ -36,7 +36,7 @@ ![](img/2.7.png) -我们再来看一看`马尔可夫奖励过程(Markov Reward Process, MRP)`。MRP 是马尔可夫链再加上了一个奖励函数。在 MRP之中,转移矩阵跟它的这个状态都是跟马尔可夫链一样的,多了一个`奖励函数(reward function)`。奖励函数是一个期望,它说当你当到达某一个状态的时候,可以获得多大的奖励,然后这里另外定义了一个 discount factor $\gamma$ 。 +我们再来看一看`马尔可夫奖励过程(Markov Reward Process, MRP)`。MRP 是马尔可夫链再加上了一个奖励函数。在 MRP之中,转移矩阵跟它的这个状态都是跟马尔可夫链一样的,多了一个`奖励函数(reward function)`。**奖励函数是一个期望**,就是说当你到达某一个状态的时候,可以获得多大的奖励,然后这里另外定义了一个 discount factor $\gamma$ 。 ![](img/2.8.png) @@ -76,7 +76,7 @@ ![](img/2.13.png) -Bellman Equation 定义了状态之间的迭代关系。假设我们现在有一个马尔可夫转移矩阵是右边这个样子。Bellman Equation 描述的就是当前状态到未来状态的一个转移。假设我们当前是在 $s_1$, 那么它只可能去到三个未来的状态:它有 0.1 的概率留在它当前这个位置,有 0.2 的概率去到 $s_2$ 状态,有 0.7 的概率去到 $s_4$ 的状态,所以我们要把这个转移乘以它未来的状态的价值,再加上它的 immediate reward 就会得到它当前状态的价值。所以 Bellman Equation 定义的就是当前状态跟未来状态的一个迭代的关系。 +Bellman Equation 定义了状态之间的迭代关系。假设有一个马尔可夫转移矩阵是右边这个样子。Bellman Equation 描述的就是当前状态到未来状态的一个转移。假设我们当前是在 $s_1$, 那么它只可能去到三个未来的状态:有 0.1 的概率留在它当前这个位置,有 0.2 的概率去到 $s_2$ 状态,有 0.7 的概率去到 $s_4$ 的状态,所以我们要把这个转移乘以它未来的状态的价值,再加上它的 immediate reward 就会得到它当前状态的价值。所以 Bellman Equation 定义的就是当前状态跟未来状态的一个迭代的关系。 ![](img/2.14.png) @@ -212,7 +212,7 @@ $$ ![](img/2.38.png) -在这样的环境里面,我们想计算它每一个状态的价值。然后我们也定义了它的 reward function。你可以看到有些状态上面有一个 R 的这个值。比如我们这边有些值是为负的,然后在这个棋盘的中间这个位置,可以能看到有一个 R 的值是 1.0,为正的一个价值函数。 所以每个状态对应了一个值,然后有一些状态没有任何值,就说明它的这个 reward function,它的奖励是为零的。 +在这样的环境里面,我们想计算它每一个状态的价值。我们也定义了它的 reward function,你可以看到有些状态上面有一个 R 的值。比如我们这边有些值是为负的,然后在这个棋盘的中间这个位置,可以看到有一个 R 的值是 1.0,为正的一个价值函数。 所以每个状态对应了一个值,然后有一些状态没有任何值,就说明它的这个 reward function,它的奖励是为零的。 所以,当我们开始做这个 policy evaluation,policy evaluation是一个不停迭代的过程。当我们初始化的时候,所有的 $v(s)$ 都是 0。我们现在迭代一次,迭代一次过后,你发现有些状态上面,值已经产生了变化。比如说那些有奖励的值,比如有些状态的值的 R 为 -1,迭代一次过后,它就会得到 -1 的这个奖励。对于中间这个绿色的,因为它的奖励为正,所以它是 + 1 的状态。