1. 感性认识
强化学习中的 on-policy 和 off-policy 是两种不同的策略学习方式,它们的区别在于:
- 如何从环境中采样数据(行为策略),
- 以及如何使用这些数据来优化策略(目标策略)。
On-Policy(基于当前策略的数据学习)
- 感性描述:
- on-policy 方法直接依赖当前策略(行为策略)生成的数据,并用这些数据来更新当前策略本身。
- 例如,一个人在驾驶汽车的过程中不断调整自己的驾驶方式(策略),并从自己的驾驶行为中学习改进当前驾驶风格。
- 特点:
- 数据和策略绑定:只能从当前策略生成的数据中学习。
- 示例算法:SARSA(State-Action-Reward-State-Action)。
- 优点:学习过程稳定,因为学习目标与采样数据来自同一个策略。
- 缺点:探索效率较低,数据利用率差,因为只能使用“当前策略”的数据。
Off-Policy(基于其他策略的数据学习)
- 感性描述:
- off-policy 方法允许从其他策略(行为策略)生成的数据中学习,并用这些数据来更新目标策略(通常是最优策略)。
- 例如,一个人观看别人驾驶汽车(行为策略),从中学习驾驶技巧,并优化自己的驾驶方式(目标策略)。
- 特点:
- 数据和策略解耦:可以使用来自其他策略(甚至随机策略)的数据来更新目标策略。
- 示例算法:Q-learning(基于最大 Q 值)。
- 优点:数据利用率高,可以复用来自过去或其他策略的数据。
- 缺点:学习过程可能不稳定,因为行为策略与目标策略不同。
2. 数学原理
在强化学习中,策略学习的核心任务是估计动作价值函数(Q-function)或状态价值函数(V-function),并根据这些函数优化策略。两种方法的数学区别如下:
On-Policy
-
目标:
- 学习当前策略 π θ \pi_\theta πθ 的动作价值函数 Q π θ ( s , a ) Q_{\pi_\theta}(s, a) Qπθ(s,a),即当前策略下执行动作 a a a 的期望回报。
-
更新公式(以 SARSA 为例):
Q ( s t , a t ) ← Q ( s t , a t ) + α [ r t + γ Q ( s t + 1 , a t + 1 ) − Q ( s t , a t ) ] Q(s_t, a_t) \leftarrow Q(s_t, a_t) + \alpha \left[ r_t + \gamma Q(s_{t+1}, a_{t+1}) - Q(s_t, a_t) \right] Q(st,at)←Q(st,at)+α[rt+γQ(st+1,at+1)−Q(st,at)]- a t + 1 a_{t+1} at+1 是根据当前行为策略(通常是 ϵ \epsilon ϵ-greedy 策略)选择的动作。
- 核心:更新目标是行为策略 π θ \pi_\theta πθ 的期望回报。
-
特点:
- 更新目标和采样数据来自同一个策略 π θ \pi_\theta πθ。
- 学到的 Q 值 Q π θ ( s , a ) Q_{\pi_\theta}(s, a) Qπθ(s,a) 对应于当前策略的价值。
Off-Policy
-
目标:
- 学习目标策略 π ∗ \pi^* π∗ 的动作价值函数 Q π ∗ ( s , a ) Q_{\pi^*}(s, a) Qπ∗(s,a),即最优策略下执行动作 a a a 的期望回报。
-
更新公式(以 Q-learning 为例):
Q ( s t , a t ) ← Q ( s t , a t ) + α [ r t + γ max a Q ( s t + 1 , a ) − Q ( s t , a t ) ] Q(s_t, a_t) \leftarrow Q(s_t, a_t) + \alpha \left[ r_t + \gamma \max_a Q(s_{t+1}, a) - Q(s_t, a_t) \right] Q(st,at)←Q(st,at)+α[rt+γamaxQ(st+1,a)−Q(st,at)]- max a Q ( s t + 1 , a ) \max_a Q(s_{t+1}, a) maxaQ(st+1,a) 是目标策略(最优策略)的最大可能回报。
- 核心:更新目标是最优策略 π ∗ \pi^* π∗ 的期望回报。
-
特点:
- 更新目标基于目标策略 π ∗ \pi^* π∗,而采样数据可以来自其他行为策略 π b \pi_b πb。
- 学到的 Q 值 Q π ∗ ( s , a ) Q_{\pi^*}(s, a) Qπ∗(s,a) 对应于最优策略的价值。
总结数学区别
- On-Policy 学习目标是 Q π θ ( s , a ) Q_{\pi_\theta}(s, a) Qπθ(s,a),即当前策略 π θ \pi_\theta πθ 下的价值。
- Off-Policy 学习目标是 Q π ∗ ( s , a ) Q_{\pi^*}(s, a) Qπ∗(s,a),即最优策略 π ∗ \pi^* π∗ 下的价值。
3. 代码实现
以下分别展示 SARSA(on-policy)和 Q-learning(off-policy)的代码实现,并对两者的核心区别进行分析。
On-Policy(SARSA)代码
import numpy as np
# 初始化 Q 表
Q = np.zeros((n_states, n_actions))
alpha = 0.1 # 学习率
gamma = 0.99 # 折扣因子
for episode in range(n_episodes):
state = env.reset()
action = epsilon_greedy_policy(Q[state]) # 根据当前行为策略选择动作
done = False
while not done:
next_state, reward, done, _ = env.step(action) # 采样当前策略下的数据
next_action = epsilon_greedy_policy(Q[next_state]) # 根据当前策略选择下一步动作
# SARSA更新公式
Q[state, action] += alpha * (reward + gamma * Q[next_state, next_action] - Q[state, action])
# 更新状态和动作
state, action = next_state, next_action
Off-Policy(Q-learning)代码
import numpy as np
# 初始化 Q 表
Q = np.zeros((n_states, n_actions))
alpha = 0.1 # 学习率
gamma = 0.99 # 折扣因子
for episode in range(n_episodes):
state = env.reset()
done = False
while not done:
action = epsilon_greedy_policy(Q[state]) # 根据行为策略选择动作(可能是 ε-greedy 策略)
next_state, reward, done, _ = env.step(action) # 采样行为策略下的数据
# Q-learning更新公式
Q[state, action] += alpha * (reward + gamma * np.max(Q[next_state]) - Q[state, action])
# 更新状态
state = next_state
代码实现关键区别
-
更新目标的动作选择:
- SARSA:下一步动作
a
t
+
1
a_{t+1}
at+1 是基于当前策略
π
θ
\pi_\theta
πθ 选择的(
epsilon_greedy_policy(Q[next_state])
)。 - Q-learning:下一步动作是基于最优策略
π
∗
\pi^*
π∗ 选择的(
np.max(Q[next_state])
)。
- SARSA:下一步动作
a
t
+
1
a_{t+1}
at+1 是基于当前策略
π
θ
\pi_\theta
πθ 选择的(
-
采样数据的使用:
- SARSA:只能使用来自当前策略的数据,更新目标和行为策略一致。
- Q-learning:采样数据可以来自其他策略,但更新目标基于最优策略。
-
探索和利用:
- SARSA:更加依赖行为策略,探索更加直接。
- Q-learning:可以利用离线数据(来自不同策略的采样)。
4. 本质区别总结
从之前的分析可以总结出,on-policy 和 off-policy 的本质区别在于学习目标和数据来源的不同:
学习目标
- On-Policy 学习的是 当前策略 的价值函数 Q π θ ( s , a ) Q_{\pi_\theta}(s, a) Qπθ(s,a)。
- Off-Policy 学习的是 目标策略(通常是最优策略) 的价值函数 Q π ∗ ( s , a ) Q_{\pi^*}(s, a) Qπ∗(s,a)。
数据来源
- On-Policy:只能从当前策略 π θ \pi_\theta πθ 生成的数据中学习,采样和更新目标一致。
- Off-Policy:可以从其他策略(行为策略 π b \pi_b πb)生成的数据中学习,采样和更新目标不同。
举例对比
- On-Policy(SARSA):直接从当前策略 π θ \pi_\theta πθ 的行为中学习和改进。
- Off-Policy(Q-learning):从行为策略(可能是随机或历史策略)中学习,但更新目标是最优策略 π ∗ \pi^* π∗。
5. 关键理解
归根结底:
- On-Policy 学习的是 Q π θ ( s , a ) Q_{\pi_\theta}(s, a) Qπθ(s,a),即当前策略 π θ \pi_\theta πθ 下的动作价值。
- Off-Policy 学习的是 Q π ∗ ( s , a ) Q_{\pi^*}(s, a) Qπ∗(s,a),即最优策略 π ∗ \pi^* π∗ 下的动作价值。
这两种方法的区别本质在于:行为策略和目标策略是否一致,以及是否使用“最大 Q 值”(off-policy)作为目标。