19、强化学习:原理、算法与应用解析

强化学习原理与算法解析

强化学习:原理、算法与应用解析

1. 强化学习概述

强化学习中,学习者是一个决策代理,它在环境中采取行动,并因这些行动获得奖励(或惩罚)以解决问题。经过一系列试错运行后,代理应学会最佳策略,即能使总奖励最大化的行动序列。

1.1 示例引入

  • 下棋机器 :构建一个学习下棋的机器时,不能使用监督学习。一方面,让老师带我们经历多场游戏并指出每个位置的最佳走法成本很高;另一方面,很多情况下不存在绝对的最佳走法,走法的优劣取决于后续的行动,只有在游戏结束时才能得到反馈。
  • 迷宫机器人 :将机器人置于迷宫中,它可向四个方向移动,需做出一系列动作以到达出口。在迷宫中时没有反馈,只有到达出口才能获得奖励,这里可倾向于更短的路径,即与时间赛跑。

1.2 强化学习的特点

这些应用有一些共同点:存在一个决策代理处于环境中,环境在任何时刻都处于一组可能状态中的某一状态,决策代理有一组可能的动作。选择并执行一个动作后,状态会改变,解决任务需要一系列动作,且通常只有在完成整个序列时才能获得反馈。奖励定义了问题,是学习代理所必需的,学习代理的目标是学习最佳动作序列以解决问题,“最佳”量化为具有最大累积奖励的动作序列。

强化学习与之前讨论的学习方法在很多方面不同,它被称为“带有评判者的学习”,与监督学习中的“带有老师的学习”相对。评判者不告诉我们该做什么,只告知过去的表现如何,且反馈稀缺且滞后,这导致了信用分配问题,即获得奖励后,我们需要评估过去的单个动作,找出导致获得奖励的动作并记录下来。

2. 单状态情况:K - 臂老虎机

K - 臂老虎机是一个假设的带有 K 个杠杆的老虎机,动作是选择并拉动其中一个杠杆,我们会赢得与该杠杆相关的一定金额作为奖励。任务是决定拉动哪个杠杆以最大化奖励,这是一个从 K 个选项中选择一个的分类问题。在强化学习中,我们只能尝试不同的杠杆并记录最佳结果。

2.1 确定性奖励情况

设 Q(a) 是动作 a 的值,初始时,所有 Q(a) = 0。当尝试动作 a 时,获得奖励 ra ≥ 0。如果奖励是确定性的,每次拉动杠杆 a 都得到相同的 ra,此时可直接设置 Q(a) = ra。若想利用已知信息,当找到 Q(a) > 0 的动作 a 时,可一直选择它以每次都获得 ra,但可能存在另一个奖励更高的杠杆,所以还需要探索。

2.2 随机性奖励情况

如果奖励是随机的,每次选择相同动作可能得到不同的奖励,奖励金额由概率分布 p(r|a) 定义。此时,定义 Qt(a) 为时间 t 时动作 a 的值的估计,它是在时间 t 之前选择动作 a 所获得的所有奖励的平均值。在线更新公式为:
[Qt + 1(a) \leftarrow Qt(a) + \eta[rt + 1(a) - Qt(a)]]
其中,rt + 1(a) 是在时间 (t + 1) 选择动作 a 后获得的奖励,(\eta) 是学习因子(为了收敛,随时间逐渐减小)。

2.3 与完整强化学习问题的关系

完整的强化学习问题在多个方面对 K - 臂老虎机问题进行了推广:有多个状态,对应多个具有不同奖励概率的老虎机;动作不仅影响奖励,还影响下一个状态;奖励是延迟的,需要从延迟奖励中估计即时值。

3. 强化学习的要素

3.1 基本概念

学习决策代理与环境相互作用,环境包含代理之外的所有内容。代理有传感器来确定其在环境中的状态,并采取动作来改变状态。当代理采取动作时,环境会提供奖励。时间是离散的,用 t = 0, 1, 2, … 表示,st ∈ S 表示代理在时间 t 的状态,S 是所有可能状态的集合;at ∈ A(st) 表示代理在时间 t 采取的动作,A(st) 是状态 st 下的可能动作集合。

3.2 马尔可夫决策过程(MDP)

