强化学习(PPO,DQN,A3C)

news2024/11/18 11:29:34

目录

1.强化学习和深度学习的区别

2. 强化学习思路

3.baseline

 4.PPO

4.1on-policy和off-policy简单理解

 4.2actotcritic

5.DQN(回归问题)

4.1公式

 

4.2Q表

参考文献


1.强化学习和深度学习的区别

强化学习和深度学习的区别:在深度学习中,像分类问题,模型做出决策之后,我们会有一个标签,告诉模型你做的对不对,是否需要改进,再决定是否更新网络。但强化学习,并不是一个监督学习,没有标签告诉模型你做的是否正确,只是说,你每走一步我告诉你你得多少分,最后通过·总分来反应一系列决策的好坏。

从应用上看:假设输入为一个老虎,深度学习只能告诉你,这是个老虎,你可以选择跑或不跑(分类),强化学习可以告诉你怎么跑(往哪一个方向,每一步该怎么走最优)。

从下图进一步理解强化学习和深度学习的区别:下图游戏的目的是让小飞船平稳落地,假设我们用深度学习解决这个问题,我们发现将图像输入神经网络后,模型要输出左移还是右移的决策,这是一个二分类问题,但问题这个交互式任务,是没有标签的,在输出左移还是右移的决策之后,模型不知道和谁对比,证明左移对还是右移对。

2. 强化学习思路

 强化学习思路:以上图小飞船为例,将小飞船状态state1作为输入,进入模型,得到action1(左移或右移)和这一步的R1(奖励或者惩罚),以及state2(做完action1的下一个状态)。再将state2作为输入,得到action2(左移或右移)和这一步的R2(奖励或者惩罚),以及state3(做完action2的下一个状态)。再将state3作为输入...。以次类推,指导满足停止条件(比方说走了1000步)。

理解强化学习模型:下图\pi就是强化学习模型,可以参照前馈网络理解,就是网络的另一种表达方式或者说结构,R(奖励)是为了得到最优的模型\pi。 表示每一次训练周期所记录的数据。

 

从游戏中理解一下模型中的数据:下图第一个p表示在状态为st时,有动作at得到下一个状态st+1,第二个p表示有状态st时得到下一个at的概率,而奖励R需要去设计,在模型中我们需要的数据s不需要我们设计,是交互后自然产生的,a是我们需要设计的,但设计之后a是固定的选择,不需要变化,但第二个p也就是选择哪一个动作的概率需要我们决定,这里需要一个概率转移函数,最后设计什么样的规则怎么给奖励的选择也是多样的,这里需要一个奖励函数。最后理解一下游戏记录下右侧的函数,意思是输入为s1时,每一个t所对应的动作,及这个动作所带来的对应的st+1,

 理解强化学习的目标函数:在强化学习中目标函数为奖励最大值的期望,θ为需要更新的权重,为什么不直接用最大值,而用最大值的期望呢,简单理解,这样做泛化效果更好,进一步可以理解为,同样的权重但是无法保证同样的action,更无法保证同样的奖励(这就类似于,一个人让他重走一遍人生,即便所有的权重(人生大小事的选择相同)他的结果可能不一样)。进一步我们看,最下面的公式的右侧来替代奖励期望的计算,其中N代表epoch(每一个epoch代表一轮游戏),i=1-epoch,t是一个epoch里面每一个动作,r代表奖励。这个公式意思是将所有训练数据动作奖励叠加求平均,来近似奖励期望。

 

最后我们得到强化学习梯度计算公式:将所有训练数据带入即可更新θ。

3.baseline

在设置奖励时会发现,有些情况下无法设置惩罚,所以采用了baseline概念,就是对所有奖励求平均值,再用所有奖励减去平局值,负的为惩罚,正的为奖励。

 4.PPO

4.1on-policy和off-policy简单理解

简单理解为,像 小飞船落地,训练一千次,on-policy用这一千次的数据更新一次θ,而off-policy可以充分利用这一千次数据,进行多次更新。PPO算法就是基于off-policy

怎么找打工的:简单理解,当前为θ2,打工的就是θ1,当前为θ10打工的就是θ9,因为想要的打工的是和自己最相近的,要满足两者之差小于\varepsilon,所以认为前一个和自己最像,再用前一个的θ得到的数据,训练当前θ,就是说用θ1的训练数据训练θ2,θ2保存在θ中,再用θ2的训练数据训练θ3,再将θ3替代原θ2保存在θ中,一直跌倒到最后。

PPO2版本:如下图所示,限制条件做了改变,分子为当前θ,分母为打工θ。

 4.2actotcritic

