学习目标
完成本课后,你将能够:
- 解释强化学习与监督学习、无监督学习的区别。
- 区分智能体、环境、状态、行动、奖励和回合。
- 解释策略、价值函数和折扣回报。
- 区分探索与利用。
- 从概念层面描述 Q-learning、基于策略的方法和 Actor–Critic。
- 构建教学用强化学习任务,并识别奖励设计和不安全探索的风险。
1. 强化学习与其他学习范式的区别
监督学习中的每个训练样本都有已知目标。无监督学习没有预先定义的标签,算法需要寻找数据结构。在强化学习(Reinforcement Learning,RL)中,智能体与环境交互:选择行动,并获得新状态和奖励。
其关键是连续决策。行动不仅影响即时奖励,也会影响未来状态和可选行动。因此必须考虑长期结果。
例如,机器人学习移动,游戏智能体学习选择棋步,或者控制器在仿真中学习如何在限制能耗的同时维持舒适温度。
2. 强化学习任务的组成
| 要素 | 含义 | 建筑示例 |
|---|---|---|
| 智能体 | 做出决策。 | 虚拟供暖控制器。 |
| 环境 | 决策产生作用的系统。 | 建筑、天气和热惯性模型。 |
| 状态 s | 当前情况描述。 | 温度、时间、天气预报。 |
| 行动 a | 智能体的选择。 | 提高、降低或保持功率。 |
| 奖励 r | 对结果的数值反馈。 | 舒适度、成本和约束之间的平衡。 |
| 状态转移 | 状态变化规则。 | 温度随天气和热惯性变化。 |
常见的数学形式是马尔可夫决策过程(MDP):状态集合 S、行动集合 A、奖励函数 R、转移概率 P 和初始状态分布。一个回合是直到终止条件出现的一段交互序列。
3. 奖励、回报与折扣
奖励是环境在行动或状态转移后返回的数值信号,可以是正数、零或负数。一系列步骤中的奖励总和称为回报(return)。
折扣因子 γ 介于 0 和 1 之间,用于设定未来奖励的相对权重。γ 较小时更重视近期结果,接近 1 时会更多考虑远期结果。
奖励不等于人的真实目标。如果系统只因节能而获得奖励,它可能通过不可接受地降低舒适度来实现节能。因此,安全约束、允许范围和紧急模式必须单独定义。
4. 策略、价值、探索与利用
- 策略(policy,π)是根据状态或观察选择行动的规则。
- 价值函数估计从某个状态出发的期望未来回报。
- Q(s, a)估计在状态 s 中执行行动 a、随后遵循策略时的期望回报。
探索(exploration)用于尝试结果尚不明确的行动。利用(exploitation)则选择当前估计最好的行动。只探索会浪费经验;过早只利用则可能错过更好的策略。
5. 主要算法类别
- 基于价值的方法:估计状态或状态—行动对的价值,例如 Q-learning。
- 基于策略的方法:直接优化策略或行动概率分布,例如 policy gradient。
- Actor–critic:结合选择行动的 actor 与评价状态或行动的 critic。
- 基于模型的强化学习:利用环境动态模型进行规划。
- 深度强化学习:在复杂状态空间中使用神经网络表示策略或价值函数。
这些类别并非互斥:深度强化学习也可以采用基于价值、基于策略或 actor–critic 方法。选择取决于行动类型、交互成本、模型可用性和稳定性要求。
6. 任务示例:仿真中的建筑控制
假设智能体只在安全仿真中控制供暖。状态包括室内外温度、时间和天气预报。行动是略微提高功率、降低功率或保持不变。奖励可以同时考虑舒适度偏差和能耗。
7. 实践:使用 Python 实现最小 Q-learning
下面的一维教学环境有五个状态。智能体从位置 0 出发,到达位置 4 为目标。行动是向左或向右。到达目标奖励 +1,每个中间步骤惩罚 −0.02。无需外部库,要求 Python 3.10+。
import random
random.seed(7)
N_STATES = 5
ACTIONS = (-1, 1) # left, right
Q = [[0.0, 0.0] for _ in range(N_STATES)]
alpha, gamma, epsilon = 0.2, 0.95, 0.2
def step(state, action):
next_state = max(0, min(N_STATES - 1, state + action))
done = next_state == N_STATES - 1
reward = 1.0 if done else -0.02
return next_state, reward, done
for episode in range(400):
state = 0
for _ in range(10):
if random.random() < epsilon:
action_index = random.randrange(len(ACTIONS))
else:
action_index = max(range(2), key=lambda i: Q[state][i])
action = ACTIONS[action_index]
next_state, reward, done = step(state, action)
best_next = 0.0 if done else max(Q[next_state])
target = reward + gamma * best_next
Q[state][action_index] += alpha * (target - Q[state][action_index])
state = next_state
if done:
break
state, path = 0, [0]
for _ in range(10):
action_index = max(range(2), key=lambda i: Q[state][i])
state, _, done = step(state, ACTIONS[action_index])
path.append(state)
if done:
break
print(" -> ".join(map(str, path)))代码说明
Q[state][action_index]保存某个状态下行动的估值。epsilon设定随机探索概率。target结合即时奖励与下一个状态的最佳行动估值。alpha控制更新步长,gamma控制未来奖励的权重。
预期输出:0 -> 1 -> 2 -> 3 -> 4。这只是 Q-learning 机制示例,不代表算法适用于真实设备。
8. 局限性与常见错误
- 奖励设计不当:智能体优化的形式信号可能与真实目标不一致。
- 不安全探索:真实环境中的随机行动可能不可接受。
- 经验成本高:训练可能需要大量交互或仿真器。
- 仿真与现实差距:仿真中学到的行为不一定能迁移。
- 部分可观测与不稳定:重要因素可能不可见,结果也会受到随机种子和设置影响。
强化学习不能保证安全或最优控制。必须进行测试、设置独立约束、监控系统,并保留停止或人工接管行动的能力。
9. 本课要点
- 强化学习通过环境交互和奖励训练智能体。
- 行动具有连续后果,因此长期回报很重要。
- 策略负责选择行动,价值函数估计结果。
- 探索与利用需要平衡。
- 质量取决于任务定义、奖励、约束和环境,而不只是算法。
独立练习
为建筑教学仿真设计一个强化学习任务:列出三个观察量、允许行动、奖励示例、回合结束条件和两个硬性安全约束。说明如果奖励只考虑能耗,可能出现什么不良行为。