强化学习经典算法笔记19:无监督策略学习算法Diversity Is All You Need

  • DIAYN核心要点
  • 模型定义
  • 目标函数的构造
  • DIAYN算法细节
    • 目标函数的优化
      • SAC的训练
      • 判别器的训练
  • DIAYN的应用
  • 论文的其他细节

本篇介绍一个无监督框架下的策略学习算法DIAYN,全称是Diversity Is All You Need。本文是在学习了张楚珩前辈的【强化学习 77】DIAYN和知乎ID黑猫紧张的PN-23: Diversity is All Your Need (arXiv 1802)之后写成的,向他们表示感谢。

DIAYN核心要点

DIAYN可以在一个没有奖励的环境中,自适应地产生奖励函数,并且自动探索出来一些有用的技能(Skills)。训练的方法是使用最大熵策略最大化一个构造的信息论目标函数。(信息论目标函数的具体形式在下面介绍。)学习到的技能可以用于 1)作为策略学习的初始化,加速学习过程;2)作为分层强化学习的下层策略;3)用于模仿学习。

技能(Skill)的含义:

A skill is a latent-conditioned policy that alters that state of the environment in a consistent way.

如何在没有reward的任务环境上学习不仅diverse,而且有含义、有用的skill,文章提出3个key idea

  1. 不同skill访问不同的states,因而skill是distinguishable的。比如跳跃和跑动这两种动作所经历的状态很可能是不一样的。
  2. 用states而不是actions来区分skills,因为存在多个可能的 a t a_t at​可以使 s t s_t st​转移到 s t + 1 s_{t+1} st+1​。比如一个推箱子的任务,如果施加的力量低于一个阈值,箱子就纹丝不动,但是我们并不清楚施加的力量到底是多少。本质是因为动作 a t a_t at​无法被外界观测到,而状态 s t s_t st​是可以的且唯一的。
  3. 让skill尽可能diverse,尽可能随机的act,但始终要保持distinguishable。尽可能的随机,但不能过于随机使得两个skill无法区分开了。diversity和distinguishable是一对矛盾。

模型定义

  1. S S S和 A A A是状态和动作,均看做随机变量。
  2. Z ∼ p ( z ) Z\sim p(z) Z∼p(z)是一个隐变量,策略依赖于 Z Z Z,即 π θ ( a ∣ s , z ) \pi_{\theta}(a|s,z) πθ​(a∣s,z)。
    由此引出Skill的另一个含义,一个“Skill”就是一个固定向量 Z Z Z控制的策略。
  3. I ( X ; Y ) I(X;Y) I(X;Y)表示随机变量 X X X, Y Y Y的互信息(Mutual Information)。
    H ( X ; Y ) = H ( X ) − H ( Y ∣ X ) = H ( Y ) − H ( X ∣ Y ) H(X;Y)=H(X)-H(Y|X)=H(Y)-H(X|Y) H(X;Y)=H(X)−H(Y∣X)=H(Y)−H(X∣Y)
    互信息表示两个变量之间的依赖程度,互信息越大, X X X和 Y Y Y的依赖程度越高。
  4. H ( X ) H(X) H(X)表示信息熵。

目标函数的构造

目标函数的构造分为三步:

  1. 最大化状态和skill之间的互信息。
    I ( S ; Z ) = H ( Z ) − H ( Z ∣ S ) I(S;Z)=H(Z)-H(Z|S) I(S;Z)=H(Z)−H(Z∣S)
    这是为了实现前面所述的第一个key idea,让状态和skill尽可能一一对应。The skill should control which states the agent visits.

  2. 在给定状态 S S S的条件下,最小化 A A A和 Z Z Z之间的互信息 I ( A ; Z ∣ S ) I(A;Z|S) I(A;Z∣S),这是为了实现第二个Key Idea,即保证真正可以用于区分不同Skill的是状态,而不是靠动作。也就是令动作 A A A和技能 Z Z Z之间尽量不相互依赖。

  3. 把概率分布 p ( z ) p(z) p(z)控制的所有Skill看做一个混合策略,最大化这个策略的条件熵 H ( A ∣ S ) H(A|S) H(A∣S),对应于第三个Key Idea让skill尽可能diverse。

