[machine Learning]强化学习

强化学习和前面提到的几种预测模型都不一样,reinforcement learning更多时候使用在控制一些东西上,在算法的本质上很接近我们曾经学过的DFS求最短路径.

强化学习经常用在一些游戏ai的训练,以及一些比如火星登陆器,月球登陆器等等工程领域,强化学习的内容很简单,本质就是获取状态,决定下一步动作,从而得到更好的分数或者收益,亦或者更低一些的损耗.

1.强化学习的准备(一些概念)

强化学习的本质就是通过一些数据训练,让模型知道什么时候采取什么action能获得更好的return,并且修改自身的state,这样的数据可以写成如下格式

(s^{i},a^{i},R(s^{i}),a^{i+1})

第一项为当前的状态 ,

第二项为即将采取的行动 ,

第三项为当前状态得到的奖励 ,

第四项为下一步的动作 ,

这四项就能满足我们对于数据训练和信息检索等等要求 .

回报return:

回报指的是在某个状态,模型能拿到的奖励数值,通常使用R来进行表示. 而r称之为折扣因子,也叫做时间代价.一般情况下,总回报的计算方法为

returnSum=R_{0}+r*R_{1}+r^{2}*R_{2}.........

策略action:

策略指的是不同的动作,更改当前的状态.比如直升机当前状态为收到微风,悬停能拿到更好的稳定性,则策略就算加快尾翼转速.

状态state:

这个就不用多说了

状态价值函数Q(s,a):

状态价值函数的值的含义是,在S状态下,选择a动作,最后能拿到的最大总收益

举个例子,我们现在有这样一个情况

我们设定一个小车或者是一些别的东西,在2345四个状态上能拿到的收益都是0,但是在两侧分别能拿到100和40的奖励数值

这个图里,我们在某个位置出发,能达到最大点的情况我们先列出来

(因为只有左右两种走法,很容易计算出来,具体的计算可以用递归实现)

接下来,比如说

Q(3,左)=0+ 0.5*0 + 100* 0.25 =25(我们假设r=0.5)

Q(4,左)=0+ 0.5*0 + 0* 0.25+ 0.125*0 + 0.0625*100=6.25

贝尔曼方程:

贝尔曼方程其实就是一个计算式子,很符合直观逻辑(某种意义上是一个状态转移方程或者递归方程式?)

我们假设

s,a为当前的状态和准备动作,s'和a'为下一个状态和准备动作

Q(s,a)=R(s)+r*Q(s',a')

这不就是状态转移方程????

2.关于如何获取数据并且训练

一般来说,我们的每个数组都可以凑成一个元组(s^{i},a^{i},R(s^{i}),a^{i+1})

我们仍然可以用神经网络等等手段进行计算,只要凑出监督学习的数据

\left\{\begin{matrix} x=(s^{i},a^{i}) & \\ y=R(s^{i})+r*Q(s^{i+1},a^{i+1}) & \end{matrix}\right.

这样使用一个元组数据就可以获得一个用来计算的数据

将这些数据投入神经网络进行计算即可.

最后再使用训练好的模型的时候,比如说投入一个s和a,我们可以得到预测的y值

从各种预测的y值中,选择一个最好的情况,与之对应的动作a,就是我们应该采取的方案

(end)写在最后

从八月初开始学习机器学习,中途历经回家,做项目,做课程作业,演示汇报等等一系列杂事,终于是在九月初学习完了机器学习基础.

这一系列的博客最开始使用英语写的,但是因为一些原因,我需要加速学完机器学习,所以后面全部使用中文书写了.后面有机会我会搬到其他地方在换成英语.

这个系列的博客有些理解来自我的个人想法,可能不是很正确,也有很多错误.后面的代码实现我计划使用d2l或者pytorch来完成一些简单的模拟.

emm如果有错误希望能够指出来吧,小白感谢各位大神的指正

2023.9.7

 

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

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

相关文章

网络编程套接字,Linux下实现echo服务器和客户端

目录 1、一些网络中的名词 1.1 IP地址 1.2 端口号port 1.3 "端口号" 和 "进程ID" 1.4 初始TCP协议 1.5 UDP协议 2、socket编程接口 2.1 socket 常见API 2.2 sockaddr结构 3、简单的网络程序 3.1 udp实现echo服务器和客户端 3.1.1 echo服务器实…

Arrays.copyOf 和System.arraycopy?深拷贝和浅拷贝?

Arrays.copyOf 和 System.arraycopy 1)二者有何不同? System.arraycopy()方法 System.arraycopy(Object src, int srcPos, Object dest, int destPos, int length); 需主动创建目标对象dest可定义起始元素,灵活拷贝元素比较重要的一点&…

华为三层交换机与路由器对接上网

华为三层交换机与路由器对接上网

缓存夺命连环问

1. 为什么要用缓存? 用缓存,主要有两个用途:高性能、高并发。 高性能 假设这么个场景,你有个操作,一个请求过来,吭哧吭哧你各种乱七八糟操作 MySQL,半天查出来一个结果,耗时 600m…

昇腾Ascend TIK自定义算子开发教程(概念版)

一、参考资料 【2023 CANN训练营第一季】Ascend C算子开发入门(中) 二、重要说明 TIK2编程范式把算子核内的处理程序,分成多个流水任务,任务之间通过队列(Queue)进行通信和同步,并通过统一的…

目标检测笔记(十三): 使用YOLOv5-7.0版本对图像进行目标检测完整版(从自定义数据集到测试验证的完整流程))

