强化学习(一)

前言

有将近一个多月没有更新博客了,从7月20几号开始暑假休息了两周,去青岛看了看大海,紧接着假期结束就忙着一个实验室要联调的课题,然后是去成都联调了一周,现在回到北京正在隔离一周😂。确实是没时间来更新博客了。最近也是因为课题组相关项目的原因,需要使用强化学习相关算法,所以这里也一边学习一边记录了。

废话少说,本篇博客主要是讲强化学习中的基本概念,并引出强化学习控制中的两种学习方法:基于策略的学习和基于价值的学习。

强化学习概念

首先什么是强化学习呢?这里摘取Wiki中的相关介绍,强化学习(Reinforcement Learning)是机器学习的一个分支,是除了「监督学习」和「非监督学习」之外的第三种基本的机器学习方法。其灵感来源于心理学中的行为主义理论,即有机体如何在环境给予的奖励或惩罚的刺激下,逐步形成对刺激的预期,产生能获得最大利益的习惯性行为。

简单的来说,强化学习是用来研究「智能体」(Agent)如何更好的做出决策的,智能体为了更好的决策(做出「动作」(Action)),需要不断的和「环境」(Environment)进行交互,环境会通过「奖励」(Reward)的方式来告诉智能体决策的好坏。这不同于监督学习,监督学习有点像是人为的给出正确答案,让你去学(拟合),而强化学习则是只告诉你做的好不好,或者说有多少收益,正确的答案需要你一步步去优化策略得到。

马尔可夫决策过程

这里用走迷宫作为例子,一个智能体从迷宫的起点开始需要找到迷宫中的宝藏,迷宫中也有很多陷阱,当智能体找到宝藏是会得到 +1 的奖励,踩到陷阱时智能体死亡,这时候会得到 -1 的奖励,两种情况下游戏都会结束。

为了更好的描述这个游戏过程,我们可以这样建模,智能体处于的单元格称为状态 S ,迷宫中有多少个智能体可处的单元格,就有多少种状态;智能体在某个状态时,可以选择上下左右移动,这个移动称为动作,用 A 表示,而根据状态做出动作的逻辑称为策略,用 π\pi 表示,强化学习的最终目的是学习到一个最优的策略;智能体在执行一次动作和环境交互后,会处在一个新的状态(新的单元格),并会获得相应奖励 R ,如果踩到陷阱则 R = -1,如果找到宝藏则 R = +1,否则 R = 0

这样每一局游戏会形成以下序列:

S0,A0,R0,S1,A1,R1,...,ST,AT,RTS_0, A_0, R_0, S_1, A_1, R_1, ... ,S_T, A_T, R_T

含义为智能体处于 S0S_0 状态根据策略 π\pi 做出动作 A0A_0,后获得奖励 R0R_0 并转移到状态 S1S_1,然后继续根据策略执行动作 A1A_1,一直到最终状态 STS_T。这里的策略 π\pi 可以看作是某个状态下执行不同动作的概率。如在某个状态 s 下,各有 0.25 概率执行向上、向下、向左和向右的动作,那么有:

π("up"s)=π("down"s)=π("left"s)=π("right"s)=0.25\pi("up"|s) =\pi("down"|s) =\pi("left"|s) = \pi("right"|s) = 0.25

当然也有可能策略是固定的,处在某个状态 s 时一定执行向右的动作。

奖励(Reward) 和回报(Return)

这是两个比较容易搞混的概念,奖励(Reward)是 tt 时刻智能体和环境交互时得到的及时反馈 RtR_t,而回报(Return) GtG_t 则是「未来累计奖励」,其定义为:

Gt=Rt+γRt+1+γ2Rt+2+γ3Rt+3+...G_t = R_t + \gamma R_{t+1} + \gamma ^ 2 R_{t+2} + \gamma ^ 3 R_{t+3} + ...

这里的 γ\gamma 是一个折扣因子,也就是说智能体会考虑未来的奖励,但是更看重接近于当前时刻的奖励,这很好理解。对于人也是这样,相比于 1 年后得到 100元,立即得到 100 元更有吸引力。

