强化学习-学习笔记

强化学习的场景

1.png

一个agent,观察环境(输入s),做出行动(输出action),环境根据行动,选择奖惩(reward)和返回新的状态(st+1)给agent。

几种类别

1.png

Policy-based

通常的定义

1.png
目前的深度强化学习,actor通常是神经网络,输入各种形式的state(图片,语言等),输出action(多分类)。

一些概念

1.png

  • episode:用actor运行一轮game。
  • trajectory:一个episode得到的轨迹序列,形式是:s1,a1,r1,s2,a2,r2…
  • 衡量一个actor的好坏:用actor运行若干轮得到若干个轨迹,计算这些轨迹的reward之和RR。计算的时候要注意每个迹的概率权重。在这里近似所有权重都一样。

优化目标

1.png
通过梯度上升优化参数,参数更新的方向是actor采样得到的多个迹reward之和RR增大的方向。

1.png
化简得到上面的式子。

1.png
优化的本质就是对于奖励大的轨迹,提升该轨迹中的所有的action出现概率。所以优化目标从:提升总的Reward,化简变成了提升轨迹里面的每个action。

1.png

1.png
为什么要减去b?如果按理说abc都该被提升,但是采样的轨迹里面只有bc,那bc被提升了,a就相对下降了。所以不能一味地提升所有action,而是将提升的力度减去一个常数(例如均值),这样即使只采样了bc,bc也不一定是上升。

1.png
但是,即使是对于同一个轨迹里的所有action,他们的权重也不应该一样,即不应该都简单乘上这个轨迹的总reward。因为每个action给这个轨迹带来的影响是不同的,具体的讲,每个action影响的是它之后的reward。所以,将公式改写成上图,每个action的权重是从它自己开始之后的reward之和。

1.png
在这里再重新改写。每个action之后的reward在累加的同时,会乘上一个衰减系数。即离当前action越远的reward,和当前的action关系越小。

整个流程

1.png

  1. 用actor去跑一些轨迹。
  2. 用这些轨迹的数据训练网络并更新actor。数据格式是(st, at),R(st)
  3. 用更新好的actor去继续跑轨迹。

on-policy 和 off-policy

1.png
强化学习的训练方式是用actor自己创造轨迹数据,再用轨迹的reward来训练、更新自己。这样的弊端是更新自己之后,之前的轨迹数据就不能用了,因为它不再是自己的数据了。所以通常定义两个actor,一个actor的参数固定,专门用来创造轨迹数据,另一个actor用这些轨迹数据来更新自己。

1.png
当然,一个actor用另一个参数固定的actor创造的数据来更新,直接用是会有偏差的,因为它们的参数不同。所以通常会乘上一项二者的分布之商。

1.png
最终目标函数化简得到上式。(A指的是固定的actor采样得到的st,at对的reward权重。

1.png
两个actor的参数之间不宜有太大的差异,所以使用KL散度对二者进行了控制。控制二者参数的差异,具体是通过控制二者输出的action的分布的差异。

Q-Learning

Critic

评价actor。

V(s)

1.png
V(s)是看到state,输出该actor从该state开始得到的累积reward可以是多少。

训练V(s)的方式

1.png
训练方式之一如上图,蒙特卡洛,用actor玩游戏得到轨迹序列s1 a1 r1 s2 a2 r2 …,然后输入一个state,应该输出的标签是从这个state起算的累积reward。

1.png
如上图,训练方式二是TD。因为蒙特卡洛需要把一个轨迹跑完才能训,TD的话只需要采样中间一截就可以。

Q(s, a)

微信截图_20220301135617.png
Q(s, a)是看到state和某个action,输出该actor在state状突执行某个action后得到的累积reward。

1.png
训练流程:用actor得到一些数据样本,用这些样本学Q函数,用新的Q函数作为actor的决策。

1.png

这里的新的actor,其实就是在利用新的Q函数,选择分数最大的action,作为输出。

训练方式—target network:目标网络。

1.png
用TD的方式训,需要定义一个fixed的目标网络Q,这样目标网络Q的输出才可以作为fixed的标签,让需要被更新的Q网络学习。

Exploration

1.png
为了避免采样时,actor总是选当前最好的action,陷入局部最优,需要有一定的探索机制。例如一定几率下不选分数最高的action,而是随机选。

算法流程

1.png

DOUBLE-DQN

1.png
为了防止函数Q输出偏高的值,这里使用会被更新的Q argmax得到几率最高的action,再将这个action输入到目标函数Q。这样,选择action和输出估计值是两个网络进行的。可以降低产生偏高action的几率。

连续型Q

1.png

之前的Q learning方法主要应用于action离散的情形。在action连续时,可以用上图的方式。输入的a是一个连续的有含义的向量。

Actor-Critic

policy方法的局限性

1.png
之前policy的方法,更新的时候,因为是采样,所以这里的reward权重有很强的随机性。用一个state采取相同的action,得到的reward结果可能不同。

引入critic

1.png
因此,这里引入了critic的方法。Q(s, a)表示的是actor在状态s下采取a的收益,符合原先权重的意义。而原先的b是一个常数(均值),V(s)表示的是不考虑action的情况下,actor在state的收益,可以代表原先b的意义。

1.png
在这里,同时有Q和V不好训。所以将Q也近似用V来表示,所以就只多了一个V网络。

流程

1.png
流程就是先用actor采样得到轨迹数据,然后用轨迹数据训V(s),再用V(s)辅助计算梯度上升更新actor,得到新的actor。

pathwise policy gradient

critic直接引导actor该做什么样的action.

1.png
actor的工作就是解这个argmax的问题,类似一个GAN。

1.png
训练这个actor的时候,目标是使被固定住的Q的打分越高越好(类比GAN)。

训练流程

1.png
相比传统的Q learning,这个方法有一个真正的actor。actor更新的方式不是优化最大reward,而是使其输出可以被Q打高分。

© 版权声明
THE END
喜欢就支持一下吧
点赞0 分享