Q-Learning 原理干货讲解

news2024/9/22 9:49:42

强化学习


本文是强化学习和Q-Learning算法的概念及原理
项目实战案例可查看下一篇文章:Q-Learning 单路径吃宝箱问题–棋盘格吃宝箱问题–拓扑节点较优路径问题

一. 强化学习概述


1.1 什么是强化学习


基于环境的反馈而行动,通过不断与环境的交互、试错,最终完成特定目的或者使得行动收益最大化。强化学习不需要训练数据,但是它需要每一步行动环境给予的反馈,是奖励还是惩罚,反馈可以量化,基于反馈不断调整训练对象的行为。

1.2 强化学习的特点


  • 试错学习:强化学习需要训练对象不停地和环境进行交互,通过试错的方式去总结出每一步的最佳行为决策,整个过程没有任何的指导,只有反馈。所有的学习基于环境反馈,训练对象去调整自己的行为决策。
  • 延迟反馈:强化学习训练过程中,训练对象的“试错”行为获得环境的反馈,有时候可能需要等到整个训练结束以后才会得到一个反馈,比如Game Over或者是Win。
  • 时间是强化学习的一个重要因素:强化学习的一系列环境状态的变化和环境反馈等都是和时间强挂钩,整个强化学习的训练过程是一个随着时间变化,而状态&反馈也在不停变化。
  • 当前的行为影响后续接收到的数据:强化学习当前状态以及采取的行动,将会影响下一步接收到的状态,数据与数据之间存在一定的关联性。

1.2 强化学习术语


简单解释强化学习来说,即:智能体在于环境的交互过程中为了达到目标而进行的学习过程

  • Agent(智能体):强化学习训练的主体就是Agent

  • Environment(环境):强化学习所处的环境

  • goal(目标):强化学习要实现的目标

进一步理解,智能体在当前状态下采取行动可以获得反馈,最终需要达到目标

  • State(状态):当前环境和智能体所处的状态

  • Action(行动):基于当前的状态,智能体可以采取什么行动

  • Reward(奖励,也可以理解为反馈):智能体采取行动后获得的奖励或惩罚
    在这里插入图片描述

二. 强化学习决策及算法

2.1 马尔科夫决策过程


强化学习的整个训练过程都基于一个前提,我们认为整个过程都是符合马尔可夫决策过程(Markov Decision Process,MDP)

核心思想

[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-0ZSTg6T6-1687939218832)(C:\Users\29973\AppData\Roaming\Typora\typora-user-images\image-20230616171616808.png)]

马尔可夫决策过程的核心思想是:

下一步的State只和当前的状态State以及当前状态将要采取的Action有关,如上图所示State3只和State2以及Action2有关,和State1以及Action1无关

2.2 价值函数


2.2.1 Value Based 算法


介绍

价值函数分为两种,一种是V状态价值函数,一种是Q状态行动函数。Q值评估的是动作的价值,代表agent做了这个动作之后一直到最终状态奖励总和的期望值;V值评估的是状态的价值,代表agent在这个状态下一直到最终状态的奖励总和的期望。价值越高,表示我从当前状态最终状态能获得的平均奖励将会越高,因此我选择价值高的动作就可以了

2.2.2 Policy Based 算法


Policy决定了某个state下应该选取哪一个action。策略Policy为每一个动作分配概率,例如:π(s1|a1) = 0.3,表示在状态s1下选择动作a1的概率是0.3,而该策略只依赖于当前的状态,不依赖于以前时间的状态,因此整个过程也是一个马尔可夫决策过程

三. Q-learning

3.1 算法讲解


Q-learning 算法

Q-learning是一种基于动作函数(即Q函数)的强化学习方法,即通过判断每一步 actionvalue来进行下一步的动作,具体步骤如下:

  1. 建立Q表,行是每种状态,列是每种状态的行为,值是某状态下某行为估计获得的奖励
  2. 每次进行状态转移时有e_greedy概率选当前状态最优方法,有 1- e_greedy选随机方法
  3. 选完之后就更新当前状态下对应所选行为的Q值(估计值)

Q函数更新方法

在讲解函数的更新方法前,Q函数中有两个操作因素需要重点关注

  • α:称之为学习率,决定了在更新Q值时,当前状态和动作对于新估计值的贡献程度。值为0意味着代理不会学到任何东西,只依赖于初始的Q值或之前学习到的知识;值为1意味着意味着完全采用新观察到的奖励或更新的目标值,忽略之前学习到的估计值。
  • γ:称之为折扣因子或者衰减率,它定义了未来奖励的重要性。值为0意味着只考虑短期奖励,其中1的值更重视长期奖励。

