学习目标

完成本课后,你将能够:

核心思想。强化学习通过行动后果训练智能体。环境返回奖励和新状态,智能体逐步改进自己的行为策略。

1. 强化学习与其他学习范式的区别

监督学习中的每个训练样本都有已知目标。无监督学习没有预先定义的标签,算法需要寻找数据结构。在强化学习(Reinforcement Learning,RL)中,智能体与环境交互:选择行动,并获得新状态和奖励。

其关键是连续决策。行动不仅影响即时奖励,也会影响未来状态和可选行动。因此必须考虑长期结果。

智能体与环境循环智能体接收状态并向环境发送行动。环境返回新状态和奖励。智能体选择行动环境改变状态行动 aₜ →← 新状态 sₜ₊₁ 与奖励 rₜ₊₁观察 → 行动 → 后果 → 新观察
交互循环:智能体选择行动,环境返回结果。有时智能体只能获得观察,而不是完整状态。

例如,机器人学习移动,游戏智能体学习选择棋步,或者控制器在仿真中学习如何在限制能耗的同时维持舒适温度。

2. 强化学习任务的组成

要素含义建筑示例
智能体做出决策。虚拟供暖控制器。
环境决策产生作用的系统。建筑、天气和热惯性模型。
状态 s当前情况描述。温度、时间、天气预报。
行动 a智能体的选择。提高、降低或保持功率。
奖励 r对结果的数值反馈。舒适度、成本和约束之间的平衡。
状态转移状态变化规则。温度随天气和热惯性变化。

常见的数学形式是马尔可夫决策过程(MDP):状态集合 S、行动集合 A、奖励函数 R、转移概率 P 和初始状态分布。一个回合是直到终止条件出现的一段交互序列。

状态与奖励序列时间线表示时间方向。实心圆分别表示当前状态、行动、下一状态和更晚的状态;类别标签位于圆圈上方,符号居中显示在圆圈内。当前行动下一状态之后sₜaₜsₜ₊₁sₜ₊₂行动之后评估奖励;部分后果会在之后显现。
评价行动时,不仅要看即时奖励,也要考虑未来后果。

3. 奖励、回报与折扣

奖励是环境在行动或状态转移后返回的数值信号,可以是正数、零或负数。一系列步骤中的奖励总和称为回报(return)。

折扣回报公式Gₜ = rₜ₊₁ + γrₜ₊₂ + γ²rₜ₊₃ + …

折扣因子 γ 介于 0 和 1 之间,用于设定未来奖励的相对权重。γ 较小时更重视近期结果,接近 1 时会更多考虑远期结果。

奖励不等于人的真实目标。如果系统只因节能而获得奖励,它可能通过不可接受地降低舒适度来实现节能。因此,安全约束、允许范围和紧急模式必须单独定义。

4. 策略、价值、探索与利用

探索(exploration)用于尝试结果尚不明确的行动。利用(exploitation)则选择当前估计最好的行动。只探索会浪费经验;过早只利用则可能错过更好的策略。

探索与利用探索测试其他选择,利用选择当前已知的最佳选项。探索尝试其他选择利用选择当前最佳选项需要根据学习阶段与风险进行平衡
探索与利用是策略中需要平衡的两个方面。

5. 主要算法类别

这些类别并非互斥:深度强化学习也可以采用基于价值、基于策略或 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)))

代码说明

预期输出:0 -> 1 -> 2 -> 3 -> 4。这只是 Q-learning 机制示例,不代表算法适用于真实设备。

8. 局限性与常见错误

强化学习不能保证安全或最优控制。必须进行测试、设置独立约束、监控系统,并保留停止或人工接管行动的能力。

9. 本课要点

独立练习

为建筑教学仿真设计一个强化学习任务:列出三个观察量、允许行动、奖励示例、回合结束条件和两个硬性安全约束。说明如果奖励只考虑能耗,可能出现什么不良行为。