【李宏毅机器学习课程笔记(补)】深度强化学习(一)—— 深度强化学习浅析_李宏毅强化学习笔记csdn-程序员宅基地

技术标签: 深度学习  强化学习  

前言:这篇笔记的内容按照强化学习部分正常的Learning Map来说,是应该放在PPO、Q-Learning等算法前面的,所以在标题这里加了一个(补),代表这篇笔记是后来补发的(学习的时候把笔记记到纸质本子上了…现在相当于誊写一遍,当然也有些当时没想到的或者手写起来不方便的内容)

强化学习的应用场景

以下内容来自: LeeML-Notes.(这个网站上面也是关于李宏毅老师这门课程的相关笔记,但关于强化学习这里就只有一节课的内容,我在这一节的个人笔记也加入了一些自己听课的时候遇到的一些问题和关于课程的内容的个人理解)

在Reinforcement Learning里面会有一个Agent跟一个Environment。这个Agent会有Observation看到世界种种变化,这个Observation又叫做State,这个State指的是环境的状态,也就是你的machine所看到的东西。所以在这个Reinforcement Learning领域才会有这个XXX做法,我们的state能够观察到一部分的情况,机器没有办法看到环境所有的状态,所以才会有这个partial of state 这个想法,这个state其实就是Observation。machine会做一些事情,它做的事情叫做Action,Action会影响环境,会跟环境产生一些互动。因为它对环境造成的一些影响,它会得到Reward,这个Reward告诉它,它的影响是好的还是不好的。
在这里插入图片描述

以游戏Space Invader为例,游戏的目标是操纵屏幕下方的飞船,开火击杀屏幕上方所有的外星舰艇。现在我们让一个machine来玩这个游戏。需要注意的是,在玩游戏这个任务中,machine看到的observation就是游戏画面 (images or pixels) 。

如图所示,游戏有一个初始画面,我们将这个Observation称为 s 1 s_1 s1。machine看到这个画面,决定要采取的Action,它在整局游戏中能采取的Action只有三个:

  • Left(向左移动)
  • Right(向右移动)
  • Fire(开火)

machine得到的Reward即为游戏屏幕左上角的分数。现在假设它采取的Action是Right(这个Action称为 a 1 a_1 a1),由于采取这个Action它没有击杀任何舰艇,故得到的Reward r 1 = 0 r_1=0 r1=0。Action会影响环境,故machine又看到了一个新的Observation,称其为 s 2 s_2 s2。假设machine看到 s 2 s_2 s2采取的Action a 2 a_2 a2是Fire,再假设它的这次开火成功地击杀了一架外星舰艇,那此时他就得到了Reward r 2 = 5 r_2=5 r2=5,并看到了一个新的Observation s 3 s_3 s3。(需要注意的是,游戏中也有一些和machine完全无关的事件发生,如外星舰艇也会攻击玩家操作的飞船,而这些事件的发生是完全随机或者交由Environment决定的,即Environment本身也具有一些随机性)
在这里插入图片描述
上述的这个过程一直进行下去,直到当machine采取了某个Action a T a_T aT,获得了Reward r T r_T rT之后,游戏进入了一个最终状态,即导致游戏结束的状态(如未能躲避敌方舰艇的攻击被击杀)。
我们称这上述的整个从游戏开始到游戏结束的过程为一个Episode,显然,我们希望machine能达到的目标是在每个Episode中获得尽量大的cumulative reward(累计分数或者累计回报),这就需要machine不断地玩这个游戏来学习如何在被击杀之前击杀掉足够多的敌方舰艇。

强化学习的两个难点:

  1. Reward Delay(延迟回报)
    在Space invader这个游戏中,飞船开火击杀敌方舰艇能够得到reward,但开火之前的位置移动对于能够击杀获得分数也是十分重要的。Left 和 Right 这两个Action,虽然不能得到即时的Reward,但它们能够决定将来的Fire Action能不能得到Reward。
  2. Agent‘s actions affect the subsequent data it receives
    Agent采取的Action会影响到它接下来看到的Observation。这告诉我们machine需要学会Exploration,比如如果一个machine只会Left和Right操作而从来不开火,它就永远不知道Fire可能能够拿到Reward。

Outline of RL

RL的方法统统都可以分为两大类,一种是Policy-based方法,另一种是Value-based方法。在Policy-based方法中我们训练的是一个主要完成任务的Actor;在Value-based方法中我们训练的是不完成任务的一个Critic。两种方法的交集被称为Actor-Critic方法。

