Deep Reinforcement Learning
1. 基础数学知识
1.1 Random Variable
随机变量是一个未知的量,随机变量的值取决于一个随机事件的结果。通常用大写字母 代表随机变量。
- Random variable: unknown; its values depends on outcomes of a random event.
- Uppercase letter
for random variable.
比如拿抛硬币举例:正面向上记为0, 反面向上记为1。抛硬币是一个随机事件,其结果记为一个随机变量 。随机变量
有两种取值:0 或者 1。在事件发生之前,无法知道
的取值,但是随机事件的概率是知道的:正面向上事件发生的概率为0.5,反面向上事件发生的概率也为0.5。
用小写字母 表示随机变量的观测值。用大小写来区分大小写与其观测值。
Lowercase Letter for an observed value.
当随机事件结束,会观察到硬币的哪一面朝上,该观测值就记为 。比如:我们抛4次硬币,其观测值为:
这些观测值 只是一个数,没有随机性。
1.2 Probability Density Function(PDF)
PDF provides a relative likelihood that the value of the random variable would equal that sample.
PDF提供随机变量的值等于该样本值的可能性。
高斯分布也叫正太分布,是一个连续的分布函数,随机变量的取值可以是任何一个实数,其概率密度函数:
其中, 是均值,
是标准差。
横轴为随机变量 的取值,纵轴是概率密,曲线为高斯密度函数
如果是离散的概率分布,只能取值,概率密度函数为:
假设随机变量的定义域为
,
- 对于
是连续的概率分布,可以对
做定积分,
- 对于
是离散的概率分布,可以对
做求和:
在摸到一球之前,颜色是随机的,这就是该问题的随机变量 ,其有三种不同的取值
红、绿、 蓝
。摸出球来一看,球是红色的,这时候随机变量 就有了观测值
。
上述流程就是一次随机抽样:在箱子中随机拿出一个球,并且观测到其颜色。
箱子中有很多球,也不知道具体有多少个球,但是取出红色球的概率为0.2,取出绿色球的概率为0.5, 求出蓝色球的概率为0.3,问随机取出一个球是什么颜色?
Sample red ball w.p. 0.2, green ball w.p. 0.5, and blue ball w.p. 0.3. Randomly sample a ball. What will be the color?
使用numpy模拟随机抽样
2. Terminologies(术语)
2.1 state(状态)and action(动作)
拿超级玛丽游戏举例。
可以把当前帧作为 state
,玩家根据当前帧的状态 state
对马里奥做出相应的动作 action
。马里奥可以做三种不同的动作: up
、 left
、 right
。马里奥被叫做 agent
智能体。动作 action
是由谁做的,谁就是 agent
。
2.2 policy(策略)
policy
:玩家对于当前画面,需要让马里奥做出什么动作。根据观测到的当前状态 **state**
,然后做出决策,然后控制 agent
运动。
**policy
函数 是一个概率密度函数,
,给定状态
state
,做出动作 action
的概率密度。
对于上述图中的当前帧的画面, agent
可以做出三种不同的 action
中的一种。把当前帧 state
输入进 policy
函数中,该函数会告诉我:给定当前
state
后,向左的概率为0.2;向右的概率为0.1;向上的概率为0.7。
如果让 policy
自己做出选择,就会随机抽样进行选取,三种动作都有可能发生,但是向上跳的动作发生的概率会更大。强化学习的目的就是学习得到 policy
函数。
该例子中的 agent
的 action
是随机的,是根据 policy
输出的概率做动作 action
。当然也有确定的 policy
,这样的话动作是确定的。如果是个人博弈,最好动作是随机抽样得到的,如果动作是确定的,就有规律可循,别人就有办法根据这个规律赢。
2.3 Reward(奖励)
agent
做出动作 action
,游戏会给 agent
一个奖励 reward
,这个奖励通常需要我们自己来定义。 reward
定义的好坏非常影响强化学习的结果。强化学习的目标就是获得的总奖励最多。
2.4 state transition(状态转移)
在当前状态 state
下, agent
会做出一个 action
,游戏就会给定一个新的状态 state
。比如:马里奥跳一下,画面就不一样了,就有了新的当前帧 state
。
状态转移既可以是确定的,也可以是随机的,但是通常设置为随机的,状态转移的随机性是从 environment
来的。 environment
在这里就指的是游戏程序,游戏程序决定了下一个状态是什么。
如果根据当前 state
, agent
做出了 up
的 action
,这是确定的,但是敌人 Goomba
可能往左走,也可能往右走,方向随机,这就造成了下一个状态的随机性。状态转移方程用 表示,该函数是条件概率密度函数。在给定当前
state
,以及 action
,状态
的发生的概率是多少。
该画面中的状态转移的概率不同,向左走的概率为0.8,向右走的概率为0.2。这个状态转移函数只有environment知道,玩家是不知道的。
2.5 agent environment interaction
agent
是马里奥, environment
是程序本身。状态 state
是
environment
决定的。在超级玛丽中,可以把当前帧看做是 state
。
Agent
接收到一个 state
后要做出一个动作
Action
。
agent
做出动作之后, environment
会更新状态为 ,同时
environment
还会给 Agent
一个奖励 reward
。
3. Randomness in Reinforcement Learning
强化学习中的两个随机性。
第一个随机性来源于 agent
的 action
。 action
是根据 policy
函数随机抽样的到的。用
policy
函数控制 agent
。给定当前状态 s
, agent
的状态A是根据 policy
函数输出的概率来随机抽样得到的。可以做任何动作,但是做不同动作的概率是不同的。
第二个随机性来源于状态转移 **state transitions**
。假设 agent
做出了动作A, environment
就要生成下一个状态,
具有随机性,
environment
用状态转移函数 计算得出概率,然后用概率随机抽样得到下一个状态
。比如下一个状态也有两种可能,根据状态转移函数
的计算,两种可能的概率分别为0.8,0.2。这两个都可能成为下一个状态,系统会随机抽样得到下一个状态。
4. Play the game using AI
如何打赢游戏呢?
我们通过强化学习得到 policy
函数,AI就是使用Policy函数来控制agent,
观测到游戏当前状态state,AI程序用Policy函数来计算每个action的概率,然后随机抽样得到一个action a_1
环境又会观测到下一个状态s_2,并且给agent一个奖励。AI继续拿新的状态作为输入,继续个policy函数计算概率,随机抽样得到action a_2,一直循环下去,只到游戏结束。
我们得到了游戏的trajectory轨迹。由state action reward组成
3. Rewards and Returns
Definition:Return (aka cumulative future reward)
定义:回报(又名:累积未来奖励)。我们把时刻的
Return
记做,其值为将
时刻开始的奖励全部加起来,一直加到游戏结束。
问题: 和
同等重要吗?
Question: Are and
equally important?
- Which of the followings do you prefer?
- I give you $100 right now. ☆[BINGO!] √
- I will give you $100 one year later.
因为未来不确定性很大,所以现在奖励的重要性比较高。
- Future reward is less valuable than present reward.
should be given less weight than
.
由于未来的奖励没有现在的奖励重要,所以强化学习中普遍使用折扣回报 discounted return
Definition: Discounted return (aka cumulative discounted future reward).
: discount rate(tuning hyper-parameter);
我们来看一下 return
的随机性。
假如游戏结束,所有的奖励都观测到了,那么奖励都是数值是观测值,用小写字母表示,但是如果在 时刻,游戏没有结束,这些奖励还全都是随机变量,没有全部观测到,就用大写字母
表示奖励。
return
依赖于奖励
,所以
也为随机变量,用大写字母表示。随机性有两个来源:
action
:
policy
函数用当前状态
state
作为输入,输出一个概率分布,action
就是从这个概率分布中随机抽样得到的。
New state
:给定当前state
和action
,状态转移函数
输出一个概率分布,
environment
从这个概率分布中随机抽样得到下一个新的状态。
对于任意未来时刻 ,奖励
会取决于
。在游戏中,根据当前状态
state
,马里奥做出动作 action
, environment
就会给 agent
一个奖励 reward
:吃到金币得到+1的正奖励,向右走碰到怪物,就会得到-10000的负奖励。
return
是
奖励的加权求和。每个奖励又都和状态
state
和 动作 action
相关,那么 就会跟从
时刻开始,未来所有动作
action
和状态 state
有关。因此,给定,
return
依赖于如下的随机变量:
4. Value Functions
4.1 Action-Value Funcion 
定义 Discounted Return
:未来奖励的总和。越往后的奖励重要程度越低,所以要加上权重。
agent
的目标就是让 越大越好。
是随机变量,其依赖于之后所有的动作
action
和状态 state
。
由于 是随机变量,在
时刻我并不知道
的具体值。那该怎么样评估当前的形式呢?对
求期望。将随机性用积分挤掉。得到的就是实数。
举例:抛硬币之前你不知道结果如何,但是正反面各有一半的概率,如果正面记做1,反面记做0,那么期望就是0.5
同理,对 求期望,就可以得到一个实数
。期望是如何求取的呢?
将 当做对未来所有动作
action
和所有状态
state
的函数。未来的状态和动作都有随机性。动作
action
的概率密度函数是
policy
函数。状态
state
的概率密度函数是状态转移函数
。期望就是对未来的状态
state
和 动作
action
求的,这些随机变量可以用积分去掉,剩下
和
。其余的随机变量都被积分掉了。
被称为:动作价值函数
Action-value function
。其与当前状态 state
和 动作
action
有关。
和
是观测值而不是随机变量,所以积分没有积掉这两部分。还与
policy
函数有关,因为积分的时候会用到
policy
函数。
是一个实数,该数值可以衡量在
policy
函数下,在当前状态
state
做当前动作 action
是好是坏。已知 policy
函数,
就会给当前状态下所有动作打分,就知道哪个动作好。
用不同的 policy
函数就会有不同的
,如何将
中的
去掉呢? 对
关于
函数取最大值,使用最好的
policy
函数:让
最大化的的
policy
函数。
这样只与当前状态
state
和动作
action
有关,直观意义为:给定当前状态下,动作
的评分。
4.2 State-Value Function 
是
action-value function
的期望。把
action
A
当做随机变量,对 A
求取期望,将 A
消掉,与
和 状态
state
有关。
可以告诉我们当前局势状态好不好。比如:我们根据
policy
函数 下围棋,
就可以判断一下当前局势:是我快赢了还是不想上下。
这期望是关于随机变量 A
求的, A
的概率密度函数是 ,根据期望的定义,可以写成连加或者积分的形式:如果动作是离散的,那么期望可以变成连加的形式;如果动作是连续的,那么期望可以变成积分形式。
4.3 Understanding the Value Functions
主要有两种 value-functions
:
Action-value function
:与
policy
函数、当前状态
state
、当前动作action
有关,是对的条件期望。
是随机变量,等于未来所有奖励的加权求和。
表示:如果使用
policy
函数 π,agent
处于状态时,做出动作
是否明智,给动作
打分。
State-value function
:将中的变量A用积分去掉,这样变量只剩下状态
- 学习
policy
函数:Policy-Based Learning
- 用
函数控制
agent
做动作,没观测到一个状态,就将
作为
policy
函数的输入,π函数输出每个动作的概率,对这些概率进行随机抽样得到动作
。
- 用
- 学习最优动作价值函数:Value-Based Learning
观测到当前状态 state
,
policy
函数会输出概率分布,计算每个动作的概率,然后随机抽样得到一个
agent
所做动作。
state transition
状态转移函数我们玩家是不知道的,只有 environment
是知道的, environment
根据状态转移函数 来随机抽样选择下一个状态。
Return
是对未来所有奖励的加权求和,需要
Return
越大越好,
是随机变量,随机性来自未来所有的动作和状态,由于其随机性,我们在
时刻并不知道
的具体值,只有
agent
玩完游戏,才能被全部观测到,那么想要在当前时刻就对 Return
进行预估,应该如何做?
对 求期望,将随机性去掉。
action-value function
:除了当前状态
和动作
,其余动作、状态等随机变量都被期望消除,
与
都有关,如果使用
policy
函数,
可以告诉我们在当前状态下,做出
action
动作是好是坏。
是对
求最大化,把π函数的影响去掉。
state-value function
:状态价值函数。在求一次对A求期望,将A去掉,只与状态
和
有关。
可以评价
函数和状态的好坏
强化学习就是学会怎样控制 agent
,让 agent
基于当前状态,做出相应动作
,争取能在未来得到更多的奖励。
强化学习具体学习的是π函数,或者Q*函数,
- π函数已知,就可以把状态作为输入,算出每个动作的概率,然后对其随机抽样,得到动作a
- Q已知,就可以评估当前状态下每个动作的好坏,从而选出Q 值最高的动作。