强化学习笔记------第四章----策略梯度(超详细)

news/2024/5/18 22:16:57 标签: 强化学习, 人工智能

Policy Gradient
在这里插入图片描述
强化学习中有3个组成部分:演员(actor)环境(environment)和·奖励函数(reward function)·

强化学习中,环境跟奖励函数不是你可以控制的,环境跟奖励函数是在开始学习之前,就已经事先给定的。唯一能做的就是调整演员里面的策略(policy),使得演员可以得到最大的奖励。演员里面会有一个策略,这个策略决定了演员的行为。
在这里插入图片描述
策略一般写成π。假设用深度学习的技术来做强化学习的话,策略就是一个网路。网络里面就有一堆参数,我们用 θ 来代表 \piπ 的参数。

网络的输入就是现在机器看到的东西,如果让机器打电玩的话,机器看到的东西就是游戏的画面。机器看到什么东西,会影响你现在训练到底好不好训练。举例来说,在玩游戏的时候, 也许你觉得游戏的画面前后是相关的,也许你觉得你应该让你的策略,看从游戏初始到现在这个时间点,所有画面的总和。你可能会觉得你要用到 RNN 来处理它,不过这样子会比较难处理。要让你的机器,你的策略看到什么样的画面,这个是你自己决定的。让你知道说给机器看到什么样的游戏画面,可能是比较有效的。

输出就是机器要采取什么样的行为。

上图就是具体的例子,

策略就是一个网络;
输入 就是游戏的画面,它通常是由像素(pixels)所组成的;
输出就是看看说有哪些选项是你可以去执行的,输出层就有几个神经元。
假设你现在可以做的行为有 3 个,输出层就是有 3 个神经元。每个神经元对应到一个可以采取的行为。
输入一个东西后,网络就会给每一个可以采取的行为一个分数。你可以把这个分数当作是概率。演员就是看这个概率的分布,根据这个概率的分布来决定它要采取的行为。比如说 70% 会向左走,20% 向右走,10% 开火等等。概率分布不同,演员采取的行为就会不一样。

在这里插入图片描述
接下来用一个例子来说明演员是怎么样跟环境互动的。
首先演员会看到一个游戏画面,我们用 s1来表示游戏初始的画面。接下来演员看到这个游戏的初始画面以后,根据它内部的网络,根据它内部的策略来决定一个动作。假设它现在决定的动作 是向右,它决定完动作 以后,它就会得到一个奖励,代表它采取这个动作以后得到的分数。

我们把一开始的初始画面记作 s1, 把第一次执行的动作记作 a1,把第一次执行动作完以后得到的奖励记作 r1。不同的书会有不同的定义,有人会觉得说这边应该要叫做 r2,这个都可以,你自己看得懂就好。演员决定一个行为以后,就会看到一个新的游戏画面,这边是 s2
。然后把这个 s2输入给演员,这个演员决定要开火,然后它可能杀了一只怪,就得到五分。这个过程就反复地持续下去,直到今天走到某一个时间点执行某一个动作,得到奖励之后,这个环境决定这个游戏结束了。比如说,如果在这个游戏里面,你是控制绿色的船去杀怪,如果你被杀死的话,游戏就结束,或是你把所有的怪都清空,游戏就结束了。

在这里插入图片描述
一场游戏叫做一个回合(episode)或者试验(trail)
把这场游戏里面所得到的奖励都加起来,就是总奖励(total reward),称之为回报(return),用R表示。
演员要想办法去最大化它可以得到的奖励。
在这里插入图片描述
强化学习里面,除了环境跟演员以外,还有奖励函数(reward function)
奖励函数根据在某一个状态采取的某一个动作决定现在这个行为可以得到多少的分数,他是一个函数,给他s1,a1,他告诉你得到r1。给他s2,a2,他告诉你得到r2。若把所有r都加起来,就可以得到R( τ \tau τ),代表某一个轨迹 τ \tau τ 的奖励。