(下面的笔记内容都是Policy-based方法了,有关Value-based的内容在Q-Learning一节都介绍过了)
在这里插入图片描述

Policy-based 方法

Policy-based当中我们训练的是完成任务的Actor,Actor实际上是一个function:
A c t o r = π ( O b s e r v a t i o n ) Actor = \pi(Observation) Actor=π(Observation)
看到上面这个式子,显然这个function的输入就是machine看到的Observation,输出则是Actor采取的Action
(有些文献中也将Actor称为Policy)
在这里插入图片描述
在学习DL的时候我们知道,解决DL问题一般都是三个步骤:定义函数集合、定义函数的好坏指标、根据对函数好坏的定义选择最优的函数。现在我们同样通过这三个步骤来剖析Policy-based方法。

定义函数集合:NN as actor

在Policy-based方法中,函数集合就是neural network,即Actor可以就是一个neural network。这个network的输入是以vector或matrix表示的machine看到的Observation,输出一般是一个n维的vector v v v(n为machine能够采取的Action数), v v v 的每一个元素代表采取这个Action的概率(Probability of taking the action)

定义函数的好坏

在RL问题中,定义Actor好坏的步骤一般是这样的:
给定一个包含参数 θ \theta θ 的网络作为actor,记为 π θ ( s ) \pi_\theta(s) πθ(s) ,让它去完成一个Episode,根据“强化学习的应用场景”一节当中的介绍,我们知道它会经历如下的过程:
在这里插入图片描述
将它在整个Episode中得到的总回报记为 R θ R_\theta Rθ,显然有
R θ = ∑ t = 1 T r t R_\theta = \sum\limits_{t = 1}^T { {r_t}} Rθ=t=1Trt
同样显然的是,我们希望这个 R θ R_\theta Rθ越大越好。
然而,由于游戏(或者说Environment)有随机性的存在,即使用同样的actor玩同一个游戏,每个Episode最后得到的 R θ R_\theta Rθ也不会是相同的。(其实还有另外一个原因,因为actor作为一个neural network,它的输出是一个vector,这个vector代表actor在这一步采取每个Action的可能性,也就是说即使是同样的actor,同样的Observation,采取的Action也不会完全相同)
所以我们期望的不是某一个Episode的总Reward越大越好,而是将 R θ R_\theta Rθ视为一个随机变量,在进行很多个Episode之后(或者说进行了容量很大的抽样之后),得到的 R θ R_\theta Rθ的期望值越大越好。我们将这个期望值记作 R ˉ θ {\bar R_\theta } Rˉθ,则 R ˉ θ {\bar R_\theta } Rˉθ就是一个衡量function好坏的指标。

问题来了,如何计算 R ˉ θ {\bar R_\theta } Rˉθ
假设一场游戏可以视为一个状态-行动-回报序列(trajectory),我们将这个序列记为 τ \tau τ ,即
τ = { s 1 , a 1 , r 1 , s 2 , a 2 , r 2 , . . . , s T , a T , r T } \tau = \{ {s_1},{a_1},{r_1},{s_2},{a_2},{r_2},...,{s_T},{a_T},{r_T}\} τ={ s1,a1,r1,s2,a2,r2,...,sT,aT,rT}

R ( τ ) = ∑ n = 1 N r n R(\tau) = \sum \limits^N_{n=1} r_n R(τ)=n=1Nrn

接下来,我们就像理解 R ˉ θ {\bar R_\theta } Rˉθ的定义那样,将每个Episode都理解为一次抽样(Sampling),但这次抽样的个体不是 R θ R_\theta Rθ ,而是 τ \tau τ 。抽样时每个个体 τ \tau τ 都有各自被抽取的可能性(可能相等,也可能不相等),而这个可能性是取决于actor的参数 θ \theta θ 的,我们将这个可能性记为 P ( τ ∣ θ ) P(\tau | \theta) P(τθ),表示当actor的参数为 θ \theta θ时, τ \tau τ这个过程出现的几率。
理解了上面这段话,我们就能将 R ˉ θ \bar R_\theta Rˉθ重新表示为 R ˉ θ = ∑ τ R ( τ ) P ( τ ∣ θ ) \bar R_\theta = \sum \limits_\tau R(\tau)P(\tau|\theta) Rˉθ=τR(τ)P(τθ)实际操作时要穷举所有的 τ \tau τ是不可能的,所以一般的做法是让actor π θ \pi_\theta πθ 玩N场游戏,得到N个序列 τ \tau τ { τ 1 , τ 2 , . . . , τ N } \{\tau^1,\tau^2,...,\tau^N\} { τ1,τ2,...,τN}这相当于从 P ( τ ∣ θ ) P(\tau |\theta) P(τθ)这个可能性当中进行N次抽样。当N足够大的时候就可以认为 R ˉ θ = ∑ τ R ( τ ) P ( τ ∣ θ ) ≈ 1 N ∑ n = 1 N R ( τ n ) \bar R_\theta = \sum \limits_\tau R(\tau)P(\tau|\theta) \approx {1 \over N}\sum\limits^N_{n=1} R(\tau^n) Rˉθ=τR(τ)P(τθ)N1n=1NR(τn)这样就完成了 R ˉ θ {\bar R_\theta } Rˉθ的计算。

