无模型强化学习
一、无模型强化学习(Model-Free RL)的核心思想
1. 什么是“无模型”?
- 无需环境模型:不依赖状态转移概率 ( P ( s ′ ∣ s , a ) P(s'|s,a) P(s′∣s,a)) 和奖励函数 ( R ( s , a , s ′ ) R(s,a,s') R(s,a,s′)) 的先验知识。
- 直接交互学习:通过与环境的实时交互(试错)来优化策略,适用于真实场景中模型难以获取的任务(如机器人控制、游戏AI)。
2. 与有模型(Model-Based)方法的对比
特性 | 无模型(Model-Free) | 有模型(Model-Based) |
---|---|---|
依赖信息 | 仅需状态、动作、奖励序列 | 需完整的环境动态模型 |
计算成本 | 低(无需维护模型) | 高(需模型预测或规划) |
适用场景 | 复杂、高维或随机环境 | 状态空间小且模型已知的任务 |
典型算法 | Q-Learning、SARSA、策略梯度 | 动态规划(DP)、蒙特卡洛树搜索(MCTS) |
二、无模型强化学习的核心挑战
1. 探索与利用(Exploration vs. Exploitation)
- 探索:尝试新动作以发现潜在高回报路径。
- 利用:根据已有知识选择当前最优动作。
- 平衡策略:ε-贪心、Softmax、UCB等。
2. 信用分配问题(Credit Assignment)
- 延迟奖励:如何将最终奖励归因于前期动作(如围棋中某一步对胜负的影响)。
- 解决方案:折扣回报、资格迹(Eligibility Traces)。
3. 非平稳性(Non-Stationarity)
- 策略与数据依赖:策略改进导致数据分布变化,传统监督学习假设失效。
- 应对方法:经验回放(Experience Replay)、目标网络(Target Network)。
三、时序差分算法(Temporal Difference, TD)
1. TD的核心思想
-
融合蒙特卡洛与动态规划:
- 蒙特卡洛:依赖完整Episode的回报 ( G t G_t Gt)。
- 动态规划:通过自举(Bootstrapping)用当前估计更新值函数。
-
TD更新公式:
V ( s t ) ← V ( s t ) + α [ r t + 1 + γ V ( s t + 1 ) − V ( s t ) ] V(s_t) \leftarrow V(s_t) + \alpha \left[ r_{t+1} + \gamma V(s_{t+1}) - V(s_t) \right] V(st)←V(st)+α[rt+1+γV(st+1)−V(st)]- TD误差:( δ t = r t + 1 + γ V ( s t + 1 ) − V ( s t ) \delta_t = r_{t+1} + \gamma V(s_{t+1}) - V(s_t) δt=rt+1+γV(st+1)−V(st) )
2. TD vs 蒙特卡洛 vs 动态规划
特性 | TD | 蒙特卡洛 | 动态规划 |
---|---|---|---|
更新时机 | 单步更新(在线学习) | Episode结束后更新 | 全状态迭代更新 |
偏差-方差 | 低方差,有偏差 | 高方差,无偏差 | 低方差,依赖模型准确性 |
数据效率 | 高(即时利用数据) | 低(需完整轨迹) | 依赖模型 |
3. 经典TD算法
-
SARSA(On-Policy TD)
-
更新公式:
Q ( s t , a t ) ← Q ( s t , a t ) + α [ r t + 1 + γ 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+1} + \gamma Q(s_{t+1},a_{t+1}) - Q(s_t,a_t) \right] Q(st,at)←Q(st,at)+α[rt+1+γQ(st+1,at+1)−Q(st,at)] -
特点:遵循当前策略选择动作,强调“在策略(On-Policy)”学习。
-
-
Q-Learning(Off-Policy TD)
-
更新公式:
Q ( s t , a t ) ← Q ( s t , a t ) + α [ r t + 1 + γ 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+1} + \gamma \max_a Q(s_{t+1},a) - Q(s_t,a_t) \right] Q(st,at)←Q(st,at)+α[rt+1+γamaxQ(st+1,a)−Q(st,at)] -
特点:学习最优策略,允许使用历史数据(Off-Policy)。
-
四、无模型强化学习的算法分类
1. 基于值函数的方法
- 目标:学习最优值函数 ( Q ∗ ( s , a ) Q^*(s,a) Q∗(s,a)),间接得到策略。
- 代表算法:
- Q-Learning
- Deep Q-Network (DQN)
- Double DQN
2. 基于策略的方法
- 目标:直接参数化策略 ( π θ ( a ∣ s ) \pi_\theta(a|s) πθ(a∣s)),通过梯度上升优化。
- 代表算法:
- REINFORCE
- 策略梯度(Policy Gradient)
- PPO(Proximal Policy Optimization)
3. 演员-评论家(Actor-Critic)
- 融合值函数与策略:
- Actor:策略函数,负责生成动作。
- Critic:值函数,评估动作价值并提供梯度。
- 代表算法:
- A2C(Advantage Actor-Critic)
- A3C(Asynchronous Advantage Actor-Critic)
- SAC(Soft Actor-Critic)
五、无模型强化学习的应用场景
1. 游戏AI
- Atari游戏:DQN通过像素输入直接学习游戏策略。
- AlphaGo:结合蒙特卡洛树搜索与策略网络。
2. 机器人控制
- 机械臂抓取:PPO优化连续动作空间下的控制策略。
- 足式机器人行走:SAC实现复杂地形自适应。
3. 资源管理
- 云计算调度:Q-Learning优化任务分配与资源利用率。
- 能源网络:Actor-Critic平衡发电与消耗。
六、无模型强化学习的代码框架
1. Q-Learning 伪代码
Initialize Q-table Q(s,a)
for each episode:
s = env.reset()
while not done:
a = ε-greedy(Q, s)
s_next, r, done = env.step(a)
Q[s,a] += α * (r + γ * max(Q[s_next,:]) - Q[s,a])
s = s_next
2. DQN 核心步骤
# 初始化Q网络和目标网络
Q_net = NeuralNetwork()
target_Q_net = NeuralNetwork()
replay_buffer = ExperienceReplay()
for episode in range(num_episodes):
state = env.reset()
while not done:
action = ε-greedy(Q_net, state)
next_state, reward, done = env.step(action)
replay_buffer.add(state, action, reward, next_state, done)
# 从缓冲区采样并更新网络
batch = replay_buffer.sample()
loss = calculate_loss(Q_net, target_Q_net, batch)
optimize(Q_net, loss)
# 定期同步目标网络
if step % target_update:
target_Q_net.load_state_dict(Q_net.state_dict())
七、总结
无模型强化学习通过直接与环境交互,摆脱了对精确环境模型的依赖,成为解决现实复杂问题的核心工具。时序差分算法作为其理论基石,以高效的数据利用和在线学习能力,架起了从理论到实践的桥梁。后续章节将深入解析TD算法的变体、深度强化学习的实现细节,以及如何应对实际应用中的挑战(如稀疏奖励、高维输入)。