Reinforcement Learning · Interactive Visualization
强化学习基础可视化实验室
通过 8 个交互式 SVG 可视化模块,从 Q-Learning 到 AlphaGo,系统理解强化学习的核心算法。每个模块包含动态可视化、参数调节与实时统计,将抽象的数学公式转化为直观的视觉语言。
8 Modules
SVG + Vanilla JS
Zero Dependencies
Single File
01Q-Learning · Tabular TD Control
Q-Learning 基础
智能体在网格世界中通过试错学习最优策略。Q 值表记录每个状态-动作对的期望回报,使用 Bellman 方程迭代更新。点击播放观察智能体从随机探索到收敛最优路径的全过程。
Q-Learning 更新规则
Python
def q_learning_update(s, a, r, s_next, done):
max_q_next = max(Q[s_next].values()) if not done else 0
td_target = r + gamma * max_q_next
td_error = td_target - Q[s][a]
Q[s][a] += alpha * td_error
def select_action(s, epsilon=0.1):
if random() < epsilon:
return random_action()
return argmax(Q[s])
02DQN · Deep Q-Network
DQN 深度 Q 网络
将 Q-Learning 与深度神经网络结合,用网络近似 Q(s,a) 函数。经验回放池打破数据相关性,目标网络稳定训练。点击播放观察经验采集、批量采样与梯度更新的完整流程。
DQN 损失函数与经验回放
Python
def dqn_loss(batch, policy_net, target_net):
s, a, r, s_next, done = unpack(batch)
q_pred = policy_net(s).gather(1, a)
q_next = target_net(s_next).max(1)[0]
q_target = r + gamma * q_next * (1 - done)
return F.mse_loss(q_pred, q_target.detach())
buffer = ReplayBuffer(capacity=10000)
batch = buffer.sample(batch_size=32)
03Policy Gradient · REINFORCE
策略梯度 (Policy Gradient)
直接参数化策略 π(a|s;θ),通过最大化期望回报来优化。REINFORCE 算法采集完整轨迹后,用回报作为权重更新策略。观察概率分布如何随训练逐步集中于高回报动作。
REINFORCE 策略梯度
Python
def reinforce_loss(log_probs, returns):
loss = -sum(log_probs * returns) / len(returns)
return loss
def collect_episode(env, policy):
log_probs, rewards = [], []
s = env.reset()
while not done:
a, log_p = policy.act(s)
s, r, done = env.step(a)
log_probs.append(log_p)
rewards.append(r)
returns = compute_returns(rewards, gamma)
return log_probs, returns
04Actor-Critic · A2C / A3C
Actor-Critic
Actor 负责选动作(策略网络),Critic 负责评估状态价值(价值网络)。TD 误差同时驱动两者更新,将策略梯度的方差从蒙特卡洛回报降低到单步时序差分。观察 TD 误差如何流向两个网络。
Actor-Critic 双网络结构与 TD 误差
A2C Actor-Critic 更新
Python
def a2c_update(state, action, reward, next_state, done):
v = critic(state)
v_next = critic(next_state).detach()
td_target = reward + gamma * v_next * (1 - done)
td_error = td_target - v
critic_loss = F.mse_loss(v, td_target.detach())
log_pi = actor.log_prob(state, action)
actor_loss = -(log_pi * td_error.detach())
step(critic_loss + actor_loss)
05PPO · Proximal Policy Optimization
PPO 近端策略优化
通过裁剪策略比率 r=π_new/π_old,将策略更新限制在信任区域内,避免一步更新过大导致崩溃。调节裁剪参数 ε,观察目标函数如何在大比率处被截断,实现稳定训练。
PPO Clipped Surrogate Objective
Python
def ppo_loss(old_logp, new_logp, adv, epsilon=0.2):
ratio = (new_logp - old_logp).exp()
surr1 = ratio * adv
surr2 = torch.clamp(ratio, 1-epsilon, 1+epsilon) * adv
loss = -torch.min(surr1, surr2).mean()
return loss
06AlphaGo · Monte Carlo Tree Search
AlphaGo / MCTS 蒙特卡洛树搜索
AlphaGo 结合神经网络与蒙特卡洛树搜索(MCTS)。每次搜索分四步:选择(UCB)、扩展、模拟(快速走子)、回溯更新。点击单步执行观察搜索树如何逐步展开并找到更优走法。
UCB 选择公式与 MCTS 四步
Python
def ucb(child, parent_visits, c=1.4):
exploit = child.win_rate
explore = c * sqrt(log(parent_visits) / child.visits)
return exploit + explore
def mcts_iteration(root):
leaf = select(root)
new_node = expand(leaf)
result = rollout(new_node)
backprop(new_node, result)
07Reward Shaping · Dense vs Sparse
奖励设计 (Reward Shaping)
稀疏奖励让智能体难以获得学习信号。通过奖励塑形将稀疏奖励稠密化,或用课程学习逐步增加难度,能显著加速收敛。切换不同奖励设计,对比学习曲线的差异。
稀疏 vs 稠密奖励学习曲线对比
奖励塑形与潜在函数
Python
def dense_reward(s, s_next, goal):
sparse = 1.0 if s_next == goal else 0
shaping = dist(s_next, goal) - dist(s, goal)
return sparse + gamma * shaping
def curriculum(agent, level):
if agent.success_rate > 0.8:
level += 1
env = make_env(difficulty=level)
reward = irl_infer(expert_demos)
08Exploration vs Exploitation · Multi-Armed Bandit
探索-利用困境
多臂老虎机是探索-利用问题的经典模型。Epsilon-Greedy 固定探索率,UCB 基于置信上界自适应探索,Thompson Sampling 用贝叶斯后验采样。切换策略,对比累积奖励与遗憾(Regret)。
多臂老虎机与累积奖励
三种探索策略对比
Python
def eps_greedy(Q, epsilon=0.1):
if random() < epsilon:
return random_arm()
return argmax(Q)
def ucb_select(Q, N, t, c=2.0):
return argmax(Q[a] + c*sqrt(log(t)/N[a]))
def thompson(alpha, beta):
return argmax(beta_sample(alpha[a], beta[a]))
regret = t * Q_best - sum(rewards)