强化学习基础

link:https://datawhalechina.github.io/easy-rl/

强化学习概述

**强化学习(reinforcement learning,RL)**讨论的问题是智能体(agent)怎么在复杂、不确定的环境(environment)中最大化它能获得的奖励。

image-20250721194750813

强化学习和监督学习的区别如下。

(1)强化学习输入的样本是序列数据,而不像监督学习里面样本都是独立的。

(2)学习器并没有告诉我们每一步正确的动作应该是什么,学习器需要自己去发现哪些动作可以带来 最多的奖励,只能通过不停地尝试来发现最有利的动作。

(3)智能体获得自己能力的过程,其实是不断地试错探索(trial-and-error exploration)的过程。探索 (exploration)和利用(exploitation)是强化学习里面非常核心的问题。其中,探索指尝试一些新的动作, 这些新的动作有可能会使我们得到更多的奖励,也有可能使我们“一无所有”;利用指采取已知的可以获得最多奖励的动作,重复执行这个动作,因为我们知道这样做可以获得一定的奖励。因此,我们需要在探索和利用之间进行权衡,这也是在监督学习里面没有的情况。

(4)在强化学习过程中,没有非常强的监督者(supervisor),只有奖励信号(reward signal),并且奖励信号是延迟的,即环境会在很久以后告诉我们之前我们采取的动作到底是不是有效的。因为我们没有得 到即时反馈,所以智能体使用强化学习来学习就非常困难。当我们采取一个动作后,如果我们使用监督学习,我们就可以立刻获得一个指导,比如,我们现在采取了一个错误的动作,正确的动作应该是什么。而在强化学习里面,环境可能会告诉我们这个动作是错误的,但是它并没有告诉我们正确的动作是什么。而且更困难的是,它可能是在一两分钟过后告诉我们这个动作是错误的。所以这也是强化学习和监督学习不同的地方

序列决策

强化学习研究的问题是智能体与环境交互的问题

智能体把它的动作输出给环境,环境取得这个动作后会进行下一步,把下一步的观测与这个动作带来的奖励返还给智能体。这样的交互会产生很多观测,智能体的目的是从这些观测之中学到能最大化奖励的策略。

image-20250721195205025

在与环境的交互过程中,智能体会获得很多观测。针对每一个观测,智能体会采取一个动作,也会得到一个奖励。所以历史是观测、动作、奖励的序列:

Ht=o1,a1,r1,...,ot,at,rtH_t=o_1,a_1,r_1,...,o_t,a_t,r_t

我们可以把整个游戏的状态看成关于这个历史的函数:

St=f(Ht)S_t=f(H_t)

动作空间

不同的环境允许不同种类的动作。在给定的环境中,有效动作的集合经常被称为动作空间(action space)

组成成分和类型

对于一个强化学习智能体,它可能有一个或多个如下的组成成分。

  • 策略(policy)。智能体会用策略来选取下一步的动作。
  • 价值函数(value function)。我们用价值函数来对当前状态进行评估。价值函数用于评估智能体进 入某个状态后,可以对后面的奖励带来多大的影响。价值函数值越大,说明智能体进入这个状态越有利。
  • 模型(model)。模型表示智能体对环境的状态进行理解,它决定了环境中世界的运行方式。

策略是智能体的动作模型,它决定了智能体的动作。它其实是一个函数,用于把输入的状态变成动作。策略可分为两种:随机性策略和确定性策略。

  • 随机性策略:π(as)=p(at=ast=s)\pi(a|s)=p(a_t=a|s_t=s)
  • 确定性策略:智能体直接采用最有可能的策略,a=argmax(as)a^*=\arg \max(a|s)

价值函数的值是对未来奖励的预测,我们用它来评估状态的好坏

Vπ(s)=Eπ[Gtst=s]=Eπ[Σk=0γkrt+k+1st=s]V_\pi (s)=E_\pi[G_t|s_t=s]=E_\pi[\Sigma_{k=0}^\infty\gamma ^k r_{t+k+1}|s_t=s]