总目标函数
F ( θ ) = I ( S ; Z ) + H ( A ∣ S ) − I ( A ; Z ∣ S ) = [ H ( Z ) − H ( Z ∣ S ) ] + H ( A ∣ S ) − [ H ( A ∣ S ) − H ( A ∣ S , Z ) ] = H ( Z ) − H ( Z ∣ S ) + H ( A ∣ S , Z ) \begin{aligned} F(\theta)&=I(S;Z)+H(A|S)-I(A;Z|S)\\ &=[H(Z)-H(Z|S)]+H(A|S)-[H(A|S)-H(A|S,Z)]\\ &=H(Z)-H(Z|S)+H(A|S,Z) \end{aligned} F(θ)​=I(S;Z)+H(A∣S)−I(A;Z∣S)=[H(Z)−H(Z∣S)]+H(A∣S)−[H(A∣S)−H(A∣S,Z)]=H(Z)−H(Z∣S)+H(A∣S,Z)​
上式最后一行的第一项是计算 p ( z ) p(z) p(z)的信息熵,在论文中 p ( z ) p(z) p(z)是一个固定的均匀分布,这样保证了第一项具有最大的信息熵。

第二项是最小化 H ( Z ∣ S ) H(Z|S) H(Z∣S),表示在已知状态 S S S的情况下,对应于该状态的随机变量 Z Z Z的信息熵最小化,也就是 S S S和 Z Z Z之间尽量一一对应,不确定性尽量减小。

第三项是对动作的条件熵的最大化,表示在给定状态和Skill的情况下,动作尽可能趋向随机。体现了最大熵策略的思想。

由于无法对所有state和skill上对 p ( z ∣ s ) p(z|s) p(z∣s)进行计算,论文提出用一个discriminator来拟合这个后验分布,即
q ϕ ( z ∣ s ) q_{\phi}(z|s) qϕ​(z∣s)

利用琴生不等式对上式进行放缩,得到一个变分下界(Variational Lower Bound) G ( θ , ϕ ) G(\theta,\phi) G(θ,ϕ):
F ( θ ) = H ( A ∣ S , Z ) − H ( Z ∣ S ) + H ( Z ) = H ( A ∣ S , Z ) + E z ∼ p ( z ) , s ∼ π ( z ) [ log ⁡ p ( z ∣ s ) ] − E z ∼ p ( z ) [ log ⁡ p ( z ) ] ≥ H ( A ∣ S , Z ) + E z ∼ p ( z ) , s ∼ π ( z ) [ log ⁡ p ( z ∣ s ) − log ⁡ p ( z ) ] = G ( θ , ϕ ) \begin{aligned} F(\theta)&=H(A|S,Z)-H(Z|S)+H(Z)\\ &=H(A|S,Z)+E_{z\sim p(z),s\sim \pi(z)}[\log p(z|s)]-E_{z\sim p(z)}[\log p(z)]\\ &\ge H(A|S,Z)+E_{z\sim p(z),s\sim \pi(z)}[\log p(z|s)-\log p(z)]\\ &=G(\theta,\phi) \end{aligned} F(θ)​=H(A∣S,Z)−H(Z∣S)+H(Z)=H(A∣S,Z)+Ez∼p(z),s∼π(z)​[logp(z∣s)]−Ez∼p(z)​[logp(z)]≥H(A∣S,Z)+Ez∼p(z),s∼π(z)​[logp(z∣s)−logp(z)]=G(θ,ϕ)​

DIAYN算法细节


算法流程:
第一步,采样一个 z z z。初始化环境。
第二步,与环境交互,得到 s t + 1 s_{t+1} st+1​,每步的 a t a_t at​的产生都受到 z z z的影响。
第三步,利用 s t + 1 s_{t+1} st+1​和 z z z计算 q ϕ ( z ∣ s t + 1 ) q_{\phi}(z|s_{t+1}) qϕ​(z∣st+1​),得到伪奖励(Pseudo-reward) r t = log ⁡ q ϕ ( z ∣ s ) − log ⁡ p ( z ) r_t=\log q_{\phi}(z|s)-\log p(z) rt​=logqϕ​(z∣s)−logp(z)
第四步,使用SAC算法最大化累计奖励,更新policy
第五步,使用SGD更新判别器参数。

