F FisherHub Docs

强化学习

强化学习的基本框架

强化学习(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 是当前重要的研究方向。