一般的PPO算法在学习效率和收敛性上表现得不够理想,为此本研究提出一种改进的PPO算法:首先将泛化优势估计(generalizeddominanceestimation,GAE)作为优势函数来估计优势;然后参考文献[13]在actor网络结构中选取网络参数θ的损失函数,参考文献[14]在参数θ的更新过程中选取对相对熵(Kullback-Leibler,KL)散度项的限制,以此来更新参数θ,再参考文献[14]在critic网络结构中选取网络参数Φ的损失函数;最后提出一种新的主副网络参数更新方式。为验证算法的效果,我们在OpenAIgym模块的经典控制环境及复杂的mujoco环境中进行了仿真试验。
图1强化学习的过程Fig.1Processofreinforcementlearning
在强化学习过程中,状态到行为的映射关系可称之为策略[17],指在各个状态下智能体所采取的行为或行为概率。值函数是强化学习算法中最基础的评价指标,这个指标反映算法的优劣,它是智能体在给定的状态和最优策略下采取某个动作或行为时的优劣程度。值函数[18]主要分两种:一种为状态值函数Vπ(s),是从状态s开始,按照某种策略行为产生的长期回报期望;另一种为状态动作值函数Qπ(s,a),是在状态s和策略π下,采取动作a,按照某种策略行为产生的长期回报期望。
优势函数指智能体在状态s下,采取动作a时,其相应动作下产生的平均优势,从数量关系来看,就是随机变量相对均值的偏差,是将状态行为值函数归一化到值函数的基线上。这样有助于提高智能体学习的效率,减小方差及避免方差过大带来的过拟合。本研究采取了GAE作为优势函数的估计方式,其作用是能够平衡偏差和误差给价值函数及回报带来的影响。优势函数的表达式如下:
式(1)~(2)中:δt为时序差分误差,是每一时刻的现实值与估计值之间的差距;λ为超参数,用于调节方差与偏差之间的平衡,当λ=0时,就是计算时序差分误差;当λ=0时,就变成了蒙特卡罗[19]目标值和价值估计之间的差。
本研究选取变量β来控制约束项和目标项之间的权重关系,将KL散度作为目标函数的惩罚项,其目标函数也称为actor网络的损失函数,表达式如下:
式(3)中:(πθ(at|st))/(πθold(at|st))为新老策略概率的比例;θold为策略未更新前的参数;yKL(πθold(·|st),πθ(·|st))为KL散度项,表示新老策略之间的差距,主要是限制新老策略的更新幅度。
用来更新critic网络参数Φ的损失函数
本研究根据A3C算法及在DPPO算法中用多线程训练智能体[14]的方式,将单线程的PPO算法改成了多线程的PPO算法。DPPO算法与PPO算法的网络结构都是基于actor及critic结构,与A3C算法均有两套网络结构,即主副网络。其中副网络相当于主网络的参数,但主副网络的参数更新方式不同。在此基础上,本研究提出了一种新的主副网络参数更新方式。
由A3C算法原理可知,其工作原理就是将AC算法放到多线程中进行同步训练,其主副网络的参数更新方式是:1)各个线程均采用一个CPU(核)参与训练;2)各个线程将主网络的参数复制过来与环境交互;3)交互之后各个线程均会计算出各自的梯度,并将其推送给主网络,用来更新主网络的参数;4)参数更新后,主网络再将其推送回副网络(各个线程)。如此循环。
而对于DPPO算法,其主副网络参数更新方式是:1)将各个线程推送到不同的环境中(环境的个数取决于电脑CPU核的个数),主网络会控制各个线程在各自的环境中去收集数据(数据是由智能体训练时产生的);2)分别对actor与critic中的网络参数θ和Φ求梯度;3)把这些梯度传送到主网络中,主网络会对所有线程推送过来的梯度求平均后,更新主网络的参数;4)将更新后的参数推送回各个线程。如此循环。
图2改进的PPO算法主网络运行程序流程图Fig.2FlowchartofprimarynetworkrunningprogramofimprovedPPOalgorithm
图3改进的PPO算法副网络运行程序流程图Fig.3FlowchartofsecondarynetworkrunningprogramofimprovedPPOalgorithm
图4“Pendulum-v0”Fig.4“Pendulum-v0”
图5“Ant-v3”Fig.5“Ant-v3”
图6“Hopper-v3”Fig.6“Hopper-v3”
本研究利用Python下深度学习框架tensorflow进行编程,利用多线程来把单线程变成了多线程和队列来存放单线程收集的数据。运行硬件环境为处理器Intel(R)Core(TM)i5-1035G1CPU(8核),显卡AMDRadeon(TM)630及Intel(R)UHDGraphics。
将改进的PPO算法及PPO算法在gym试验环境中进行测试。其中经典控制环境中“Pendulum-v0”仿真试验为试验一;复杂的mujoco环境中“Ant-v3”“Hopper-v3”分别为试验二和试验三。其中训练过程中相同参数设置如下:actor的学习率为0.0001,critic的学习率为0.0002,λ为0.98,γ为0.9,β为0.5,yKLtarget值为0.01。
图7“Pendulum-v0”仿真结果Fig.7“Pendulum-v0”simulationresult
图8“Ant-v3”仿真结果Fig.8“Ant-v3”simulationresult
图9“Hopper-v3”仿真结果Fig.9“Hopper-v3”simulationresult
强化学习是一类重要的机器学习方法。为提升强化学习的算法效率,我们提出了一种改进的近端策略优化(PPO)算法:在更新网络参数θ的损失函数中的散度项上加了限制,优损失函数;采取泛化优势估计作为优势函数的估计方式,平衡了偏差和误差给价值函数及回报带来的影响;采用多线程的方式,加快了训练的效率;在主副网络的参数更新方式上做了调整改进。改进的PPO算法与PPO算法均在gym环境中进行了仿真对比测试,结果表明改进的PPO算法会使智能体更快地学到经验,获得更多的奖励,且训练过程中收敛性更好。