强化学习的基本框架
强化学习(Reinforcement Learning,RL)是机器学习的三大范式之一,其核心是一个智能体(Agent)在环境(Environment)中通过试错来学习最优策略。
在每一时刻 t,智能体观察当前状态 s_t,采取一个动作 a_t,环境反馈给智能体一个奖励 r_t 并转移到下一个状态 s_{t+1}。智能体的目标是最大化长期累积奖励。
关键概念
- 状态(State) — 环境的当前描述
- 动作(Action) — 智能体可以采取的行为
- 奖励(Reward) — 衡量动作好坏的即时信号
- 策略(Policy) — π(a|s),状态到动作的映射
- 价值函数(Value Function) — 评估状态或状态-动作对的长期价值
基于价值的强化学习
Q-Learning
Q-Learning 是经典的基于价值的算法,通过学习 Q 函数(状态-动作价值函数)来找到最优策略。Q 函数 Q(s,a) 表示在状态 s 下采取动作 a 后的期望累计奖励。
更新公式:
Q(s,a) ← Q(s,a) + α[r + γ·max Q(s',a') - Q(s,a)]
DQN(Deep Q-Network)
2013 年 DeepMind 将深度学习与 Q-Learning 结合,提出 DQN,在 Atari 游戏中取得了超越人类的成绩。
import torch
import torch.nn as nn
import torch.optim as optim
class DQN(nn.Module):
def __init__(self, state_dim, action_dim):
super().__init__()
self.net = nn.Sequential(
nn.Linear(state_dim, 128),
nn.ReLU(),
nn.Linear(128, 64),
nn.ReLU(),
nn.Linear(64, action_dim)
)
def forward(self, x):
return self.net(x)
# DQN 更新步骤
def dqn_update(model, target_model, batch, gamma=0.99):
states, actions, rewards, next_states = batch
q_values = model(states).gather(1, actions)
with torch.no_grad():
max_next_q = target_model(next_states).max(1)[0]
targets = rewards + gamma * max_next_q
loss = nn.MSELoss()(q_values, targets.unsqueeze(1))
return loss
Double DQN 与 Dueling DQN
这两种改进分别解决了 Q-Learning 的过估计问题和 Q 值分解问题。
基于策略的强化学习
策略梯度
策略梯度方法直接对策略进行参数化,通过梯度上升来最大化期望奖励。
核心公式(REINFORCE 算法):
∇J(θ) = E[∇log πθ(a|s) · G]
其中 G 是从当前时间步开始的累计折扣奖励。
def reinforce(env, policy, optimizer, episodes=1000):
for episode in range(episodes):
states, actions, rewards = [], [], []
state = env.reset()
done = False
while not done:
action = policy.select_action(state)
next_state, reward, done, _ = env.step(action)
states.append(state)
actions.append(action)
rewards.append(reward)
state = next_state
# 计算折扣回报
G = 0
returns = []
for r in reversed(rewards):
G = r + 0.99 * G
returns.insert(0, G)
# 策略梯度更新
loss = policy.compute_loss(states, actions, returns)
optimizer.zero_grad()
loss.backward()
optimizer.step()
Actor-Critic 方法
Actor-Critic 结合了基于价值的方法和基于策略的方法:
- Actor(演员) — 负责学习策略,决定动作
- Critic(评论家) — 负责评估动作的价值
A2C / A3C
A3C(Asynchronous Advantage Actor-Critic)通过多个并行的智能体与环境交互,打破了数据相关性,使训练更加稳定。
PPO(Proximal Policy Optimization)
PPO 是 OpenAI 在 2017 年提出的算法,因其稳定性和高效性成为 RL 领域的事实标准之一。
核心思想是在策略更新时加入约束,不让新策略偏离旧策略太远:
# PPO 的 clip 目标函数(简化)
def ppo_loss(old_log_probs, new_log_probs, advantages, epsilon=0.2):
ratio = torch.exp(new_log_probs - old_log_probs)
clipped_ratio = torch.clamp(ratio, 1 - epsilon, 1 + epsilon)
return -torch.min(ratio * advantages, clipped_ratio * advantages).mean()
PPO 在 Dota 2、OpenAI Five 以及 ChatGPT 的训练(RLHF)中都发挥了关键作用。
强化学习的应用
- 游戏 — AlphaGo、AlphaStar、OpenAI Five
- 机器人 — 机械臂控制、四足机器人行走
- 自动驾驶 — 决策规划、路径规划
- 推荐系统 — 将推荐建模为序列决策问题
- 大语言模型 — RLHF(基于人类反馈的强化学习)
当前挑战
强化学习仍面临奖励设计困难、样本效率低、安全约束等问题。离线强化学习和基于模型的 RL 是当前重要的研究方向。