问题使用马尔可夫决策过程(MDP)建模,奖励和下一个状态从各自的概率分布 p(rt + 1|st, at) 和 P(st + 1|st, at) 中采样。在某些应用中,奖励和下一个状态是确定性的。根据应用,某个状态可能被指定为初始状态,有些应用中还存在一个吸收终端(目标)状态,搜索在该状态结束,该状态下所有动作以概率 1 转移到自身且无奖励。从开始到终端状态的动作序列称为一个回合或一次试验。

3.3 策略与价值函数

  • 策略 :策略 (\pi) 定义了代理的行为,是从环境状态到动作的映射:(\pi: S \rightarrow A),即 at = (\pi)(st)。
  • 价值函数 :策略 (\pi) 的价值 V(\pi)(st) 是代理从状态 st 开始遵循该策略时预期获得的累积奖励。
    • 有限时间范围模型 :代理尝试最大化接下来 T 步的预期奖励:
      [V^{\pi}(s_t) = E[r_{t + 1} + r_{t + 2} + \cdots + r_{t + T}] = E\left[\sum_{i = 1}^{T}r_{t + i}\right]]
    • 无限时间范围模型 :没有序列限制,但未来奖励会被折扣:
      [V^{\pi}(s_t) = E[r_{t + 1} + \gamma r_{t + 2} + \gamma^2 r_{t + 3} + \cdots] = E\left[\sum_{i = 1}^{\infty}\gamma^{i - 1}r_{t + i}\right]]
      其中,0 ≤ (\gamma) < 1 是折扣率,用于使回报有限。(\gamma) 越接近 1,未来奖励越重要,代理越有远见;(\gamma) < 1 是因为解决任务的动作序列通常有时间限制。

3.4 最优策略

对于每个策略 (\pi),都有一个 V(\pi)(st),我们希望找到最优策略 (\pi^ ),使得:
[V^
(s_t) = \max_{\pi}V^{\pi}(s_t), \forall s_t]
在某些应用中,我们更倾向于使用状态 - 动作对的值 Q(st, at)。V(st) 表示代理处于状态 st 的好坏程度,而 Q(st, at) 表示在状态 st 执行动作 at 的好坏程度。定义 Q(^ )(st, at) 为在状态 st 采取动作 at 并随后遵循最优策略时的预期累积奖励。状态的值等于最佳可能动作的值:
[V^
(s_t) = \max_{a_t}Q^ (s_t, a_t) = \max_{a_t}E\left[\sum_{i = 1}^{\infty}\gamma^{i - 1}r_{t + i}\right] = \max_{a_t}E\left[r_{t + 1} + \gamma\sum_{i = 1}^{\infty}\gamma^{i - 1}r_{t + i + 1}\right] = \max_{a_t}E\left(r_{t + 1} + \gamma V^ (s_{t + 1})\right)]
[V^ (s_t) = \max_{a_t}\left(E[r_{t + 1}] + \gamma\sum_{s_{t + 1}}P(s_{t + 1}|s_t, a_t)V^ (s_{t + 1})\right)]
这就是贝尔曼方程。同样,我们可以写出:
[Q^ (s_t, a_t) = E[r_{t + 1}] + \gamma\sum_{s_{t + 1}}P(s_{t + 1}|s_t, a_t)\max_{a_{t + 1}}Q^ (s_{t + 1}, a_{t + 1})]
一旦有了 Q(^ )(st, at) 值,我们可以定义策略 (\pi^ ) 为选择具有最高 Q(^*)(st, at) 值的动作。

3.5 流程示意

graph LR
    classDef startend fill:#F5EBFF,stroke:#BE8FED,stroke-width:2px
    classDef process fill:#E5F6FF,stroke:#73A6FF,stroke-width:2px

    A([开始]):::startend --> B(代理处于状态 st):::process
    B --> C(采取动作 at):::process
    C --> D(环境提供奖励 rt + 1):::process
    D --> E(状态转移到 st + 1):::process
    E --> F{是否到达终端状态}:::process
    F -- 否 --> B
    F -- 是 --> G([结束]):::startend

4. 基于模型的学习

当我们完全了解环境模型参数 p(rt + 1|st, at) 和 P(st + 1|st, at) 时,可以使用基于模型的学习,直接通过动态规划求解最优值函数和策略。

4.1 值迭代

值迭代是一种迭代算法,用于找到最优策略。其伪代码如下:

Initialize V(s) to arbitrary values
Repeat
    For all s ∈ S
        For all a ∈ A
            Q(s, a) ← E[r|s, a] + γ ∑s′∈S P(s′|s, a)V(s′)
        V(s) ← maxa Q(s, a)