actor:当一个状态进来时确定选什么动作。分类任务,用神经网络解决

critic:对actor选择的动作,评价好坏,输出的是一个value(值)。回归任务,用神经网络解决,全连接即可,不是卷积,上同

进一步理解critic的作用:看下图b之前是作为奖励均值使用了,这里用critic的value替代,可以这样理解,当critic对actor选择的动作不满意时给他一个不好的评价,这个动作相对应的R-value可能会得到负值。

 PPO2版本:R-b用A替代表示。下式求解时分两种情况,第一种A大于0时,希望分子越来越大,第二种A小于0时,希望分子越来越小。

5.DQN(回归问题)

4.1公式

yi中r表示当前状态下,该动作的奖励,加上下一个状态下最好的动作(这半句需进一步理解)。Q可以理解为一个神经网络函数,输入是s和a。 

蓝框的Q用神经网络表示,得到估计值,红框是真实值,可以理解为标签值,那么这就变成了回归任务,目的就是学习Q中的w和b。进一步得到目标函数。注意到max的Q也是一个网络。 

4.2Q表

假设下列是一个已经学习过的Q表,当处在状态s0时,看相应的几个A(a),找到最大值,对应A(a)2,作为选择动作,然后进入s1状态,继续往下。注意Q和R不同。

蓝色框对应上面一手下面的公式,<-应该是=。注意这个R是设计好的奖励规则。

开始迭代:令上图Q全为0,R不变开始迭代,如下图所示,假设初始为s1,此时Q为0,按照R应该选择R(1,5),此时Q(1,5)=R(1,5)+0.8*Max[Q(5,1),Q(5,4),Q(5,5)]=100+0.8*0=100。注意到[Q(5,1),Q(5,4),Q(5,5)]中选最大值,那么为什么选他们,因为在R中1,4,5是可以走的选项。那么此时Q表中就有了第一个值,然后开始第二次更新,从s3开始,如下图所示,得到另一个Q值,以此类推,进行训练。最终得到图(2.2)的Q表,图中的导线图上的Q值可以理解为神经网络的权重。在实际中,需要穷举得到可用的Q表,但不现实,所以用神经网络替代Q表的效果

 

参考文献

1.4-得到动作结果.mp4_哔哩哔哩_bilibili

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

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

相关文章

【*1900 图论+枚举思想】CF1328 E

Problem - E - Codeforces 题意&#xff1a; 思路&#xff1a; 注意到题目的性质&#xff1a;满足条件的路径个数是极少的&#xff0c;因为每个点离路径的距离<1 先考虑一条链&#xff0c;那么直接就选最深那个点作为端点即可 为什么&#xff0c;因为我们需要遍历所有点…

助你丝滑过度到 Vue3 其组合式API的应用 ②⑦

作者 : SYFStrive 博客首页 : HomePage &#x1f4dc;&#xff1a; VUE3~TS &#x1f4cc;&#xff1a;个人社区&#xff08;欢迎大佬们加入&#xff09; &#x1f449;&#xff1a;社区链接&#x1f517; &#x1f4cc;&#xff1a;觉得文章不错可以点点关注 &#x1f449;…

C++成神之路 | 第一课【步入C++的世界】

目录 一、认识C++ 1.1、关于 C++ 1.2、C++的前世今生 1.2.1、C+

【Tomcat---1】IDEA控制台tomcat日志输出乱码解决

一、修改IDEA的文件编码配置为UTF-8 二、修改IDEA的vmoptions文件&#xff0c;添加-Dfile.encodingUTF-8 到Tomcat目录/conf文件夹修改logging.properties 重启idea即可。采用统一的编码

ansible的脚本——playbook剧本

目录 一、playbook的组成 二、 playbook安装httpd服务 1.编写playbook剧本 2.运行playbook 三、定义、引用变量 四、 指定远程主机sudo切换用户 五、when条件判断 六、迭代 七、Templates 模块 1.先准备一个以 .j2 为后缀的 template 模板文件&#xff0c;设置引用的变…

微信小程序生成带参数的二维码base64转png显示

