当前位置: 首页 > ds >正文

Unit 3 Q-Learning 简介

Q-Learning 简介

在本单元中,我们将深入探讨强化学习(Reinforcement Learning, RL)方法中的一种:基于值的方法(value-based methods),并学习我们的第一个强化学习算法:Q-Learning。从头开始实现一个强化学习智能体(RL agent),即一个Q-Learning智能体,并在两个环境中对其进行训练:

  • 冰冻湖面环境(Frozen-Lake-v1,非滑版本):在这个环境中,我们的智能体需要从起始状态(S)出发,仅通过行走在冰冻的瓷砖(F)上,避开洞穴(H),最终到达目标状态(G)。
  • 自动驾驶出租车环境:在这个环境中,我们的智能体需要学会在城市中导航,将乘客从A点运送到B点。

什么是强化学习(RL)?简要回顾

在强化学习中,我们构建一个能够做出智能决策的智能体。例如,一个学会玩电子游戏的智能体,或者一个学会通过决定购买哪些股票以及何时卖出以最大化其收益的交易智能体。为了做出智能决策,我们的智能体将通过与环境进行交互(通过试错)并接收奖励(正面或负面)作为独特的反馈来从环境中学习。其目标是最大化其预期的累积奖励(这是基于奖励假设的)。

智能体的决策过程被称为策略π:给定一个状态,策略将输出一个动作或动作上的概率分布。也就是说,给定对环境的一个观察,策略将提供一个智能体应该采取的动作(或每个动作的概率)。

我们的目标是找到一个最优策略π*,即一个能够带来最佳预期累积奖励的策略。主要有两种类型的强化学习方法:

  • 基于策略的方法:直接训练策略以学习在给定状态下应采取哪个动作。
  • 基于值的方法:训练一个值函数来学习哪个状态更有价值,并利用这个值函数来采取能够到达该状态的动作。

两种基于值的方法

在基于值的方法中,我们学习一个值函数,该函数将状态映射到处于该状态时的期望值。一个状态的值是指,如果智能体从该状态出发,然后按照我们的策略行事,它所能获得的期望折扣回报。但是,按照我们的策略行事是什么意思呢?毕竟,在基于值的方法中,我们并没有一个明确的策略,因为我们训练的是一个值函数,而不是策略。 但是强化学习智能体的目标是拥有一个最优策略π*。

为了找到这个最优策略,我们了解了两种不同的方法:

  • 基于策略的方法:直接训练策略,以在给定状态下选择要采取的动作(或该状态下动作的概率分布)。因此,我们不需要手动定义策略的行为,策略的行为是由训练过程来定义的。

  • 基于值的方法:间接地,通过训练一个值函数来输出一个状态或状态-动作对的值。给定这个值函数,我们需要定义策略来采取相应的动作。由于策略本身并没有被训练或学习,因此我们需要定义它。例如,在给定值函数的情况下,总是采取能够带来最大奖励的动作,那么我们将创建一个贪婪策略(Greedy Policy)。

因此,无论你使用哪种方法来解决你的问题,你都会得到一个策略。在基于值的方法中,你并不会直接训练策略:你的策略只是一个简单的预先指定的函数(例如,贪婪策略),该函数利用值函数给出的值来选择其动作。所以区别在于:

  • 在基于策略的训练中,最优策略(记作π)是通过直接训练策略来找到的。
  • 在基于值的训练中,找到一个最优值函数(记作Q或V*)会引导我们得到一个最优策略。
状态值函数

在状态值函数中,对于每一个状态,状态值函数输出的是,如果智能体从该状态出发,并随后永远遵循该策略(可以理解为在所有未来的时间步长中)所能获得的期望回报。

在策略π下,状态值函数表示如下:
V π ( s ) = E π [ G t ∣ S t = s ] V_{\pi}(s) = \text{E}_{\pi}[G_t|S_t = s] Vπ(s)=Eπ[GtSt=s]

动作值函数

在动作值函数中,对于每一个状态和动作的组合对,动作值函数输出的是,如果智能体从该状态出发,采取该动作,并随后永远遵循该策略,所能获得的期望回报。

