强化学习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更新公式如下:
-
状态价值更新公式为:
-
动作价值更新公式为:
-
TD误差的表达式有两种:或者,更新公式可以写为:
-
优势函数,即在Dueling DQN中的,是动作价值函数和状态价值函数的差值,更新公式为:
对于Critic的更新,可以直接与DQN一样,求出均方误差,然后通过梯度来更新参数,公式如下:
算法流程
这里说一下循环迭代中的主要流程:
根据策略网络Actor选择出动作。
执行动作,观测状态,得到奖励。
-
计算TD误差。
-
更新Critic网络的参数。
-
更新Actor网络的参数。
算法缺点
Actor-Critic算法的缺点主要是因为Critic收敛速度慢,Critic如果没收敛,那么它的评估就不是很准确,这就直接导致Actor的收敛困难。Critic就像是一个指导老师,去纠正学生Actor的错误,但是如果这个老师本身就不知道对错,那么就是瞎指挥,学生就得不到应有的指导。
关注【Java与Android技术栈】
更多精彩内容请关注: