强化学习基础
强化学习的终极目标是让一个智能体(Agent)通过与环境(Environment)的持续交互,学会一个最优策略(Policy),从而获得最大化的累积奖励(Cumulative Reward)。
基本概念
1. 智能体 (Agent)
- 学习者或决策者。例如:下棋的AI程序、自动驾驶汽车、玩游戏的角色。
2. 环境 (Environment)
- 智能体所处的外部世界,智能体与之交互的一切。例如:棋盘、道路、游戏界面。
3. 状态 (State, S)
- 环境在某一时刻的特定情况或配置。例如:棋盘上所有棋子的位置、汽车当前的坐标和速度。
- 注意:智能体有时无法看到完整状态,只能获得一个观测 (Observation),这通常被称为部分可观测环境。
4. 动作 (Action, A)
- 智能体在某个状态下可以做出的行为。例如:移动一个棋子、踩油门或刹车、按“向左”键。
- 动作空间 (Action Space):所有可能动作的集合。
5. 奖励 (Reward, R)
- 环境在智能体执行一个动作后,反馈给智能体的一个标量信号。这是智能体判断好坏的核心依据。
- 例如:赢得比赛(+100),吃掉豆子(+10),碰到敌人(-100)。
- 设计奖励函数是强化学习成功的关键,它定义了智能体需要完成的任务。
6. 策略 (Policy, π)
- 智能体的行为函数,是状态到动作的映射。它决定了在某个状态下应该采取什么动作。
- 可以看作是智能体的大脑。策略可以是确定性的(
a = π(s)),也可以是随机性的(π(a|s)表示在状态s下选择动作a的概率)。
7. 轨迹(trajectory):有时也称为 episode 或 rollout,是一系列State -> Action -> Reward的动作链。
$$
S_{1} \xrightarrow[r=0]{a_{2}} S_{2} \xrightarrow[r=0]{a_{3}} S_{5} \xrightarrow[r=0]{a_{3}} S_{8} \xrightarrow[r=1]{a_{2}} S_{9}
$$
8. 价值函数 (Value Function, V(s))
- 这是强化学习中最核心的概念之一。奖励代表的是即时好处,而价值函数代表的是长期好处。
- 状态价值函数 V(s):表示从状态
s开始,遵循某个策略π所能获得的预期累积奖励。 - 动作价值函数 Q(s, a):表示在状态
s下执行动作a后,再遵循策略π所能获得的预期累积奖励。 - 核心思想:一个动作可能带来很小的即时奖励,但能导向未来有巨大奖励的状态(高价值),那么这个动作总体上也是好的。例如,象棋中牺牲一个卒(负奖励)以获取局面优势(高价值状态)。
9. 模型 (Model)
- 智能体对环境动态变化规律的内部表示。模型预测环境下一步会变成什么样子。
- 例如:预测“在状态s下执行动作a,下一个状态s’是什么,以及会得到多少奖励”。
- 并非所有强化学习方法都需要模型。因此产生了两种主要方法:
- 基于模型 (Model-based):有环境模型,可以进行“想象”和规划。
- 无模型 (Model-free):没有环境模型,直接通过试错来学习策略或价值函数(如著名的Q-Learning, DQN)。
贝尔曼公式
令$G_t$代表一个轨迹的Return,即为:
$$
G_t = R_{t+1} + \gamma R_{t+2} + \gamma^2 R_{t+3} + …
$$
State Value
我们如何用一个值来衡量策略(policy)的好坏,答案就是State Value.
State value是从一个状态出发,得到的所有可能轨迹的平均Return,可以用State Value来指导优化所需要选用的策略。
那么State Value为:
$$
v_{\pi}(s) = E[G_t | S_t =s].
$$
Action Value
Action value是指从一个state出发,选用某个Action所得到的平均Return,可以用来评估某个Action的好坏。
那么Action Value为:
$$
q_{\pi}(s,a) = E\left[G_{t}|S_{t} = s, A_{t}=a\right]
$$
State value和Action Value的联系:
$$
\underbrace{\mathbb{E}[G_{t}\mid S_{t}=s]}_{v_{\pi}(s)}=\sum_{a\in\mathcal{A}}\underbrace{\mathbb{E}[G_{t}\mid S_{t}=s,A_{t}=a]}_{q_{\pi}(s,a)}\pi(a\mid s).
$$
即:
$$
v_{\pi}(s) = \sum_{a}\pi(a|s)q_{\pi}(s,a)
$$
如果知道action value,即可求解state value.
Bellman Equation
贝尔曼公式描述的是两个状态之间的state value之间的关系:
$G_t$和$G_{t+1}$的关系为:
$$
G_t = R_{t+1} + \gamma G_{t+1}
$$
那么有:
$$
\begin{aligned}
v_{\pi}(s) &= \mathbb{E}[G_{t} \vert S_{t} = s] \\
&= \mathbb{E}[R_{t+1} + \gamma G_{t+1} \vert S_{t} = s] \\
&= \mathbb{E}[R_{t+1} \vert S_{t} = s] + \gamma \mathbb{E}[G_{t+1} \vert S_{t} = s].
\end{aligned}
$$
- 第一项为状态$s$下的即时奖励期望。
- 第二项为状态$s$下的将来的奖励期望。
Elementwise form:
$$
\begin{aligned}
v_{\pi}(s) &= \sum_{a} {\pi}(a|s) \left[ \underbrace{\sum_{r}p(r|s,a)r + \gamma \sum_{s’}p(s’|s,a)v_{\pi}(s’)}_{q_{\pi}(s,a)}\right] \\
&= \sum_{a}\pi(a|s)q_{\pi}(s,a)
\end{aligned}
$$
Action-value function:
$$
q_{\pi}(s,a) = \sum_{r}p(r|s,a)r + \gamma \sum_{s’}p(s’|s,a)v_{\pi}(s’)
$$
如果知道state value,即可求解Action Value
Matrix form:
$$
\begin{align*}
v &= r + \gamma Pv \\
&= r + \gamma v’
\end{align*}
$$
其中$r$为即时奖励,$\gamma$为时间折扣,$P$为状态转移矩阵。
贝尔曼最优公式
对于每个状态$S$,策略$\pi^*$的State Value都大于其他任意策略$\pi$的State Value,即$\pi^*(s) \geq \pi(s)$,那么$\pi^*$即为最优策略。
Elementwise Form of BOE(Bellman Optimality Equation):
$$
\begin{align*}
v(s) &= \max_{\pi(s) \in \Pi(s)} \sum_{a \in \mathcal{A}} \pi(a|s) \left( \sum_{r \in \mathcal{R}} p(r|s, a) r + \gamma \sum_{s’ \in \mathcal{S}} p(s’|s, a) v(s’) \right) \\
&= \max_{\pi(s) \in \Pi(s)} \sum_{a \in \mathcal{A}} \pi(a|s) q(s, a)
\end{align*}
$$
其中$\pi(a|s)$为策略在某个状态下的动作概率,且$\pi(a|s)\geq0$,因此当$q(s,a)$取得最大值,采取动作$a$时,策略为最优策略。
值迭代和策略迭代
值迭代
假设值已知,求解所有可能Action的$q(s,a)$,通过最大的action value去更新策略,求解新的Value State。
两个步骤:
-
策略更新:
$$
\pi_{k+1} = arg \underset{\pi}{max}(r_{\pi} + \gamma P_{\pi}v_{k})
$$$v_{k}$是已知的(迭代开始时可以随意赋值)

