强化学习Actor-Critic算法

在前面的文章中,介绍过基于Value的一系列强化学习算法以及基于Policy的强化学习算法。这两类算法有着各自优势,也有着各自的缺点。

  • 基于Value的算法可以单步更新,在确定性策略,离散动作空间的强化学习问题上有着良好的性能,但不适合解决连续型动作空间的强化学习问题。

  • 基于Policy的强化学习算法以回合为单位来更新,可以解决随机策略,连续型动作空间的强化学习问题,但因为是回合更新,收敛速度较慢。

本篇文章将介绍一个新的算法Actor-Critic,该算法融合了基于Value和基于Policy的特点,既可以解决连续型动作空间的强化学习问题,也可以单步更新。

算法原理

Actor-Critic算法,故名思义,分为Actor和Critic两部分。其中Actor主要用来进行动作的选择,与基于Policy的强化学习算法一样,输入状态,直接输出策略。Critic主要用来评价动作的好坏,基于这个评价来决定增大还是减小这个动作被选择的概率,即根据这个评价更新Actor的参数,其输入是状态和Actor选择的动作,输出是对应的评价。

在Policy Gradient中,使用蒙特卡罗做参数的更新公式是:

因为是通过蒙特卡洛法来估计状态价值函数,所以需要对整个回合进行采样。而在 Actor-Critic算法中,直接通过Critic就可以估计状态价值函数,所以不需要对整个回合进行采样,进而可以做到单步更新。

Critic除了可以估计状态价值函数外,也可以采用其他的评估点,不同的评估点对应的Actor更新公式如下:

  1. 状态价值更新公式为:

  2. 动作价值更新公式为:

  3. TD误差的表达式有两种:或者,更新公式可以写为:

  4. 优势函数,即在Dueling DQN中的 ,是动作价值函数和状态价值函数的差值,更新公式为:

对于Critic的更新,可以直接与DQN一样,求出均方误差,然后通过梯度来更新参数,公式如下:

算法流程

强化学习Actor-Critic算法_第1张图片

这里说一下循环迭代中的主要流程:

  1. 根据策略网络Actor选择出动作

  2. 执行动作 ,观测状态 ,得到奖励

  3. 计算TD误差。

  4. 更新Critic网络的参数。

  5. 更新Actor网络的参数。

算法缺点

Actor-Critic算法的缺点主要是因为Critic收敛速度慢,Critic如果没收敛,那么它的评估就不是很准确,这就直接导致Actor的收敛困难。Critic就像是一个指导老师,去纠正学生Actor的错误,但是如果这个老师本身就不知道对错,那么就是瞎指挥,学生就得不到应有的指导。

关注【Java与Android技术栈】

更多精彩内容请关注扫码

你可能感兴趣的:(强化学习Actor-Critic算法)