在某一场游戏里面, 某一个回合里面,我们会得到 R。我们要做的事情就是调整演员内部的参数 θ \theta θ, 使得 R 的值越大越好。在给定某一组参数 θ \theta θ 的情况下,我们会得到的 R( θ \theta θ)的期望值是多少。
在这里插入图片描述
可以根据 \thetaθ 算出某一个轨迹 τ \tau τ 出现的概率,接下来计算这个 τ \tau τ 的总奖励是多少。总奖励使用这个 \tauτ 出现的概率进行加权,对所有的 τ \tau τ 进行求和,就是期望值。给定一个参数,你会得到的期望值。
在这里插入图片描述
我们还可以写成上式那样,从 p θ( τ \tau τ)这个分布采样一个轨迹 τ \tau τ,然后计算 R( τ \tau τ)的期望值,就是你的期望的奖励。 我们要做的事情就是最大化期望奖励。
![在这里插入图片描述](https://img-blog.csdnimg.cn/202104141420290.png?x-oss-process=image/watermark,t在这里插入图片描述
怎么最大化期望奖励呢?我们用的是梯度上升(gradient ascent),因为要让它越大越好,所以是梯度上升。梯++度上升在更新参数的时候要加。
Tips
1、Add a baseline
在这里插入图片描述 如果给定状态 s 采取动作 a 会给你整场游戏正的奖励,就要增加它的概率。如果状态 s 执行动作 a,整场游戏得到负的奖励,就要减少这一项的概率。

但在很多游戏里面,奖励总是正的,就是说最低都是 0。比如说打乒乓球游戏, 你的分数就是介于 0 到 21 分之间,所以 R 总是正的。假设你直接套用这个式子, 在训练的时候告诉模型说,不管是什么动作你都应该要把它的概率提升。 在理想上,这么做并不一定会有问题。因为虽然说 R 总是正的,但它正的量总是有大有小,你在玩乒乓球那个游戏里面,得到的奖励总是正的,但它是介于 0~21分之间,有时候你采取某些动作可能是得到 0 分,采取某些动作可能是得到 20 分。
在这里插入图片描述
假设你在某一个状态有 3 个动作 a/b/c可以执行。根据下式
在这里插入图片描述
你要把这 3 项的概率,对数概率都拉高。 但是它们前面权重的 R 是不一样的。 R 是有大有小的,权重小的,它上升的就少,权重多的,它上升的就大一点。 因为这个对数概率是一个概率,所以动作 a、b、c 的对数概率的和要是 0。 所以上升少的,在做完归一化(normalize)以后, 它其实就是下降的,上升的多的,才会上升。
在这里插入图片描述
这是一个理想上的状况,但是实际上,我们是在做采样就本来这边应该是一个期望(expectation),对所有可能的 s 跟 a 的对进行求和。 但你真正在学的时候不可能是这么做的,你只是采样了少量的 s 跟 a 的对而已。 因为我们做的是采样,有一些动作可能从来都没有采样到。在某一个状态,虽然可以执行的动作有 a/b/c,但你可能只采样到动作 b,你可能只采样到动作 c,你没有采样到动作 a。但现在所有动作的奖励都是正的,所以根据这个式子,它的每一项的概率都应该要上升。你会遇到的问题是,因为 a 没有被采样到,其它动作的概率如果都要上升,a 的概率就下降。 所以 a 不一定是一个不好的动作, 它只是没被采样到。但只是因为它没被采样到, 它的概率就会下降,这个显然是有问题的,要怎么解决这个问题呢?你会希望你的奖励不要总是正的。
在这里插入图片描述
2、Assign Suitable Credit
如果我们看下面这个式子的话,
在这里插入图片描述
我们原来会做的事情是,在某一个状态,假设你执行了某一个动作 a,它得到的奖励,它前面乘上的这一项 R( τ \tau τn)-b。

只要在同一个回合里面,在同一场游戏里面, 所有的状态跟动作的对都会使用同样的奖励项(term)进行加权,这件事情显然是不公平的,因为在同一场游戏里面 也许有些动作是好的,有些动作是不好的。 假设整场游戏的结果是好的, 并不代表这个游戏里面每一个行为都是对的。若是整场游戏结果不好, 但不代表游戏里面的所有行为都是错的。所以我们希望可以给每一个不同的动作前面都乘上不同的权重。每一个动作的不同权重, 它反映了每一个动作到底是好还是不好。

在这里插入图片描述
举个例子, 假设这个游戏都很短,只有 3–4 个互动, 在sa执行 a1得到 5 分。在 sb 执行 a2得到 0 分。在 sc执行 a3得到 -2 分。 整场游戏下来,你得到 +3 分,那你得到 +3 分 代表在 sb执行动作 a2是好的吗?并不见得代表 sb执行 a2是好的。因为这个正的分数,主要来自于在 sa执行了 a1,跟在 sb 执行 a2是没有关系的,也许在 sb执行 a2反而是不好的, 因为它导致你接下来会进入 sc,执行 a3被扣分,所以整场游戏得到的结果是好的, 并不代表每一个行为都是对的。

一个做法是计算这个对的奖励的时候,不把整场游戏得到的奖励全部加起来,只计算从这一个动作执行以后所得到的奖励
在这里插入图片描述
本来的权重是整场游戏的奖励的总和,现在改成从某个时间 tt 开始,假设这个动作是在 tt 这个时间点所执行的,从 tt 这个时间点一直到游戏结束所有奖励的总和,才真的代表这个动作是好的还是不好的。
在这里插入图片描述
接下来再更进一步,我们把未来的奖励做一个折扣(discount),由此得到的回报被称为Discounted Return(折扣回报)


http://www.niftyadmin.cn/n/1182625.html

相关文章

Android应用资源---菜单资源类型(Menu)

菜单资源定义了应用程序的菜单(选项菜单、内容菜单或子菜单),这些菜单能够使用MenuInflater对象来装载。 文件位置(FILE LOCATION): res/menu/filename.xml 文件名被用作资源ID。 被编译资源的数据类型&…

Reading papers_10(人体行为识别特征点提取小综述)

这是本学期一门课程的论文。(注:本人看过的行为识别特征提取方面的文章就10来篇,所以本综述大部分内容是参考其他人的综述的,有些并不是自己的成果,个人功底还没这么雄厚…) 行为识别特征提取综述 摘要 人体行为识别目前处在动作识…

强化学习笔记------第五章----近端优化策略(PPO)(超详细)

本章数学问题太过复杂,建议去看看李宏毅老师这部分的内容,在此只贴出部分关于PPO的知识总结。 基于on-policy的policy gradient有什么可改进之处?或者说其效率较低的原因在于? 经典policy gradient的大部分时间花在sample data处…

脚本编程基础知识点总结

脚本编程基础知识点总结 一:关于脚本 1:linux下的脚本简单的概括起来就是将多个命令,变量 嵌套与不同的控制语句及函数中而组合起来的一个顺序执行命令的批处理任务2:在linux中一个脚本的展开需以#!/bin/bash开始下面可以附加一些…

a标签中的href属性为什么会取不到值的

2012年4月27日 14:20:04 <a href"application-case-download.action?id${applicationCase.id}" >下载</a> 这样就可以就可以就取到值的&#xff0c;但是要是下面的这种写法就没有值 <a href"application-case-download.action?id"${ap…

综合布线基础:无线网络

无线网络前言分析 随着网络的广泛应用&#xff0c;人们需要根据不同的要求选择不同的网络方案&#xff0c;但传统的有线网络由于受设计和环境条件的限制&#xff0c;在组建和维护方面存在着一系列的问题&#xff0c;特别是当涉及网络移动和重新布局时&#xff0c;发展一种可行的…

linux下vim命令详解[转]

linux下vim命令详解[转] 高级一些的编辑器&#xff0c;都会包含宏功能&#xff0c;vim当然不能缺少了&#xff0c;在vim中使用宏是非常方便的&#xff1a;:qx 开始记录宏&#xff0c;并将结果存入寄存器xq 退出记录模式x 播放记录在x寄存器中的宏命令稍微解释一下&#xff0c;当…

通过Console口本地加载系统程序

以下内容摘自目前正在全国热销、已加码重印的《Cisco/H3C交换机配置与管理完全手册》&#xff08;第二版&#xff09;。新上市的姊妹篇《Cisco/H3C高级配置与管理技术手册》同步热销中。卓越网、京东网等有售。15.2.1 通过Console口本地加载系统程序 如果用于加载的交换机引…