还有一种价值函数:Q 函数。Q 函数里面包含两个变量:状态和动作

Qπ(s,a)=Eπ[Gtst=s,at=a]=Eπ[Σk=0γkrt+k+1st=s,at=a]Q_\pi(s,a)=E_\pi[G_t|s_t=s,a_t=a]=E_\pi[\Sigma_{k=0}^\infty\gamma ^k r_{t+k+1}|s_t=s,a_t=a]

下一步的状态取决于当前的状态以及当前采取的动作。它由状态转移概率和奖励函数两个部分组成。状态转移概率即

pssa=p(st+1=sst=s,at=a)p_{ss^\prime}^a=p(s_{t+1}=s^\prime|s_t=s,a_t=a)

奖励函数是指我们在当前状态采取了某个动作,可以得到多大的奖励

R(s,a)=E[rt+1st=s,at=a]R(s,a)=E[r_{t+1}|s_t=s,a_t=a]

当我们有了策略、价值函数和模型3个组成部分后,就形成了一个马尔可夫决策过程(Markov decision process)

image-20250721200032149

根据智能体学习的事物不同,我们可以把智能体进行归类。**基于价值的智能体(value-based agent)**显式地学习价值函数,隐式地学习它的策略。策略是其从学到的价值函数里面推算出来的。**基于策略的智能体(policy-based agent)**直接学习策略,我们给它一个状态,它就会输出对应动作的概率

学习与规划

学习(learning)和规划(planning)是序列决策的两个基本问题。

在强化学习中,环境初始时是未知的,智能体不知道环境如何工作,它通过不断地与环境交互,逐渐改进策略。

实验

安装环境

1
2
3
conda create -n rl-env python=3.8 -y
conda activate rl-env

安装gym库

1
2
pip install gym==0.25.2
pip install pygame

一个简单的强化学习框架:

1
2
3
4
5
6
7
8
import gym 
env = gym.make("Taxi-v3")
observation = env.reset()
agent = load_agent()
for step in range(100):
action = agent(observation)
observation, reward, done, info = env.step(action)

马尔可夫决策过程

image-20250722200503593

马尔可夫过程

在随机过程中,**马尔可夫性质(Markov property)**是指一个随机过程在给定现在状态及所有过去状态情况下,其未来状态的条件概率分布仅依赖于当前状态。

p(Xt+1=xt+1X0:t=x0:t)=p(Xt+1=xt+1Xt=xt)p(X_{t+1}=x_{t+1}|X_{0:t}=x_{0:t})=p(X_{t+1}=x_{t+1}|X_{t}=x_{t})

X0:tX_{0:t}表示变量集合X0,X1,..,Xt,x0:tX_0,X_1,..,X_t,x_{0:t}为在状态空间中的状态序列。马x0,x1,...,xtx_0,x_1,...,x_t马尔可夫性质也可以描述为给定当前状态时,将来的状态与过去状态是条件独立的

马尔可夫过程是一组具有马尔可夫性质的随机变量序列s1,...,sts_1,...,s_t,其中下一个时刻的状态st+1s_{t+1}只取决于当前状态 sts_t。我们设状态的历史为 ht=s1,s2,...,sth_t={s_1,s_2,...,s_t}hth_t包含了之前的所有状态),则马尔可夫过程满足条件:

p(st+1st)=p(st+1ht)p(s_{t+1}|s_t)=p(s_{t+1}|h_t)

离散时间的马尔可夫过程也称为马尔可夫链(Markov chain)

image-20250722200959167

图中四个状态之间相互转移

可以用状态转移矩阵 P来描述状态转移p(st+1=sst=s):p(s_{t+1}=s^\prime|s_t=s):

