强化学习研究 PG
由于一些原因, 需要学习一下强化学习。用这篇博客来学习吧,
用的资料是李宏毅老师的强化学习课程。
深度强化学习(DRL)-李宏毅1-8课(全)_哔哩哔哩_bilibili
这篇文章的目的是看懂公式, 毕竟这是我的弱中弱。
强化学习一般就是 环境, 动作网络, 奖励三者的纠缠,
动作网络看到环境, 产生一个动作, 然后得到一个奖励。 然后我们通过这个奖励来更新动作。
不同的方法有不同的思想, 我们来看看PG和PPO。
PG是这样的思想。
有一个policy网络 ,就是actor。 输入是环境, 输出是策略。
他会输出各个动作的几率, 然后可以根据这些几率采样一个动作。,
经过连续的一轮 也就是一个episode 就完成了一场游戏的采集。
将奖励加起来, 就是大R
我们的目标是让大R变得越大越好。
这是actor按照某个路线的概率。
最后的组合概率。 也就是得到某一个结果的概率。
当然这条路线也会对应一个大R。
当然 对于同一个actor, 我们会进行很多个episode。 这样的话得到不同的路线
对应不同的奖励R() 乘加起来就是当前的actor 平均能得到的奖励了, 也就能评价当前actor的好坏。
右边这种写法也是可以, 服从pxita这样的分布, 然后每个对应一个R, 得到一个期望,我们更新模型的目的就是让这个平均的R越大越好。
所以求R对参数的梯度,这里的R()不需要可微
由于右边只有与参数相关, 因此转化为对
的微分
上下同乘(
)
变为这个。 因为对log求导 后面那一项。
转为分布形式。
然后通过采样来模拟分布。
带入上面的(
)公式, 乘法就转为加法了。
直观理解, 前面的R为正, 则增加后面这个S到A映射的几率, 通过更新模型参数。
通过这两个式子, 我们就可以更新模型了。 问题是 第二个式子后面那一堆是从哪里来的呢?
事实上就是通过actor和环境互动得来的。 我们一直玩actor,得到很多个结果。
actor的操作一般是从softmax里采样出来的。
然后求softmax结果对参数的梯度, 然后乘上奖励就可以了。
我们会发现 这个R() 是对一个episode里所有sample的动作都起作用,
也就是说, 只要这一轮游戏的奖励是好的, 在这场游戏里所有做过的动作都会增加概率。
所以加上时间t, 只计算动作后面的奖励分数。
然后乘上一个discount。 discount 预示了一个动作的有效时间, 比如, discount很大的时候, 一个动作可以考虑未来很多步的收益。
把现在的这个R-b 写作一个优势函数 A , 他是与模型相关的。
现在学了理论知识, 我们要实战通过代码来学习一下了。、
李宏毅HW12
首先是李宏毅老师的HW12。 助教放的代码, 我猜测是PG方法, 我们看下。
声明了一个网络,来产生策略。 输入是8维向量, 因为环境给出的接口是8维向量。
输出是4维向量, 因为可能的操作有4种。 可以看到最后还经过了softmax。
agent是模型的代理, 里面定义了模型的训练,保存等功能。
理论运行五轮游戏, 也就是五个episode。
等下看看这俩。
环境重置, 然后步数也都重置。
对于当前的环境state, sample一个动作。
action_prob是四个动作的几率。
categorical : 按类别赋值。 这里按照概率赋值, 之后就可以按概率来采样。
采样到了动作1.
这里的log_Prob是对action的概率取对数, 以e为底。
因为action1的概率为0.2368 因此取对数prob为-1.4404
把这一步输入进环境, 得到下一个环境的状态, 这一步的奖励, 和是否为最后一个动作。
这个注释已经解释了, 我们就是这样得到了每一对动作的概率值的对数。
会记录每一步的reward 和 每一个eposide的reward和, 还会记录最后一步的reward。
对最后一步的reward和总rewarrd求平均。
将每一步的reward 归一化。
传入那个操作的概率对数和每一步的奖励, 更新模型。 我们看看。
因为loss要向小优化, 所以这里前面加了负号。 最后求和。
更新模型, 回传梯度。
这里可以看出 和公式是一模一样的。
我们参考的第二个代码来自于蘑菇书。 这本书一样
在sample 也是从分布中采样, 上面用的是softmax, 这里是伯努利。
state_pool, action_pool, reward_pool = self.memory.sample()state_pool, action_pool, reward_pool = list(state_pool), list(action_pool), list(reward_pool)# Discount rewardrunning_add = 0for i in reversed(range(len(reward_pool))):if reward_pool[i] == 0:running_add = 0else:running_add = running_add * self.gamma + reward_pool[i]reward_pool[i] = running_add# Normalize rewardreward_mean = np.mean(reward_pool)reward_std = np.std(reward_pool)for i in range(len(reward_pool)):reward_pool[i] = (reward_pool[i] - reward_mean) / reward_std# Gradient Desentself.optimizer.zero_grad()for i in range(len(reward_pool)):state = state_pool[i]action = Variable(torch.FloatTensor([action_pool[i]]))reward = reward_pool[i]state = Variable(torch.from_numpy(state).float())probs = self.policy_net(state)m = Bernoulli(probs)loss = -m.log_prob(action) * reward # Negtive score function x reward# print(loss)loss.backward()self.optimizer.step()self.memory.clear()
这事更新模型的代码。
第一步, 先采样一组action结果。应该是一个 的一组结果(一个episode)
这里是乘以那个时间参数γ。 从后往前乘, 越向后乘的越多。
归一化。
和上面一样, 也是对action的概率取对数, 乘以reward。 但是伯努利的sample 的action是两个值。 不知道为什么。
不管怎么样, 我们大概知道PG的做法了。 就是算出来各个操作的概率, 然后放在一个分布里sample。 然后要对sample出来的操作的概率取对数 然后乘上它的奖励。 乘以一个负号, 最小化它。
代码在这里 :
https://github.com/datawhalechina/easy-rl/blob/master/notebooks/PolicyGradient.ipynb
https://colab.research.google.com/github/ga642381/ML2021-Spring/blob/main/HW12/HW12_ZH.ipynb#scrollTo=bIbp82sljvAt
相关文章:
![](https://img-blog.csdnimg.cn/07a1b057bfd642db936d3f8ad0d424f8.png)
强化学习研究 PG
由于一些原因, 需要学习一下强化学习。用这篇博客来学习吧, 用的资料是李宏毅老师的强化学习课程。 深度强化学习(DRL)-李宏毅1-8课(全)_哔哩哔哩_bilibili 这篇文章的目的是看懂公式, 毕竟这是我的弱中弱。 强化…...
![](https://img-blog.csdnimg.cn/5f658cbbf90947c8ad5c4f22bf088dd4.png)
uniapp微信小程序 401时重复弹出登录弹框问题
APP.vue 登陆成功后,保存登陆信息 if (res.code 200) {uni.setStorageSync(loginResult, res)uni.setStorageSync(token, res.token);uni.setStorageSync(login,false);uni.navigateTo({url: "/pages/learning/learning"}) }退出登录 toLogout: func…...
![](https://img-blog.csdnimg.cn/49778db4f54542b08bb549a8fcde26ec.png)
Cloud Studio实战——热门视频Top100爬虫应用开发
最近Cloud Studio非常火,我也去试了一下,感觉真的非常方便!我就以Python爬取B站各区排名前一百的视频,并作可视化来给大家分享一下Cloud Studio!应用链接:Cloud Studio实战——B站热门视频Top100爬虫应用开…...
![](https://www.ngui.cc/images/no-images.jpg)
php 去除二维数组重复
在 PHP 中,我们常常需要对数组进行处理和操作。有时候,我们需要去除数组中的重复元素,这里介绍一种针对二维数组的去重方法。 以下是列举一些常见的方法: 方法一:使用 array_map 和 serialize 函数 array_map 函数可以…...
![](https://img-blog.csdnimg.cn/img_convert/f6e974c205db0a29f17de74ab4fe5ee9.png)
玩转graphQL
转载至酒仙桥的玩转graphQL - SecPulse.COM | 安全脉搏 前言 在测试中我发现了很多网站开始使用GraphQL技术,并且在测试中发现了其使用过程中存在的问题,那么,到底GraphQL是什么呢?了解了GraphQL后能帮助我们在渗透测试中发现哪些…...
![](https://www.ngui.cc/images/no-images.jpg)
神经网络super(XXX, self).__init__()的含义
学习龙良曲老师的课程,在77节有这样一段代码 import torch from torch import nnclass Lenet5(nn.Module):def __init__(self):super(Lenet5,self).__init__()那么,super(XXX, self).init()的含义是什么? Python中的super(Net, self).init()…...
![](https://img-blog.csdnimg.cn/6e01905b672e485284ded1c7f620eae5.png)
45.杜芬方程解仿真解曲线(matlab程序)
1.简述 Dufing方程是一种重要的动力系统山,是反映工程物理系统中非线性现象和混沌动力学行为的极其重要的方程式。通过Duffing方程可以探讨铁磁谐振电路中的分岔、拟周期运动、子谐波振荡。而在非线性与混沌系统的研究中,Duffing方程展示了丰富的混沌动力…...
![](https://img-blog.csdnimg.cn/fb4ebec082b341188f621c8e2663b55d.png)
服务器数据恢复-EXT3分区误删除邮件的数据恢复案例
服务器数据恢复环境: 一台服务器有一组由8块盘组建的RAID5阵列,EXT3文件系统。 服务器故障: 由于工作人员的误操作导致文件系统中的邮件丢失。用户需要恢复丢失的邮件数据。 服务器数据恢复过程: 1、将故障服务器中所有磁盘以只…...
![](https://www.ngui.cc/images/no-images.jpg)
C 语言的逗号运算符
逗号运算符 comma operator 逗号运算符最常用在 for 循环的循环头中. 程序示例: #include<stdio.h> #define FIRST_OZ 46 #define NEXT_OZ 20int main(void) {int ounces;float cost;printf("ounces cost\n");for (ounces 1, cost FIRST_OZ…...
![](https://img-blog.csdnimg.cn/ba64b2b782ed4ff495a8147ba0c20ad4.png)
无人车沿着指定线路自动驾驶与远程控制的实践应用
有了前面颜色识别跟踪的基础之后,我们就可以设定颜色路径,让无人车沿着指定线路做自动驾驶了,视频:PID控制无人车自动驾驶 有了前几章的知识铺垫,就比较简单了,也是属于颜色识别的一种应用,主要…...
![](https://img-blog.csdnimg.cn/54288d9825ef4833b1b0c4d9fed66a8e.png)
C++ 多态性——纯虚函数与抽象类
抽象类是一种特殊的类,它为一个类族提供统一的操作界面。抽象类是为了抽象和设计的目的而建立的。可以说,建立抽象类,就是为了通过它多态地使用其中的成员函数。抽象类处于类层次的上层,一个抽象类自身无法实例化,也就…...
![](https://www.ngui.cc/images/no-images.jpg)
小程序如何使用防抖和节流?
防抖(Debounce)和节流(Throttle)都是用来优化函数执行频率的技术,特别在处理用户输入、滚动等频繁触发的情况下,它们可以有效减少函数的执行次数,从而提升性能和用户体验。但它们的工作方式和应…...
![](https://img-blog.csdnimg.cn/c1e648bb548f47e49c9e219a77cde4e7.png)
计算机三级网络技术(持续更新)
BGP考点 A S:自治系统 BGP: Border Gateway Protocol(当前使用的版本是 BGP-4)外部网关协议 动态路由协议可以按照工作范围分为IGP以及EGP。IGP工作在同一个AS内,主要用来发现和计算路由,为AS内提供路由信息的交换&…...
![](https://img-blog.csdnimg.cn/68c422e9811d488083b933bcb831e5a3.png)
Django Rest_Framework(二)
文章目录 1. http请求响应1.1. 请求与响应1.1.1 Request1.1.1.1 常用属性1).data2).query_params3)request._request 基本使用 1.1.2 Response1.1.2.1 构造方式1.1.2.2 response对象的属性1).data2).status_code3&…...
![](https://img-blog.csdnimg.cn/deeb7203da4e416a8e3a020aff24440d.png#pic_center)
Kotlin~Visitor访问者模式
概念 将数据结构和操作分离,使操作集合可以独立于数据结构变化。 角色介绍 Visitor:抽象访问者,为对象结构每个具体元素类声明一个访问操作。Element:抽象元素,定义一个accept方法ConcreteElement:具体元…...
![](https://img-blog.csdnimg.cn/08bcd1238b1543fea1c0712d7ccba4ba.png)
LVS-DR模式集群构建过程演示
一、工作原理 LVS的工作原理 1.当用户向负载均衡调度器(Director Server)发起请求,调度器将请求发往至内核空间 2.PREROUTING链首先会接收到用户请求,判断目标IP确定是本机IP,将数据包发往INPUT链 3.IPVS是工作在IN…...
![](https://img-blog.csdnimg.cn/76a200fa976b4244bece380dbad891d5.png)
UML-A 卷-知识考卷
UML-A 卷-知识考卷 UML有多少种图,请列出每种图的名字: 常用的几种UML图: 类图(Class Diagram):类图是描述类、接口、关联关系和继承关系的图形化表示。它展示了系统中各个类之间的静态结构和关系。时序…...
![](https://img-blog.csdnimg.cn/img_convert/33a37cd4ee72f932d69782e633397bd4.png)
BpBinder与PPBinder调用过程——Android开发Binder IPC通信技术
在Android系统中,进程间通信(IPC)是一个非常重要的话题。Android系统通过Binder IPC机制实现进程间通信,而Binder IPC通信技术则是Android系统中最为重要的进程间通信技术之一。本文将介绍Binder IPC通信技术的原理,并…...
![](https://www.ngui.cc/images/no-images.jpg)
篇十五:模板方法模式:固定算法的步骤
篇十五:"模板方法模式:固定算法的步骤" 设计模式是软件开发中的重要知识,模板方法模式(Template Method Pattern)是一种行为型设计模式,用于定义一个算法的骨架,将算法中一些步骤的具…...
![](https://img-blog.csdnimg.cn/5dd49808096c41e2abe3c329b127ae91.png)
web-ssrf
目录 ssrf介绍 以pikachu靶场为例 curl 访问外网链接 利用file协议查看本地文件 利用dict协议扫描内网主机开放端口 file_get_content 利用file协议查看本地文件: fsockopen() 防御方式: ssrf介绍 服务器端请求伪造,是一种由攻击者构造形成…...
![](https://www.ngui.cc/images/no-images.jpg)
【HarmonyOS】【续集】实现从视频提取音频并保存到pcm文件功能(API6 Java)
【关键字】 视频提取类Extractor、视频编解码、保存pcm文件、getAudioTime 【背景和问题】 上篇中介绍了从视频提取音频并保存到pcm文件功能,请参考文档:https://developer.huawei.com/consumer/cn/forum/topic/0209125665541017202?fid0101591351254…...
![](https://www.ngui.cc/images/no-images.jpg)
MySQL为什么要使用 B+Tree 作为索引结构?
MySQL为什么要使用 BTree 作为索引结构? 基本情况 常规的数据库存储引擎 ,一般都是采用 B 树或者 B树来实现索引的存储。B树是一种多路平衡树,用这种存储结构来存储大量数据,它的整个高度 会相比二叉树来说 ,会矮很多…...
![](https://img-blog.csdnimg.cn/1b89cb31a5b64a3c887f416d6dbf87bb.png#pic_center)
Three.js阴影
目录 Three.js入门 Three.js光源 Three.js阴影 使用灯光后,场景中就会产生阴影。物体的背面确实在黑暗中,这称为核心阴影(core shadow)。我们缺少的是落下的阴影(drop shadow),即对象在其他…...
![](https://img-blog.csdnimg.cn/0de0476019754d749f6682cb0944410b.png)
VSCode Remote-SSH (Windows)
1. VSCode 安装 VSCode 2. 安装扩展 Remote SSH Getting started Follow the step-by-step tutorial or if you have a simple SSH host setup, connect to it as follows: Press F1 and run the Remote-SSH: Open SSH Host… command.Enter your user and host/IP in the …...
![](https://img-blog.csdnimg.cn/img_convert/db144ba91aa60e9f03a6044bba8475a0.png)
现代C++中的从头开始深度学习【1/8】:基础知识
一、说明 提及机器学习框架与研究和工业的相关性。现在很少有项目不使用Google TensorFlow或Meta PyTorch,在于它们的可扩展性和灵活性。也就是说,花时间从头开始编码机器学习算法似乎违反直觉,即没有任何基本框架。然而,事实并非…...
![](https://img-blog.csdnimg.cn/6fe0d51e15ef41faae80a973073b114c.png)
Jwt(Json web token)——使用token的权限验证方法 用户+角色+权限表设计 SpringBoot项目应用
目录 引出使用token的权限验证方法流程 用户、角色、权限表设计权限表角色表角色-权限关联表用户表查询用户的权限(四表联查)数据库的视图 项目中的应用自定义注解拦截器controller层DTO返回给前端枚举类型的json化日期json问题 实体类-DAO 总结 引出 1.…...
![](https://img-blog.csdnimg.cn/79230886a9ab4694b0b3d9ccd26f5c50.png)
SpringWeb项目核心功能总结
SpringWeb项目核心功能总结 文章目录 SpringWeb项目核心功能总结1.浏览器与Java程序的连接(个人偏好使用RequestMapping)2.参数的传入3.结果的返回请求转发和请求重定向的区别 核心功能用到的注解: RestControllerControllerResponseBodyRequ…...
![](https://www.ngui.cc/images/no-images.jpg)
Django------信号
Django 框架包含了一个信号机制,它允许若干个发送者(sender)通知一组接收者(receiver)某些特定操作或事件(events)已经发生了, 接收者收到指令信号(signals)后再去执行特定的操作。本文主要讲解Django信号(…...
![](https://img-blog.csdnimg.cn/49003d19702f43c9a233b53cf361faf0.png)
HTML5 中新增了哪些表单元素?
聚沙成塔每天进步一点点 ⭐ 专栏简介⭐ HTML5 中新增了的表单元素⭐ 写在最后 ⭐ 专栏简介 前端入门之旅:探索Web开发的奇妙世界 记得点击上方或者右侧链接订阅本专栏哦 几何带你启航前端之旅 欢迎来到前端入门之旅!这个专栏是为那些对Web开发感兴趣、刚…...
![](https://img-blog.csdnimg.cn/6a5ae9b1311e442590baf58e99c42684.png)
[考研机试] KY20 完数VS盈数 清华大学复试上机题 C++实现
描述 一个数如果恰好等于它的各因子(该数本身除外)子和,如:6321。则称其为“完数”;若因子之和大于该数,则称其为“盈数”。 求出2到60之间所有“完数”和“盈数”。 输入描述: 题目没有任何输入。 输出描述&#…...
![](/images/no-images.jpg)
外链的论坛网站/软件发布网
ubuntu 8.04 内核升级 dpkg -l 查看安装的文件 首先更新apt-get源 vim /etc/apt/sources.list deb http://old-releases.ubuntu.com/ubuntu/ hardy main restricted universe multiversedeb-src http://old-releases.ubuntu.com/ubuntu/ hardy main restricted universe mu…...
![](/images/no-images.jpg)
售卖网站建设实验报告/网络营销出来可以干什么工作
es6 的 import 语法跟 require 不同,而且 import 必须放在文件的最开始,且前面不允许有其他逻辑代码,这和其他所有编程语言风格一致。 import不同与require,它是编译时的(require是运行时的),它…...
![](https://img-blog.csdnimg.cn/img_convert/c022f9474514e7f3e19d51fa52d6b32c.gif)
做网站最主要是那个一类商标/2023年中国进入一级战备状态了吗
前言当架构师大刘看到实习生小李提交的记账流水乱序的问题的时候,他知道没错了:这一次,大刘又要用一致性哈希这个老伙计来解决这个问题了。嗯,一致性哈希,分布式架构师必备良药,让我们一起来尝尝它。1. 满眼…...
![](/images/no-images.jpg)
wordpress地址和找点地址/网络推广员是干什么的
UNSW又一次逆天,有两门科目可能要上大家的黑名单,最近抛出了一个噩耗般的消息——期中考的,挂科率!和出国留学网来看看澳洲新南威尔士大学考试挂科率达41%。一、概述据悉,第一门科目的期中考试成绩公布之后,…...
![](http://upload-images.jianshu.io/upload_images/2267652-98653796211eb9aa.png?imageMogr2/auto-orient/strip%7CimageView2/2/w/700/format/webp)
专业网站建设多少钱/免费建站哪个最好
摘要: 在Web应用中,使用JWT替代session并不是个好主意适合JWT的使用场景抱歉,当了回标题党。我并不否认JWT的价值,只是它经常被误用。 什么是JWT 根据维基百科的定义,JSON WEB Token(JWT,读作 […...
![](http://static.oschina.net/uploads/img/201508/06161827_t826.jpg)
wordpress添加附件/公众号推广合作平台
2019独角兽企业重金招聘Python工程师标准>>> 学习的过程中没有不犯错误的。本文当中提到的这些产品设计流程当中的错误,我(英文原文作者)个人犯过很多次,也见过很多人同样在犯着。幸运的是,有种东西叫做互联网,有种媒介…...