Q-Learning学习笔记-李宏毅

news2025/1/11 21:40:50

introduction

  • 学习的并不是policy,而是学习critic,critic用来评价policy好还是不好;
  • 一种critic:state value function V π ( s ) V^\pi(s) Vπ(s)是给定一个policy π \pi π,在遇到state s s s之后累积的reward的期望值,以游戏举例也就是一个actor在看到某一个画面 s s s之后直到游戏结束预期可以获得多大的value,更直观的解释是到达游戏的某一个节点state s s s,当前游戏还可以得多少分,critic需要和一个特定的actor绑定才可以得到evaluate;
  • 如何衡量 V π ( s ) V^\pi(s) Vπ(s),有两种方法,其一是Monte-Carlo,给出一个state玩游戏到最后会得到一个value,收集多个 s t a t e , v a l u e state,value state,value对,然后将 V π ( s ) V^\pi(s) Vπ(s)看做一个network,当做一个回归问题进行训练;另一种方法是Temporal-difference(TD) based方法,基于的是 V π ( s t ) = V π ( s t + 1 ) + r t V^\pi(s_t) = V^\pi(s_{t + 1})+ r_t Vπ(st)=Vπ(st+1)+rt,在这种方法之下就不需要玩完一整场游戏才能获得reward值,而是在当前state为 s t s_t st的情况下,采取action a t a_t at,此时会转到 s t + 1 s_{t + 1} st+1,并且会获得一个reward r t r_t rt,此时模型最后追求的不是像方法1一样输出一场游戏总的reward,而是要尽量保证 V π ( s t ) − V π ( s t + 1 ) = r t V^\pi(s_t) - V^\pi(s_{t + 1}) = r_t Vπ(st)Vπ(st+1)=rt,模型还是输出value,但是损失函数是根据差值和reward接近得到的;
  • 两种方法的对比MC的variance比TD方法大;
  • 另一种critic:state-action value function Q π ( s , a ) Q^\pi(s,a) Qπ(s,a),当给定actor π \pi π,在遇到state s s s的时候采取action a a a后reward的期望值,有两种network形式一种是输入 s , a s,a s,a输出一个常量代表value,另一种是输入 s s s输出在 a a a取不同值的时候的value值;
  • 有了critic就可以进行Q-learning,过程,首先初始化一个policy π \pi π,然后学习其对应的critic Q π Q^\pi Qπ,之后就可以更新policy π ′ \pi' π,这个 π ′ \pi' π π \pi π好,得到的方式 π ′ ( s ) = a r g   m a x a Q π ( s , a ) \pi'(s) = arg\ \underset{a}{max} Q^\pi(s,a) π(s)=arg amaxQπ(s,a),可以看到 π ′ \pi' π是通过Q解优化方程得到的,这个过程反复迭代下去,这个优化在action是离散的时候可以比较好解,连续时候,更新之后的 π ′ \pi' π比之前的 π \pi π好,是有对于任意的state s s s V π ′ ( s ) ≥ V π ( s ) V^{\pi'}(s)\geq V^\pi(s) Vπ(s)Vπ(s)
  • Target Network:在训练TD类critic的时候,有两个network,一个输入 ( s t , a t ) (s_t,a_t) (st,at),输出 Q π ( s t , a t ) Q^\pi(s_t,a_t) Qπ(st,at),另一个输入 ( s t + 1 , π ( s t + 1 ) ) (s_{t + 1},\pi(s_{t + 1})) (st+1,π(st+1))输出 Q π ( s t + 1 , π ( s t + 1 ) ) Q^\pi(s_{t + 1},\pi(s_{t + 1})) Qπ(st+1,π(st+1)),然后训练是通过计算两个输出的差值和 r t r_t rt计算损失得到的,但是此时不好训练,所以将第二个network固定住,第二个网络也叫做Target Network,当然Target Network也不是完全不更新,一般是将第一个网络更新一定次数之后再直接用第一个network的参数更新Target Network的参数,只是不要两个network一起参与训练;
  • Exploration:在第二种critic中,更新 π \pi π的方式是 π ′ ( s ) = a r g   m a x a Q π ( s , a ) \pi'(s) = arg\ \underset{a}{max} Q^\pi(s,a) π(s)=arg amaxQπ(s,a),由于结果是sample来进行的,所以会出现偏差,而且偏差会持续下去,一个比较实际的例子是进一家吃饭,点到一个还可以的饭,之后就会一直点他,但是可能还有更好吃的;所以要给这个过程添加一些扰动,有两种方法,其一是Epsilon Greedy: a = { a r g   m a x a Q ( s , a ) , w i t h   p r o b a b i l i t y   1 − ϵ r a n d o m o t e h r w i s e a = \begin{cases}arg\ \underset{a}{max}Q(s,a),&with\ probability\ 1-\epsilon\\random & otehrwise\end{cases} a={arg amaxQ(s,a),randomwith probability 1ϵotehrwise;另一种方法是Boltzmann Exploration: P ( a ∣ s ) = e x p ( Q ( s , a ) ) ∑ a e x p ( Q ( s , a ) ) P(a|s) = \frac{exp(Q(s,a))}{\sum_aexp(Q(s,a))} P(as)=aexp(Q(s,a))exp(Q(s,a))以确保尽管几率小,但是行为还是有概率被取到;
  • Replay Buffer:将数据都放到一个buffer里面,有一个限制的大小,在buffer满的时候将旧的数据丢掉,每次训练的时候就随机选出一个batch的数据,然后训练Network;这样就是一个off-policy的做法,因为数据不是全由当前policy得到的,可能是由历史policy得到的;
  • 一个典型的Q-Learning算法:在这里插入图片描述