选择最优的Function

在学习DL的时候我们知道选择最优函数最简单的方法就是Gradient Descent,当然这里由于我们期望的是最大值,故应该使用的是Gradient Ascent,大同小异。让我们用数学语言重新描述现在的问题: θ ∗ = arg ⁡ max ⁡ θ R ˉ θ {\theta ^*} = \arg \mathop {\max }\limits_\theta {\bar R_\theta } θ=argθmaxRˉθ R ˉ θ = ∑ τ R ( τ ) P ( τ ∣ θ ) \bar R_\theta = \sum \limits_\tau R(\tau)P(\tau|\theta) Rˉθ=τR(τ)P(τθ)
使用Gradient Ascent来解决这个问题,即

  • 选择初始值 θ 0 \theta^0 θ0
  • θ 1 ← θ 0 + η ∇ R ˉ θ 0 \theta^1 \leftarrow \theta^0+\eta\nabla{\bar R_{\theta^0}} θ1θ0+ηRˉθ0
  • θ 2 ← θ 1 + η ∇ R ˉ θ 1 \theta^2 \leftarrow \theta^1+\eta\nabla{\bar R_{\theta^1}} θ2θ1+ηRˉθ1

其中,
θ = { w 1 , w 2 , . . . , b 1 , . . . } \theta = \{w_1,w_2,...,b_1,...\} θ={ w1,w2,...,b1,...}
∇ R ˉ θ = [ ∂ R ˉ θ / ∂ w 1 , ∂ R ˉ θ / ∂ w 2 , . . . , ∂ R ˉ θ / ∂ b 1 , . . . ] T \nabla{\bar R_{\theta}} = [\partial{\bar R_\theta}/\partial{w_1},\partial{\bar R_\theta}/\partial{w_2},...,\partial{\bar R_\theta}/\partial{b_1},...]^T Rˉθ=[Rˉθ/w1,Rˉθ/w2,...,Rˉθ/b1,...]T

梯度的具体计算过程如下:在 R ˉ θ \bar R_\theta Rˉθ的计算式中,显然 R ( τ ) R(\tau) R(τ)是和 θ \theta θ 无关的,因此也不需要对它做微分,即:(下面的公式我能截图就截图了,公式编辑器用着太痛苦了)
在这里插入图片描述
为了让 P ( τ ∣ θ ) P(\tau|\theta) P(τθ)出现在这个式子当中的分子位置(后面会讲原因),需要做如下操作:
在这里插入图片描述
由于
在这里插入图片描述
∇ R ˉ θ \nabla{\bar R_{\theta}} Rˉθ也可以与下面这个式子划等号:
在这里插入图片描述

