多智能体强化学习Multi agent,多任务强化学习Multi task以及多智能体多任务强化学习Multi agent Multi task概述

概述

在我之前的工作中,我自己总结了一些多智能体强化学习的算法和通俗的理解。

首先,关于题目中提到的这三个家伙,大家首先想到的就是强化学习的五件套:

  1. 状态:s
  2. 奖励:r
  3. 动作值:Q
  4. 状态值:V
  5. 策略: π \pi π

多智能体强化学习(Multi agent RL,MARL)考虑的是多智能体的协作,在MARL中我们还可以见到这些元素的影子。
简单的讲,MARL考虑的是每个agent的模型之间的特征通信和训练一个全局的动作值Q,其目标是最大化奖励R。
因此,MARL还是属于常规强化学习范畴。

但是,当我们涉及到多任务强化学习(Multi task RL,MTRL)时(主要涉及策略蒸馏),却只能看到动作值函数Q和\或策略 π \pi π的影子。
简单的讲,MTRL多数是使用已经训练好的agent model(子任务)来训练一个公共的agent model。
1)在该过程中,我们可以微调每个子任务模型的参数,大佬们的解释是由于每个子任务具有不同的局部最小值,因此当时用多任务模型训练时,如果微调子任务模型参数可以帮助子任务模型跳出局部最优,使得子任务模型的性能变好。这一点我在自己的数据上实验了,发现并没有这种效果。理论上真的可以这样,可能是我调参还没调好吧,毕竟炼丹也是看运气的。当然,这样做模型的训练量就变大了。
2)在训练过程中,我们也可以直接冻结每个子任务模型的参数,只训练中心任务模型的参数。
3)训练中心任务模型就叫做策略蒸馏,整个多任务强化学习都是围绕策略蒸馏展开的。策略蒸馏有几个很明显的贡献:
a)压缩模型参数;b)实现多任务融合;c)实现在线策略蒸馏,就是实时训练模型,当然这也是建立在压缩参数的基础之上的。
4)我的个人总结,任务策略蒸馏主要由两个方向
i)基于值函数的策略蒸馏,参考论文;ii)基于策略的策略蒸馏,参考论文。

多智能体多任务强化学习(Multi agent Multi task RL,MA-MT-RL)一般是使用两阶段优化策略,一般是先训练多智能体强化学习的子任务模型,再使用策略蒸馏方法训练蒸馏的中心策略。多任务多智能体强化学习参考这个文论。
很遗憾的是,目前多数的MARL,MTRL和MA-MT-RL多数都没有开源,我在复现他们代码的时候也遇到了很多问题。关于策略蒸馏的多任务强化学习的开源代码可以参考这个github。是这篇论文[Policy Distillation]的代码。
我们可以任务MA-MT-RL就是MTRL的延伸。

针对多任务强化学习框架的设计还有两个方案:
1)中心任务模型在最后分叉,即有几个任务就分几个叉,但是损失函数只有一个。这个时候,我们需要为每个子任务设置一个id,以便在训练的时候指定从那个分叉开始回归。有分叉的论文就是上面提到的Policy Distillation这篇论文。
这项工作的一个重要贡献是比较了多任务DQN agent和多任务蒸馏agent的性能。对于多任务DQN,这种方法类似于single-game learning:网络经过优化,在给定少量连续观察的情况下预测每个可能动作的平均折扣收益。就像在多任务蒸馏中一样,游戏每集(episode)都会切换,每个任务都有单独的回放内存缓冲区,训练在所有任务之间均匀交错。游戏标签用于在多任务DQN中的不同输出层之间切换,从而为每个游戏启用不同的输出层或控制器。有了这个架构,多任务DQN损失函数仍然与单任务学习相同。
即使有了单独的控制器,多游戏DQN的学习对于雅达利游戏来说也是极具挑战性的,而且DQN通常无法在游戏上达到完全的单游戏性能。我们认为,这是由于不同策略之间的干扰、不同的奖励比例以及学习价值函数的内在不稳定性造成的。
策略蒸馏可以提供一种将多个策略组合到单个网络中而不会产生破坏性干扰和扩展问题的方法。由于策略在蒸馏过程中被压缩和细化,我们推测它们也可能被更有效地组合到一个单一网络中。此外,策略本身的方差低于值函数,这应该有助于提高性能和稳定性。

2)只有一个输出,也只有一个损失函数。这就简单了,跟正常训练的时候一样。
这种方法的代表性论文就是Distral-Robust multitask reinforcement learning。

我看的一些文章我都给翻译成中文了,大家可以下载参考一下,很适合英语不行的小硕。

你可能感兴趣的:(强化学习,强化学习)