深度强化学习——策略学习(3)

本文的重点:使用一个神经网络来近似策略函数Π

我们使用一个神经网络来近似策略函数,这个神经网络叫做策略网络,他可以用来控制agent运动,想要训练这个神经网络,就要用到policy gradient算法

策略函数Π的输入是当前状态s,他的输出是一个概率分布(0,2,0.1,0.7),给每一个动作a一个概率值

超级玛丽的例子里面,Π函数的输入是状态s,输出是个三维向量,每个元素是一个动作的概率,有了这三个概率值,agent会做一个随机抽样,得到动作a,左右上这三个动作都有可能被抽到,但是向上被抽到的概率最大,是0.7

e3abd104b1264c1c82cf00c9efe1257e.png

1、如何得到策略函数呢?

假如一个游戏只有5个状态10个动作,那很好办,我们画一张5*10的表,表里面每一格对应一个概率,我们通过玩游戏,把这50个概率值算出来就好了,但是超级玛丽这样的游戏有无数个这样的状态,这张表根本装不下,所以我们没法直接计算policy函数Π,所以我们得做函数近似,学出来一个函数来近似策略函数,函数近似的方法有多种多样,可以用线性函数,可以用曲线函数,也可以用神经网络,这里的θ是神经网络的参数,一开始θ是随机初始化的,后来我们通过学习来改进θ

cc4bf26b666b44d3961908a85ec70876.png

2、如果是超级玛丽这个游戏,我们可以把策略网络设计成这个样: 

输入是状态s,也就是当前屏幕显示的画面,也可以是最近几帧的画面, 然后是一个或者几个卷积层,把画面变成特征向量,然后全连接层把特征向量映射到一个三维向量,由于有3个动作,所以这里的维度是3,随后使用softmax激活函数,这样的输出才是一个概率分布,输出的是一个三维向量,每一个元素对应一个动作,里面的值都是动作的概率

softmax可以让输出的都是整数,且加和=1

3、回顾一下状态价值函数:

动作价值函数QΠ是Ut的条件期望,QΠ的值依赖于policy函数Π,at,st

而状态价值函数VΠ是QΠ的期望,把QΠ中的动作A给积掉,这里的A被当作是随机变量,概率密度是Π,把A给消掉之后,VΠ就只与policy函数Π和状态st有关了

这样一旦你给定策略函数Π,VΠ就可以评价当前状态st的好坏了,VΠ越大说明当前的胜算越大

给定状态s,VΠ 可以评价策略函数Π 的好坏,如果Π很好,VΠ就会比较大,说明胜算大

eedcaa46e9d542efb45bba979a7d068d.png33e01a591dd5474a89d4de620f124111.png

4、策略学习的主要思想:

我们刚刚用策略网络来近似策略函数,这样一来,价值函数就可以写成V(s;θ),V可以评价状态s和策略网络的好坏

5、怎么让策略网络变得越来越好呢?

》不断改进调整策略网络的参数θ

这个期望是关于状态S求的,这里把状态S作为一个随机变量,用期望给去掉,这样一来变量就只剩下θ了,目标函数J(θ)就是对策略网络的评价,策略网络越好,J(θ)就越大,所以策略学习的目标就是改进θ,使J(θ)越大越好

6、怎么改进θ呢?

》使用policy gradient算法

我们让agent玩游戏,每一步都会观测到一个不同的状态s,这个s就相当于是从状态的概率分布当中随机抽样出来的,观测到状态s,把V(s,θ),关于θ求导,得到一个梯度,然后用梯度上升来更新θ,这里的β是学习率,其实这就相当于是随机梯度上升,我们算的不是梯度,真正的梯度是目标函数J(θ),关于θ的导数,这里我们算的是v关于θ的导θ数,其实就是一个随机梯度,随机性来自于S,为什么要用梯度上升呢?因为我们想要使目标函数J(θ)越来越大,这里的v关于θ的导数就被称为policy gradient(策略梯度)

72afbafc547b4afb9eb09943d920d525.png

7、为什么使用梯度上升来更新θ呢?

》因为沿着梯度上升的方向走,我们的目标函数J(θ)就会越接近最大值!

对函数V求导得到的是局部最大值,而对它的期望J求导得到的是全局最大值

下面来讲怎么近似计算policy gradient:

