刘川莉,蔡乐才,高 祥,居锦武,吴昊霖
(1.四川轻化工大学自动化与信息工程学院,四川 自贡643000;2.人工智能四川省重点实验室,四川 自贡643000;3.宜宾学院,四川 宜宾644000;4.企业信息化与物联网测控技术四川省高校重点实验室,四川 自贡643000;5.四川大学计算机学院,成都610065)
深度强化学习作为人工智能领域一个新的并且最活跃的研究热点,得到了广泛的关注和长期的发展[1]。近年来,深度学习(Deep Learning,DL)作为机器学习领域一个研究热点[2],其基本思想是对于多层的网络结构,通过非线性变化,结合底层特征,形成容易区分、抽象的高层表示,以便于发现数据特征表示[3]。强化学习(Reinforcement Learning,RL)是机器学习领域另一个分支[4]。强化学习又称为评价学习、再励学习[5],在一些任务中,需要利用深度学习来学习大规模的数据表征,并根据此表征进行自我激励的强化学习,以达到优化策略。深度强化学习(Deep Reinforcement Learning,DRL)应运而生,它使用深度学习来拟合强化学习中与确定动作策略有关的参数,如值函数,其本质是强化学习算法的一个发展。深度强化学习被认为是实现通用人工智能的重要途径[6],因其通用性在众多领域中受到推崇,如机器人手臂控制、参数优化[6]、机器人控制[7-9]、机器视觉[10]、游戏[11]等。
2015年,Mnih等人[12]提出了深度Q神经网络(Deep Q-Network,DQN)算法,该算法采用神经网络来逼近值函数,实现了使用少量的先验知识完成端对端的自主学习任务。在DQN算法中,通常使用的是Q-learning算法,该算法以下一个状态最大的动作值函数作更新目标,表面上看似短期内会直接向“贪婪”的方向收敛,其实际可能不是以长期回报作为最大方向。针对此问题,采用期望值思想求解的期望值函数取代深度Q神经网络算法中最大动作值函数作为更新目标,提出了基于期望值函数的离策略DQN算法(DQN Based on Expected Value Function,EVDQN)。
强化学习按照评估策略和行为策略是否一致可以分为两种:在策略(on-policy)强化学习算法和离策略(off-policy)强化学习算法[13]。强化学习最终是以迭代的基本思想持续不断地基于行为策略产生动作并作用于环境,在环境中对产生的策略进行评估并用于更新值函数,以达到获得最为稳定的策略输出。
时间差分学习(Temporal-Difference learning,TD learning)结合了动态规划算法(DP)和蒙特卡罗方法(MC)两种算法的优点。蒙特卡罗状态值函数更新表示为:
其中:Rt是每一个episode结束以后获得的实际累积回报;α是学习率,利用实际累积回报Rt当作是状态值函数V(st)的估计值。也就是针对每一个episode,先得到实际回报和当前状态值函数的偏差,利用该偏差值乘以学习率α来更新得到V(st)新的估计值。
将公式(1)中Rt更换成rt+1+γV(st+1),得到了时间差分学习的状态值函数更新公式:
在策略强化学习方法主要特点是用于评估和改进策略的评估策略(Estimation Policy)和用于产生动作的行为策略(Behavior Policy)是同一个策略[14]。Sarsa算法属于on-policy算法[15],Sarsa算法估计的是动作值函数而不是状态值函数,一个状态-动作对序列片段以及相应回报值如图1所示。
图1 状态-动作对序列片段相应回报值
Sarsa算法动作值函数的更新表示为[16]:
其中,针对每一个非终止状态St,当下一个状态到达后,都用公式(3)更新Q(st,at),如果St是终止状态,则表示当前迭代完毕。由于动作值函数的每次更新都与st,at,at+1,st+1有关,所以该算法被命名为Sarsa算法,也就是说Agent在状态执行动作获得动作值函数,状态转移到st+1;接着Agent在状态执行动作得到动作值函数;最后使用下一状态动作值函数更新当前状态动作值函数。
在实际问题中,会面临复杂性较高的决策问题,这就使得在策略学习算法无法进行求解,此时需要用到离策略强化学习算法。离策略算法通过遵循另一个策略(行为策略)来估计某一个策略的值函数(评估策略)。离策略算法可以看作是基于在策略算法的一个改进。离策略方法中最为常用的算法是Q-learning算法,它选取动作时遵循的策略与动作值函数更新时的策略不同。Q-learning算法的动作值函数更新表示为:
Sarsa算法和Q-learning算法最大的不同点在于更新Q值的时候,Q-learning算法采用了Q(st+1,a)值的最大动作,也就是直接使用了最大Q(st+1,a)的值,并且选取动作at时采用的策略与当前执行的策略没有任何关系。
同理,动作值函数的递推关系式为:
深度Q神经网络算法是通过Q-learning使用reward来构造标签,通过经验回放(Experience Replay)的方法将系统探索环境得到的数据储存起来,随机采样样本更新深度神经网络的参数,可以解决相关性及非静态分布问题。
从式(3)可以看出,在策略(on-policy)的更新方式除了使用当前状态st、当前状态执行动作at、下一状态st+1以及当前状态st执行动作at所获得的立即回报rt以外,还需要在下一状态st+1执行的动作at+1用于满足使用实际的行为策略进行评估策略工作。在策略算法是一种单步更新法,在环境中每走一步,更新一次自己的行为准则。在策略方法训练使用五元组Transition<st,at,st+1,at+1,done>,而该五元组需要进行两次动作才可以获得。
“经验回放”方法可以消除相关性,而经验池获取样本的方式是每执行一次动作策略便存储五元组,该种机制明显不适合在策略方法。因此将DQN算法应用于在策略方法中是没有意义且不可行的。
DQN算法中另外一个重要的改进是增加了一个直接与目标值函数有关的神经网络,使用原逼近值函数的神经网络参数来评估下一个状态的动作值函数Q(s′,a′;w-),通过下一个状态的动作值函数Q(s′,a′;w-)为Q-network提供一个较为稳定的训练目标。经过足够多的训练后,可以使学习得到有效的动作策略,最小化了损失函数。
在DQN算法中,将Q-network的训练目标来定义Q-learning算法的迭代目标函数:
式(7)使用了下一状态最大的动作值函数提供训练目标。该方法使用最典型的离策略Q-learning算法的思想来为Q-network提供训练目标。使用该训练目标减去在当前状态所执行动作的动作值函数获得均方误差,其形式为:
Q-learning算法相对于Sarsa算法来说要大胆一些,因为Q-learning算法永远都想着max Q最大化,正是由于这个max Q所以变得贪婪,不会再去考虑其他非max Q的结果。Q-learning算法可以理解为是贪婪的、大胆的算法。因此,离策略最终还是不利于获得长期回报。
离策略在“探索”阶段,直接逼近最优动作值函数的方法有倾向于“激进”策略的可能性,不利于获得长期回报。基于此,提出一种基于期望值函数的离策略深度Q神经网络改进方法(Off-Policy Based on Expected Value Function,EVDQN)。
神经网络Target-network根据当前状态st执行策略所确定的动作at来获得下一状态st+1,去逼近下一个状态-动作值函数Q(st+1,a)。在DQN算法中,由于神经网络需要进行足够多的训练,所以一般在动作策略中使用ε-贪婪策略。通过ε-贪婪策略和各动作方向动作值函数Q(st+1,a)的期望可以估算出下一状态st+1的状态值函数V∧(st+1)。其具体形式为:
将式(9)得到的结果代入DQN算法的迭代目标函数中,可以得到一个新的逼近目标:
那么此时新的逼近目标函数的神经网络训练的损失函数表达式为:
其中,outputDQN(s,aΔ;w)神经网络在aΔ维度上的输出,aΔ为当前样本中所执行的某一具体动作策略;在经过训练之后,可认为是在aΔ维度上的逼近目标,r+γV∧(st+1)是上述基于期望值函数的新的逼近目标。
式(10)所示的逼近目标在形式上可以看作是通过式(3)所估计的下一个状态的期望状态值函数。在DQN算法中使用的是式(11)所示的均方差计算方法,使用逼近目标减去执行动作方向aΔ的神经网络输出[17]。式(10)中,由于神经网络所使用的逼近目标为根据下一状态的状态值函数V∧(s+1)的迭代近似值r+γV∧(st+1),所以不断通过式(11)所示的均方误差更新神经网络参数,最终神经网络输出的是当前状态的状态值函数V∧(st)。
DQN神经网络结构如图2所示。
从图2中可知,在实际的DQN算法训练过程中实际参与的仅在当前状态st具有执行动作aΔ维度上的输出,又由于采用随机策略方式,所以每次状态st会执行不同的动作,最终导致每次参与训练的动作维度不同,继而使得神经网络在状态st上每个动作维度的输出均不相同。因此可以认为通过V∧(st+1)逼近所得的V∧(st)是在某一方向上的状态值函数,即可近似认为神经网络输出的是动作值函数Q∧(st,aΔ)。
图2 离策略改进方法神经网络结构示意图
为进一步说明,假设在当前状态st,基于策略执行动作a1到达下一状态st+1,得到立即回报r,并且将Transition<st,a1,r,st+1,done>存入经验池。在此后的某次训练,同样在状态st基于策略执行其他动作a2到达另一个下一状态s′t+1,得到立即回报r′,并且Transition<st,a2,r′,s′t+1,done>也存入经验池。在使用“经验回放”方法随机抽取样本的过程中,当抽取到样本Transition<st,a1,r,st+1,done>时根据式(11)更新神经网络;由于DQN神经网络结构在参数更新时采用one-hot形式,只针对a1维度上的输出代入式(11)进行参数更新,使得在状态st时神经网络的输出中在动作a1的维度上所获得期望状态值函数更加准确。同理当随机抽取到样本Transition<st,a2,r′,s′t+1,done>时,DQN神经网络也只将a2维度上输出代入式(11)使得以状态s′t为输入的神经网络的输出中在动作a2的维度上所获得期望状态值函数更加准确。由于上述两次训练所获得的立即回报r不同,参与训练的输出维度也不同,所以经过不断的训练,神经网络在维度a1和维度a2的输出值也必然不同。
此外,神经网络的每个输出在形式上根据式(1)和式(11)可视为是在逼近状态值函数V∧(st)。但根据上述内容可知,神经网络在状态st上每个动作维度的输出均不相同(图2)。由于在同样的状态st上,每个动作维度的值函数V∧(st;w)。均表示在状态st执行相应动作的好坏程度,其作用和动作值函数相同,也可以用于衡量动作策略确定。因此,式(11)实际上是将神经网络的逼近目标设置为动作值函数Q∧(st,a;w)。
综上所述,在每次训练中,实际上总是使用执行某动作aΔ得到的逼近目标与当前状态上该动作aΔ的神经网络输出的该动作维度的值函数均方误差来更新神经网络Q-network的参数;经过若干次训练之后,Q-network神经网络在每个状态st所对应的动作值函数都逐渐逼近基于下一状态st+1的动作值函数Q∧(st+1,a;w-)的训练目标,而Q∧(st+1,a;w-)由 定 期 复 制Q-network参 数 的Target-network神经网络所输出。
基于期望值函数的离策略DQN算法(EVDQN)初始化经验回放缓存空间D,并设置经验回放缓存空间为N初始化DQN神经网络结构中的Q-network的参数初始化DQN神经网络结构中的Target-network的参数即令θ-=θ for episode=1,2,...,M do 初始化状态St=S0 for STEP=1,2,...,m∩step!=Sterminal do 根据Q-network得到Q(St,a) 根据ε-贪婪策略确定在当前状态st的动作策略at π(a s)=arg max a Q(st,a),if q>ε arandom,{ otherwise 执行动作at并得到立即回报r和下一状态st+1
将st,at,r,st+1存储到经验回放缓存D 令st,st+1 令iter=iter+1 if iter%train_period=0 从经验回放缓存D中随机选取数量为 Batch的训练集<st,at,r,st+1> 分别得到Q-network和Target-network的输出 Q(st,at;θ)和Q(st+1,a;θ-) 根据式(5)~式(6)获得在下一状态St+1所获得状态值函数V∧(st+1) V∧(st+1)=Q(st+1,agreedy;θ-)1-2ε1-ε( )()A +∑a∈AQ(st+1,a;θ-)ε1-ε( )A 根据式(5)~式(8)采用随机梯度方法训练Q-network的参数θ L(wp)=E[(r+γ^V(st+1)-Q(s,aΔ;w))2] end if if iter%update_period=0 更新Target-network的参数,即令θ-=θ end if end end
为了验证期望值函数的离策略DQN算法能够较快地得到回报较高的动作策略和更高的稳定性,以及EVDQN算法的有效性,在基于OpenAI Gym的CartPole环境和Acrobot环境中进行实验分析。
实验采用两个相同的神经网络,Q-network神经网络和Target-network神经网络。并且神经网络设置有两个隐含层,最后一层是输出为动作空间维度A的输出层。将Q-network与Target-network分别运用于DQN算法和EVDQN算法,实验开始前的初始参数均采用正态分布的随机初始化。
将两种算法所获得策略的性能进行对比,两种算法的情节数均设置为300。在ε-贪婪策略中使用动态变化的ε:将其初始值设置1.0,此时Agent处于“探索与利用”的“探索阶段”,完全按照随机策略确定动作;随着训练的进行,当ε大于0.001时,按照式(12)进行数值更新:
式中,SUM为设置的总训练情节数,step为训练的情节数,fa为设置的加速因子。因为有了加速因子的存在,加快了ε进入“利用阶段”的速度。本实验采用的是定期更新的方法,设置周期为100次,即Agent通过执行动作完成状态转移100次。
在实验中,设置了训练阶段每情节所获得的回报、训练回报、测试回报三个参数对不同算法的性能进行判断。训练阶段每情节所获回报表示的是在训练过程中,记录Agent在CartPole环境中每情节从初始状态到终止状态所经历的步数(在本实验环境下即该情节学习所获回报的直接叠加)。
训练回报是在训练中,记录Agent在CartPole环境中从初始状态到终止状态经历的步数(在本实验环境下即每一情节学习收获的累积回报进行叠加)。每一情节训练的初始状态和终止状态的具体设置均由CartPole环境所决定,在CartPole-v0实验环境中,终止状态指实验次数达到200次和判定实验为失败(直立杆触碰到黑线的情况)两种情况。
测试回报是在训练一定的次数后,开展的10次测试实验。测试实验中Agent直接使用贪婪策略确定动作,记录每次实验所执行的步数,然后将10次测试实验的结果分别保存。进行测试实验的训练次数周期设置为5情节。此外,测试实验所获得的实验样本并不放入经验池参与训练,以避免额外干扰。测试实验的仿真环境使用CartPole-v1,其最大终止步数为500;训练阶段所使用的CartPole-v0实验环境的最大终止步数为200。
仿真实验中强化学习算法相关的参数设置见表1。
表1 强化学习算法相关参数设置
在两种算法中,都包含了深度Q神经网络结构,其中的Q-network通过优化算法不断更新参数(如随机梯度下降算法),Target-network的参数是通过直接复制Q-network参数获得。Q-network是在每一个步骤后进行训练;将Target-network参数的更新周期设置为500,以便Agent能够更好地进行学习。在“经验回放”方法中将经验缓存的大小设置为10 000。使用RMSProp优化方法进行神经网络的参数训练,其学习率设置为0.0005,且每批随机取出的样本数为32。在CartPole环境中,动作空间的维度为2,所以将所有神经网络的输出层神经元个数均设置为2,保证每个动作对应输出一个相应的动作值函数或信息强度。相关参数设置见表2。
表2 神经网络结构参数设置
在上述仿真实验环境中,分别采用DQN算法和EVDQN算法进行对比实验,其实验结果如图3所示。从图3中可知,两种算法经过有限训练,最后都能够通过学习得到有效策略,但EVDQN算法较DQN算法来说容易获得更高的累积回报。
图3 CartPole实验每幕所获回报结果图
训练阶段累积回报结果如图4所示,图中对比显示了两种算法学习的总体情况,两条斜线的斜率分别表示两种算法累积回报的增加量。从图4可知,训练情节数大于100后,累积回报开始出现差异。整体来说,在整个训练阶段EVDQN算法所获得的累积回报要高于DQN算法。
图4 CartPole实验训练阶段累积回报结果图
图5 为每经过5幕训练,使用贪婪策略进行10次测试实验所累计的回报情况。从图5可知,EVDQN算法测试累积回报的斜率增长明显早于DQN算法,说明EVDQN算法可更先学习到能获得更高回报的策略。且最终EVDQN算法曲线的斜率要高于DQN算法,说明使用EVDQN算法能获得更好的策略。
图5 CartPole实验测试阶段累积回报结果图
在Acrobot环境中使用DQN算法和使用EVDQN算法所得到的每一幕回报总数如图6所示。
从图6可知,EVDQN算法性能提升较为明显,所以比DQN算法能更快地学习到有效策略,且EVDQN算法采用基于动作策略和动作值函数的期望的训练目标,相比于采用最大动作值函数的DQN算法,其稳定性也更好。
图6 Acrobot实验每幕所获回报结果图
Acrobot环境中使用两种算法在训练阶段所获得的累积回报的对比结果如图7所示。从图7可知,由于在Acrobot环境中希望通过较少次数的状态转移达到目标位置,所以每幕的次数越少越好(由于每一步的回报为-1,所以在数值上依然表现为越大越好,也可以说绝对值越小越好)。随着训练情节数的增大,两条曲线差异越来越大,充分说明了随着复杂环境中动作策略复杂性的提高,EVDQN算法的性能表现较之DQN算法的提升更突出。
图7 Acrobot实验训练阶段累积回报结果图
Acrobot实验中测试阶段累积回报结果如图8所示,从中可知EVDQN算法的确能够较快学习到有效动作策略。且在训练阶段和测试阶段中EVDQN算法累积回报曲线的斜率低于DQN算法,即此时每幕执行状态转移的次数少于DQN算法(在Acrobot环境中,有效策略能够使Agent在更少的状态转移次数内达到成功的终止状态,无效策略会导致Agent运行到最大的状态转移次数而判定为失败的终止状态),表明EVDQN算法所获得动作策略优于DQN算法的。
图8 Acrobot实验测试阶段累积回报结果图
本文介绍了在策略和离策略两种强化学习算法中更新值函数常用的算法,并结合神经网络的训练,给出该改进方法的工作原理。针对深度Q神经网络算法较易采取“激进”策略倾向的离策略Q-learning算法思想作为神经网络损失函数,而不利于获得长期稳定策略的问题,以期望值函数代替Q-learning算法中贪婪值函数的逼近目标,提出基于期望值函数的离策略DQN算法。从神经网络参数更新的角度给出基于期望值函数的离策略DQN算法的工作原理,最后在基于OpenAI的Cartpole和Acrobot环境中进行仿真实验,验证了基于期望值函数的离策略DQN算法所获取策略的稳定性改善情况。