在实际算法中,Q函数的具体的更新函数为

实际更新Q值 = 当前Q值 + 学习率 *(立即回报 + 预测后继状态的最大Q值 - 当前Q值)

定义公式化更新函数

Q ( S t , A t ) ← Q ( S t , A t ) + α [ R + γ ∗ M a x Q ( S t + 1 , a t + 1 ) − Q ( S t , A t ) ] Q(S_t,A_t)←Q(S_t,A_t)+α[R+γ*MaxQ(S_{t+1},a_{t+1})−Q(S_t,A_t)] Q(St,At)Q(St,At)+α[R+γMaxQ(St+1,at+1)Q(St,At)]

[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-f0VeQvSh-1687939218833)(C:\Users\29973\AppData\Roaming\Typora\typora-user-images\image-20230625093857183.png)]

实现步骤

在实际算法中,Q-learning算法的实现步骤如下:

Step 1 :给定折扣因子 γ 、学习率 α、奖励矩阵 Q
Step 2 :令状态行动 Q 函数初始化为 0
Step 3 :开始迭代
	3.1 随机选择一个状态 s
	3.2 若从该状态无法达到目标,则执行以下几步
		(1)从当前状态所有可能的行为中选取一个行为 a
		(2)从选定的行为 a ,得到下一个状态 r
		(3)按照 Q 函数的更新方法进行值更行
		(4)设置当前状态 s 为 r

四. 参考文献


本次学习参考了部分文章,较原始代码进行了部分改良或全部改良,添加了大量注释方便初学者学习,原参考文章链接:

强化学习系列(一):基本原理和概念

机器学习算法(三十):强化学习(Reinforcement Learning)

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/697676.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

AR急诊急救大平台远程专家会诊方案

随着AR技术的完善,在医院急救中,需要及时把各方面专家汇在一起会诊,在AR这方面有数据采集清晰,资料呈现方便便捷,针对客户需要,我们对业务需求分析,比较市面多种产品,把会议&#xf…

Spring Boot 中的 @Cacheable 注解

Spring Boot 中的 Cacheable 注解 在 Spring Boot 中,缓存是一个非常重要的话题。当我们需要频繁读取一些数据时,为了提高性能,可以将这些数据缓存起来,避免每次都从数据库中读取。为了实现缓存,Spring Boot 提供了一…

Apikit 自学日记:发起文档测试-TCP/UDP

进入某个TCP/UDP协议的API文档详情页,点击文档上方 测试 标签,即可进入 API 测试页,系统会根据API文档的定义的求头部、Query参数、请求体自动生成测试界面并且填充测试数据。 填写/修改请求参数 1.1设置请求参数 与发起HTTP协议测试类似&am…

Django Vue corsheaders跨域问题

跨域问题 记录一下在我自己的django-vue项目里面出现的跨域问题 我的项目之前一直是在本地跑的,因为需要上线测试,所以我就运行在同一个vlan里面 ip段:192.168.1.0/24 突然发现存在跨域问题,我django的接口访问被拦截了。 检查…

Web服务器群集:Nginx+Tomcat实现负载均衡与动静分离集群

目录 一、理论 1.多实例 2.Nginx负载均衡 3.Nginx动静分离 4.配置NginxTomcat负载均衡 5.配置NginxTomcat动静分离集群 6.Nginx 四层代理配置 二、实验 1.配置NginxTomcat负载均衡 2.、配置NginxTomcat动静分离集群 三、问题 1.服务器群集与集群的区别 四、总结 一…

十分钟实现 Android Camera2 视频录制

1. 前言 因为工作中要使用Android Camera2 API,但因为Camera2比较复杂,网上资料也比较乱,有一定入门门槛,所以花了几天时间系统研究了下,并在CSDN上记录了下,希望能帮助到更多的小伙伴。 上两篇文章们使用…

Python主动抛出Warning的艺术:一种提醒用户的优雅方式

简介:Python提供了一个内置的warnings模块,使得开发者可以在代码中主动地发出警告。这对于告知用户某些问题或者对某些即将废弃的特性进行提示尤其有用。本文将重点介绍如何在Python代码中主动抛出警告,并探讨其使用场景和优势。 历史攻略&a…

设计模式3:单例模式:volatile关键字能不能解决多线程计数问题?