又因为当我们从 P ( τ ∣ θ ) P(\tau|\theta) P(τθ)这个可能性中进行足够多的N次抽样时 ∑ τ R ( τ ) P ( τ ∣ θ ) ≈ 1 N ∑ n = 1 N R ( τ n ) \sum \limits_\tau R(\tau)P(\tau|\theta) \approx {1 \over N}\sum\limits^N_{n=1} R(\tau^n) τR(τ)P(τθ)N1n=1NR(τn),因此丄式约等于在这里插入图片描述
接下来,问题的中心点就在于如何求解 l o g P ( τ n ∣ θ ) logP(\tau^n|\theta) logP(τnθ)的梯度,根据对 τ \tau τ的定义可以知道
在这里插入图片描述
对上式两端取对数,相乘变相加,即
在这里插入图片描述
显然上式右端只有第二项和 θ \theta θ有关,故
在这里插入图片描述我们将上述所有式子结合起来得到 ∇ R ˉ θ \nabla{\bar R_{\theta}} Rˉθ的表示式:
在这里插入图片描述
这个式子的意思是:
当在一个Episode的序列 τ n \tau_n τn中,若machine在状态 s t n s^n_t stn下采取了 a t n a^n_t atn的Action,最终导致这个Episode的Reward R ( τ n ) R(\tau^n) R(τn)为正,则要调整 θ \theta θ的值让machine在状态 s t n s^n_t stn下采取Action a t n a^n_t atn的几率提高;
反之,若machine在状态 s t n s^n_t stn下采取了 a t n a^n_t atn的Action,最终导致这个Episode的Reward R ( τ n ) R(\tau^n) R(τn)为负,则要调整 θ \theta θ的值让machine在状态 s t n s^n_t stn下采取Action a t n a^n_t atn的几率降低。
(怎么调整?当然通过 θ n e w ← θ o l d + η ∇ R ˉ θ o l d \theta^{new} \leftarrow \theta^{old}+\eta\nabla{\bar R_{\theta^{old}}} θnewθold+ηRˉθold调整啦~)
需要注意的是,虽然在 ∇ R ˉ θ \nabla{\bar R_{\theta}} Rˉθ的最终表示式里的最后一项是在某一个时间点t的状态采取对应Action的概率,但前面相乘的还是整个Episode的Reward,而不是这一步Action所得到的即时Reward。(这个问题也很好理解,如果相乘的是即时Reward的话,因为只有开火能得到即时Reward,最后训练出来的Actor就是一个不会左右移动的无情开火机器)
Q:为什么对几率的对数取梯度?不能直接对几率去梯度吗?
(待解决)

Tips:Baseline的使用
Q:我们最后是根据 R ( τ n ) R(\tau^n) R(τn)的正负来调整 θ \theta θ,但如果在某个游戏当中,所有的Reward都是正数该怎么解决?(Space invader其实就属于这种情况,因为这个游戏的分数永远不会是负值)
A:使用如下的式子来计算 ∇ R ˉ θ \nabla{\bar R_{\theta}} Rˉθ
在这里插入图片描述
除了给 R ( τ n ) R(\tau^n) R(τn)减去一个b以外没有其他的不同,这个b让 R ( τ n ) R(\tau^n) R(τn)的值有正有负,我们将它成为Baseline,Baseline的值是自己定义的)

版权声明:本文为博主原创文章,遵循 CC 4.0 BY-SA 版权协议,转载请附上原文出处链接和本声明。
本文链接:https://blog.csdn.net/weixin_42770354/article/details/109953033

智能推荐

【Java】7.JDK下载和安装 & JDK目录介绍-程序员宅基地

文章浏览阅读899次,点赞15次,收藏7次。安装完毕后,就可以去对应的文件里找到以下文件夹。重点需要掌握的是bin文件夹。目录名称说明bin该路径下存放了JDK的各种工具命令。javac和java就放在这个目录。conf该路径下存放了JDK的相关配置文件。include该路径下存放了一些平台特定的头文件。jmods该路径下存放了JDK的各种模块。legal该路径下存放了JDK各模块的授权文档。lib该路径下存放了JDK工具的一些补充JAR包。

网络安全:小记一次代码审计-程序员宅基地

文章浏览阅读92次。事情是这样的,由于我 CNVD 还差一积分就可以兑换京东E卡了,所以找了这个 CMS 看看能不能挖到漏洞,运气还是不错的挖到了两个,分别是 SSRF 与文件覆盖 GETSHELL,这才有这篇文章。该 CMS 版本是 4.2。以下漏洞均被 CNVD 收录。此次代码审计使用了通用代码审计思路的两种,第一种:根据功能点定向审计、第二种:敏感函数回溯参数过程,没有用到的是通读全文代码。活用 phpstorm 可以让代码审计的效率大大增加。网络安全成长路线图。

psycopg2.ProgrammingError:relation ""does not exits_psycopg2 连接错误: relation "bm_market_exclusion_rule_-程序员宅基地

