强化学习Q-Learning算法

2023-05-16

强化学习Q-Learning算法

  • 前言
  • 基本概念
    • 基本概念
    • 递推关系
  • Q-learning基本原理
  • 注意事项
  • 局限性
  • 仿真

前言

学习这个算法有一段时间了,但是因为自己犯懒一直没有整理。现整理一下,一方面有刚入门的同学可以参考,另一方面哪里写错或者理解不深的还请大家及时指正。

基本概念

基本概念

首先列出一些强化学习中的基本概念,主要是为了帮助自己回忆起学习这个算法的过程。

  1. 状态值函数:智能体在状态 s s s 处的累计回报的期望值被称为智能在在采用策略 π \pi π 时在状态 s s s 处的状态值函数。用公式表示如下: v π ( s ) = E [ ∑ k = 0 ∞ γ k R t + k + 1 ∣ S t = s ] v_{\pi}\left(s\right) = \mathbb{E}\left[\sum_{k=0}^{\infty}\gamma^{k}\mathcal{R}_{t+k+1}|S_{t}=s\right] vπ(s)=E[k=0γkRt+k+1St=s]
    不同的策略 π \pi π 在相同的状态 s s s 下对应的状态值函数是不同的,因为策略 π \pi π 本身会影响智能体处在某一状态是的行为,进而改变累计回报 G \mathcal{G} G
  2. 状态-行为值函数:智能体在状态 s s s 处执行动作 a a a 所获得的累计回报的期望值被定义为智能体在策略 π \pi π 时处在状态 s s s 处执行动作 a a a 的状态-行为值函数。用公式表示如下: q π ( s , a ) = E π [ ∑ k = 0 ∞ γ k R t + k + 1 ∣ S t = s , A t = a ] q_{\pi}\left(s,a\right)=\mathbb{E}_{\pi}\left[\sum_{k=0}^{\infty}\gamma^{k}\mathcal{R}_{t+k+1}|S_{t}=s, A_{t}=a\right] qπ(s,a)=Eπ[k=0γkRt+k+1St=s,At=a]

递推关系