DIAYN的两个网络:一个是策略网络(上图中的蓝色框 SKIIL),基于SAC(Soft Actor-Critic)构建的智能体,它和通常策略网络的区别在于,它还受一个参数 z z z的控制,用于生成不同的策略。

另外一个网络是判别器网络(上图蓝色框中的DISCRIMINATOR),它的作用是计算状态 s t + 1 s_{t+1} st+1​是在参数 z z z所控制的skill下访问到的概率,换句话说, q ϕ q_{\phi} qϕ​计算的是,当Agent已经访问了状态 s t + 1 s_{t+1} st+1​,则这个状态是一个特定的参数 z z z所访问到的概率分布。 q ϕ q_{\phi} qϕ​输出该状态可能对应的参数 z z z的概率分布。

判别器网络还起着生成reward的作用。做法很简单,每个episode内, z z z是固定不变的,输入不同的 s t + 1 s_{t+1} st+1​就会得到不同的概率值。

目标函数的优化

G ( θ , ϕ ) = H ( A ∣ S , Z ) + E z ∼ p ( z ) , s ∼ π ( z ) [ log ⁡ p ( z ∣ s ) − log ⁡ p ( z ) ] G(\theta,\phi)=H(A|S,Z)+E_{z\sim p(z),s\sim \pi(z)}[\log p(z|s)-\log p(z)] G(θ,ϕ)=H(A∣S,Z)+Ez∼p(z),s∼π(z)​[logp(z∣s)−logp(z)]

SAC的训练

SAC本身在policy优化过程中,就包括了对policy entropy的maximization,也就是目标函数中的 H ( A ∣ S , Z ) H(A|S,Z) H(A∣S,Z)这一项。

将目标函数中的第二项(expectation),替换为reward function,通过最大化奖励函数的方式,最大化 G ( θ , ϕ ) G(\theta,\phi) G(θ,ϕ)的后两项。Reward function的第一项表示,agent访问了 z z z对应的状态 s s s,就会得到比较大的reward,或者说,已知在特定skill下到达的state能够容易地推断出对应的skill,就会有比较高的分数,反之,如果skill的后验概率很低,说明这个state不能很好的区分skill,得分就低。
r z ( s , a ) = log ⁡ q ϕ ( z ∣ s ) − log ⁡ p ( z ) r_z(s,a)=\log q_{\phi}(z|s)-\log p(z) rz​(s,a)=logqϕ​(z∣s)−logp(z)

在训练中,每个episode内,从 p ( z ) p(z) p(z)内采样一个 z z z,整个episode内的所有采取的动作都与 z z z相关。 p ( z ) p(z) p(z)是均匀分布的Categorical分布,意味着 z z z是离散随机向量。

判别器的训练

判别器的目标是从sample rollout的experience中,训练如何通过state来infer对应的skill,预测给定的状态最可能被哪个参数 z z z控制下的策略访问到。同时,给定一个参数 z z z ,希望它对应的策略能够访问到和其他参数不一样的状态空间,因此训练Agent的奖励函数可以由前面学习到的判别器来给出,即如果访问到了一个关于参数 z z z”特殊“的状态,就给予较大的奖励。文中对如何训练判别器描述不多,个人认为,可能是将 ( z , s t + 1 ) (z,s_{t+1}) (z,st+1​)作为一对样本,在交互过程中不断地收集起来,适时进行离线的监督学习,目标就是最大化 q ϕ ( z ∣ s t + 1 ) q_{\phi}(z|s_{t+1}) qϕ​(z∣st+1​);或者,输入 s t + 1 s_{t+1} st+1​,输出预测的 z ~ \tilde{z} z~或输出一个概率分布然后再采样一个 z ~ \tilde{z} z~,然后与真实的 z z z构成监督学习的loss function。

文章提到DIAYN在面对不同的random seed得到了稳定的convergence performance。这一点是因为policy和discriminator的adversarial unsupervised RL training,实际上形成了一个cooperative game,如果discriminator能更好地从state推断skill,skill获得reward也将更加稳定,从而引导policy update得到更加distinguishable的skills,这是一个趋于稳定的adversarial过程。