文章浏览阅读6.6k次。在python读取数据库中的数据,表的名字为'PanJueShu',名字中含有大写的字母,此时代码为:cur.execute("select instrument_content from PanJueShu_DaoQie" )这样执行之后就会报上面的错误,说表名不存在当代码改成下面的代码:cur.execute("select instrument_content fro..._psycopg2 连接错误: relation "bm_market_exclusion_rule_type" does not exist l

python套接字服务端连接多个client收发消息_python服务端向所有客户端发消息-程序员宅基地

文章浏览阅读998次。第一版:server.py#!/usr/bin/python3# -*-coding:utf-8 -*-#import socketfrom socket import *import timeCOD = 'utf-8'HOST = gethostname() # 主机ipPORT = 21566 # 软件端口号BUFSIZ = 1024ADDR = (HOST, PO..._python服务端向所有客户端发消息

flink系列(10)-状态State和状态描述StateDescriptor-程序员宅基地

文章浏览阅读7.5k次,点赞2次,收藏8次。2019独角兽企业重金招聘Python工程师标准>>> ..._flink 1.13 liststatedescriptor 与 mapstatedescriptor 区别

遍历DataFrame的每一行或列:按行遍历df.iterrows()、按列遍历df.items()-程序员宅基地

文章浏览阅读4.3k次,点赞2次,收藏11次。欢迎大家转发,一起传播知识和正能量,帮助到更多人。期待大家提出宝贵改进建议,互相交流,收获更大。期待大家提出宝贵建议,互相交流,收获更大,助教:qmy。A选项:df.iterrows()可实现按行遍历df。B选项:df.items()可实现按列遍历df。【小白从小学Python、C、Java】print("该行中的每列名称和值:")print("该列中的每行名称和值:")print("行号:",index1)print("列号:",index2)按列遍历df.items()【Python-数据分析】_df.items

随便推点

linux usb 带宽不足,uvc camera在usb带宽不足的情况下,如何正常出图?-程序员宅基地

文章浏览阅读1.5k次。uvc camera在usb带宽不足的情况下,如何正常出图?发布时间:2018-06-07 09:25,浏览次数:2265, 标签:uvccamerausb在某些平台设备,如果同时使用多个uvc camera进行数据采集或者是同一个USB,既用作OTG功能,又用作USB host功能,会因为USB带宽的的限制,导致camera无法正常使用,使用失败的现象如下:uvcvideo: Failed to..._linux 摄像头带宽不足

蓝牙标签操作指南-程序员宅基地

文章浏览阅读1.1k次。下面是蓝牙标签设备的几个状态的变化,当标签的内容被编辑过后,标签的状态就会变成黄色的【等待更新】标识,如果手动点击【投屏】按钮,标签状态会变成【准备更新】状态,此时手机会自动连接标签,并且会自动更新。找到对应的标签,点击【编辑】按钮,会跳转到内容编辑的界面,如下图所示。标签内容编辑完之后,返回到【设备】界面之后,会提示对应的标签【等待更新】,如下图所示,这时候需要点击【投屏】按钮,APP就会将更改的内容刷新到标签上面。点击【投图】按钮之后,会提示不同状态,如提示【准备更新】,如下图所示。_蓝牙标签

本地外卖市场趋势怎么样?成为行业黑马的机会有多大呢?_外卖走势怎么样-程序员宅基地

文章浏览阅读154次。外卖市场正处于风口浪尖上,对于还观望外卖市场的伙伴,可以看一下本地外卖市场趋势怎么样?_外卖走势怎么样

kepware 发生 Setup was unable to initialize your PC错误解决办法_kepserverex怎么彻底卸载-程序员宅基地

文章浏览阅读5.4k次。kepware 发生 Setup was unable to initialize your PC错误解决办法第一步:卸载kepware , 删除注册表(最简单办法使用软件管家卸载)第二步:重启电脑第三步:关闭360等杀毒软件第四步:重新安装kepware,不会再出现“ Setup was unable to initialize your PC” 错误。以上运行_kepserverex怎么彻底卸载

用 HTML 做一个表单模板_表单html制作模板-程序员宅基地

文章浏览阅读8.7k次,点赞8次,收藏46次。本文包括了 HTML 的简述和用 HTML 做一个表单模板的相关内容。。。_表单html制作模板

ICON艾肯live声卡系列驱动安装设置方法_icon duo live22使用-程序员宅基地

文章浏览阅读1w次。ICON艾肯live系列usb外置声卡包括Cube 4Nano 2nano 6Nano Duo22 Duo44 MicU MobileR MobileU MobileU MINI VH4 Uports2 Uports4 Uports6 Utrack UtrackPro Ultra 4 Platform U22 VH6等多种型号。如何安装声卡驱动;首先要进入icon声卡官网,点击live录制声卡,找到对应的声卡型号;比如以cube 4nano live声卡为例,点击cube 4nano live图片,找到下载_icon duo live22使用

推荐文章

热门文章

相关标签