训练Q-Learning的tips

  • Q value is usually over-estimated:因为原来回归的目标 Q ( s t , a t ) → r t + m a x a Q ( s t + 1 , a ) Q(s_t,a_t)\rightarrow r_t + \underset{a}{max}Q(s_{t + 1},a) Q(st,at)rt+amaxQ(st+1,a),这样每次都偏向于选择被高估的action来作为目标,缓解办法:double DQN,回归目标换成 Q ( s t , a t ) → r t + Q ′ ( s t + 1 , a r g   m a x a Q ( s t + 1 , a ) ) Q(s_t,a_t)\rightarrow r_t + Q'(s_{t + 1}, arg\ \underset{a}{max}Q(s_{t + 1},a)) Q(st,at)rt+Q(st+1,arg amaxQ(st+1,a)),这个 Q ′ Q' Q就是Target Network;
  • Dueling DQN:修改了Network的架构,原来是直接输出Q value,现在是分为两条支路,分别输出 V ( s ) , A ( s , a ) V(s),A(s,a) V(s),A(s,a),最后的Q value是两个输出的加和,好处,现在假设更新了state,那么 V ( s ) V(s) V(s)变化了,得到的Q value的值在每个state下都会变化,而不是只有在sample到对于state的情况下才能变化,在训练的时候还会加上constraint, A ( s , a ) A(s,a) A(s,a)对于某个state的加和为0;
  • Prioritized Reply:在buffer中采样的时候加上权重,增加困难样本的权重;
  • multi-step:在buffer里面存储的数据不仅仅是一步,而是存的多步,MC和TD之间的balance;
  • Noisy Net:exploration的另一种方法,在network的参数上面加上noise,上面epsilon exploration是在action上面加noise;

Q-Learning for Continuous Actions

  • action a a a是一个连续的vector,此时解 a = a r g   m a x a Q ( s , a ) a = arg\ \underset{a}{max}Q(s,a) a=arg amaxQ(s,a)比较难,此时没有办法枚举所有action来算出哪一个action的value最大;
  • 方法1:sample一个action集合,之后计算看那个action的Q value最大;
  • 方法2:用梯度下降的方法来解上面那个优化问题;
  • 方法3:专门设计一个network来使得上面的优化容易,对于 Q π Q^\pi Qπ,输入state s s s,输出 μ ( s ) , ∑ ( s ) , V ( s ) \mu(s),\sum(s),V(s) μ(s),(s),V(s),分别是vector,matrix,scalar,最后的Q value的计算是 Q ( s , a ) = − ( a − μ ( s ) ) T ∑ ( s ) ( a − μ ( s ) ) + V ( s ) Q(s,a) = -(a - \mu(s))^T\sum(s)(a - \mu(s)) + V(s) Q(s,a)=(aμ(s))T(s)(aμ(s))+V(s),此时 μ ( s ) = a r g   m a x a Q ( s , a ) \mu(s) = arg\ \underset{a}{max}Q(s,a) μ(s)=arg amaxQ(s,a),因为上面 Q ( s , a ) Q(s,a) Q(s,a)的第一项一定是负的,越靠近0越好;

