On-Policy 强化学习与 Off-Policy 强化学习
强化学习是机器学习的一种范式,它关注的是智能体(Agent)如何在与环境的交互中学习到一个策略(Policy),以便在未来的决策中最大化累积奖励。在强化学习中,有两种主要的学习方法:On-Policy(同轨)学习和 Off-Policy(异轨)学习。这两种方法的核心区别在于智能体学习策略的方式。本文将详细介绍 On-Policy 和 Off-Policy 学习的概念、特点、算法示例以及它们之间的区别。
1. On-Policy 强化学习
1.1 概念
On-Policy 强化学习是指智能体在学习过程中遵循当前策略进行动作选择,并根据这些经验来更新策略。换句话说,智能体在学习时使用的策略与实际执行的策略是相同的。
1.2 特点
- 智能体在学习和执行时使用相同的策略。
- 需要在探索(Exploration)和利用(Exploitation)之间进行权衡,以便发现更好的策略。
- 更新策略时使用的数据是实时生成的,因此可能受到噪声和偏差的影响。
1.3 算法示例
典型的 On-Policy 强化学习算法包括 SARSA(State-Action-Reward-State-Action)算法。SARSA 算法是一种基于值函数的强化学习算法,它通过学习动作值函数 Q(s, a) 来确定最优策略。SARSA 使用贝尔曼方程进行迭代更新,通过不断探索和更新 Q 值,最终收敛到最优策略。
# SARSA 算法示例
def sarsa(env, num_episodes, alpha, gamma, epsilon):
# 初始化 Q 值表
Q = defaultdict(lambda: np.zeros(env.action_space.n))
for episode in range(num_episodes):
state = env.reset()
action = epsilon_greedy_policy(Q, state, env.action_space.n, epsilon)
while True:
next_state, reward, done, _ = env.step(action)
next_action = epsilon_greedy_policy(Q, next_state, env.action_space.n, epsilon)
# 更新 Q 值
Q[state][action] += alpha * (reward + gamma * Q[next_state][next_action] - Q[state][action])
state = next_state
action = next_action
if done:
break
return Q
# ε-贪婪策略
def epsilon_gre
edy_policy(Q, state, n_actions, epsilon):
# 初始化动作概率
action_probs = np.ones(n_actions)