-
价值更新:选定策略后,更新state value
$$
v_{k+1} = r_{\pi_{k+1}} + \gamma P_{\pi_{k+1}}v_{k}
$$

策略迭代
-
策略评估:
$$
v_{\pi_{k}} = r_{\pi_{k}} + \gamma P_{\pi_{k}}v_{\pi_{k}}
$$
策略$\pi_{k}$是已知的(随机选择策略),求解该策略的state value时,采用迭代的方法求解。

-
策略更新:
$$
\pi_{k+1} = arg \underset{\pi}{max}(r_{\pi} + \gamma P_{\pi}v_{\pi_{k}})
$$

截断的策略迭代
对比值迭代和策略迭代的步骤如下:在两个迭代算法中,假设第一次state value的值一致,那么可以同时更新相同的Action,再根据Action估计State Value时,两者差异有所体现(第4步的Value 求解),值迭代仅仅迭代一次,而策略迭代需要迭代无穷次才能求得最终的State Value($v_{\pi1}$)


策略迭代方法中,策略评估过程中,需要无穷步的迭代才能评估出策略价值,现实过程中无法实现,因此推出基于截断的策略迭代方法。
当截断步骤设置为1时,等同于值迭代。步骤为无穷时,等同于策略迭代。
三种迭代算法的收敛速度