DIAYN的应用

  1. 直接把学习到的策略网络权重作为权重初始化。唯一不一样的是,DIAYN 学到的策略网络还接受一个 z z z的输入,可能用于权值初始化之后需要输入一个固定的 z z z?
  2. 用于分层强化学习
    把学习到的 skills 用于作为 option(action),另外训练一个meta-controller来在不同的skills上做选择,meta-controller 的学习使用普通的强化学习算法。这里设计了两种比较困难的任务,一个是Cheetah Hurdle,类似于小狗跨栏,另一个是Ant Navigation,对Ant的路径有要求,必须按顺序走过地上的五个点。
    这里还提到了一种使用一些先验知识使得学习到的 skills更为有用的办法DIAYN+prior。比如,对于Ant来说,我们希望它探索出来的不同策略主要反映在它能够到达的位置的不同,就可以在判别器前加上一个先验,即 q ϕ ( z ∣ s ) → q ϕ ( z ∣ f ( s ) ) q_{\phi}(z|s)\rightarrow q_{\phi}(z|f(s)) qϕ​(z∣s)→qϕ​(z∣f(s)),而 f ( s ) f(s) f(s)只反映蜘蛛的质心位置。
  3. 用于模仿学习
    给定专家的轨迹之后,挑选出来一个 z ∗ z^* z∗使得它能够最大可能地产生专家轨迹上的状态,然后把对应的策略作为模仿学习的策略。
    z ^ = arg max ⁡ z Π s t ∈ τ ∗ q ϕ ( z ∣ s t ) \hat{z}=\argmax_z \Pi_{s_t\in\tau^*}q_{\phi}(z|s_t) z^=zargmax​Πst​∈τ∗​qϕ​(z∣st​)

论文的其他细节

  1. 如果以 p ( z ) p(z) p(z)是否可学习来区分,文中提到另一种与DIAYN最相似的Unsupervised Skill Discovery算法VIC(Variational Intrinsic Control)。VIC的 p ( z ) p(z) p(z)可学习,但是容易出现多样性的坍缩,只采样有限的几种skill。
    DIAYN的做法就是固定 p ( z ) p(z) p(z)。

  2. 提高training efficiency的一个思路就是reduce the number of objective function queries,即减少目标函数的计算次数。

  3. 层次强化学习是将一个复杂的任务分解成动作原语(Motion Primitives),而动作原语应当具有某种通用性,可以适用多种task。在实践中,分层强化学习(Hierarchical RL)会遇到三类问题:1)每个动作原语坍缩只有单个动作,2)层次化的策略坍缩到只剩一个动作原语,3)所有的动作原语都试图独立解决完整的任务而不是只关注一方面。

  4. pseudo reward中的 log ⁡ p ( z ) \log p(z) logp(z)对于要求尽快完成的任务并不合适,应该将其去掉。

  5. 增加网络的capacity有利于Skill的多样性的涌现。

  6. 网络结构的实现中,对 z z z和 s t s_t st​的处理是将两个向量Concatenate起来。

  7. H ( A ∣ S , Z ) H(A|S,Z) H(A∣S,Z)在目标函数中的最佳权重是 α = 0.1 \alpha =0.1 α=0.1。

