第 1 课 / 共 30 课
MDP基础 · 阶段1

强化学习概述

强化学习的核心概念、与其他机器学习范式的区别、应用场景、智能体-环境交互模型

🧠 核心概念

智能体(Agent)环境(Environment)状态(State)动作(Action)奖励(Reward)策略(Policy)值函数(Value Function)模型(Model)

📚 强化学习是什么?

强化学习是机器学习的第三大范式(与监督学习、无监督学习并列),其核心思想是:智能体通过与环境交互获得奖励,学习最优行为策略

💡 关键区别:监督学习是"老师告诉你答案",而强化学习是"自己探索,从后果中学习"。

智能体-环境交互循环

在时刻t,智能体处于状态sₜ,选择动作aₜ,环境返回奖励rₜ和新状态sₜ₊₁。这个循环持续进行,直到终止。

sₜ → aₜ → rₜ, sₜ₊₁ → aₜ₊₁ → ...

强化学习的应用场景

领域应用算法
游戏AlphaGo, Dota 2MCTS + PPO
机器人机械臂控制, 步行SAC, TD3
自动驾驶路径规划, 决策DQN, PPO
推荐系统长期用户留存Contextual Bandit
金融量化交易DQN, A2C
⚠️ 注意:强化学习没有监督信号告诉智能体"正确答案"是什么,只有延迟的、稀疏的奖励信号。

🔍 RL的数学框架

强化学习的目标是最大化累积折扣奖励:

G_t = r_t + gamma*r_{t+1} + gamma^2*r_{t+2} + ...

策略的定义

值函数

V^pi(s) = E_pi[G_t | s_t = s]
Q^pi(s,a) = E_pi[G_t | s_t = s, a_t = a]

FrozenLake环境详解

符号含义数量
S起点1
F冰面10
H冰洞4
G目标1
💡 环境特征:is_slippery=True时,动作有1/3概率滑向垂直方向。随机策略成功率约1.3%。

RL三大范式对比

范式信号代表算法
监督学习标签SVM, 神经网络
无监督学习无标签K-means, GAN
强化学习奖励Q-Learning, PPO

核心挑战

  1. 探索与利用困境: 何时尝试新动作vs利用已知好动作
  2. 信用分配问题: 哪个动作导致了最终结果
  3. 样本效率: 需要多少交互才能学好
  4. 泛化能力: 训练环境的表现能否迁移

RL历史发展

年份里程碑意义
1956Bellman动态规划最优控制理论基础
1989Watkins Q-Learning第一个off-policy TD算法
2013DeepMind DQN深度学习+RL的突破
2016AlphaGo围棋击败人类冠军
2017PPO最实用的RL算法

💻 代码实现

import gymnasium as gym import numpy as np import json # 创建FrozenLake环境 env = gym.make('FrozenLake-v1', desc=None, map_name="4x4", is_slippery=True) # 环境基本信息 print(f"观察空间: {env.observation_space}") print(f"动作空间: {env.action_space}") print(f"动作含义: 0=左 1=下 2=右 3=上") # 随机策略运行 episodes = 1000 rewards = [] steps_list = [] success = 0 for ep in range(episodes): state, _ = env.reset(seed=ep) total_reward = 0 step = 0 done = False while not done: action = env.action_space.sample() # 随机策略 state, reward, terminated, truncated, info = env.step(action) total_reward += reward step += 1 done = terminated or truncated rewards.append(total_reward) steps_list.append(step) if total_reward > 0: success += 1 print(f"\\n随机策略统计 ({episodes}回合):") print(f"成功率: {success/episodes*100:.1f}%") print(f"平均步数: {np.mean(steps_list):.1f}") print(f"平均奖励: {np.mean(rewards):.4f}") print(f"奖励标准差: {np.std(rewards):.4f}") # 保存结果 result = { "episodes": episodes, "success_rate": round(success/episodes*100, 1), "avg_steps": round(np.mean(steps_list), 1), "avg_reward": round(float(np.mean(rewards)), 4), "success": success } with open("/var/www/ttl/rl/lesson01_result.json", "w") as f: json.dump(result, f) print("\\n✅验证通过 - 随机策略在FrozenLake上成功运行") env.close() # ============================================ # 扩展实验:不同地图配置对比 # ============================================ print("\n=== 扩展实验 ===") for map_name in ["4x4", "8x8"]: env2 = gym.make('FrozenLake-v1', map_name=map_name, is_slippery=True) wins = 0 for ep in range(5000): s, _ = env2.reset(seed=ep) done = False while not done: a = env2.action_space.sample() s, r, t, tr, _ = env2.step(a) done = t or tr if r > 0: wins += 1 print(f"{map_name}随机策略成功率: {wins/5000*100:.2f}%") # slippery vs non-slippery env3 = gym.make('FrozenLake-v1', map_name="4x4", is_slippery=False) wins = 0 for ep in range(5000): s, _ = env3.reset(seed=ep) done = False while not done: a = env3.action_space.sample() s, r, t, tr, _ = env3.step(a) done = t or tr if r > 0: wins += 1 print(f"4x4非滑行随机策略成功率: {wins/5000*100:.2f}%") print("扩展实验完成 - ✅")