Monte Carlo Method
值迭代和策略迭代是一个model-based的方法,这个model具体指的是马尔科夫决策过程(MDP)的核心元素:
- 状态转移概率 $P(s′∣s,a)$:在状态 s下执行动作 a后,环境转移到状态 s’的概率是多少。
- 奖励函数 $R(s,a,s′)$:在状态 s下执行动作 a并转移到状态 s’ 后,能获得的即时奖励是多少。
MC Basic
主要就是将策略迭代算法变成无模型方法。
策略迭代算法中,第一步是需要评估策略价值,第二步选择$q(s,a)$最大的策略作为更新策略。
在下面的表达式中,我们不依赖于模型计算动作价值:
$$
q_{\pi_{k}}(s|a) = E[G_{t}| S_{t}=s, A_{t} = a]
$$
因此,我们可以利用Monte Carlo方法来计算动作价值:
-
从状态和动作$(s,a)$出发,在初始策略$\pi_{0}$下,生成一个轨迹。
-
计算该轨迹的价值:
$$
q_{\pi_{k}}(s|a) = E[G_{t}| S_{t}=s, A_{t} = a]
$$ -
采样多条轨迹,然后求期望
$$
q_{\pi_{k}}(s|a) = E[G_{t}| S_{t}=s, A_{t} = a] \approx \frac{1}{N}\sum_{i=1}^{N}g^{i}(s,a)
$$