ref
https://www.youtube.com/watch?v=tnPVcec22cg&list=PLJV_el3uVTsODxQFgzMzPLa16h6B8kWM_&index=5&ab_channel=Hung-yiLee

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

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

相关文章

并发控制利器Semaphore

并发控制利器:Semaphore详解与应用 简介 Semaphore 是Java并发编程中的一个重要工具,用于管理对共享资源的访问权限,确保系统资源不会因过度访问而耗尽。形象地说,Semaphore 可以比喻为交通信号灯,它控制着能够同时进…

Spring Cloud 系列之Gateway:(9)初识网关

传送门 Spring Cloud Alibaba系列之nacos:(1)安装 Spring Cloud Alibaba系列之nacos:(2)单机模式支持mysql Spring Cloud Alibaba系列之nacos:(3)服务注册发现 Spring Cloud 系列之OpenFeign:(4)集成OpenFeign Spring Cloud …

探索 JavaScript 新增声明命令与解构赋值的魅力:从 ES5 迈向 ES6

个人主页:学习前端的小z 个人专栏:JavaScript 精粹 本专栏旨在分享记录每日学习的前端知识和学习笔记的归纳总结,欢迎大家在评论区交流讨论! ES5、ES6介绍 文章目录 💯声明命令 let、const🍟1 let声明符&a…

【区块链】caliper压力测试

本文上接postman接口测试 参照工程项目使用Caliper测试工具对食品安全溯源系统智能合约生成新食品(newFood)功能进行压力测试 首先启动webase python3 deploy.py startAll vim /opt/bencahmark/caliper-benchmark/networks/fisco-bcos/test-nw/fisco-bcos.json 命令便捷查…

刷代码随想录有感(75):回溯问题——非递减子序列

题干&#xff1a; 代码&#xff1a; class Solution { public:vector<int> tmp;vector<vector<int>> res;void backtracking(vector<int> nums, int start){if(tmp.size() > 2){res.push_back(tmp);}unordered_set<int> uset;for(int i sta…

JMeter 基本使用【Windows Jmeter GUI 图形界面】

1.安装jmeter GUI图形界面 需要安装JDK 官方网址: Apache JMeter - Apache JMeter™ linux tgz windows zip 2. 目录及文件 bin: 核心可执行文件&#xff0c;包含配置 extras&#xff1a;插件扩展包 lib&#xff1a;核心依赖包 ext&#xff1a;核心包 junit&#xff1a;单…

低代码开发:成本革命,还是技术幻象?

在当今快速发展的数字化时代&#xff0c;企业面临着不断增长的技术需求和日益紧缩的预算压力。开源低代码开发平台&#xff08;YDUIbuilder&#xff09;应运而生&#xff0c;承诺以更低的成本和更快的速度交付应用程序。但低代码开发真的能减少成本吗&#xff1f;本文将深入探讨…

uniapp集成websocket不断线的处理-打牌记账

背景 近期在开发打牌记账微信小程序时&#xff0c;我们将房间这个业务场景做成了类似聊天室功能。 对房间内发生的动作&#xff0c;都能实时对其他人可见。 如:转账&#xff0c;离开&#xff0c;加入&#xff0c;结算等动作 其他人员都能实时接收到推送消息&#xff0c; 这个时…

自媒体多平台互助平台_互赞互关,视频快速起流

首先&#xff0c;视频爆流的关键规则是什么&#xff1f; 平台根据视频的点赞/评论数据计算视频热门程度&#xff0c; 视频播放留存与收藏等等也在考核范围内&#xff0c; 不过&#xff0c;互关互赞不一定符合推流&#xff01;这你要清楚&#xff01;&#xff01; 目前我还不能准…

Doris【部署 03】Linux环境Doris数据库部署异常问题收集解决(不断更新)