回报 GtG_t 显然也是一个随机变量,随机性来源于未知的奖励 Rt+1,Rt+2...R_{t+1}, R_{t+2}...,而这些未来的奖励又是和未来所有的状态 St+1,St+2...S_{t+1}, S_{t+2}... 及动作 At+1,At+2...A_{t+1}, A_{t+2}... 相关的。如果智能体能够知道处于某个状态时的回报,那么智能体就能做出很好的决策了。但实际上这是不可能的,因为回报是个随机变量,这个随机性来源于策略和环境。我们只有在一幕智能体和环境交互完成之后才能够计算出这个回报。

「策略函数」 π\pi 是个随机变量,也就是说在状态 ss 下执行动作 aa 的概率是 π(as)\pi(a|s)

P(A=aS=s)=π(as)\mathbb{P}(A=a|S=s) = \pi(a|s)

而执行动作之后,状态转移也是随机的,转移至状态 ss' 的概率由「状态转移函数」决定,这个状态转移函数一般我们是无从得知的:

P(S=sS=s,A=a)=p(ss,a)\mathbb{P}(S=s'|S=s, A=a) = p(s'|s,a)

动作价值函数和状态价值函数

为了消除这个随机性,我们定义「动作价值函数」(action-value function):

Qπ(st,at)=E[GtSt=st,At=at]Q_\pi(s_t, a_t) = \mathbb{E}[G_t | S_t=s_t, A_t=a_t]

也就是对未来时刻的动作和状态转移求期望,这样 QπQ_\pi当前状态和动作有关。动作价值函数反映了当前状态 ss 下执行动作 aa 的期望收益,也就是说 QπQ_\pi 可以用来评价当前状态下各个动作是好还是坏。

实际上,QπQ_\pi 还和策略 π\pi 有关系,因为求期望时需要用到 π\pi,也就是说不同策略 π\pi 会有不同的动作价值函数,我们可以找到使动作价值函数最大化的策略函数 π\pi^*,得到最优动作价值函数

Q(st,at)=maxπQπ(st,at)Q^*(s_t, a_t) = \max_\pi Q_\pi(s_t,a_t)

这个最优动作价值函数下的策略也就是最优策略,这很容易理解,这个策略是的每个状态下执行动作能够得到比其它策略更大化的期望回报。这个 QQ^* 非常关键,如果我们能够求出 QQ^*,智能体就能够根据它做出最优决策了。实际上有相当一部分强化学习算法就是通过迭代的方法去近似算出这个 QQ^*

动作价值函数对动作求期望可以将动作消除,得到只和当前状态有关系「状态价值函数」(state-value function):

Vπ(st)=EA[Qπ(s,A)]=Σaπ(ast)Qπ(st,a)V_\pi(s_t) = \mathbb{E}_A[Q_\pi(s, A)]=\Sigma_a\pi(a|s_t) Q_\pi(s_t,a)

如果动作不是离散的,那么上述求和需要改成积分。

状态价值函数将动作消除了,因此其只和策略以及状态有关系,其反映了智能体当前所处的状态好坏,如果是下围棋,它反映了当前局势好坏,我们是不是快要赢了或输了。

强化学习控制

为了对智能体进行控制,一般有两种方法。

第一种是直接学习到一个很优的策略函数 π(as)\pi(a|s) ,有了这个策略函数,我们只需要在每一状态根据这个策略函数来进行决策即可。这种学习在强化学习中称为基于策略的学习(policy-based learning)。

第二种是学习到最优动作价值函数 Q(s,a)Q^*(s,a),因为其反映了当前状态下每个动作的预期回报值。有了这个最优动作价值函数,对于每个状态 sts_t,我们可以选出使得期望回报最大的动作 aa

a=arg maxaQ(s,a)a = \argmax_aQ^*(s,a)

这种学习方式在强化学习中称为基于价值的学习(value-based learning)。

具体的学习方法和算法将在之后的博客中介绍。

参考文献

  1. https://www.youtube.com/user/wsszju
  2. https://zh.wikipedia.org/wiki/%E5%BC%BA%E5%8C%96%E5%AD%A6%E4%B9%A0