缺点:
- 效率比较低,需要多次采样大量轨迹
- 轨迹长度需要足够长,否则距离较远的状态没有价值
- 没有充分利用采样轨迹信息
MC Exploring Starts
每条轨迹中包含了以其他状态和动作为起点的轨迹,该方法对这些数据进行了利用,提高了效率。
- 方法一:收集完所有轨迹后,便利所有state-action pair,计算平均价值,该方法需要等所有的轨迹收集完,效率低!
- 方法二:每收集完一个轨迹,立即计算action value,更新策略。(可以收敛)
MC $\varepsilon$-Greedy
$\varepsilon$-greedy policy:
$$
\pi(a|s)=
\begin{cases}
1-\frac{\varepsilon}{\vert\mathcal{A}(s)\vert}(\vert\mathcal{A}(s)\vert - 1) &\text{ for the greedy actions.}
\\
\frac{\varepsilon}{\vert\mathcal{A}(s)\vert} &\text{ for the other }\vert\mathcal{A}(s)\vert - 1\text{ actions.}
\end{cases}
$$
Where $\varepsilon \in [0,1]$ and $\vert\mathcal{A}\vert$ is the number of actions.
- 该方法保证了greedy action总是比其他的动作概率大
- $\varepsilon$-greedy平衡了利用和探索(exploitaion and exploration)
MC $\varepsilon$-Greedy 在MC RL algorithm中使用时,在估计完action value之后,需要根据最大的Action Value来更新策略,而MC Exploring Starts是贪婪策略,直接选择action value最大的策略进行更新,但该方法需要添加一些随机更新策略进来:
$$
\pi_{k+1}(a|s)=
\begin{cases}
1-\frac{|\mathcal{A}(s)|-1}{|\mathcal{A}(s)|}\varepsilon, &a=a_{k}^{*},
\\
\frac{1}{|\mathcal{A}(s)|}\varepsilon, &a\neq a_{k}^{*}.
\end{cases}
$$
使用$\varepsilon$-greedy policy进行采样的话,$\varepsilon$的值不能设置太大,否则最终得到的策略与greedy策略得到的最有策略不一致。
随机近似与梯度下降
Stochastic Approximation and Stochastic Gradient Descent.
RM(Robbins-Monro)算法
解决$g(w)=0$的RM算法如下:
$$
\begin{equation}
w_{k+1}=w_{k}-a_{k}\tilde{g}(w_{k},\eta_{k}),\qquad k=1,2,3,\ldots
\end{equation}
$$
其中$w_k$是根的第$k$次估计,$\tilde{g}(w_{k},\eta_{k})$是第$k$次带噪观测值,$a_k$是正的系数。
此算法不需要知道公式,只需要知道输入和输出。
随机梯度下降(Stochastic gradient descent)
解决如下问题:
$$
\min_{w} J(w) = \mathbb{E}[f(w, X)]
$$
其中$w$ 是待优化的参数,$X$ 是一个随机变量。
梯度下降(GD)
$$
w_{k+1} = w_k - \alpha_k \nabla_w J(w_k) = w_k - \alpha_k \mathbb{E}[\nabla_w f(w_k, X)]
$$
随机梯度下降算法要求解梯度的期望值,而在实践中,这基本无法得到。
批量梯度下降(BGD)
另一种方法是收集大量独立同分布的样本来近似 $X$ 的期望值,即:
$$
\mathbb{E}[\nabla_{w} f(w_{k},X)]\approx\frac{1}{n}\sum_{i=1}^{n}\nabla_{w} f(w_{k},x_{i}).
$$
即有:
$$
w_{k+1}=w_{k}-\frac{\alpha_{k}}{n}\sum_{i=1}^{n}\nabla_{w} f(w_{k},x_{i}).
$$
此方法需要大量采样,采样完成后才能更新一次$w$,因此在实际中也无法高效使用。
随机梯度下降(SGD)
对BGD算法,让$n=1$,则有:
$$
w_{k+1} = w_k - \alpha_k \nabla_w f(w_k, x_k)
$$
时序差分方法
当前基于MC或者DP动态规划的强化学习方法有如下问题:
| 方法 | 核心局限 | 真实场景中的问题 |
|---|---|---|
| 蒙特卡洛(MC) | 必须等轨迹完全结束(拿到完整回报 $G_t$)才能更新价值 | 1. 长轨迹场景(如游戏、机器人导航)等待成本高; 2. 无终止状态(如持续运行的系统)无法计算完整回报; 3. 增量更新效率低(只能轨迹结束后一次性更新)。 |
| 动态规划(DP) | 依赖环境的完整模型($P(s’|s,a), R(s,a,s’)$) | 1. 真实环境(如自动驾驶、推荐系统)无法精准建模; 2. 模型复杂时计算量爆炸(如高维状态空间)。 |
因此,TD的解决思路为:不等待完整轨迹(突破 MC 局限)、不依赖环境模型(突破 DP 局限),而是用 “即时奖励 + 下一状态的预估价值” 替代 “完整回报”,实现每一步交互后都能增量更新价值。
求解state value的TD算法
求解State Value的TD算法只是估计某个策略的State Value,需要结合Policy Improvement才能得到最优策略
观测的数据为:$(s_0, r_1, s_1, … , s_t, r_{t+1},s_{t+1}, …)$
TD算法
$$
\begin{aligned}
v_{t+1}(s_t) &= v_t(s_t) - \alpha_t(s_t) [v_t(s_t) - (r_{t+1} + \gamma v_t(s_{t+1}))],\\
v_{t+1}(s) &= v_t(s), \quad \text{ for all } s \neq s_t,
\end{aligned}
$$
其中,$t=0,1,2,…$, $v_t(s_t)$为t时刻策略$v_\pi(s_t)$的state value估计。$\alpha_{t}(s_t)$为$t$时刻状态$s_t$的学习率。
为什么会这样设计?从state value的定义可知
$$
\begin{align}
v_{\pi}(s) &= \mathbb{E}\left[ R_{t+1} + \gamma G_{t+1} \mid S_t = s \right], \quad s \in \mathcal{S}. \\
&= \mathbb{E}\left[ R_{t+1} + \gamma v_{\pi}(S_{t+1}) \mid S_t = s \right], \quad s \in \mathcal{S}.
\end{align}
$$
其中:
$$
\mathbb{E}\left[ G_{t+1} \mid S_t = s \right] = \sum_{a} \pi(a \mid s) \sum_{s’} p(s’ \mid s, a) v_{\pi}(s’) = \mathbb{E}\left[ v_{\pi}(S_{t+1}) \mid S_t = s \right].
$$
上式也被称为贝尔曼期望公式。
于是,我们定义state $s_t$的函数为:
$$
g(v_\pi(s_t)) \doteq v_\pi(s_t) - \mathbb{E}\left[ R_{t+1} + \gamma v_\pi(S_{t+1}) \mid S_t = s_t \right].
$$
那么对于state $s_t$有:
$$
g(v_\pi(s_t)) = 0
$$
利用RM算法求解上式:
-
$g(v_\pi(s_t))$的带噪观测值为:
$$
\begin{aligned}
\tilde{g}(v_\pi(s_t)) &= v_\pi(s_t) - \left[ r_{t+1} + \gamma v_\pi(s_{t+1}) \right] \\\\
&= \underbrace{\left( v_\pi(s_t) - \mathbb{E}\left[ R_{t+1} + \gamma v_\pi(S_{t+1}) \mid S_t = s_t \right]\right) }_{g(v_{\pi}(s_t))} \\\\
&\quad + \underbrace{\left( \mathbb{E}\left[ R_{t+1} + \gamma v_\pi(S_{t+1}) \mid S_t = s_t \right] - \left[ r_{t+1} + \gamma v_\pi(s_{t+1}) \right] \right) }_{\eta}
\end{aligned}
$$ -
利用RM算法求解,即有:
$$
\begin{aligned}
v_{t+1}(s_t) &= v_t(s_t) - \alpha_t(s_t)\tilde{g}(v_t(s_t)) \\\\
&= v_t(s_t) - \alpha_t(s_t)\left( v_t(s_t) - \left[ r_{t+1} + \gamma v_\pi(s_{t+1}) \right] \right),
\end{aligned}
$$
因为$v_{\pi}(s_{t+1})$为未知,将上式中的$v_{\pi}(s_{t+1})$替换成$v_t(s_{t+1})$即为最终的TD state value公式。
性质分析
TD算法可以描述为以下公式:
$$
\begin{aligned}
\underbrace{v_{t+1}(s_t)}_{\text{new estimate}} &= \underbrace{v_t(s_t)}_{\text{current estimate}} - \alpha_t(s_t)\overbrace{\left[ v_t(s_t) - \underbrace{\left( r_{t+1} + \gamma v_t(s_{t+1}) \right)}_{\text{TD target } \bar{v}_t} \right]}^{\text{TD error } \delta_t},
\end{aligned}
$$
其中:
TD target为:
$$
\bar{v}_t \doteq r_{t+1} + \gamma v_t(s_{t+1})
$$
TD error为:
$$
\delta_t \doteq v(s_t) - \bar{v}_t = v_t(s_t) - \left( r_{t+1} + \gamma v_t(s_{t+1}) \right)
$$
从上式中可以看出,新的state value估计为当前的state value估计与TD Error的加权和。
MC算法和TD算法对比
| TD/Sarsa Learning | MC Learning |
|---|---|
| Online: TD 学习是增量式的,在获取一个经验样本后就能立即更新状态 / 动作价值。 | Offline:MC 学习是非增量式的,必须等整个 episode 收集完成后才能更新。这是因为它需要计算整个 episode 的折扣回报。 |
| 支持持续任务:由于是增量式,TD 学习可以处理 episodic(有终止)和 continuing(无终止)两类任务,持续任务可能没有终止状态。 | 仅支持 episodic 任务:由于是非增量式,MC 学习只能处理 episodic 任务 —— 这类任务的 episode 会在有限步骤后终止。 |
| Bootstrapping:TD 学习具有自举性,状态 / 动作价值的更新依赖于该价值的之前估计值。因此,TD 学习需要先对价值做初始猜测。 | Non-bootstrapping:MC 学习不具备自举性,它可以直接估计状态 / 动作价值,无需初始猜测。 |
| 估计方差低:TD 学习的估计方差比 MC 低,因为它涉及的随机变量更少。 | 估计方差高:MC 学习的估计方差更高,因为它涉及大量随机变量。 |
求解action value的TD算法:Sarsa
观测的数据为:$(s_0,a_0, r_1, s_1, a_1, … , s_t,a_t, r_{t+1},s_{t+1},a_{t+1} …)$
Sarsa算法
$$
\begin{aligned}
q_{t+1}(s_t, a_t) &= q_t(s_t, a_t) - \alpha_t(s_t, a_t)\left[ q_t(s_t, a_t) - \left( r_{t+1} + \gamma q_t(s_{t+1}, a_{t+1}) \right) \right], \\
q_{t+1}(s, a) &= q_t(s, a), \quad \text{for all } (s, a) \neq (s_t, a_t),
\end{aligned}
$$
其中,$t=0,1,2,…$, $\alpha_{t}(s_t)$为$t$时刻状态$s_t$的学习率,$q_t(s_t,a_t)$为t时刻动作$q_\pi(s_t,a_t)$的action value估计。