Linux环境Doris数据库部署异常问题 1.FE1.1 Unknown system variable character_set_database1.2 notify new FE type transfer: UNKNOWN1.3 mysql_load_server_secure_path1.4 Only unique table could be updated1.5 too many filtered rows 2.BE2.1 Have not get FE Master …

vue项目报错:internal/modules/cjs/loader.js:892 throw err;

前言&#xff1a; vue项目中无法正常使用git&#xff0c;并报错情况。 报错信息&#xff1a; internal/modules/cjs/loader.js:892throw err;^ Error: Cannot find module D:\project\sd_wh_yth_front\node_modules\yorkie\src\runner.js 报错处理&#xff1a; npm install y…

【多模态融合】Cross Modal Transformer: Towards Fast and Robust 3D Object Detection

论文链接&#xff1a;Cross Modal Transformer: Towards Fast and Robust 3D Object Detection 代码链接&#xff1a;https://github.com/junjie18/CMT 作者&#xff1a;Junjie Yan, Yingfei Liu, Jianjian Sun, Fan Jia, Shuailin Li, Tiancai Wang, Xiangyu Zhang 发表单位…

运维笔记.MySQL.基于mysqldump数据备份与恢复

运维专题 MySQL.基于mysqldump数据备份与恢复 - 文章信息 - Author: 李俊才 (jcLee95) Visit me at CSDN: https://jclee95.blog.csdn.netMy WebSite:http://thispage.tech/Email: [email protected]. Shenzhen ChinaAddress of this article:https://blog.csdn.net/qq_2855…

提升主播直播体验:如何选择和使用第三方美颜SDK?

第三方美颜SDK为开发者提供了实现这些功能的便利途径。那么&#xff0c;如何选择和使用第三方美颜SDK&#xff0c;来提升主播的直播体验呢&#xff1f; 一、了解美颜SDK的重要性 1.1美颜SDK的作用 美颜SDK不仅能提升主播的自信&#xff0c;还能吸引更多观众&#xff0c;增加…

“智绘艺术家之诗画点军”正式报名开赛 |AIGC与点军的梦幻碰撞,等你来战!

点军&#xff0c;这处江南的明珠&#xff0c;宜昌的瑰宝&#xff0c;历史与自然的交响乐章在此奏响。 三国时&#xff0c;关羽曾在此点兵&#xff0c;其雄姿英发&#xff0c;至今犹在眼前。 古之要塞&#xff0c;控巴夔&#xff0c;制荆襄&#xff0c;为三峡门户&#xff0c;…

“Excel+中文编程”衍生新型软件,WPS用户:自家孩子

你知道吗&#xff0c;我们中国人有时候真的挺有创新精神的。 你可能熟悉Excel表格&#xff0c;也可能听说过中文编程&#xff0c;但你有没有脑洞大开&#xff0c;想过如果把这两者结合起来&#xff0c;会碰撞出什么样的火花呢&#xff1f; 别不信&#xff0c;跟着我来看看吧&a…

【mysql】【docker】mysql8-互为主从

&#x1f338;&#x1f338; Linux/docker-compose/mysql8 互为主从 优雅部署 &#x1f338;&#x1f338; 记录下两台Linux的mysql需要热备份&#xff0c;互为主从&#xff0c;后期加上keepalived实现高可用切换 参考博客&#xff1a;答 案 &#x1f338; 一、准备文件 这里…

Ubuntu18.04 OpenSSH升级

升级前版本&#xff1a; rootecs-m2eqyb:/opt# ll total 20912 drwxr-xr-x 2 root root 4096 May 10 16:23 ./ drwxr-xr-x 24 root root 4096 May 10 14:38 ../ -rw-r--r-- 1 root root 1848766 May 10 16:23 openssh-9.7p1.tar.gz -rw-r--r-- 1 root root 18038…

如何快速申请免费单域名SSL证书

申请免费的单域名SSL证书通常涉及以下几个步骤&#xff0c;虽然具体细节可能会根据不同的证书颁发机构(CA)有所差异。以下是通用的申请流程&#xff1a; 1.选择证书颁发机构&#xff1a; 访问提供免费单域名SSL证书的证书颁发机构网站&#xff0c;例如JoySSL等。 2.注册账号…