📝 算法伪代码:随机策略交互

输入: 环境env, 回合数N 输出: 平均奖励avg_reward 1. 初始化: total_reward = 0 2. FOR episode = 1 TO N: 3. state = env.reset() 4. done = False 5. WHILE NOT done: 6. action = 随机选择(env.action_space) 7. state, reward, done = env.step(action) 8. total_reward += reward 9. END WHILE 10. END FOR 11. avg_reward = total_reward / N 12. RETURN avg_reward

❓ 常见问题FAQ

Q: 强化学习和监督学习最大的区别是什么?

A: 监督学习有标签(标准答案),RL只有奖励信号(好坏的标量反馈)。RL需要探索来发现好的行为,而监督学习只需要拟合给定的输入-输出映射。

Q: 为什么需要折扣因子gamma?

A: 1)数学上保证无限长回合的回报有限;2)直觉上,未来的奖励不如现在的确定;3)gamma=1时某些任务不收敛。

Q: FrozenLake的is_slippery有什么影响?

A: is_slippery=True时,选择一个方向有1/3概率滑到垂直方向,增加了随机性,使得策略需要更鲁棒。这也使得随机策略的成功率从约50%降到约1.3%。

🏃 动手练习

练习1: 环境探索

修改FrozenLake地图(使用desc参数),观察随机策略在不同地图上的成功率变化

练习2: 策略改进

实现一个简单的启发式策略(如优先向目标方向移动),比较与随机策略的差异

练习3: 奖励分析

统计不同状态下获得奖励的概率分布,绘制热力图

📊 训练曲线说明

✅ 验证通过!实机运行结果:

完整数据: lesson01_result.json

🔬 关键公式推导

强化学习基础的数学基础

强化学习的理论基础建立在概率论和优化理论之上。以下推导展示了强化学习基础背后的核心数学原理:

回报定义: G_t = r_t + gamma * r_{t+1} + gamma^2 * r_{t+2} + ... = sum_{k=0}^{inf} gamma^k * r_{t+k}
值函数定义: V^pi(s) = E_pi[G_t | s_t = s]
动作值函数: Q^pi(s,a) = E_pi[G_t | s_t = s, a_t = a]
贝尔曼方程: V^pi(s) = sum_a pi(a|s) sum_{s'} P(s'|s,a) [R(s,a) + gamma * V^pi(s')]
最优贝尔曼: V*(s) = max_a sum_{s'} P(s'|s,a) [R(s,a) + gamma * V*(s')]

强化学习基础的收敛性分析

算法的收敛性是其理论保证的核心。对于强化学习基础:

强化学习基础的复杂度分析

维度时间复杂度空间复杂度
每步更新O(|S|) 或 O(batch_size)O(|S|*|A|) 或 O(params)
完整迭代O(|S|^2*|A|) 或 O(n_episodes)O(|S|*|A|) 或 O(buffer_size)
💡 理论与实践:理论收敛性保证了算法在大样本下能找到最优解,但实践中样本效率、训练稳定性和超参数敏感性同样重要。强化学习基础在这些方面的表现需要通过实验验证。

🎯 本课小结

本课深入讲解了强化学习基础的核心原理。关键要点:

  1. 理解算法的数学基础和推导过程
  2. 掌握代码实现的关键步骤
  3. 通过实验验证理论预测
  4. 了解算法的适用范围和局限性
🏆
成就解锁:强化学习概述
完成本课所有练习,掌握智能体(Agent)的核心原理