先说结论不能: 代码实测下: public class Counter {public volatile static int count 0;public static void inc() {//这里延迟1毫秒,使得结果明显try {Thread.sleep(1);} catch (InterruptedException e) {}count;}public static void ma…

Win10安装CUDA

一、安装Nvidia显卡驱动 安装Nvidia显卡驱动前可以先检查Nvidia显卡驱动是否已安装。搜索 Nvidia控制面板 或 Nvidia Control Panel可以看到当前已经安装的显卡驱动及版本。 如需安装显卡驱动,在官方驱动下载网站找到自己的显卡型号对应的驱动下载并安装:官方驱动…

行业分析| 无人机电力巡检技术的应用

随着现代生活水平的不断提升,人们对各行各业的发展都提出了更高的品质要求,对于电力的需求不断上涨,因此也加速了电力行业的转型升级。基于这一发展状况,我国电力行业逐渐开始选择应用无人机电力巡检等现代高科技技术。 无人机电…

Baumer工业相机堡盟工业相机如何通过BGAPISDK进行定序器编程:VCXG双快门操作(C#)

Baumer工业相机堡盟工业相机如何通过BGAPISDK进行定序器编程:VCXG双快门操作(C#) Baumer工业相机Baumer工业相机BGAPISDK和定序器编程的技术背景Baumer工业相机通过BGAPISDK进行定序器编程功能1.引用合适的类文件2.Baumer工业相机通过BGAPISDK进行定序器…

Keep上市,打响健身科技第一炮?

近些年,大众对于身体健康和审美的需求越来越旺盛,因此也引发了一场无形的健身革命。无论是线下动辄大几千的健身房,还是线上的健身直播经济都受到了不小的关注,在疫情刚开始的那段时间,各地的封控让在线健身成为了一种…

修改滚动条样式 和 那些高度

一、滚动条样式 二、那些高度 网页可见区域宽: document .body.clientWidth; 网页可见区域高: document .body.clientHeight; 网页可见区域宽: document .body.offsetWidth (包括边线的宽); 网页可见区域高: document .body.of…

亚马逊实践 | 构建可持续发展的架构模型

可持续发展概念源于对系统性文明危机和世界问题的科学和社会意识形态研究。世界级的进步学术社群和政治精英在二十世纪末就认识到了这些问题的存在。他们将即将到来的二十一世纪视为充满不确定性、全球灾难进程逐步升级的时代。可持续发展对多个领域产生影响,目前已…

Sudo堆溢出漏洞(CVE-2021-3156)复现

背景介绍 2021 年 1 月 26 日,Qualys Research Labs在 sudo 发现了一个缺陷。sudo 解析命令行参数的方式时,错误的判断了截断符,从而导致攻击者可以恶意构造载荷,使得sudo发生堆溢出,该漏洞在配合环境变量等分配堆以及…

在Mac上安装Aspectj1.9.8(用于Java17)+IDEA

1. 确定所使用的Java版本和AspectJ的对应关系 2. 下载AspectJ包 3. 安装AspectJ 4. 添加AspectJ对应的环境变量 5. AspectJ测试-简单终端测试 6. AspectJ测试-通过IDEA敲代码测试 ---------------------------------------详细教程-------------------------------------…

【深度学习】7-0 自制框架实现DeZero - 自动微分

介绍下处理深度学习的框架DeZero,通过这个框架来了解自动微分是如何实现的 自动微分指的是自动求出导数的做法(技术)。“自动求出导数”是指由计算机(而非人)求出导数。具体来说,它是指在对某个计算(函数)编码后计算机会自动求出该计算的导数的系统。 自…

flexible.js适配pc端、移动端并自动将px转换rem

首先在assets中创建一个flexible.js文件 ;(function(win, lib) {let doc win.document;let docEl doc.documentElement;let metaEl doc.querySelector(meta[name"viewport"]);let flexibleEl doc.querySelector(meta[name"flexible"]);let dpr 0;let…

POI及EasyExcel操作xls,xlsx文件

Apache POI 是基于 Office Open XML 标准(OOXML)和 Microsoft 的 OLE 2 复合文档格式(OLE2)处理各种文件格式的开源项目。 可以使用 Java 读写 MS Excel 文件,可以使用 Java 读写 MS Word 和 MS PowerPoint 文件。 模…

C# 标注图片

画矩形 画四边形 保存标注图片 保存标注信息 代码 using System; using System.Collections.Generic; using System.ComponentModel; using System.Data; using System.Drawing; using System.Linq; using System.Text; using System.Windows.Forms; using System.Drawing.Ima…