本文正在参加「金石计划」
导语
本系列笔记为b站Shusen Wang老师的强化学习课程笔记,整体按照老师讲课的思路来记录。本节课介绍强化学习中的一些基础概念和OpenAI发布的一个标准的实验库Gym。
概率论复习
随机变量
首先复习一下概率论中的随机变量的概念,随机变量是指其值取决于随机事件的输出的变量,例如抛一枚硬币,它的正面朝上和反面朝上的概率都是0.5。
通常使用小写字母表示随机变量的观测值,大写字母表示随机变量。
概率密度函数与概率质量函数
概率密度函数(Probability Density Function (PDF))意味着连续随机变量在某个点附近取值的可能性,例如高斯分布的概率密度函数如下:
概率质量函数(Probability Mass Function (PMF))则是离散随机变量取某个值的可能性,例如:
概率密度函数的积分和概率质量函数的求和为1。
期望
对于连续函数和离散函数的期望定义如下:
随机抽样
随机抽样可以通过从箱子中随机摸一个球,观测其颜色的例子理解。
术语
State与Action
以超级玛丽游戏为例,State就是状态,可以认为当前的状态就是屏幕上的这张画面(这里不严格区分Observation和State),而马里奥能采取的动作(向左、向右、向上)就是action。这里例子里面,马里奥就被称作Agent,在一个强化学习里面,动作是由谁做的,谁就是agent(智能体)。
Policy
Policy是策略,指的是在观察到当前的状态后,该做什么动,做出决策。在数学上,Policy是一个概率密度函数π(a∣s)pi(a|s)。例如,马里奥在当前状态下向左、向右、向上的概率分别是0.2,0.1和0.7。在执行时,将会按这个概率进行随机抽样,决定接下来的动作。
强化学习实质上就是在学习这个Policy函数。
Reward
奖励是指这个动作执行后对最后结果的影响,比如马里奥吃到一个金币奖励+1,打赢了一场游戏奖励+10000,打输了一场游戏奖励-10000.
State transition
状态转移指的是在旧状态下,agent采取一个action后,状态发生变化的过程。状态转移一般是随机的,这种随机性来源于环境。这种状态转移用函数p(s′∣s,a)p(s’|s,a)表示,这个状态转移函数是环境自己知道,而玩家是不知道的。
Agent environment interaction
当前状态是StS_t,Agent看到StS_t后会做出动作ata_t,做完动作后,环境会更新状态SS变成St+1S_{t+1},同时环境还会给Agent一个奖励rtr_t
两种随机性
强化学习中的随机性有两个来源:
- 动作具有随机性。动作是根据Policy进行随机抽样的。
- 状态转移具有随机性。给定StS_t和动作AtA_t,环境会随机生成一个新的状态St+1S_{t+1}.
利用强化学习来打游戏
强化学习来打游戏实际上就是由Policy来决定每个时刻的动作输出At来进行游戏,直到游戏胜利或失败结束。整体的轨迹Trajectory就是一系列(state, action, reward)的序列。
Return
Return翻译为回报,它的另一个名字是Cumulative future reward(未来的累计奖励)。其定义如下:
但是,RtR_t和Rt+1R_{t+1}同样重要吗?可以思考这样一个问题,假如现在给你100块钱,和明年这个时候给你100块钱,你会选择哪个?理性的人都会选择现在得到100块钱,因为未来具有很大的不确定性。所以,RtR_t应该比Rt+1R_{t+1}更加重要。因此,强化学习中普遍采用折扣回报,即对未来的奖励打折扣,进行累加,
这里的折扣率记作γgamma,这个值位于0与1之间,这是个超参数,会对最终的结果有影响。
Return也具有随机性,这是由于Reward是依赖于SS和AA的,而这两者都是随机变量。
这里需要区分一下,UtU_t是随机变量、utu_t是观测值。
Value Function
Action-value Function
UtU_t是一个随机变量,对UtU_t求期望可以得到一个数,记作Qπ(st,at)Q_{pi}(s_t,a_t)。这个期望是如何求的呢?
我们将UtU_t当做未来的动作A和状态S的函数,而动作AA和状态SS都具有随机性,其概率密度函数分别是π(a∣s)pi(a|s)和p(s′∣s,a)p(s’|s,a),期望就是对这两个随机变量求的,把这些随机变量用积分积掉。除了st和at,其余的所有变量都被积掉了。这里被积掉的变量是At+1,At+2A_{t+1}, A_{t+2}等动作和St+1,St+2S_{t+1},S_{t+2}等状态。
Qπ(st,at)Q_{pi}(s_t,a_t)是关于st和at的函数,因为其他变量都被积掉了,只有sts_t和ata_t作为观测值被留了下来。函数Qπ(st,at)Q_{pi}(s_t,a_t)也与Policy函数πpi有关,因为积分的时候,Policy函数不一样,就会导致Qπ(st,at)Q_{pi}(s_t,a_t)不一样。
Qπ(st,at)Q_{pi}(s_t,a_t)函数即Action-Value Function,它的直观意义是在Policy函数为πpi的条件下,在状态st时做动作at的好坏。
由于Qπ(st,at)Q_{pi}(s_t,a_t)函数还是跟πpi有关,那么有什么方法可以去掉πpi呢,我们可以对不同的πpi求最大化,即
这个也称为最优动作价值函数(Optimal action-value Function)。
State-value Function
状态价值函数Vπ(si)V_{pi}(s_i)是对动作价值函数中将动作视为随机变量得到的数学期望,得到的Vπ(si)V_{pi}(s_i)只与πpi和s有关,那么Vπ(si)V_{pi}(s_i)有什么直观意义呢?
Vπ(si)V_{pi}(s_i)可以告诉我们当前的局势好不好。假如我们根据Policy函数πpi在下围棋,让Vπ(si)V_{pi}(s_i)看一下棋盘,Vπ(si)V_{pi}(s_i)就会告诉我们当前的胜算多大,是快赢了还是快输了,还是不分高下。这里的期望是对AA求的,A的概率密度函数是πpi,根据AA的定义,它可能是离散的,比如动作只有上下左右,那么就是求连加。有时候,动作AA是个连续变量,比如自动驾驶汽车方向盘的角度,那么就是求积分。
小结
总结一下,一共有两种价值函数,分别是:
- 动作价值函数:Qπ(st,at)Q_{pi}(s_t,a_t)与Policy函数πpi、动作aa和状态ss有关,它是UtU_t的条件期望,这里的UtU_t是个随机变量,它等于未来所有奖励的加权求和。求期望的操作会把所有变量都消除,只留下sts_t和ata_t这两个变量。函数Qπ(st,at)Q_{pi}(s_t,a_t)可以告诉我们,在使用Policy πpi,如果处在状态s时,做出动作aa是否明智,即其给动作aa打分。
- 状态价值函数:Vπ(si)V_{pi}(s_i)是用积分把Qπ(st,at)Q_{pi}(s_t,a_t)中的动作A消掉,得到的函数只与Policy πpi和状态s有关,如果使用Policy函数πpi,Vπ(si)V_{pi}(s_i)可以评价当前状态是好是坏。Vπ(si)V_{pi}(s_i)还能用来评价Policy函数πpi的好坏,如果下面这个期望越大,证明πpi越好。
使用强化学习打游戏
有两种方式利用AI控制Agent打游戏:
- 学习Policy函数πpi
- 学习最优动作价值函数Q⋆(s,a)Q^{star}(s,a)
OpenAI Gym是最经典的强化学习游戏平台,有以下几类任务:
- 经典控制问题:如移动小车保持杆子竖直;
- Atari Games:如消除砖块;
- 连续控制问题:如控制蚂蚁走路;
CartPole问题举例
首先,需要按照Gym的官方文档安装Gym这个库,之后,通过下面的代码可以导入和新建一个CartPole游戏。之后,使用下面的代码可以进行这个游戏。
总结
本节课介绍了强化学习中的基本概念,和使用Gym库来进行强化学习实验。