在策略π下,在状态动作值函数表示如下:
Q π ( s , a ) = E π [ G t ∣ S t = s , A t = a ] Q_{\pi}(s,a) = \text{E}_{\pi}[G_t|S_t = s, A_t = a] Qπ(s,a)=Eπ[GtSt=s,At=a]

贝尔曼方程:简化价值估计

贝尔曼方程简化了对状态值或状态-动作值的计算,我们知道,如果要计算 V ( S t ) V(S_t) V(St)(即某个状态的值),我们需要计算从该状态开始并随后始终遵循策略(为简化起见,我们不对奖励进行折扣)所获得的奖励总和。你可能已经注意到了,我们在重复计算不同状态的价值,如果需要对每个状态价值或状态-动作价值都进行这样的计算,那将会非常繁琐,下面通过贝尔曼方程来简化它。

贝尔曼方程是一个递归方程,其工作原理如下:我们不必从每个状态的初始状态开始计算回报,而是可以将任何状态的价值视为即时奖励后续状态的折扣价值之和:
Immediate reward :  R t + 1 + Discounted value of the state that follows :  γ V ( S t + 1 ) \text{Immediate reward : } R_{t+1} + \text{Discounted value of the state that follows : } \gamma V(S_{t+1}) Immediate reward : Rt+1+Discounted value of the state that follows : γV(St+1)
V ( S t ) → R t + 1 V ( S t + 1 ) V(S_t) \xrightarrow{R_{t+1}} V(S_{t+1}) V(St)Rt+1 V(St+1)
V ( S t ) = R t + 1 + γ V ( S t + 1 ) V(S_t) = R_{t+1} + \gamma V(S_{t+1}) V(St)=Rt+1+γV(St+1)
V π ( s ) = E π [ R t + 1 + γ V π ( S t + 1 ) ∣ S t = s ] V_{\pi}(s) = E_{\pi}[R_{t+1} + \gamma V_{\pi}(S_{t+1})|S_t = s] Vπ(s)=Eπ[Rt+1+γVπ(St+1)St=s]

蒙特卡洛方法与时间差分学习

强化学习(RL)智能体通过与环境交互来学习。其核心思想是,基于所获得的经验和收到的奖励,智能体会更新其价值函数或策略。蒙特卡洛方法时间差分学习是训练价值函数或策略函数的两种不同策略。它们都利用经验来解决强化学习问题。一方面,蒙特卡洛方法在学习之前会使用一整段经验(即一个完整的回合)。另一方面,时间差分学习则仅使用一步经验 ( S t , A t , R t + 1 , S t + 1 ) (S_t, A_t, R_{t+1}, S_{t+1}) (St,At,Rt+1,St+1)来进行学习。下面会通过一个基于价值的方法示例来解释这两种策略。

蒙特卡洛方法:在回合结束时学习

蒙特卡洛方法会等待回合结束,计算 G t G_t Gt(回报),并将其用作更新 V ( S t ) V(S_t) V(St)的目标。因此,它需要在更新价值函数之前完成一整段交互回合。
V ( S t ) ← V ( S t ) + α [ G t − V ( S t ) ] V(S_t) \leftarrow V(S_t) + \alpha[G_t - V(S_t)] V(St)V(St)+α[GtV(St)]

  • V ( S t ) V(S_t) V(St) : 状态 t t t的更新后值
  • V ( S t ) V(S_t) V(St) : 状态 t t t值的先前估计值 (=从状态 t t t开始的预期回报)
  • G t G_t Gt : 在时间步 t t t处的回报
  • α \alpha α : 学习率
时间差分学习:在每一步进行学习