Until V(s) converge

当两次迭代之间的最大差值小于某个阈值 (\delta) 时,认为值收敛。由于我们只关心具有最大值的动作,策略可能在值收敛到最优值之前就收敛到最优策略。每次迭代的复杂度为 O(|S|²|A|),但通常下一个可能状态的数量 k < |S| 较小,复杂度可降低到 O(k|S||A|)。

4.2 策略迭代

策略迭代直接存储和更新策略,而不是通过值间接进行。其伪代码如下:

Initialize a policy π′ arbitrarily
Repeat
    π ← π′
    Compute the values using π by
        solving the linear equations
        Vπ(s) = E[r|s, π(s)] + γ ∑s′∈S P(s′|s, π(s))Vπ(s′)
    Improve the policy at each state
        π′(s) ← arg maxa(E[r|s, a] + γ ∑s′∈S P(s′|s, a)Vπ (s′))
Until π = π′

该算法每次迭代的时间复杂度为 O(|A||S|² + |S|³),比值迭代高,但需要的迭代次数比值迭代少。

4.3 两种迭代方法对比

迭代方法 复杂度 迭代次数 适用情况
值迭代 O(k S
策略迭代 O( A

5. 时差学习

5.1 背景与需求

模型由奖励和下一个状态的概率分布定义,当我们知道这些时,可以使用动态规划求解最优策略。但这些方法成本高,且我们很少能完全了解环境。更有趣和现实的强化学习应用是在我们没有模型的情况下,这需要探索环境来查询模型。我们要求环境是平稳的,当探索并看到下一个状态和奖励的值时,会用这些信息更新当前状态的值,这类算法称为时差算法。

5.2 探索策略

  • ϵ - 贪心搜索 :以概率 ϵ 从所有可能动作中均匀随机选择一个动作进行探索,以概率 1 - ϵ 选择最佳动作进行利用。开始时 ϵ 值较高,逐渐降低,且要确保策略是软的,即每个动作被选择的概率大于 0。
  • 软最大化函数 :使用软最大化函数将值转换为概率:
    [P(a|s) = \frac{\exp Q(s, a)}{\sum_{b \in A}\exp Q(s, b)}]
    然后根据这些概率进行采样。为了从探索逐渐过渡到利用,可以使用“温度”变量 T 定义选择动作 a 的概率:
    [P(a|s) = \frac{\exp[Q(s, a)/T]}{\sum_{b \in A}\exp[Q(s, b)/T]}]
    当 T 大时,所有概率相等,进行探索;当 T 小时,更倾向于选择更好的动作。通过逐渐减小 T 实现从探索到利用的平滑过渡。

5.3 确定性奖励和动作情况

在无模型学习的确定性情况下,对于任何状态 - 动作对,只有一个奖励和下一个状态。此时,Q(st, at) 的更新公式为:
[Q(s_t, a_t) = r_{t + 1} + \gamma \max_{a_{t + 1}}Q(s_{t + 1}, a_{t + 1})]
我们使用这个公式更新 Q(st, at) 的估计值 (\hat{Q}(s_t, a_t)):
[\hat{Q}(s_t, a_t) \leftarrow r_{t + 1} + \gamma \max_{a_{t + 1}}\hat{Q}(s_{t + 1}, a_{t + 1})]
这称为备份,即利用下一个时间步的估计值来修正当前动作的值。初始时,所有 (\hat{Q}(s, a)) 为 0,随着试验回合的进行,Q 值逐渐增加,直到找到具有更高累积奖励的路径,且不会减少。

5.4 非确定性奖励和动作情况

如果奖励和动作结果是非确定性的,奖励从概率分布 p(rt + 1|st, at) 中采样,下一个状态从概率分布 P(st + 1|st, at) 中采样。此时,Q(st, at) 的更新使用 Q 学习算法:
[\hat{Q}(s_t, a_t) \leftarrow \hat{Q}(s_t, a_t) + \eta(r_{t + 1} + \gamma \max_{a_{t + 1}}\hat{Q}(s_{t + 1}, a_{t + 1}) - Q(s_t, a_t))]
其中,(\eta) 随时间逐渐减小以保证收敛,该算法已被证明可以收敛到最优 Q(^*) 值。Q 学习是一种离策略方法,而 Sarsa 算法是其在线策略版本,其伪代码如下:

Initialize all Q(s, a) arbitrarily
For all episodes
    Initalize s
    Choose a using policy derived from Q, e.g., ϵ - greedy
    Repeat
        Take action a, observe r and s′
        Choose a′ using policy derived from Q, e.g., ϵ - greedy
        Update Q(s, a):
            Q(s, a) ← Q(s, a) + η(r + γQ(s′, a′) - Q(s, a))
        s ← s′, a ← a′
    Until s is terminal state

Sarsa 算法使用策略来确定下一个动作。此外,还可以使用时差方法学习 V(s) 值,其更新规则为:
[V(s_t) \leftarrow V(s_t) + \eta[r_{t + 1} + \gamma V(s_{t + 1}) - V(s_t)]]
该算法保证收敛到最优值函数 V(^*)(s)。

5.5 资格迹

前面的算法是单步的,资格迹可以实现时间信用分配,允许我们更新先前访问状态的值。以 Sarsa 学习 Q 值为例,为每个状态 - 动作对关联一个额外的记忆变量 e(s, a),初始化为 0。当访问状态 - 动作对 (s, a) 时,其资格设为 1,其他状态 - 动作对的资格乘以 (\gamma\lambda),其中 0 ≤ (\lambda) ≤ 1 是迹衰减参数:
[e_t(s, a) =
\begin{cases}
1 & \text{if } s = s_t \text{ and } a = a_t \
\gamma\lambda e_{t - 1}(s, a) & \text{otherwise}
\end{cases}
]
Sarsa(λ) 算法的伪代码如下:

Initialize all Q(s, a) arbitrarily, e(s, a) ← 0, ∀s, a
For all episodes
    Initalize s
    Choose a using policy derived from Q, e.g., ϵ - greedy
    Repeat
        Take action a, observe r and s′
        Choose a′ using policy derived from Q, e.g., ϵ - greedy
        δ ← r + γQ(s′, a′) - Q(s, a)
        e(s, a) ← 1
        For all s, a:
            Q(s, a) ← Q(s, a) + ηδe(s, a)
            e(s, a) ← γλe(s, a)
        s ← s′, a ← a′
    Until s is terminal state

Q(λ) 和 TD(λ) 算法可以类似推导。

6. 泛化

6.1 表格算法的问题

之前假设 Q(s, a) 值存储在查找表中,这种表格算法存在一些问题:
- 当状态和动作数量很大时,表格尺寸会变得非常大。
- 状态和动作可能是连续的,使用表格需要离散化,可能会导致误差。
- 搜索空间大时,需要太多回合才能以可接受的精度填充表格的所有条目。

6.2 回归方法

可以将其视为回归问题,定义一个回归器 Q(s, a|θ),以 s 和 a 为输入,由参数向量 θ 进行参数化来学习 Q 值。例如,可以使用人工神经网络,以 s 和 a 为输入,一个输出,θ 为连接权重。一个好的函数逼近器具有许多优点,如可以使用连续输入、允许泛化等。

6.3 训练与更新

为了训练回归器,需要一个训练集。以 Sarsa(0) 为例,我们希望 Q(st, at) 接近 rt + 1 + γQ(st + 1, at + 1),可以形成一个训练样本集,输入为状态 - 动作对 (st, at),所需输出为 rt + 1 + γQ(st + 1, at + 1)。使用梯度下降方法时,参数向量的更新公式为:
[\Delta\theta = \eta[r_{t + 1} + \gamma Q(s_{t + 1}, a_{t + 1}) - Q(s_t, a_t)]\nabla_{\theta_t}Q(s_t, a_t)]
在 Sarsa(λ) 中,考虑资格迹,更新公式为:
[\Delta\theta = \eta\delta_t e_t]
其中,时差误差 (\delta_t = r_{t + 1} + \gamma Q(s_{t + 1}, a_{t + 1}) - Q(s_t, a_t)),参数的资格向量更新为:
[e_t = \gamma\lambda e_{t - 1} + \nabla_{\theta_t}Q(s_t, a_t)]
由于强化学习更新是逐个实例进行的,因此局部学习器可能是一个好的选择,如径向基函数。

7. 部分可观测状态

7.1 问题设定

在某些应用中,代理不能确切知道状态,只能通过传感器获得观测值来估计状态。这类似于部分可观测马尔可夫决策过程 (POMDP),在采取动作 at 后,新状态 st + 1 未知,只能得到观测值 ot + 1,它是 st 和 at 的随机函数 p(ot + 1|st, at)。如果 ot + 1 = st + 1,POMDP 退化为 MDP。代理需要从观测值推断状态(或状态的概率分布)并据此行动。由于观测不具有马尔可夫性质,两个看起来相同的状态可能需要不同的动作,这可能导致累积奖励的损失。代理可以压缩过去的轨迹来估计当前状态,也可以使用过去的观测窗口或循环神经网络来维护状态。

7.2 老虎问题示例

假设我们站在两扇门前,一扇门后有老虎,另一扇门后有宝藏。两个动作分别是打开左门 (aL) 和打开右门 (aR),奖励矩阵如下:
| 动作 \ 老虎位置 | 老虎在左 | 老虎在右 |
| — | — | — |
| 打开左门 | -100 | +80 |
| 打开右门 | +90 | -100 |
设 p 为老虎在左门的概率,则两个动作的预期奖励为:
[R(a_L) = -100p + 80(1 - p)]
[R(a_R) = 90p - 100(1 - p)]
当 p 接近 0.5 时,预期奖励为负,说明收集信息很重要。可以使用麦克风作为传感器,检测老虎位置的概率为 0.7。当检测到 oL 时,更新 p 的值:
[p’ = P(z_L|o_L) = \frac{0.7p}{0.7p + 0.3(1 - p)}]
并相应更新动作的预期奖励。考虑传感器读数的加权平均来计算预期奖励:
[V’ = \sum_{j}\left[\max_{i}R(a_i|o_j)\right]P(O_j)]
如果老虎可以在两个房间之间移动,p 需要更新为:
[p’ = 0.2p + 0.8(1 - p)]
并在选择最佳动作时使用更新后的 p 值。当考虑更长的回合时,可以继续迭代更新 p 并进行折扣计算。

7.3 算法复杂度与近似方法

当状态、动作、观测和回合长度都有限时,使用分段线性函数表示值的算法有效。但在实际应用中,复杂度可能很高,需要使用具有合理复杂度的近似算法。

8. 应用与展望

强化学习在许多领域有广泛应用,如机器人导航、游戏、作业车间调度等。与经典动态规划相比,强化学习具有可以专注于重要部分和使用函数逼近方法进行泛化的优点。虽然强化学习算法比监督学习算法慢,但它的应用范围更广,有潜力构建更好的学习机器。随着技术的发展,我们有望在未来看到更多令人印象深刻的结果。例如,TD - Gammon 程序通过自我对弈学习玩西洋双陆棋,达到了大师水平;在作业车间调度中,强化学习可以快速找到满足约束且时间短的调度方案。此外,分层方法也被提出,将问题分解为子问题,加快学习速度,但组合时策略可能不是最优的。

【四旋翼无人机】具备螺旋桨倾斜机构的全驱动四旋翼无人机:建模控制研究(Matlab代码、Simulink仿真实现)内容概要:本文围绕具备螺旋桨倾斜机构的全驱动四旋翼无人机展开研究,重点探讨其系统建模控制策略,结合Matlab代码Simulink仿真实现。文章详细分析了无人机的动力学模型,特别是引入螺旋桨倾斜机构后带来的全驱动特性,使其在姿态位置控制上具备更强的机动性自由度。研究涵盖了非线性系统建模、控制器设计(如PID、MPC、非线性控制等)、仿真验证及动态响应分析,旨在提升无人机在复杂环境下的稳定性和控制精度。同时,文中提供的Matlab/Simulink资源便于读者复现实验并进一步优化控制算法。; 适合人群:具备一定控制理论基础和Matlab/Simulink仿真经验的研究生、科研人员及无人机控制系统开发工程师,尤其适合从事飞行器建模先进控制算法研究的专业人员。; 使用场景及目标:①用于全驱动四旋翼无人机的动力学建模仿真平台搭建;②研究先进控制算法(如模型预测控制、非线性控制)在无人机系统中的应用;③支持科研论文复现、课程设计或毕业课题开发,推动无人机高机动控制技术的研究进展。; 阅读建议:建议读者结合文档提供的Matlab代码Simulink模型,逐步实现建模控制算法,重点关注坐标系定义、力矩分配逻辑及控制闭环的设计细节,同时可通过修改参数和添加扰动来验证系统的鲁棒性适应性。
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符  | 博主筛选后可见
 
红包 添加红包
表情包 插入表情
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值