如果通过对action进行采样来获取episode,建议开启$\varepsilon$的采样方式,否则采样容易进入局部最优。另外,前期可以适当采用大的探索,随着迭代次数变多,探索概率也应减小。(做过只从start state的采样实验,发现并不是每次都能得到最佳的路径???)
如果action比较少,可以尝试直接遍历所有的(state, action)pair来加快收敛速度。
Expected Sarsa
$$
\begin{aligned}
q_{t+1}(s_t, a_t) &= q_t(s_t, a_t) - \alpha_t(s_t, a_t)\left[ q_t(s_t, a_t) - \left( r_{t+1} + \gamma \mathbb{E}\left[ q_t(s_{t+1}, A) \right] \right) \right], \\
q_{t+1}(s, a) &= q_t(s, a), \quad \text{for all } (s, a) \neq (s_t, a_t),
\end{aligned}
$$
其中
$$
\mathbb{E}\left[ q_t(s_{t+1}, A) \right] = \sum \pi_t(a \mid s_{t+1}) q_t(s_{t+1}, a) \doteq v_t(s_{t+1})
$$
n-step Sarsa
action value的定义为:
$$
q_\pi(s, a) = \mathbb{E}\left[ G_t \mid S_t = s, A_t = a \right]
$$
而$G_t$有:
$$
G_t = R_{t+1} + \gamma R_{t+2} + \gamma^2 R_{t+3} + \dots
$$
于是,将$G_t$分解成不同的形式有:
$$
\begin{aligned}
\text{Sarsa} \longleftarrow \quad G_t^{(1)} &= R_{t+1} + \gamma q_\pi(S_{t+1}, A_{t+1}), \\\\
\quad\quad\quad\quad\quad G_t^{(2)} &= R_{t+1} + \gamma R_{t+2} + \gamma^2 q_\pi(S_{t+2}, A_{t+2}), \\\\
\quad\quad\quad\quad\quad \vdots \\\\
n\text{-step Sarsa} \longleftarrow \quad G_t^{(n)} &= R_{t+1} + \gamma R_{t+2} + \dots + \gamma^n q_\pi(S_{t+n}, A_{t+n}), \\\\
\quad\quad\quad\quad\quad \vdots \\\\
\text{MC} \longleftarrow \quad G_t^{(\infty)} &= R_{t+1} + \gamma R_{t+2} + \gamma^2 R_{t+3} + \gamma^3 R_{t+4} \dots
\end{aligned}
$$
-
当$n=1$时,变换为Sarsa算法:
$$
q_\pi(s, a) = \mathbb{E}\left[ G_t^{(1)} \mid s, a \right] = \mathbb{E}\left[ R_{t+1} + \gamma q_\pi(S_{t+1}, A_{t+1}) \mid s, a \right].
$$
利用随机梯度近似算法求解上式有:
$$
q_{t+1}(s_t, a_t) = q_t(s_t, a_t) - \alpha_t(s_t, a_t)\left[ q_t(s_t, a_t) - \left( r_{t+1} + \gamma q_t(s_{t+1}, a_{t+1}) \right) \right],
$$ -
当$n=\infty$时,变换为MC算法:
$$
q_\pi(s, a) = \mathbb{E}\left[ G_t^{(\infty)} \mid s, a \right] = \mathbb{E}\left[ R_{t+1} + \gamma R_{t+2} + \gamma^2 R_{t+3} + \dots \mid s, a \right].
$$
利用随机梯度近似算法求解上式有:
$$
q_{t+1}(s_t, a_t) = g_t \doteq r_{t+1} + \gamma r_{t+2} + \gamma^2 r_{t+3} + \dots,
$$ -
对于$n$步,即有n-step Sarsa:
$$
q_\pi(s, a) = \mathbb{E}\left[ G_t^{(n)} \mid s, a \right] = \mathbb{E}\left[ R_{t+1} + \gamma R_{t+2} + \dots + \gamma^n q_\pi(S_{t+n}, A_{t+n}) \mid s, a \right].
$$
利用随机梯度近似算法求解上式有:
$$
\begin{aligned}
q_{t+1}(s_t, a_t) &= q_t(s_t, a_t) \\
&\quad - \alpha_t(s_t, a_t)\left[ q_t(s_t, a_t) - \left( r_{t+1} + \gamma r_{t+2} + \dots + \gamma^n q_t(s_{t+n}, a_{t+n}) \right) \right].
\end{aligned}
$$
- 实际中求解n-step sarsa时,会利用滑动窗口的概念进行处理,提升收敛速度。
- 对于接近终点的状态,直接利用Monte Carlo估计来获取qvalue。
Q-learning
Sarsa只能对给定的策略进行action values的估计,为了找到最优策略,sarsa必须在每次评估action value后进行Policy improvement。 相对而言,Q-learning可以直接估计最优动作价值函数。
算法形式
$$
\begin{aligned}
& q_{t+1}(s_t, a_t) = q_t(s_t, a_t) - \alpha_t(s_t, a_t) \Bigg[ q_t(s_t, a_t) - \Big( r_{t+1} + \gamma \max_{a \in \mathcal{A}(s_{t+1})} q_t(s_{t+1}, a) \Big) \Bigg],
\\
& q_{t+1}(s, a) = q_t(s, a), \quad \text{for all } (s, a) \neq (s_t, a_t), for all (s,a) \neq (s_t, a_t)
\end{aligned}
$$
Sarsa在每次迭代时,要求得到$(r_{t+1},s_{t+1},a_{t+1})$,而Q-learning只需要$(r_{t+1},s_{t+1})$。
Q-learning算法是利用随机近似算法来求解贝尔曼最优方程的解。
Off-Policy算法
On-policy vs Off-policy主要看它的behavior policy(用于采样)和target policy(用于更新收敛)是否是同一个。
Q-learning是一个off-policy的算法,它的好处是:
- 极高的数据利用率(Sample Efficiency)
这是 Off-policy 算法最大的卖点。
- 经验回放(Experience Replay): On-policy 算法(如 PPO, REINFORCE)通常在这个回合(Episode)结束后,数据用一次就必须丢弃,因为策略更新后,旧策略产生的数据就不再准确了。但 Off-policy 算法(如 DQN, SAC)可以使用经验回放缓冲区(Replay Buffer)。
- 重复利用: 过去产生的数据(比如 1000 步之前的,甚至是之前的策略产生的)可以被存储起来,并在未来的训练中反复抽取、学习。
- 数据去相关性: 神经网络喜欢独立同分布(i.i.d.)的数据。通过从缓冲区随机抽取样本,可以打破时间序列上的相关性,使训练更稳定。
场景举例: 训练机器人抓取物体。由于物理世界的时间很宝贵,如果每动一次只能学一次,训练可能需要几年。Off-policy 允许机器人把过去的“失败尝试”存起来反复琢磨,从而大幅缩短训练时间。
- 更好的探索与利用平衡(Exploration vs. Exploitation)
Off-policy 将策略拆分为两个:
- 行为策略(Behavior Policy): 负责在环境中行动,产生数据。它可以非常激进、随机,以确保探索到环境的每一个角落。
- 目标策略(Target Policy): 负责学习最优解。它通常是贪婪的(Greedy),只关注目前认为最好的动作。
- 优势: 你可以让智能体像“疯子”一样随机探索(保持高熵或高 $\epsilon$-greedy),但这并不妨碍它在后台冷静地计算出一条“最优路径”。On-policy 算法则很难做到这一点,因为它的探索行为会直接影响它对价值的估计。
- 可以从“别人的经验”中学习(Offline RL / Demonstration)
由于 Off-policy 并不要求数据必须是当前策略产生的,它带来了巨大的灵活性:
- 学习人类示范: 你可以喂给算法一堆人类高手的操作录像,算法可以利用这些数据进行初始化或优化(例如 AlphaGo 最初学习人类棋谱)。
- 历史数据: 在推荐系统或自动驾驶中,我们可以利用过去几个月积累的日志数据来训练新模型,而不需要将一个未经测试的模型直接上线去收集数据(这可能很危险或昂贵)。
算法过程
On-policy版本:

Off-policy版本:

总结
不同算法之间的TD目标(Temporal-Difference Target) 表达式:
| 算法 | TD目标表达式 $\bar{q_t}$ | 核心思想与特点 |
|---|---|---|
| Sarsa | $\bar{q}_t = r_{t+1} + \gamma \bar{q}_t(s_{t+1}, a_{t+1})$ | 在线策略(On-policy)。使用当前策略实际执行的下一动作 at+1的Q值来构建目标。其更新依赖于当前策略的连续性,倾向于评估并优化正在执行的策略。 |
| n-step Sarsa | $\bar{q}_t = r_{t+1} + \gamma r_{t+2} + \cdots + \gamma^n \bar{q}_t(s_{t+n}, a_{t+n})$ | Sarsa的多步扩展。目标由未来n步的即时奖励加上第n步的状态动作值估计共同构成。它在单步更新(偏差小、方差大)和Monte Carlo更新(偏差大、方差小)之间取得了折衷。 |
| Q-learning | $\bar{q}_t = r_{t+1} + \gamma \max_{a} \bar{q}_t(s_{t+1}, a)$ | 离线策略(Off-policy)。这是表格中最关键的区别。它使用下一状态 st+1下所有可能动作中最大的Q值来构建目标,而不管下一步实际会采取什么动作。这使其能够直接估计最优策略的价值。 |
| Monte Carlo | $\bar{q}_t = r_{t+1} + \gamma r_{t+2} + \gamma^2 r_{t+3} + \dots$ | 不使用“自举”(Bootstrapping)。TD目标是从当前时刻开始直到回合结束的**完整实际回报(Return)**的累积。它没有偏差,但方差很大,且必须等待回合结束才能更新。 |