时间差分学习只需等待一次交互(即一步)到 S t + 1 S_{t+1} St+1,就可以形成一个时间差分(TD)目标,并利用 R t + 1 R_{t+1} Rt+1 γ ∗ V ( S t + 1 γ * V(S_{t+1} γV(St+1)(其中 γ γ γ为折扣因子)来更新 V ( S t ) V(S_t) V(St)。时间差分学习的理念是在每一步都更新 V ( S t ) V(S_t) V(St)。但由于我们并未经历一个完整的回合,因此无法获得 G t G_t Gt(预期回报)。相反,我们通过将 R t + 1 R_{t+1} Rt+1 和下一状态的折扣价值相加来估算 G t G_t Gt。这被称为自举(bootstrapping)。之所以这样称呼,是因为时间差分学习的更新部分基于现有的估计值 V ( S t + 1 ) V(S_{t+1}) V(St+1),而非完整回合的 G t G_t Gt
V ( S t ) ← V ( S t ) + α [ R t + 1 + γ V ( S t + 1 ) − V ( S t ) ] V(S_t) \leftarrow V(S_t) + \alpha[R_{t+1} + \gamma V(S_{t+1}) - V(S_t)] V(St)V(St)+α[Rt+1+γV(St+1)V(St)]

  • R t + 1 + γ V ( S t + 1 ) R_{t+1} + \gamma V(S_{t+1}) Rt+1+γV(St+1) : TD Target ∼ G t \sim G_t Gt

总结:

使用蒙特卡洛方法时,我们根据一个完整的回合来更新价值函数,因此我们使用该回合实际准确的折扣回报。

而使用时间差分学习时,我们根据一步来更新价值函数,并将我们未知的 G t G_t Gt 替换为一个被称为时间差分目标的估计回报。

Q-Learning

Q学习是一种基于价值的off-policy方法,它采用时间差分(TD)方法来训练其动作价值函数(Q函数):

  • off-policy :使用不同的策略进行作 (推理) 和更新 (训练)。
  • Value-based:通过训练一个价值函数或动作价值函数来间接找到最优策略,该函数会告诉我们每个状态或每个状态-动作对的价值。
  • TD:在每一步都更新其动作价值函数,而不是在回合结束时更新。

Q中的“Q”代表在该状态下采取该动作的“质量”(即价值),让我们回顾一下价值和奖励之间的区别:

  • 状态或状态-动作对的价值是指,如果智能体从这个状态(或状态-动作对)开始,然后按照其策略行动,它所能获得的预期累积奖励。
  • 奖励是我在某个状态下执行一个动作后从环境中获得的反馈。

Q-Learning中,Q函数是通过一个Q表( n u m S num_S numS n u m A num_A numA列)来编码的,这个表中的每个单元格都对应一个状态-动作对的价值。可以把这个Q表看作是我们Q函数的记忆或备忘录。

Q-Learning:

  • 训练一个Q函数(即动作价值函数),该函数在内部是一个包含所有状态-动作对价值的Q表。
  • 给定一个状态和动作,我们的Q函数会在其Q表中查找对应的价值。
  • 当训练完成后,我们会得到一个最优的Q函数,这意味着我们拥有了一个最优的Q表,也就拥有了一个最优策略。
    π ∗ ( s ) = argmax a Q ∗ ( s , a ) \pi^{*}(s) = \text{argmax}_a Q^{*}(s,a) π(s)=argmaxaQ(s,a)
Q学习算法(Sarsmax)
  • Input: π , n : num episodes, α ,GLIE { ϵ i } \pi,n :\text{ num episodes},\alpha ,\text{GLIE}\{\epsilon_i\} πn: num episodesαGLIE{ϵi}
  • Output: value function  Q \text{value function } Q value function Q
  • Initialize Q ( s , a ) = 0 ,for all  s ∈ S and  a ∈ A ( s ) Q(s, a) = 0,\text{for all } s \in S \text{ and } a \in \mathcal{A}(s) Q(s,a)=0for all sS and aA(s)
  • for i ← 1 i \leftarrow 1 i1 to n do:
    • ϵ ← ϵ i , t ← 0 ,Observe  S 0 \epsilon \leftarrow \epsilon_i,t \leftarrow 0,\text{Observe } S_0 ϵϵit0Observe S0
    • repeat \text{repeat} repeat:
      • Choose action A t A_t At using policy derived from Q Q Q (e.g., ϵ − greedy \epsilon-\text{greedy} ϵgreedy)
      • Take action A t A_t At and observe R t + 1 , S t + 1 R_{t+1},S_{t+1} Rt+1St+1
      • Q ( S t , A t ) ← Q ( S t , A t ) + α [ R t + 1 + γ max α Q ( S t + 1 , a ) − Q ( S t , A t ) ] Q(S_t, A_t) \leftarrow Q(S_t, A_t) + \alpha[R_{t+1} + \gamma \text{max}_{\alpha} Q(S_{t+1},a) - Q(S_t,A_t)] Q(St,At)Q(St,At)+α[Rt+1+γmaxαQ(St+1,a)Q(St,At)]
      • t ← t + 1 t \leftarrow t + 1 tt+1
    • until terminal \text{until terminal} until terminal
  • end \text{end} end
  • return  Q \text{return }Q return Q

ϵ-greedy 策略是一种在强化学习(Reinforcement Learning, RL)中广泛使用的策略,用于平衡探索(exploration)和利用(exploitation)之间的权衡。在强化学习中,智能体(agent)需要在环境中采取行动以最大化累积奖励。探索意味着尝试新的行动以发现可能更好的策略,而利用则意味着选择当前已知的最佳行动以最大化即时奖励。

ϵ-greedy 策略的核心思想是:

  • 以 1−ϵ 的概率选择当前估计的最优行动(利用)。
  • 以 ϵ 的概率随机选择一个行动(探索)。
  • 其中,ϵ 是一个介于 0 和 1 之间的参数,用于控制探索和利用的比例。

在 Q-Learning 中,智能体在探索环境时,通常使用 ϵ-贪心策略(acting policy)来选择行动。这意味着智能体以 1−ϵ 的概率选择当前估计的最优行动(利用),以 ϵ 的概率随机选择一个行动(探索)。这种策略允许智能体在探索新行动和利用已知最佳行动之间找到平衡。然而,在更新 Q 值时,Q 学习并不直接使用 ϵ-贪心策略。相反,它使用贪心策略 (updating policy)(即总是选择具有最高 Q 值的行动)来估计下一个状态的最佳状态-动作对价值。这种策略仅用于学习,而不用于实际的行动选择。这就是为什么我们说 Q 学习是一种离策略(off-policy)算法。

http://www.xdnf.cn/news/13897.html

相关文章:

  • 06-Python流程控制
  • [论文阅读] 人工智能 | ComfyUI-R1: Exploring Reasoning Models for Workflow Generation
  • JDBC接口开发指南
  • kali系统 windows Linux靶机入侵演练
  • 《Qt5.14.1与Mingw C++:打造可发布程序的技术之旅》
  • 实时监控、秒级决策:镜舟科技如何重塑融资融券业务数据处理模式
  • @SchedulerLock处理Spring Task在分布式环境下的重复执行问题
  • Transformer模型详解
  • leetcode 169. 多数元素
  • 数据结构-为什么双指针法可以用来解决环形链表?-使用O(1)的空间复杂度去解决环形链表的思路
  • React 基础状态管理方案
  • 基于Orange Pi Zero3的音频管理系统搭建与远程访问实现
  • ⭐ Unity 实现屏幕涟漪效果:自动生成 \ 点击交互生成涟漪
  • F5深化与Red Hat战略合作 ,赋能企业AI规模化安全部署
  • 开源综合性网络安全检测和运维工具-TscanClient
  • pikachu靶场通关笔记26 SQL注入09-时间盲注(base on time)
  • Python打卡训练营-Day29-复习日:类的装饰器
  • dify的知识库的父子分段和通用分段的对比
  • { C++ } —— string类的使用
  • 1年从零通过CISSP!
  • Day52 Python打卡训练营
  • LaViDa:基于扩散模型的多模态大模型,速度超越next-token范式
  • 海思网卡框架介绍
  • Application with id application_xxx doesn‘t exist in RM解决方法
  • 基于mapreduce的气候分析系统设计与实现
  • 创客匠人:为知识变现与 IP 打造赋能
  • 纯血HarmonyOS ArKTS NETX 5 打造小游戏实践:狼人杀(介绍版(附源文件)
  • docker 02网络
  • Rollup vs Webpack 深度对比:前端构建工具终极指南
  • (二十六)深度解析领域特定语言(DSL)第四章——词法分析:基于正则表达式的词法分析器