强化学习经典算法笔记(十九):无监督策略学习算法Diversity Is All You Need相关推荐

  1. 强化学习经典算法笔记(十二):近端策略优化算法(PPO)实现,基于A2C(下)

    强化学习经典算法笔记(十二):近端策略优化算法(PPO)实现,基于A2C 本篇实现一个基于A2C框架的PPO算法,应用于连续动作空间任务. import torch import torch.nn a ...

  2. 表现SOTA!DetCo算法:目标检测无监督对比学习

    点上方计算机视觉联盟获取更多干货 仅作学术分享,不代表本公众号立场,侵权联系删除 转载于:Sophia知乎 https://zhuanlan.zhihu.com/p/393398507 AI博士笔记系 ...

  3. 一文梳理无监督对比学习(MoCo/SimCLR/SwAV/BYOL/SimSiam)

    本文从对比学习的概念出发,收集了五个2020年的关于对比学习的经典研究,详细介绍了每个工作的模型及思路过程,帮助大家快速掌握对比学习的原理和发展的脉络. 对比学习的概念很早就有了,但真正成为热门方向是 ...

  4. 强化学习经典算法笔记(十四):双延迟深度确定性策略梯度算法TD3的PyTorch实现

    强化学习经典算法笔记(十四):双延迟深度确定性策略梯度算法TD3的PyTorch实现 TD3算法简介 TD3是Twin Delayed Deep Deterministic policy gradie ...

  5. Polyworks脚本开发学习笔记(十九)-将数据对象与参考对象对齐的方法

    Polyworks脚本开发学习笔记(十九)-将数据对象与参考对象对齐的方法 把开发手册理了一遍,发现还有几个点没有记录下来,其中一个就是使用点对的粗对齐和使用参考目标的精确对齐.为了把这个学习笔记凑够 ...

  6. 深度学习入门笔记(九):深度学习数据处理

    欢迎关注WX公众号:[程序员管小亮] 专栏--深度学习入门笔记 声明 1)该文章整理自网上的大牛和机器学习专家无私奉献的资料,具体引用的资料请看参考文献. 2)本文仅供学术交流,非商用.所以每一部分具 ...

  7. TIP 2021 | 重访CV经典!首个无监督深度学习图像拼接框架

    点击下方卡片,关注"CVer"公众号 AI/CV重磅干货,第一时间送达 作者:廖康  |  已授权转载(源:知乎) https://zhuanlan.zhihu.com/p/386 ...

  8. “张量网络压缩感知(TNCS)与无监督机器学习”学习笔记

    TNCS学习笔记 一.前情小故事 二.张量网络压缩感知(TNCS) 如何构造和优化∣ψ⟩\left| \psi \right\rangle∣ψ⟩ 如何通过在∣ψ⟩\left| \psi \right\ ...

  9. UFLDL深度学习笔记 (三)无监督特征学习

    UFLDL深度学习笔记 (三)无监督特征学习 1. 主题思路 "UFLDL 无监督特征学习"本节全称为自我学习与无监督特征学习,和前一节softmax回归很类似,所以本篇笔记会比较 ...

最新文章

  1. 从RBM(受限玻尔兹曼机)开始、到深度信念网络(DBN)再到自动编码器(AE)
  2. 关于cookie的文章(cookie与session机制)
  3. CCSpriteBatchNode的使用
  4. Eclipse扩展点评估变得容易
  5. 小程序支付api密钥_如何避免在公共前端应用程序中公开您的API密钥
  6. 构造函数和clone以及在继承中
  7. a76比a73强多少_arm的a73和a72同上10nm,谁强?
  8. 基于 Redis3.2.4 集群搭建说明
  9. 【最详细】Tcpdump使用实验
  10. iOS开发那些事--nib、xib与故事板的关系
  11. python和c#区别_Python和C#哪个好?有什么区别?
  12. jink Art儿童摄影师视频教程中文字幕
  13. 敏捷迭代开发——Time-Boxing时间盒
  14. 二十三种设计模式 python实现
  15. 黑马JAVA知识点总结
  16. 静态IP与动态IP的区别
  17. 教你用Vue 做一个简单的比较两个数字的大小的页面
  18. Oracle中同义词(synonym)的用法
  19. 如何实现MYSQL分库分表
  20. Node.js Web 框架再进化 - 面向前端与未来标准

热门文章

  1. CarsimVeristand联合仿真系列-环境搭建01
  2. 《财富》推荐的75本必读书 (转载)
  3. SpringBoot搭建的个人博客项目
  4. OSPF特殊区域配置-ZTE中兴路由器
  5. 8.0魔兽服务器维护时间,魔兽世界8.0具体上线时间一览 WOW8.0什么时候开?
  6. BUUCTF:[BJDCTF 2nd]假猪套天下第一
  7. 网络传媒公司怎么运营
  8. kuka机器人profinet网络配置步骤_谈一谈KUKA工业机器人与S7-1200PLC实现Profinet通讯的步骤...
  9. web打印免费控件PAZU -- 四方在线WEB打印控件
  10. 【最新版】Java学习路线(含B站口碑推荐视频链接)