getQRCode() {var that this;wx.request({url: http://localhost:8080/getQRCode?ID 13,header: {content-type: application/json},method: POST,responseType: arraybuffer,//将原本按文本解析修改为arraybuffersuccess(res) {that.setData({getQRCode: wx.arrayBufferToB…

Java集合篇

前言&#xff1a;笔者参考了JavaGuide、三分恶等博主的八股文&#xff0c;结合Chat老师和自己的理解&#xff0c;整理了一篇关于Java集合的八股文。希望对各位读者有所帮助~~ 引言 常见集合有哪些&#xff1f; Java集合相关类和接口都在java.util包中&#xff0c;按照其存储…

JVM基础篇-虚拟机栈

JVM基础篇-虚拟机栈 定义 Java Virtual Machine Stacks &#xff08;Java 虚拟机栈&#xff09; 每个线程运行时所需要的内存&#xff0c;称为虚拟机栈每个栈由多个栈帧&#xff08;Frame&#xff09;组成&#xff0c;对应着每次方法调用时所占用的内存每个线程只能有一个活动…

Spring的创建及使用

文章目录 什么是SpringSpring项目的创建存储Bean对象读取Bean对象getBean()方法 更简单的读取和存储对象的方式路径配置使用类注解存储Bean对象关于五大类注解使用方法注解Bean存储对象Bean重命名 Bean对象的读取 使用Resource注入对象Resource VS Autowired同一类型多个bean对…

QT服务器练习

#include "widget.h" #include "ui_widget.h"Widget::Widget(QWidget *parent): QWidget(parent), ui(new Ui::Widget) {ui->setupUi(this);//给服务器指针实例化空间server new QTcpServer(this); }Widget::~Widget() {delete ui; }//启动服务器按钮对…

第1篇:了解Matter物模型翻译器

第1篇&#xff1a;了解Matter物模型翻译器 1. Matter物模型简介2. 物模型翻译成编程语言3. 思考题 1. Matter物模型简介 Matter物模型的介绍可以参考: Matter Core Specification的第7章 Matter物模型直观展示&#xff0c;可以看下图1-1&#xff0c; Matter Dimmable Light的…

【Linux】7、D-Bus 消息总线系统

文章目录 d-bus 官网 d-bus详解 D-Bus 是一种消息总线系统&#xff0c;是应用程序相互通信的一种简单方法。除了进程间通信之外&#xff0c;D-Bus 还有助于协调进程生命周期; 它使得编写“单实例”应用程序或守护进程以及在需要应用程序和守护进程的服务时按需启动它们变得简…

【学习笔记】关于RAW图片的概念学习

这里是尼德兰的喵芯片设计相关文章&#xff0c;欢迎您的访问&#xff01; 如果文章对您有所帮助&#xff0c;期待您的点赞收藏&#xff01; 让我们一起为成为芯片前端全栈工程师而努力&#xff01; 前言 能为我介绍一下raw图片吗&#xff1f; 当谈论"Raw图片"时&am…

c++ ,vs2019, cpp20规范之 forward_list 源码分析

通过阅读源码可知&#xff0c;该单向链表不像list双向链表那样有专门的前导节点。即list._Mypair._Myval2._head._next才指向第一个有效数据节点。而 forward_list ._Mypair._Myval2._head 已经指向了有效数据节点。原因就在于复杂巧妙的类型转换。如下图的构造函数里&#xff…

C语言实现定时器,定时触发函数

最近想到使用C语言实现一个简单的定时器。使用操作系统windows.h提供的多线程API就能实现 首先定义一个定时器结构体&#xff0c;包含定时时间和触发的函数指针 typedef struct Stimer{int valid;//定时器有效long timingMS;//定时时间TriggerFunc tf;//触发函数 }Stimer;创建…

python下的control库使用

文章目录 control的官方网站函数示例强迫响应forced_response control的官方网站 函数示例 强迫响应forced_response import numpy as np import os import sys import control as ctrl import matplotlib.pyplot as pltdef lim_x(x, lim0):res 0if x > lim:res 1else:…

qt代码练习

计时器练习 namespace Ui { class third; }class third : public QWidget {Q_OBJECTpublic:explicit third(QWidget *parent nullptr);~third();QLabel *labth1 new QLabel(this);QTextEdit *txtth1 new QTextEdit("闹钟",this);QLineEdit *leth1 new QLineEdit(t…

Stable Diffusion:网页版 体验 / AI 绘图

一、官网地址 Stable Diffusion Online 二、Stable Diffusion AI 能做什么 Stable Diffusion AI绘图是一种基于Stable Diffusion模型的生成式AI技术&#xff0c;能够生成各种类型的图像&#xff0c;包括数字艺术、照片增强和图像修复等。以下是一些可能的应用&#xff1a; …

《吐血整理》进阶系列教程-拿捏Fiddler抓包教程(13)-Fiddler请求和响应断点调试

1.简介 Fiddler有个强大的功能&#xff0c;可以修改发送到服务器的数据包&#xff0c;但是修改前需要拦截&#xff0c;即设置断点。设置断点后&#xff0c;开始拦截接下来所有网页&#xff0c;直到取消断点。这个功能可以在数据包发送之前&#xff0c;修改请求参数&#xff1b…