P=(p(s1s1)p(s2s1)p(sNs1)p(s1s2)p(s2s2)p(sNs2)p(s1sN)p(s2sN)p(sNsN))P = \begin{pmatrix} p(s_1 \mid s_1) & p(s_2 \mid s_1) & \cdots & p(s_N \mid s_1) \\ p(s_1 \mid s_2) & p(s_2 \mid s_2) & \cdots & p(s_N \mid s_2) \\ \vdots & \vdots & \ddots & \vdots \\ p(s_1 \mid s_N) & p(s_2 \mid s_N) & \cdots & p(s_N \mid s_N) \end{pmatrix}

状态转移矩阵类似于条件概率(conditional probability)

马尔可夫奖励过程

马尔可夫奖励过程(Markov reward process, MRP)是马尔可夫链加上奖励函数。在马尔可夫奖励过程中,状态转移矩阵和状态都与马尔可夫链一样,只是多了奖励函数(reward function)

奖励函数RR是一个期望,表示当我们到达某一个状态的时候,可以获得多大的奖励。这里另外定义了折扣因子γ\gamma

范围(horizon) 是指一个回合的长度(每个回合最大的时间步数)

**回报(return)**可以定义为奖励的逐步叠加

Gt=rt+1+γrt+2+γ2rt+3+γ3rt+4+....+γTt1rTG_t=r_{t+1}+\gamma r_{t+2}+\gamma^2 r_{t+3} + \gamma^3 r_{t+4}+....+\gamma^{T-t-1} r_{T}

其中,TT是最终时刻,γ\gamma是折扣因子,越往后得到的奖励,折扣越多

对于马尔可夫奖励过程,状态价值函数被定义成回报的期望,即

Vt(s)=E[Gtst=s]=E[rt+1+γrt+2+γ2rt+3+γ3rt+4+....+γTt1rTst=s]V^t(s)=E[G_t|s_t=s] \\ =E[r_{t+1}+\gamma r_{t+2}+\gamma^2 r_{t+3} + \gamma^3 r_{t+4}+....+\gamma^{T-t-1} r_{T}|s_t=s]

我们使用折扣因子的原因如下。第一,有些马尔可夫过程是带环的,它并不会终结,我们想避免无穷的奖励。第二,我们并不能建立完美的模拟环境的模型,我们对未来的评估不一定是准确的,我们不一定完全信任模型,因为这种不确定性,所以我们对未来的评估增加一个折扣

从价值函数里面推导出贝尔曼方程(Bellman equation)