文章目录 一、目标检测介绍二、YOLOv5介绍2.1 和以往版本的区别 三、代码获取3.1 视频代码介绍 四、环境搭建五、数据集准备5.1 数据集转换5.2 数据集验证 六、模型训练七、模型验证八、模型测试九、评价指标 一、目标检测介绍 目标检测(Object Detection&#xff…

2023国赛高教社杯数学建模C题思路分析

1 赛题 在生鲜商超中,一般蔬菜类商品的保鲜期都比较短,且品相随销售时间的增加而变差, 大部分品种如当日未售出,隔日就无法再售。因此, 商超通常会根据各商品的历史销售和需 求情况每天进行补货。 由于商超销售的蔬菜…

Ubuntu 20.04上docker安装Redis

要在Ubuntu 20.04上使用Docker安装Redis,您可以按照以下步骤进行操作: 1.更新系统包列表:sudo apt update2.安装Docker:sudo apt install docker.io3.启动Docker服务并设置其开机自启动:sudo systemctl start docker …

链表指定区间反转

题目:反转从位置 m 到 n 的链表。请使用一趟扫描完成反转。 说明: 1 ≤ m ≤ n ≤ 链表长度。 输入:1->2->3->4->5->NULL, m 2, n 4 输出:1->4->3->2->5->NULL 头插法 Java实现 public static ListNode rev…

【AWS】如何用SSH连接aws上的EC2实例(虚拟机)?

目录 0.环境 1.连接结果示例 2.SSH连接思路 3.具体步骤 1)安装并运行ssh服务 2)启动ssh服务 3)在AWS上找到正在运行的EC2实例,并且根据提供的ssh连接语句进行连接 0.环境 windows 11 64位 前提: 有aws账户&…

学生信息系统(python实现)

#codingutf-8 import os.path filenamestudent.txtdef menm():#菜单界面print(学生管理系统)print(-----------------------------功能菜单-----------------------------)print(\t\t\t\t\t\t1.录入学生信息)print(\t\t\t\t\t\t2.查找学生信息)print(\t\t\t\t\t\t3.删除学生信息…

list【2】模拟实现(含迭代器实现超详解哦)

模拟实现list 引言(实现概述)list迭代器实现默认成员函数operator* 与 operator->operator 与 operator--operator 与 operator!迭代器实现概览 list主要接口实现默认成员函数构造函数析构函数赋值重载 迭代器容量元素访问数据修改inserterasepush_ba…

堆排序详解

堆:是一种特殊的完全二叉树,一般通过顺序表存储,分为大堆和小堆两类。 大堆:父节点的值恒大于子节点的值。 小堆:父节点的值恒小于子节点的值。 创建堆,可以使得根节点成为整个堆中保存最大或最小的值的…

基于jeecg-boot的flowable流程历史记录显示修改

更多nbcio-boot功能请看演示系统 gitee源代码地址 后端代码: https://gitee.com/nbacheng/nbcio-boot 前端代码:https://gitee.com/nbacheng/nbcio-vue.git 在线演示(包括H5) : http://122.227.135.243:9888 历…

MySQL和Oracle数据库引擎

MYSQL数据库: 在mysql数据库中,常用到的引擎主要就是2个:Innodb和MyIASM。 Innodb:它提供了对数据库ACID事务的支持,并且还提供行级锁和外键的约束。它被设计的目的就是处理大数据容器的数据库系统,它本身…

一文搞定接口幂等性架构设计方案

幂等性介绍 现如今很多系统都会基于分布式或微服务思想完成对系统的架构设计。那么在这一个系统中,就会存在若干个微服务,而且服务间也会产生相互通信调用。那么既然产生了服务调用,就必然会存在服务调用延迟或失败的问题。当出现这种问题&a…

系列四、Nginx的常用命令和配置文件

一、常用命令 1.1、查看nginx的版本号 ./nginx -v 1.2、启动nginx cd /usr/local/nginx/sbin./nginx 1.3、停止nginx cd /usr/local/nginx/sbin./nginx -s stop 1.4、重新加载nginx 说明:该命令用于修改配置文件后,在不重启nginx的情况下使配置文…

ClickHouse的WITH-ALIAS是如何实现的

ClickHouse的WITH-ALIAS是如何实现的 WITH-ALIAS包含相似但不同的两个特性&#xff1a; WITH <表达式> as <别名>WITH <别名> as <子查询> WITH <表达式> as <别名> 特性 以下SQL展示了 WITH <表达式> as <别名> 特性的用…

FPGA通信—千兆网(UDP)软件设计

一、PHY引脚功能描述 引脚功能描述1CLK25 CLK125:内部PLL生成的125MHz参考时钟&#xff0c;如MAC未使用125MHe时钟&#xff0c;则此引脚应保持浮动&#xff0c; 2 4 63 GND 接地3REG OUT开关压器&#xff0c;1.05V输出 5 6 8 9 11 12 14 15 MDI[0] MDI[0]- MDI[1] MDI[1…

学习笔记-BNF、EBNF、ABNF语法格式描述规范

目标是确认一些c/cpp的语法细节&#xff0c;需要看cpp语法定义文件。 考虑从c的语法定义文件开始确认。 考虑实现一个简化的语言定义和编译器&#xff0c;为后续的实际需求做自定义扩展。 参考网页&#xff1a; https://en.wikipedia.org/wiki/Extended_Backus%E2%80%93Naur_f…