为了简化推导,假设QΠ不依赖于θ(其实是有可能依赖的),这样就可以把QΠ当成一个常数,从求导的运算中提取出来,放到导数的外面

63e9d6c39b654dc18f7820853bf4fbef.png

d48900702daa4dafa084f04c195ff1a9.png

但是实际中通常不会使用这个公式来计算策略梯度,实际通常用的都是这个策略梯度的蒙特卡洛近似

ffd89964f5574204804585cb1057cb90.png

a9aa8564aee84682a6354e59ed7bc8a1.png  bde4b7d5f723434cae59a610b9d749ac.png

离散的动作: 

8351d76f850c4873a0dd95c2e839de4c.png连续的动作:

A是连续变量,所以想要直接求这个期望就要做定积分,但是积分是做不到的,因为Π函数是个神经网络,非常复杂,没办法直接计算出来,所以只能做蒙特卡洛近似

蒙特卡洛近似的过程:

1、随机抽样一个动作记作a hat,抽样是根据概率密度函数Π来抽的

2、计算g(a hat,θ),这里的a hat是一个确定的动作,有了a hat直接算一下g(a hat,θ)的值就好了

由于a hat是根据概率密度函数Π随机抽样出来的,所以g(a hat,θ)是策略梯度的一个无偏估计

 809933d4d98e4e1d92726a88cb145f27.png

由于g()是策略梯度的无偏估计,所以可以用g()来近似策略梯度,这个被称为蒙特卡洛近似,蒙特卡洛就是抽一个或者几个随机样本,用随机样本来近似期望,更新模型参数θ的时候,用g()来作为近似的梯度就可以了

4d588b2047cd4d6696c6a212f580215b.png总结一下策略梯度算法:

1、在第t个时间点,观测到了状态st

2、使用蒙特卡洛近似来计算策略梯度,把策略网络Π作为概率密度函数,用它随机抽样得到一个动作at,比如at是向左的动作

3、计算价值函数QΠ的值,把结果记作qt

4、对策略网络Π求导,算出logΠ关于θ的导数,得到的结果dθ,t是向量、矩阵或者是张量,dθ,t的大小和θ是一样的,如果θ是100*100的矩阵,那么dθ,t也是100*100的矩阵,tensorflow和pytorch这些系统都支持自动求梯度你告诉系统当前at,st还有当前参数θt,系统可以自动求出来梯度dθ,t

5、近似地计算策略梯度,用一个样本a来算策略梯度的蒙特卡洛近似

6、最后一步,有了近似的策略梯度,就可以用它来更新策略网络的参数θ了

 42ef4c300abc4c5dbcc4e8aade0db3da.png

目前还有一个没解决的问题就是QΠ是什么呢?

我们不知道QΠ,所以没法算qt,那么如何近似去算qt呢?

法一:用策略网络Π来控制agent运动,从一开始一直玩到游戏结束,把整个游戏的轨迹都记录下来,s1,a1,r1,s2,a2,r2,...sn,an,rn,观测到所有奖励r,我们就可以算出ut

由于价值函数QΠ是Ut的期望,我们可以用大Ut的观测值小ut来近似QΠ,所以reinforce强化算法就是使用观测到的ut来代替QΠ函数,reinforce算法需要玩完一局游戏,观测到所有的奖励,然后才能更新策略网络

2a4fb7f8769147c2b568207cd60851a9.png

法二:用一个神经网络来做近似:

原本已经用神经网络近似了策略函数Π,现在用另一个神经网络来近似价值函数QΠ,这样就有了两个神经网络,一个被称为Actor,一个被称为Critic,这样就有了actor-critic方法 

总结:

直接求策略函数比较困难,所以我们要用神经网络来近似测量函数

θ是神经网络的参数,一开始随机初始化,然后通过policy gradient算法来学习参数θ

这节课的主要内容就是推导策略梯度和计算策略梯度

策略梯度是价值函数V关于θ的导数,算出了策略梯度,就做梯度上升来更新参数θ,为什么要做梯度上升呢?因为我们希望价值函数V越大越好,目标函数是E(V),可以理解为使用策略函数Π,agent的平均胜算有多大,策略函数越好,这个目标函数的值就会越大,agent的评价胜算也就越大

如果大家对这节课的内容比较迷糊的话,我会在下一篇答疑篇给大家指点一下迷津,希望能对你有所帮助!

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值