V(s)=R(s)即时奖励+γsSp(ss)V(s)未来奖励的折扣总和V(s) = \underbrace{R(s)}_{\text{即时奖励}} + \gamma \underbrace{\sum_{s' \in S} p(s' \mid s) V(s')}_{\text{未来奖励的折扣总和}}

ss' 可以看成未来的所有状态,

p(ss)p(s' \mid s) 是指从当前状态转移到未来状态的概率。
V(s)V(s') 代表的是未来某一个状态的价值。我们从当前状态开始,有一定的概率去到未来的所有状态,所以我们要把 p(ss)p(s' \mid s) 写上去。我们得到了未来状态后,乘一个 γ\gamma,这样就可以把未来的奖励打折扣。
γsSp(ss)V(s)\gamma \sum_{s' \in S} p(s' \mid s) V(s') 可以看成未来奖励的折扣总和(discounted sum of future reward)

image-20250722202452561

我们可以把贝尔曼方程写成矩阵的形式:

\

\begin{pmatrix}
V(s_1) \
V(s_2) \
\vdots \
V(s_N)
\end{pmatrix}

\begin{pmatrix}
R(s_1) \
R(s_2) \
\vdots \
R(s_N)
\end{pmatrix}
+
\gamma
\begin{pmatrix}
p(s_1 \mid s_1) & p(s_2 \mid s_1) & \cdots & p(s_N \mid s_1) \
p(s_1 \mid s_2) & p(s_2 \mid s_2) & \cdots & p(s_N \mid s_2) \
\vdots & \vdots & \ddots & \vdots \
p(s_1 \mid s_N) & p(s_2 \mid s_N) & \cdots & p(s_N \mid s_N)
\end{pmatrix}
\begin{pmatrix}
V(s_1) \
V(s_2) \
\vdots \
V(s_N)
\end{pmatrix}

马尔可夫决策过程

马尔可夫决策过程满足:

p(st+1st,at)=p(st+1ht,at)p(s_{t+1}|s_t,a_t)=p(s_{t+1}|h_t,a_t)

概率代表在所有可能的动作里面怎样采取行动,比如可能有 0.7 的概率往左走,有 0.3 的概率往右走,这是一个概率的表示

因为我们现在已知策略函数,也就是已知在每一个状态下,可能采取的动作的概率,所以我们就可以直接把动作进行加和,去掉 aa,这样我们就可以得到对于马尔可夫奖励过程的转移,这里就没有动作,即

Pπ(ss)=Σπ(as)p(ss,a)P_\pi(s^\prime|s)=\Sigma \pi (a|s)p(s^\prime|s,a)

对于奖励函数,我们也可以把动作去掉,这样就会得到类似于马尔可夫奖励过程的奖励函数,即

rπ(s)=Σπ(as)R(s,a)r_\pi(s)=\Sigma \pi(a|s)R(s,a)

马尔可夫决策过程里面的状态转移与马尔可夫奖励过程以及马尔可夫过程的状态转移的差异如图 所示

image-20250722202919662

  • 马尔可夫奖励过程的状态转移是直接决定的
  • 马尔可夫决策过程,中间多了一层动作aa

马尔可夫决策过程中的价值函数可定义为

Vπ(s)=Eπ[Gtst=s]V_\pi(s)=E_\pi[G_t|s_t=s]

这里我们另外引入了一个 Q 函数(Q-function)。Q 函数也被称为动作价值函数(action-value function)

Qπ(s,a)=Eπ[Gtst=s,at=a]Q_\pi(s,a)=E_\pi[G_t|s_t=s,a_t=a]

这里的期望其实也是基于策略函数的。所以我们需要对策略函数进行一个加和,然后得到它的价值

Vπ(s)=Σπ(as)Qπ(s,a)V_\pi(s)=\Sigma \pi(a|s)Q_\pi(s,a)

备份类似于自举之间的迭代关系,对于某一个状态,它的当前价值是与它的未来价值线性相关的

image-20250722203235654

第一层加和是对叶子节点进行加和,往上备份一层,我们就可以把未来的价值(ss^\prime的价值)备份到黑色的节点。 第二层加和是对动作进行加和,得到黑色节点的价值后,再往上备份一层,就会得到根节点的价值,即当前状态的价值

Vπ(s)=Σπ(as)(R(s,a)+γΣp(ss,a)Vπ(s))V_\pi(s)=\Sigma \pi(a|s)(R(s,a)+\gamma\Sigma p(s^\prime|s,a)V_\pi(s^\prime))

image-20250722203721289

image-20250722203749649

预测(prediction)和控制(control)是马尔可夫决策过程里面的核心问题。预测(评估一个给定的策略)的输入是马尔可夫决策过程<S,A,P,R,γ><S,A,P,R,\gamma> 和策略π\pi

输出是价值函数 VπV_\pi。预测是指给定一个马尔可夫决策过程以及一个策略π\pi^* ,计算它的价值函数,也就是计算每个状态的价值。

推荐斯坦福大学的一个网页

最佳价值函数的定义为

V(s)=maxVπ(s)V^*(s)=\max V_\pi(s)

最佳策略

π(s)=argmaxVπ(s)\pi^*(s)=\arg \max V_\pi(s)

策略迭代由两个步骤组成:策略评估和策略改进(policy improvement)

image-20250722205019029