智能体的状态值函数和状态行为值函数之间存在一种递推关系。下图给出四种递推关系:
Alt

  1. v π ( s ) → q π ( s , a ) v_{\pi}\left(s\right)\rightarrow q_{\pi}\left(s,a\right) vπ(s)qπ(s,a) v π ( s ) = ∑ a ∈ A π ( a ∣ s ) q π ( s , a ) v_{\pi}\left(s\right)=\sum_{a\in A}\pi\left(a|s\right)q_{\pi}\left(s,a\right) vπ(s)=aAπ(as)qπ(s,a)
  2. v π ( s ) → v π ( s ′ ) v_{\pi}\left(s\right)\rightarrow v_{\pi}\left(s'\right) vπ(s)vπ(s) v π ( s ) = ∑ a ∈ A π ( a ∣ s ) [ R s a + γ ∑ s ′ P s s ′ a v π ( s ′ ) ] v_{\pi}\left(s\right)=\sum_{a\in A}\pi\left(a|s\right)\left[R_{s}^{a}+\gamma\sum_{s'}P_{ss'}^{a}v_{\pi}\left(s'\right)\right] vπ(s)=aAπ(as)[Rsa+γsPssavπ(s)]
  3. q π ( s , a ) → v π ( s ′ ) q_{\pi}\left(s,a\right)\rightarrow v_{\pi}\left(s'\right) qπ(s,a)vπ(s) q π ( s , a ) = R s a + γ ∑ s ′ P s s ′ a v π ( s ′ ) q_{\pi}\left(s,a\right)=R_{s}^{a}+\gamma\sum_{s'}P_{ss'}^{a}v_{\pi}\left(s'\right) qπ(s,a)=Rsa+γsPssavπ(s)
  4. q π ( s , a ) → q π ( s ′ , a ′ ) q_{\pi}\left(s,a\right)\rightarrow q_{\pi}\left(s',a'\right) qπ(s,a)qπ(s,a) q π ( s , a ) = R s a + γ ∑ s ′ P s s ′ a [ ∑ a ′ ∈ A π ( s ′ ∣ a ′ ) q π ( s ′ , a ′ ) ] q_{\pi}\left(s,a\right)=R_{s}^{a}+\gamma\sum_{s'}P_{ss'}^{a}\left[\sum_{a'\in A}\pi\left(s'|a'\right)q_{\pi}\left(s',a'\right)\right] qπ(s,a)=Rsa+γsPssa[aAπ(sa)qπ(s,a)]

Q-learning基本原理

Q-Learning算法是一种基于表格的值函数迭代的强化学习算法。这个方法最大的特点就是建立一张Q值表(Q-Table),算法迭代时Q值表不停地被更新,直至最后表中数据收敛。等到Q值表收敛后,智能体可以根据每个状态的行为值函数的大小来确定最优策略。Q值表示意如下:

Q − T a b l e Q-Table QTable a 1 a_{1} a1 a 2 a_{2} a2 ⋯ \cdots a m a_{m} am
s 1 s_{1} s1 q ( s 1 , a 1 ) q\left(s_{1}, a_{1}\right) q(s1,a1) q ( s 1 , a 2 ) q\left(s_{1}, a_{2}\right) q(s1,a2) q ( s 1 , ⋯   ) q\left(s_{1}, \cdots\right) q(s1,) q ( s 1 , a m ) q\left(s_{1}, a_{m}\right) q(s1,am)
s 2 s_{2} s2 q ( s 2 , a 1 ) q\left(s_{2}, a_{1}\right) q(s2,a1) q ( s 2 , a 2 ) q\left(s_{2}, a_{2}\right) q(s2,a2) q ( s 2 , ⋯   ) q\left(s_{2}, \cdots\right) q(s2,) q ( s 2 , a m ) q\left(s_{2}, a_{m}\right) q(s2,am)
⋮ \vdots q ( ⋯   , a 1 ) q\left(\cdots, a_{1}\right) q(,a1) q ( ⋯   , a 2 ) q\left(\cdots, a_{2}\right) q(,a2) ⋱ \ddots q ( ⋯   , a m ) q\left(\cdots, a_{m}\right) q(,am)
s n s_{n} sn q ( s n , a 1 ) q\left(s_{n}, a_{1}\right) q(sn,a1) q ( s n , a 2 ) q\left(s_{n}, a_{2}\right) q(sn,a2) q ( s n , ⋯   ) q\left(s_{n}, \cdots\right) q(sn,) q ( s n , a m ) q\left(s_{n}, a_{m}\right) q(sn,am)

智能体在探索时,按照下式的方式来更新Q-Table:
N e w Q ( s , a ) = Q ( s , a ) + α R ( s , a ) + γ max ⁡ a ′ ∈ A Q ( s ′ , a ′ ) − Q ( s , a ) ⏟ Δ Q ( s , a ) NewQ\left(s,a\right)=Q\left(s,a\right)+\alpha\underbrace{R\left(s,a\right)+\gamma\max_{a'\in A}Q\left(s',a'\right)- Q\left(s,a\right)}_{\Delta Q\left(s,a\right)} NewQ(s,a)=Q(s,a)+αΔQ(s,a) R(s,a)+γaAmaxQ(s,a)Q(s,a)

下面举一个例子来简单说明Q-Table的更新过程:
例:有一智能体,状态集合为 { 0 , 1 } \left\{0,1\right\} {0,1},动作集合为 { + , − } \left\{+,-\right\} {+,},即时奖励 R ( s , a ) = − 1 R\left(s,a\right)=-1 R(s,a)=1,折扣因子 γ = 0.8 \gamma=0.8 γ=0.8,学习率 α = 0.1 \alpha=0.1 α=0.1,环境的规则为: 0 → + 1 0\xrightarrow{+}1 0+ 1 0 → − 0 0\xrightarrow{-}0 0 0 1 → + 1 1\xrightarrow{+}1 1+ 1 1 → − 0 1\xrightarrow{-}0 1 0,执行某一动作之后的状态转移概率是1,初始状态是0,初始化Q-Table为:

Q+-
00.00.0
10.00.0

智能体执行动作 + + +之后, Q ( 0 , + ) Q\left(0,+\right) Q(0,+)会被更新为:
Q ( 0 , + ) = 0.0 + 0.1 × [ − 1 + 0.8 max ⁡ ( Q ( 1 , + ) , Q ( 1 , − ) ) − 0.0 ] = − 0.1 Q\left(0,+\right)=0.0+0.1\times\left[-1+0.8\max\left(Q\left(1,+\right),Q\left(1,-\right)\right)-0.0\right]=-0.1 Q(0,+)=0.0+0.1×[1+0.8max(Q(1,+),Q(1,))0.0]=0.1
进而Q-Table会被更新为:

Q+-
0-0.10.0
10.00.0

注意事项

  1. Q-Learning 是一个基于值函数迭代的方式,利用 Q 函数来寻找最优的 Action
  2. 为了能够更好地更新 Q 值表,就需要更好地探索环境,因此需要多次执行随机策略以更好地“遍历”整个环境
  3. 为了平衡探索与寻优,在经过一定回合的随机探索之后,需要智能体以一定的概率 ϵ 执行“最优”策略,并且 ϵ 应随着学习回合数的增加而增加
  4. 算法收敛之后,也可以保持一定概率的探索,以防止陷入局部最优

局限性

Q-Learning算法是有自己的局限性的,主要体现在以下几点:

  1. 当Q-Table的规模比较大时,算法迭代收敛时间非常长。
  2. 如果智能体探索不充分,很有可能造成算法陷入局部最优。
  3. 奖励函数设置如果不合理,很有可能陷入局部最优。
  4. Q-Learning无法解决连续状态和连续动作的强化学习问题。

仿真

可以使用网上莫烦Python大神的代码,在OpenAI Gym下做仿真;也可以自己使用图形显示平台自己编写各种简单的仿真环境,然后编写代码测试。我使用的是OpenCV+PyTorch平台,代码一方面稍微有些长(因为还有绘图和调试程序),另一方面网上各种大神的代码,相比之下我的真的是没啥价值,如果有小伙伴想交流,可以私信。贴上一幅图,自己的仿真结果(Low得很…)。
在这里插入图片描述迭代回合数:356
最优路径: [ 0 , 0 ] → [ 1 , 0 ] → [ 2 , 0 ] → [ 3 , 0 ] → [ 4 , 0 ] → [ 4 , 1 ] → [ 5 , 1 ] → [ 6 , 1 ] → [ 6 , 2 ] → [ 6 , 3 ] → [ 6 , 4 ] → [ 6 , 5 ] → [ 6 , 6 ] → [ 7 , 6 ] → [ 7 , 7 ] \left[0,0\right]\rightarrow\left[1,0\right]\rightarrow\left[2,0\right]\rightarrow\left[3,0\right]\rightarrow\left[4,0\right]\rightarrow\left[4,1\right]\rightarrow\left[5,1\right]\rightarrow\left[6,1\right]\rightarrow\left[6,2\right]\rightarrow\left[6,3\right]\rightarrow\left[6,4\right]\rightarrow\left[6,5\right]\rightarrow\left[6,6\right]\rightarrow\left[7,6\right]\rightarrow\left[7,7\right] [0,0][1,0][2,0][3,0][4,0][4,1][5,1][6,1][6,2][6,3][6,4][6,5][6,6][7,6][7,7]

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

强化学习Q-Learning算法 的相关文章

  • 使用 ROS中的插件

    URDF 文件完成后 xff0c 可以在 rviz 中显示机器人的模型 xff0c 如果要在 gazebo 中进行物理环境仿真 xff0c 还需要为 URDF 文件加入一些 gazebo 相关的标签 既然是仿真 xff0c 那么机器人应该像
  • linux杀毒软件

    0x00前言 linux或者Unix系统经常被用作服务器 xff0c 并且安全性往往比windows高 xff0c 但是在linux查杀病毒往往得依靠管理员执行find grep等命令查看文件以确认文件是否为病毒 xff0c 但由于本身li
  • 使用LVM对根分区进行扩容

    使用LVM对根分区进行扩容 1 df h 查看当前根分区大小 可以看到我们当前根分区的大小为66G 2 创建PV物理卷 pvcreate span class token operator span dev span class token
  • 毕业了,投入的工作

    2012年7月1日 xff0c 一个全新的开始 大学毕业了 xff0c 结束了学生时代 xff0c 走向社会 xff0c 开始工作 开始挣钱 xff0c 在一个熟悉的城市里 xff0c 面对陌生的面孔 使用未曾听过见过的语言 xff0c 技
  • vscode配置git

    首先下载git 下载完成后复制git路径 xff0c 如 xff1a D Software Git cmd git exe 也可以打开cmd窗口输入 where git 然后打开vscode xff0c 打开设置 xff0c 搜索git p
  • STM32的printf函数重定向

    在前面学习了STM32的串口编程 xff0c 通过USART1向计算机的串口调试助手打印数据 xff0c 或者接收计算机串口调试助手的数据 xff0c 接下来我们可以实现STM32工程上的printf 函数了 xff0c 方便用于程序开发中
  • 【opencv学习】【轮廓检测】

    今天学习轮廓检测方法 span class token keyword import span cv2 span class token keyword import span numpy span class token keyword
  • Jetson Xavier NX下读取RTSP视频流

    现有一个网络摄像机 xff0c 需要在Jetson Xavier NX平台上读取它的视频流进行图像处理 xff0c 最基本的使用Opencv读取RTSP视频流代码如下 xff1a span class token keyword impor
  • 化繁为简,一张图看懂梯度、散度、旋度、Jacobian、Hessian和Laplacian

    点击上方 计算机视觉工坊 xff0c 选择 星标 干货第一时间送达 作者 xff5c 王赟 Maigo 64 知乎 xff08 已授权 xff09 来源 xff5c https zhuanlan zhihu com p 35323714 编
  • 一文详解PnP算法原理

    PnP Perspective n Point 问题的几何结构如图1所示 xff0c 给定3D点的坐标 对应2D点坐标以及内参矩阵 xff0c 求解相机的位姿 数学语言描述如下 xff1a 图1 PnP几何结构 1 直接线性变换法 Dire
  • 多传感器数据标定融合完整教程:时间同步+空间同步(Camera+Lidar+IMU+Radar)

    多传感器融合是一项结合多传感器数据的综合性前沿内容 xff0c 主要包括Camera 激光雷达 IMU 毫米波雷达等传感器的融合 xff0c 在自动驾驶 移动机器人的感知和定位领域中占有非常重要的地位 xff1b 随着AI技术的大规模落地
  • 机器人抓取—— 相机参数与标定 camera_calibration

    点击上方 计算机视觉工坊 xff0c 选择 星标 干货第一时间送达 整理丨古月居 相机的参数 参考 xff1a https blog csdn net weixin 43206570 article details 84797361 摄像机
  • ROS下面调用自定义的头文件和.cpp/.so文件(亲测有效)

    前言 ROS下面使用已经编译好的ROS package是很方便的 xff0c 但是大多数我们可能自己定义了一些头文件 xff0c 想去直接引用 xff0c 那么如何在ROS下面调用自己的定义的函数呢 xff1f ROS下调用自定义的头文件
  • catkin_make和cmake

    catkin make是ROS下面的一种编译方式 xff0c 基于cmake xff0c 但是又不同于cmake cmake只能编译指定的package xff0c 但是不同package之间的关系没办法链接 xff0c 而且cmake只能
  • UNIX date命令简介

    date 命令 参数含义 xff1a a xff1a 显示星期简写 Sun Sat A xff1a 显示完整星期 Sunday Saturday b xff1a 显示月份简写 Jan Dec B xff1a 显示完整月份 January D
  • NVIDIA JETSON XAVIER NX烧录(emmc版本)

    目录 0 前言 1 安装虚拟机 2 安装SDKManager 3 使用SDK Manager开始烧录 4 配置系统 5 开发环境的安装 xff08 CUDA xff09 6 遇到问题记录 xff08 如果有其它问题可以留言我补充 xff09
  • NVIDIA JETSON XAVIER NX烧录(sd版本)

    0 前言 本文主要补充上文提到的sd卡版本烧录Jetson Xavier Nx系统的 xff0c 需要准备的东西 一张空白SD卡balenaEtcher工具 JETSON XAVIER NX 开发者套件的SD镜像 xff08 官网下载 xf
  • NVIDIA JETSON XAVIER NX 从SSD盘启动

    0 前言 本文主要补充上文提到的Jetson Xavier Nx系统从ssd盘启动 xff0c 需要准备的东西 xff1a 提前把ssd卡装上Jetson Xavier Nx套件上 xff0c 如下图 1 格式化为GPT 打开ubuntu的
  • 在linux虚拟机上安装docker

    1 简介 Docker是一个开源的应用容器引擎 xff1b 是一个轻量级容器技术 xff1b Docker支持将软件编译成一个镜像 xff1b 然后在镜像中各种软件做好配置 xff0c 将镜像发布出去 xff0c 其他使用者可以直接使用这个
  • win11虚拟机如何安装 Windows11虚拟机安装步骤教程

    想要体验下最新的win11系统 但是又不想在实体机上安装 担心出现系统故障问题怎么办 我们可以通过虚拟机安装win11系统实现 下面小编就教下大家虚拟机如何安装win11系统 更多Windows11系统教程可以参考小白一键网 1 下载安装好

随机推荐