【一】MADDPG-单智能体|多智能体总结(理论、算法)
<p>相关文章:</p><p>【一】MADDPG-单智能体|多智能体总结(理论、算法)</p>
<p>【二】MADDPG--单智能体|多智能体总结算法实现--【追逐游戏】</p>
<hr>
<p>【一】-环境配置+python入门教学</p>
<p>【二】-Parl基础命令</p>
<p>【三】-Notebook、&pdb、ipdb 调试</p>
<p>【四】-强化学习入门简介</p>
<p>【五】-Sarsa&Qlearing详细讲解</p>
<p>【六】-DQN</p>
<p>【七】-Policy Gradient</p>
<p>【八】-DDPG</p>
<p>【九】-四轴飞行器仿真</p>
<p>飞桨PARL_2.0&1.8.5(遇到bug调试修正)</p>
<p>三步定位PARL飞桨报错原因,快速解决程序问题</p>
<hr id="hr-toc">
<h1 id="1.%E5%8D%95%E6%99%BA%E8%83%BD%E4%BD%93">1.单智能体</h1>
<p style="margin-left: 0">连续动作(赛车游戏中方向盘的角度,油门,刹车控制信息,通信中功率控制,可由policy gradient、DDPG、A3C、PPO算法做决策)和离散动作(围棋、贪吃蛇游戏,Alpha Go,可通过算法Q-Learning、DQN、A3C及PPO算法做决策)。</p>
<p style="margin-left: 0">算法分类:</p>
<p style="margin-left: 0">强化学习中有很多算法来寻找最优策略。另外,算法有很多分类。</p>
<p style="margin-left: 0">1、按照有无模型分:有模型(事先知道转移概率P,并且作为输入,算法为动态规划)、无模型(试错,事先不知道转移概率P,算法为:蒙特卡罗算法、Q-Learning、Sarsa、Policy Gradients);</p>
<p style="margin-left: 0">2、基于策略(输出下一步所采取的各种动作的概率,根据概率来采取动作:Policy Gradients)和基于价值(输出所有动作的价值,根据最高价值来选动作,不适用于连续动作:Q-Learning,Sarsa等)(由于基于策略和价值的算法都各有优缺点,由此集合在一起就有了Actor-Critic算法,其中Actor可以基于概率做出动作,而Critic会对做出的动作做出动作的价值,这就在前述的policy gradients上加速了学习过程);</p>
<p style="margin-left: 0">3、单步更新(游戏中每一步都在更新,可以边玩边学习:QLearning、Sarsa、升级版的policy</p>
<p style="margin-left: 0">gradients)和回合更新(游戏开始后,等游戏结束,再总结所有转折点,在更新行为准则:基础版的policy gradients、Monte-carlo learning);</p>
<p style="margin-left: 0">4、在线学习(必须我本人在场,边玩边学:一般只有一个策略,最常见的是e-贪婪,即SARSA算法)、离线学习(从过往的经验里,但是过往的经验没必要是自己的:一般有两个策略,常见的是e-贪婪来选择新的动作,另一个贪婪法更新价值函数,即,常见的Q-Learning)。</p>
<p style="margin-left: 0">5、千万注意,一定要明确不同的强化学习算法的优缺点以便于求解不同类型的问题。比如:Q-Learning适合解决低纬度且离散动作及状态空间,DQN适合解决低纬度动作和高纬度状态空间、<span style="color: rgba(255, 0, 0, 1)">DDPG</span><span style="color: rgba(255, 0, 0, 1)">适合求解高纬度(连续)动作空间及状态空间</span>。</p>
<p style="margin-left: 0"><strong><span style="color: rgba(255, 0, 0, 1)">产生问题:</span></strong></p>
<p style="margin-left: 0">1–传统的多智能体RL算法中,每个智能体走势在不断学习且改进其策略。由此,从每个智能体的角度来看,环境是不稳定的,不利于收敛。而传统的单智能体强化学习,需要稳定的环境</p>
<p style="margin-left: 0">2–由于环境的不稳定,无法通过仅改变智能体本身的策略来适应动态不稳定的环境。</p>
<p style="margin-left: 0">3–由于环境的不稳定,无法直接使用经验回放等DQN技巧。</p>
<p style="margin-left: 0">4–因为大量智能体的交互会导致不可避免的反馈开销。更重要的是,生成的马尔可夫过程通常很难处理。用于MDP的数值求解技术遭受所谓的“维数诅咒”,这使它们在计算上不可行。</p>
<hr>
<h1 id="2.%E5%A4%9A%E6%99%BA%E8%83%BD%E4%BD%93" style="margin-left: 0">2.多智能体</h1>
<p> <img src="https://img-blog.csdnimg.cn/20210308153546629.png?x-oss-process=image/watermark,type_ZmFuZ3poZW5naGVpdGk,shadow_10,text_aHR0cHM6Ly9ibG9nLmNzZG4ubmV0L3NpbmF0XzM5NjIwMjE3,size_16,color_FFFFFF,t_70">(转)</p>
<p style="margin-left: 0">1-如图所示,多智能体系统中至少有两个智能体。另外,智能体之间存在着一定的关系,如合作关系,竞争关系,或者同时存在竞争与合作的关系。<span style="color: rgba(255, 0, 0, 1)">每个智能体最终所获得的回报不仅仅与自身的动作有关系,还跟对方的动作有关系。</span></p>
<p style="margin-left: 0">2-多智能体强化学习的描述:马尔可夫博弈。状态转换符合马尔可夫过程,关系符合博弈。可以表示为<N,S,A,Ri,T>,其中,N表示的是智能体的集合,S表示的是环境的状态空间、Ai表示的是智能体i的动作空间,A=A1A2…An表示为联合动作,R表示智能体i的奖励,T为状态转换函数。</p>
<p style="margin-left: 0">3-一般来说,在马尔可夫博弈中,每个智能体的目标为找到最优策略来使它在任意状态下获得最大的长期累积奖励。</p>
<p> </p>
<p> </p>
<h2 id="Multi-Agent%20Actor-Critic%20for%20Mixed%20Cooperative-Competitive%20Environments" style="margin-left: 0"><span style="color: rgba(0, 0, 0, 1)"><strong>2.1 Multi-Agent Actor-Critic for Mixed</strong></span><strong><span style="color: rgba(0, 0, 0, 1)"> <span style="color: rgba(0, 0, 0, 1)"><strong>Cooperative-Competitive Environments</strong></span></span></strong></h2>
<p><strong><span style="color: rgba(0, 0, 0, 1)"><span style="color: rgba(0, 0, 0, 1)"><strong>论文下载:【</strong></span></span></strong>https://download.csdn.net/download/sinat_39620217/16203960<strong><span style="color: rgba(0, 0, 0, 1)"><span style="color: rgba(0, 0, 0, 1)"><strong>】</strong></span></span></strong></p>
<p style="text-indent: 33px"><img src="https://img-blog.csdnimg.cn/20210329140513364.png?x-oss-process=image/watermark,type_ZmFuZ3poZW5naGVpdGk,shadow_10,text_aHR0cHM6Ly9ibG9nLmNzZG4ubmV0L3NpbmF0XzM5NjIwMjE3,size_16,color_FFFFFF,t_70"></p>
<ul><li>Multi-Agent:多智能体</li><li>Deep:与DQN类似,使用目标网络+经验回放</li><li>Deterministic:直接输出确定性的动作</li><li>Policy Gradient: 基于策略Policy来做梯度下降从而优化模型</li></ul>
<p style="margin-left: 0"><span style="color: rgba(243, 59, 69, 1)">1.</span>不过传统的RL方法,比如Q-Learning或者policy gradient都不适用于多智能体环境。主要的问题是,<span style="color: rgba(255, 0, 0, 1)">在训练过程中,每个智能体的策略都在变化</span>,因此从每个智能体的角度来看,环境变得十分不稳定<span style="color: rgba(255, 0, 0, 1)">(</span><span style="color: rgba(255, 0, 0, 1)">其他智能体的行动带来环境变化</span><span style="color: rgba(255, 0, 0, 1)">)</span>。对DQN来说,经验重放的方法变的不再适用(<span style="color: rgba(255, 0, 0, 1)">如果不知道其他智能体的状态,那么不同情况下自身的状态转移会不同</span>),而对PG的方法来说,环境的不断变化导致了学习的方差进一步增大。</p>
<p style="margin-left: 0"><span style="color: rgba(51, 153, 234, 1)">2. </span><span style="color: rgba(51, 51, 51, 1)">本文提出的方法框架是集中训练,分散执行的。我们先回顾一下</span><span style="color: rgba(51, 51, 51, 1)">DDPG</span><span style="color: rgba(51, 51, 51, 1)">的方式,</span><span style="color: rgba(51, 51, 51, 1)">DDPG</span><span style="color: rgba(51, 51, 51, 1)">本质上是一个</span><span style="color: rgba(51, 51, 51, 1)">AC</span><span style="color: rgba(51, 51, 51, 1)">方法。训练时,</span><span style="color: rgba(51, 51, 51, 1)">Actor</span><span style="color: rgba(51, 51, 51, 1)">根据当前的</span><span style="color: rgba(51, 51, 51, 1)">state</span><span style="color: rgba(51, 51, 51, 1)">选择一个</span><span style="color: rgba(51, 51, 51, 1)">action</span><span style="color: rgba(51, 51, 51, 1)">,然后</span><span style="color: rgba(51, 51, 51, 1)">Critic</span><span style="color: rgba(51, 51, 51, 1)">可以根据</span><span style="color: rgba(51, 51, 51, 1)">state-action</span><span style="color: rgba(51, 51, 51, 1)">计算一个</span><span style="color: rgba(51, 51, 51, 1)">Q</span><span style="color: rgba(51, 51, 51, 1)">值,作为对</span><span style="color: rgba(51, 51, 51, 1)">Actor</span><span style="color: rgba(51, 51, 51, 1)">动作的反馈。</span><span style="color: rgba(51, 51, 51, 1)">Critic</span><span style="color: rgba(51, 51, 51, 1)">根据估计的</span><span style="color: rgba(51, 51, 51, 1)">Q</span><span style="color: rgba(51, 51, 51, 1)">值和实际的</span><span style="color: rgba(51, 51, 51, 1)">Q</span><span style="color: rgba(51, 51, 51, 1)">值来进行训练,</span><span style="color: rgba(51, 51, 51, 1)">Actor</span><span style="color: rgba(51, 51, 51, 1)">根据</span><span style="color: rgba(51, 51, 51, 1)">Critic</span><span style="color: rgba(51, 51, 51, 1)">的反馈来更新策略。测试时,</span><span style="color: rgba(255, 0, 0, 1)">我们只需要</span><span style="color: rgba(255, 0, 0, 1)">Actor</span><span style="color: rgba(255, 0, 0, 1)">就可以完成,此时不需要</span><span style="color: rgba(255, 0, 0, 1)">Critic</span><span style="color: rgba(255, 0, 0, 1)">的反馈</span><span style="color: rgba(51, 51, 51, 1)">。因此,在训练时,我们可以在</span><span style="color: rgba(51, 51, 51, 1)">Critic</span><span style="color: rgba(51, 51, 51, 1)">阶段加上一些额外的信息来得到更准确的</span><span style="color: rgba(51, 51, 51, 1)">Q</span><span style="color: rgba(51, 51, 51, 1)">值,比如其他智能体的状态和动作等,这也就是集中训练的意思,即每个智能体不仅仅根据自身的情况,还根据其他智能体的行为来评估当前动作的价值。分散执行指的是,</span><span style="color: rgba(255, 0, 0, 1)">当每个</span><span style="color: rgba(255, 0, 0, 1)">Agent</span><span style="color: rgba(255, 0, 0, 1)">都训练充分之后,每个</span><span style="color: rgba(255, 0, 0, 1)">Actor</span><span style="color: rgba(255, 0, 0, 1)">就可以自己根据状态采取合适的动作,此时是不需要其他智能体的状态或者动作的</span><span style="color: rgba(51, 51, 51, 1)">。</span><span style="color: rgba(51, 51, 51, 1)">DQN</span><span style="color: rgba(51, 51, 51, 1)">不适合这么做,</span><span style="color: rgba(255, 0, 0, 1)">因为</span><span style="color: rgba(255, 0, 0, 1)">DQN</span><span style="color: rgba(255, 0, 0, 1)">训练和预测是同一个网络,二者的输入信息必须保持一致,我们不能只在训练阶段加入其他智能体的信息。</span></p>
<p style="margin-left: 0"><span style="color: rgba(124, 121, 229, 1)">3.</span> DDPG它是Actor-Critic 和 DQN 算法的结合体。</p>
<p style="margin-left: 0">我们首先来看Deep,正如Q-learning加上一个Deep就变成了DQN一样,这里的Deep即同样使用<span style="color: rgba(255, 0, 0, 1)">DQN</span><span style="color: rgba(255, 0, 0, 1)">中的经验池和双网络结构来促进神经网络能够有效学习</span>。</p>
<p style="margin-left: 0">再来看Deterministic,即我们的<span style="color: rgba(255, 0, 0, 1)">Actor</span><span style="color: rgba(255, 0, 0, 1)">不再输出每个动作的概率,而是一个具体的动作,</span>这更有助于我们<span style="color: rgba(255, 0, 0, 1)">连续动作空间中进行学习</span>。</p>
<p style="margin-left: 0"> <img src="https://img-blog.csdnimg.cn/20210308153744921.png?x-oss-process=image/watermark,type_ZmFuZ3poZW5naGVpdGk,shadow_10,text_aHR0cHM6Ly9ibG9nLmNzZG4ubmV0L3NpbmF0XzM5NjIwMjE3,size_16,color_FFFFFF,t_70"></p>
<p style="margin-left: 0">采用了类似DQN的双网络结构,而且Actor和Critic都有target-net和eval-net。我们需要强调一点的事,我们<span style="color: rgba(255, 0, 0, 1)">只需要训练动作估计网络和状态估计网络的参数</span>,而动作现实网络和状态现实网络的参数是由前面两个网络每隔一定的时间复制过去的。</p>
<p style="margin-left: 0">我们先来说说Critic这边,Critic这边的学习过程跟DQN类似,我们都知道DQN根据下面的损失函数来进行网络学习,即现实的<span style="color: rgba(255, 0, 0, 1)">Q</span><span style="color: rgba(255, 0, 0, 1)">值和估计的</span><span style="color: rgba(255, 0, 0, 1)">Q</span><span style="color: rgba(255, 0, 0, 1)">值的平方损失</span>:</p>
<p style="margin-left: 0"> <img src="https://img-blog.csdnimg.cn/20210308155841235.png"></p>
<p style="margin-left: 0">上面式子中Q(S,A)是根据状态估计网络得到的,A是动作估计网络传过来的动作。而前面部分R + gamma * maxQ(S',A')是<span style="color: rgba(255, 0, 0, 1)">现实的</span><span style="color: rgba(255, 0, 0, 1)">Q</span><span style="color: rgba(255, 0, 0, 1)">值</span>,这里不一样的是,我们计算现实的Q值,不在使用贪心算法,来选择动作A',而是<span style="color: rgba(255, 0, 0, 1)">动作现实网络得到这里的</span><span style="color: rgba(255, 0, 0, 1)">A</span>'。总的来说,Critic的状态估计网络的训练还是基于<span style="color: rgba(255, 0, 0, 1)">现实的</span><span style="color: rgba(255, 0, 0, 1)">Q</span><span style="color: rgba(255, 0, 0, 1)">值和估计的</span><span style="color: rgba(255, 0, 0, 1)">Q</span><span style="color: rgba(255, 0, 0, 1)">值的平方损失</span>,<span style="color: rgba(0, 176, 240, 1)">估计的</span><span style="color: rgba(0, 176, 240, 1)">Q</span><span style="color: rgba(0, 176, 240, 1)">值根据当前的状态</span><span style="color: rgba(0, 176, 240, 1)">S</span><span style="color: rgba(0, 176, 240, 1)">和动作估计网络输出的动作</span><span style="color: rgba(0, 176, 240, 1)">A</span><span style="color: rgba(0, 176, 240, 1)">输入状态估计网络得到</span>,而<span style="color: rgba(112, 173, 71, 1)">现实的</span><span style="color: rgba(112, 173, 71, 1)">Q</span><span style="color: rgba(112, 173, 71, 1)">值根据现实的奖励</span><span style="color: rgba(112, 173, 71, 1)">R</span><span style="color: rgba(112, 173, 71, 1)">,以及将下一时刻的状态</span><span style="color: rgba(112, 173, 71, 1)">S'</span><span style="color: rgba(112, 173, 71, 1)">和动作现实网络得到的动作</span><span style="color: rgba(112, 173, 71, 1)">A'</span> 输入<span style="color: rgba(255, 0, 0, 1)">到状态现实网络</span> 而得到的Q值的折现值加和得到(这里运用的是贝尔曼方程)。</p>
<p style="margin-left: 0"> <img src="https://img-blog.csdnimg.cn/20210308160537203.png?x-oss-process=image/watermark,type_ZmFuZ3poZW5naGVpdGk,shadow_10,text_aHR0cHM6Ly9ibG9nLmNzZG4ubmV0L3NpbmF0XzM5NjIwMjE3,size_16,color_FFFFFF,t_70">(DDPG)</p>
<p style="margin-left: 0">传统的DQN采用target-net网络参数更新,<span style="color: rgba(134, 202, 94, 1)">即每隔一定的步数就将eval-net中的网络参数赋值过去</span>,而在DDPG中,采用的target-net网络参数更新,即<span style="color: rgba(243, 59, 69, 1)">每一步都对target-net网络中的参数更新一点点</span>,这种参数更新方式经过试验表明可以大大的提高学习的稳定性。</p>
<p style="margin-left: 0"> <img src="https://img-blog.csdnimg.cn/202103081606493.png?x-oss-process=image/watermark,type_ZmFuZ3poZW5naGVpdGk,shadow_10,text_aHR0cHM6Ly9ibG9nLmNzZG4ubmV0L3NpbmF0XzM5NjIwMjE3,size_16,color_FFFFFF,t_70"></p>
<p style="margin-left: 0"> </p>
<p style="margin-left: 0">每个Agent的训练同单个DDPG算法的训练过程类似,不同的地方主要体现在Critic的输入上:<span style="color: rgba(243, 59, 69, 1)">在单个Agent的DDPG算法中,Critic的输入是一个state-action对信息</span>,但是在MADDPG中,<span style="color: rgba(243, 59, 69, 1)">每个Agent的Critic输入除自身的state-action信息外,还可以有额外的信息,比如其他Agent的动作。</span></p>
<p style="margin-left: 0"> </p>
<p style="margin-left: 0"> </p><br><br>
来源:https://www.cnblogs.com/ting1/p/16834092.html
頁:
[1]