强化学习发展的特别早,但一直不温不火,其中Sutton老爷子早在1998年就写了强化学习领域的圣经书籍:AnIntroduction:ReinforcementLearning,但也并未开启强化学习发展的新局面。
直到2012年,深度学习广泛兴起,大规模的神经网络被成功用于解决自然语言处理,计算机视觉等领域,人工智能的各个方向才开始快速发展,强化学习领域最典型的就是2013年DeepMind公司的VolodymyrMnih发表PlayingAtariwithDeepReinforcementLearning(DQN技术),可以说开启了深度强化学习技术发展的新高潮,2015年该论文的加强版Human-levelcontrolthroughdeepreinforcementlearning登上Nature,以及2016年Nature上的AlphaGo:MasteringthegameofGowithdeepneuralnetworksandtreesearch充分证明了深度强化学习技术的发展潜力。
传统的强化学习和监督学习、非监督学的区别在于,后两者是通过从已标记(Label)和无标记的数据中学习一套规律(我们可以理解为学习一个函数表达式),而前者强化学习则是通过行为交互来学习一套策略,以最大化累计期望奖励,结构如图所示:
其学习过程可以归纳为通过agent获取环境状态,根据自身学习到的知识做出action反馈给环境,并得到一个奖励,不断地迭代出一个可以一直玩游戏并且不会死的智能体。原理就是从一个四元组$$中学习出策略,不论出发点在哪里都可以得到一个最优的轨迹(trajectory)模型(不论起点,目前测试中一般通过多个随机seed去测试),具体可以参考博主的另外篇博文深度强化学习简介.
1.1.1On-Policy和off-Policy区别
On-policy和Off-policy这两个词在强化学习领域非常重要,知乎上有很多关于其讨论强化学习中on-policy与off-policy有什么区别?,最典型的莫过于李宏毅老师下棋形象例子解释,还可以从以下方式解释:
【补充】两者在学习方式上的区别:若agent与环境互动,则为On-policy(此时因为agent亲身参与,所以互动时的policy和目标的policy一致);若agent看别的agent与环境互动,自己不参与互动,则为Off-policy(此时因为互动的和目标优化的是两个agent,所以他们的policy不一致)。两者在采样数据利用上的区别:On-policy:采样所用的policy和目标policy一致,采样后进行学习,学习后目标policy更新,此时需要把采样的policy同步更新以保持和目标policy一致,这也就导致了需要重新采样。Off-policy:采样的policy和目标的policy不一样,所以你目标的policy随便更新,采样后的数据可以用很多次也可以参考。
其实最经典的莫过于Sutton老爷子Introduction中的解释:
原文:On-policymethodsattempttoevaluateorimprovethepolicythatisusedtomakedecisions,whereasoff-policymethodsevaluateorimproveapolicydifferentfromthatusedtogeneratethedata.
此外莫过于Q-learning和sarsa算法的解释
最终总结一下两者的优缺点:
on-policy优点是直接了当,速度快,劣势是不一定找到最优策略。off-policy劣势是曲折,收敛慢,但优势是更为强大和通用。
1.1.2Online和Offline学习的本质
监督学习中通常利用已知(已标记)的数据进行学习,其本质是从数据中总结规律,这和人从学1+1=2基本原理一致,强化学习的过程也是如此,仍然是从数据中学习,只不过强化学习中学习的数据是一系列的轨迹
所以重点来了,这里的数据才是最关键的一部分,这也强化学习中Online和offline学习中的关键,Online一方面是与环境有交互,通过采集数据学习、然后丢弃,而offline则是不用交互,直接通过采集到的轨迹数据学习,这也是off-policy到offline转换的重要原因。
1.2落地应用的困难?
目前atari,mujoco物理引擎等各类游戏中的模拟数据很轻松拿到,这也就是目前强化学习在游戏领域非常成功的原因之一,也是各种stateoftheart刷榜的体现,因为游戏数据可以很轻松就100million,总结起来就是
有模拟器,易产生数据,好用!
但强化学习在落地过程中就可能遇到很多问题,比如下图这个大家伙,
总不可能让他产生100million数据吧(不知道他的额定寿命是多少次),因此产生如下几个问题:
所以有这样的方法吗?
答案:有,OfflineRL,此处有矿,赶紧来挖!
2.离线强化学习
离线强化学习最初英文名为:BatchReinforcementLearning[3],后来SergeyLevine等人在其2020年的综述中使用了OfflineReinforcementLearning(OfflineRL),现在普遍使用后者表示。下图是离线强化学习近年来论文的发表情况,间接反应发展状态。
2.1离线强化学习原理
OfflineRL可以被定义为data-driven形式的强化学习问题,即在智能体(policy函数?)不和环境交互的情况下,来从获取的轨迹中学习经验知识,达到使目标最大化,其和Online的区别如图所示:
后来Sergey在论文中归纳如下图所示:
本质上,智能体是通过静态的数据集$
去对进行充分的理解,并构造一个策略\pi(a|s)在实际交互中获得最多的累计奖励本文用\pi_{\beta}表示数据集D中的状态和动作分布,且s,a\inD,s\simd^{\pi_{\beta}}(s),而动作a\sim\pi_{\beta}(a|s)是根据行为策略采样而来那么最终的学习目标标成了最大化J(\pi)$
2.2离线强化学习分类及区别2.2.1如何判断OfflineRL
图中很明确的从数据可否store以及reused解释了是纯Online还是offline,以及使用经验回放的NFQ等,其本质还是是否利用trajectory去学习优化模型。
模仿学习(ImitationLearning,IL)是指通过从专家(通常指人类的决策数据)提供的范例中学习,,每个决策包含状态和动作序列$\tau_{i}=,将所有「状态动作对」抽取出来构造新的集合\mathcal{D}=\left\{\left(s_{1},a_{1}\right),\left(s_{2},a_{2}\right),\left(s_{3},a_{3}\right),\ldots\right\}$。之后就可以把状态作为特征,动作作为标记进行离散动作/连续动作的学习而得到最优的策略模型,模型的训练目标是使模型生成的状态-动作轨迹分布和输入的轨迹分布相匹配,最典型的就是自动驾驶的例子(此过程中一般称为行为克隆behaviorclone)。
另外一方面在数据组成方面有如下区别:
2.3离线强化学习很难学习的原因2.3.1无法探索(Explore)
强化学习在与环境中交互学习的过程中,最关键的一个问题便是“ExplorationvsExploitationDilemma”,Exploration是为了收集更多信息(尝试一些不可能等),而Exploitation则根据当前信息做出最佳决策,正如Sliver总结的:
这两者可以说对一个算法的训练精度、速度等各方面有重要影响,而OfflineRL算法中需要完全的依赖于静态数据集,但是没有办法提高exploration,因为不和环境进行交互,就无法知道探索得到的数据是否有效,是否有高质量的奖励反馈等,所以OfflineRL不可能通过探索发现高奖励的区域。而且,并没有办法解决此问题,这就变成了2.3.2中的经验最小化的问题了
2.3.2数据质量(拟合与过拟合)
深度学习的成功可以归结为数据集(ImageNet等)的准确强大,offlineRL也不例外,思考以下问题:
这个问题其实Fujimoto在2019年的时候就提到了(如图所示),但直到现在仍然对OfflineRL算法的训练非常大的影响。
备注:Finalbuffer:trainaDDPGagentfor1milliontimesteps,addingN(0,0.5)Gaussiannoisetoactionsforhighexploration,andstoreallexperiencedtransitions.Concurrent:traintheoff-policyandbehavioralDDPGagents,for1milliontimesteps.Toensuresufficientexploration,astandardN(0,0.1)Gaussiannoiseisaddedtoactionstakenbythebehavioralpolicy.2.3.3分布偏移(Distributionshift)2.3.3.1关于分布偏移
分布偏移(Distributionshift)在监督学习中一般指的是训练分布与测试分布不同,在离线强化学习中指的是训练策略与行为策略不一致。(Distributionshifts,inwhichthetrainingdistributiondiffersfromthetestingdistribution,trainingpolicyareinconsist:entwithbehavioralpolicyinofflinereinforcementlearning.),下面我们进行解释
在监督学习中,训练一个模型通常追求经验风险最小化(EmpiricalRiskMinimization,ERM),即:
那么问题就变成了:如何在不同的下能够同样能够达到
同样的情况,在OfflineRL中obejctive函数则变成了:
其中的是我们从offlinedata中学习的策略,而我们希望,这样就可以达到学习目的了。
总结起来就是:别走偏了,每一步都尽量让两个分布之间距离最小化的问题,不然累计起来不知道走哪里(有点TRPO的感觉)
2.3.3.2分布偏移对OfflineRL算法收敛的影响
下面是一些2012年前的offlinereinforcementlearning算法,最新的算法将在后面博客中详解。
至此,关于offlineRL的简介到这里,下一篇是关于offlineRL中常用(最典型)的数据集D4RL的安装过程以及其中遇到的一些坑,以及如何设计一个高效的OfflineRL算法
关于D4RLBenchmarks数据集[Github],[Paper]
2.5为什么选择D4RL?
(1)D4RL收集了大型数据集,包括交互式环境中智能体的记录(即自动驾驶Carla、AntMaze、Mujoco等),且有简单和复杂分类,种类非常丰富,例如:
(2)D4RL提供了非常简单的API接口,方便于学习者直接去获取数据集完成智能体的训练。
importd4rl#Importrequiredtoregisterenvironmentsenv=gym.make('maze2d-umaze-v1')dataset=env.get_dataset()
(3)D4RL定义了标准的衡量指标
(4)D4RL提供了丰富的baseline基准,包括了常见的Offline算法,包括BCQ、BEAR、BRAC等等
D4RL数据集目前来说是离线强化学习涵盖数据集非常丰富的一个数据集,数据质量非常高。其中最主要的是数据的采集综合了6类因素
2
D4RL安装与使用
2.1官方安装指导(有坑)
D4RL的安装相对来说比较容易,但其中也有很多的坑
另外一种简单的安装方法
其中会有很多坑,导致安装失败。
下面我们根据初始化安装文件setup.py分析安装
fromdistutils.coreimportsetupfromplatformimportplatform
fromsetuptoolsimportfind_packages
setup(name='d4rl',version='1.1',install_requires=['gym','numpy','mujoco_py','pybullet','h5py','termcolor',#adept_envsdependency'click',#adept_envsdependency'dm_control'if'macOS'inplatform()else'dm_control@git+git://github.com/deepmind/dm_control@master#egg=dm_control','mjrl@git+git://github.com/aravindr93/mjrl@master#egg=mjrl'],packages=find_packages(),package_data={'d4rl':['locomotion/assets/*','hand_manipulation_suite/assets/*','hand_manipulation_suite/Adroit/*','hand_manipulation_suite/Adroit/gallery/*','hand_manipulation_suite/Adroit/resources/*','hand_manipulation_suite/Adroit/resources/meshes/*','hand_manipulation_suite/Adroit/resources/textures/*',]},include_package_data=True,)
2.2有效安装过程(避坑)
上述过程安装后我们会发现遇到很多问题,下面我就自己的安装过程以及遇到的问题一一列举
安装环境:Ubuntu18.04,anaconda3
第一步:安装mujoco210(针对没有安装mujoco)
#测试cd~/.mujoco/mujoco210/bin/./simulate../model/humanoid.xml
解决办法:
(1)下载mujoco211安装包,解压
(2)在mujoco210/lib下找到libmujoco.so.2.1.1,并复制在~/.mujoco/bin在~/.bashrc下
(3)添加环境变量并source
exportMJLIB_PATH=~/.mujoco/lib/libmujoco.so.2.1.1source~/.bashrc
第二步:安装mujoco_py
#本步跳过conda环境创建,直接进入虚拟环境(condacreate-nd4rlpython=3.7)condacreate-nd4rlpython=3.7condaactivated4rlpipinstallmujoco_py
pythonPython3.7.11(default,Jul272021,14:32:16)[GCC7.5.0]::Anaconda,Inc.onlinuxType"help","copyright","credits"or"license"formoreinformation.>>>importmujoco_py>>>#备:没有报错表示安装成功
sudoaptinstalllibosmesa6-dev#补充命令:sudoapt-getinstalllibgl1-mesa-glxlibosmesa6
坑3:如果是fatalerror:GL/glew.h:Nosuchfileordirectory,那么就安装Glew库
解决办法
sudoapt-getinstalllibglew-devglew-utils
坑4:如果是FileNotFoundError:[Errno2]Nosuchfileordirectory:'patchelf':'patchelf',那就安装patchelf
sudoapt-get-yinstallpatchelf
安装成功是这样的效果
pipinstalldm_control
第四步:安装d4rl
克隆D4RL仓库
找到到d4rl目录下的setup.py文件,注释mujoco_py,dm_control
install_requires=['gym','numpy',#'mujoco_py','pybullet','h5py','termcolor',#adept_envsdependency'click',#adept_envsdependency#'dm_control'if'macOS'inplatform()else#'dm_control@git+git://github.com/deepmind/dm_control@master#egg=dm_control','mjrl@git+git://github.com/aravindr93/mjrl@master#egg=mjrl'],
然后直接安装并测试
#installingpipinstall-e.
#测试,创建test_d4rlpy.py并添加如下内容vimtest_d4rl.py
importgymimportd4rl#Importrequiredtoregisterenvironments
#Createtheenvironmentenv=gym.make('maze2d-umaze-v1')
#d4rlabidesbytheOpenAIgyminterfaceenv.reset()env.step(env.action_space.sample())
#Eachtaskisassociatedwithadataset#datasetcontainsobservations,actions,rewards,terminals,andinfosdataset=env.get_dataset()print(dataset['observations'])#AnNxdim_observationNumpyarrayofobservations
#Alternatively,used4rl.qlearning_datasetwhich#alsoaddsnext_observations.dataset=d4rl.qlearning_dataset(env)
pythontest_d4rlpy.py
坑5:如果遇到:下面问题,那就单独安装mjrl
ERROR:Couldnotfindaversionthatsatisfiestherequirementmjrl(unavailable)(fromd4rl)(fromversions:none)ERROR:Nomatchingdistributionfoundformjrl(unavailable)
安装命令
最后的D4RL安装结果结果
最后贴出我的~/.bashrc文件,欢迎参考
#cuda、anaconda等环境变量可以设置在本部分以前#环境变量次序也很重要
#mujoco(这里我安装了两部分)exportLD_LIBRARY_PATH=$LD_LIBRARY_PATH:$HOME/.mujoco/mujoco210/binexportLD_LIBRARY_PATH=$LD_LIBRARY_PATH:$HOME/.mujoco/mujoco211/bin
exportMUJOCO_KEY_PATH=~/.mujoco${MUJOCO_KEY_PATH}exportMJLIB_PATH=~/.mujoco/lib/libmujoco.so.2.1.1
#nvidiaexportLD_LIBRARY_PATH=$LD_LIBRARY_PATH:/usr/lib/nvidia
exportLD_PRELOAD=~/anaconda3/envs/d3rlpy/lib/python3.7/site-packages/d3rlpy/dataset.cpython-37m-x86_64-linux-gnu.so#exportLD_PRELOAD=/usr/lib/x86_64-linux-gnu/libGLEW.so:/usr/lib/nvidia-465/libGL.so
exportLD_PRELOAD=/usr/lib/x86_64-linux-gnu/libGLEW.so
坑6:有的伙伴可能会用pycharm去运行mujoco会出现一个问题就是:有nvidia的环境变量没有mujoco的,有mujoco的没有nvidia的
Exception:Missingpathtoyourenvironmentvariable.CurrentvaluesLD_LIBRARY_PATH=Pleaseaddfollowinglineto.bashrc:exportLD_LIBRARY_PATH=$LD_LIBRARY_PATH:/home/jqw/.mujoco/mujoco210/bin
#或者这样的Exception:Missingpathtoyourenvironmentvariable.CurrentvaluesLD_LIBRARY_PATH=LD_LIBRARY_PATH:/usr/lib/nvidiaPleaseaddfollowinglineto.bashrc:exportLD_LIBRARY_PATH=$LD_LIBRARY_PATH:/home/jqw/.mujoco/mujoco210/bin
直接在pycharm运行配置中修改环境变量:python文件上右键后进入ModifyRunConfiguration
image-20220328180705232
重点就是两个变量之间用冒号隔开":",不是分号";",然后就ok了
PYTHONUNBUFFERED=1;LD_LIBRARY_PATH=LD_LIBRARY_PATH:/usr/lib/nvidia:$LD_LIBRARY_PATH:/home/jqw/.mujoco/mujoco210/bin
TD3+BC算法详解
论文信息:ScottFujimoto,ShixiangShaneGu:“AMinimalistApproachtoOfflineReinforcementLearning”,2021;arXiv:2106.06860.
其实上述的这些问题并不是去解决offlineRL中的一些诸如分布偏移、OOD、过估计以及等等这些问题,而是去解决如何简单、快速、高效的实现算法的实现与高效运行问题,因此作者面对这些问题,发出疑问并给出方法:
2.TD3+BC原理2.1TD3+BC相比于其他的优势
下图是TD3+BC算法相对于CQL、Fish-BRC算法的复杂性对比,从表中我们可以看到CQL和Fish-BRC在算法(algorithmic)上有了很多的变种,使用生成网络,近似等,而TD3+BC仅仅添加了一个BCterm和Normalizedstate,足够的简单。
2.2理论部分
对于经典的DDPG、TD3等算法来讲,策略梯度的计算根据Davidsliver提出的如下定义,即求解状态-动作值函数的期望值。
本文中,作者为了尽可能的让两个动作接近添加了一个正则项以及,
个人看法:有点像BCQ中的让学习策略和行为策略之间的距离减少那种意思,只不过添加到正则项里面.
另外一个技术点就是从代码执行层面的优化,即NormalizeState,具体的Normalize过程如公式所示:
其中的表示一个normalization常量,作者在文中使用了,和表示期望和标准差(standarddeviation)。
实验效果(关于纵坐标Percentdifference后文有说明,本部分只看效果)
最后一个技术点就是关于的求解,作者给出了计算公式,并在后文中说取值为的时候效果最好,实验部分有作者做的ablation实验证明。
最后贴出作者在TD3代码上的改动部分==》TD3+BC算法实现
2.3经典的Rebuttal场面
此外,我们看一下作者如何rebuttle这些OpenReview提出的审稿意见[1],[2]
其实这部分蛮有意思的,我们发现大多数普通人的工作还是集中在对算法的小部分优化(数学大佬和代码大神略过),这里作者教你手把手给审稿人回复(建议收藏,热别是第2条)
下面我们看作者的神奇巧妙回复
挺有意思的,学习收藏吧!
3.实验及过程分析3.1实验超参数
这部分是作者实验的一些基础,挺良心的,具体到了每一个实验环境的版本号
这部分特意说明一下作者的良心部分:代码版本都放出来了
3.2衡量指标:百分比差异(PercentDifference)
3.3实验验证与结果简要分析
说明:关于D4RL数据集的组成、安装和解释请参考博文离线强化学习(OfflineRL)系列2:(环境篇)D4RL数据集简介、安装及错误解决
本实验参数HC=HalfCheetah,Hop=Hopper,W=Walker,r=random,m=medium,mr=medium-replay,me=medium-expert,e=expert.Whileonlinealgorithms(TD3)typicallyhavesmallepisodevariancespertrainedpolicy(astheyshouldatconvergence),3.3.1D4RL验证讨论
3.3.3消融(ablation)实验(如何确定)
这部分其实对比了vanillaBC方法和区别,同时就参数做了对比得出了最好的。
分布偏移最主要的原因是learnedpolicy和behaviorpolicy之间的偏移(从图中我们可以清晰的看到两者之间的区别),这也是offlineRL相比于OnlineRL在不能交互学习的情况下造成的。
2.2OOD(out-of-distribution)action问题
OOD问题在OfflineRL中非常常见,简单的可以理解为状态-动作对可能不在我们的offlineDataset中,对应的分布也一样,即学习分布远在(faroutside)训练(trainingdistribution)分布之外。
结合上图,其实真正解决这个问题,第一直观的想法就是增大数据集的数量,让数据集尽可能包含训练分布,这样学习分布基本可能会在范围内,然而这个方法并不奏效:
作者在实验中使用了大小不一样的数量实验,结果表明即使增大trainsamples,算法的性能并没有得到有效提升,同时也会引发下一个累计误差问题:
此外Q值误差居高不下,是什么原因造成的?
2.3贝尔曼误差(Bellmanerror)
我们在OnlineRL中知道,最优函数遵循最优贝尔曼方程,如下所示:
然后,强化学习对应于最小化该等式左侧和右侧之间的平方差,也称为均方贝尔曼误差(MSBE),得到:
MSBE在由行为策略生成的数据集中的转换样本上最小化。尽管最小化MSBE对应于有监督的回归问题,但该回归的目标本身是从当前函数估计中得出的。于是对于迭代次的Q-learning来说,总误差(error)可以定义为:
其中当前的贝尔曼误差(Bellmanerror)为:
那么我们就可以得出以下结论:
所以说,当一个状态-动作分布处于OOD之外时,我们其实是希望很高,因为我们的优化目标是不断将处于分布之外的策略分布与训练分布距离最小化。为了缓解这个问题,作者提出了一个解决方法就是让学习策略输出的动作处于训练分布的支撑集(Support-set)中。
所谓的Support-set,其实就是"学习策略只有在行为策略的密度大于阈值,而不是对密度和的值的接近约束。"原话:
下面我们结合例子解释一下分布匹配(Distribution-matching和支撑集匹配(Support-setmatching)的区别,以及原理。
3.从一个例子原因分析开始
考虑一维的LineworldEnvironment问题,我们从点出发到达点,动作集分为“向左”和“向右”两种,对应的奖励在上图中有标记。
个人理解原因3.1Distribution-matching
3.2Support-constraint
那么为什么Distribution-matching在这里会失败?
通过上述分析,我们得出一个结论:我们希望的不是学习策略和行为策略越像越好,而是学习策略能够在行为策略的支撑集的范围内去进行优化,如果学习策略和行为策略无限接近那不就是Behaviorclone了,但offline无法无限的去逼近online,所以问题仍然存在。
下图就是关于Distribution-matching和supportconstraint选择动作的区别
从图中我们可以看到:以红色的行为策略为基准,在distribution-matching中则仅有紫色的学习策略相符,但在support-matching中黄色的都是可以匹配的learnedpolicy,所以更通用。
那么support-setmatching更通用,具体是怎么matching的呢?下文我们从论文的理论部分开始分析。
4.理论设计及分析(核心:建议阅读)4.1Support-setMatching(支撑集匹配方法)4.1.1支撑集匹配原理
第一步:解决策略集定义及收敛,定义Distribution-constraintoperators概念,如下所示:
这里面最关键的有以下几个地方:
为了分析在近似误差下执行backup的次优(suboptimality)问题,作者提出两个方面:
这里定义了一个Concentrability,【越小,就说明policyset中的policy与behaviorpolicy越相似】
第二步:最后作者给出了一个边界(bound)
证明过程如下:
这里的[ErrorBoundsforApproximateValueIteration]中解释了
Wechoosepoliciesonlylyinginhighsupportregionsofthebehaviourpolicy.Allowsforatradeoffbetween:Keepingclosetothedata(minimizingamountofpropagatederror)Havingfreedomtofindtheoptimalpolicy
这里作者不是对所有策略执行最大化,而是对集合Pi_eps执行受限最大值,为了实际执行此操作,使用执行支撑匹配的约束。
其中作者原话是:
Wechangethepolicyimprovementstep,whereinsteadofperformingamaximizationoverallpolicies,weperformtherestrictedmaxoverthesetandinordertodothispractically,weuseaconstrainedformulation,whereweuseaconstraintthatperformssupportmatching.Weconstrainthemaximummeandiscrepancydistancebetweenthedatasetandtheactortoamaximallimit,usingsamples.4.1.2为什么要从选取动作?
通过以上的方法,问题最终化解为一个求解最优问题:
4.2MaximumMeanDiscrepancy(MMD)4.2.1MMD原理
MMD[AKernelTwo-SampleTest]方法是一种统计测试以确定两个样本是否来自不同的分布,检验统计量是再现kernelHilbertspace(RKHS)的单位球中函数的最大期望差异。
4.2.2MMD代码求解
defgaussian_kernel(x,y,sigma=0.1):returnexp(-(x-y).pow(2).sum()/(2*sigma.pow(2)))
defcompute_mmd(x,y):k_x_x=gaussian_kernel(x,x)k_x_y=gaussian_kernel(x,y)k_y_y=gaussian_kernel(y,y)returnsqrt(k_x_x.mean()+k_y_y.mean()-2*k_x_y.mean())
4.2.3与KLdivergence的区别
4.3双梯度下降(DualGradientDescent)(可跳过)4.3.1DGD原理及图解[DualGradientDescent]
双梯度下降是一种在约束条件下优化目标的流行方法。在强化学习中,它可以帮助我们做出更好的决策。
5.BEAR算法执行过程5.1BEAR原版
5.2BEAR修补版
6.部分结果分析
7.Pytorch代码实现部分浅析
本代码由原作者开源[Github]
7.1Installing&running
pythonmain.py--buffer_name=buffer_walker_300_curr_action.pkl--eval_freq=1000--algo_name=BEAR--env_name=Walker2d-v2--log_dir=data_walker_BEAR/--lagrange_thresh=10.0--distance_type=MMD--mode=auto--num_samples_match=5--lamda=0.0--version=0--mmd_sigma=20.0--kernel_type=gaussian--use_ensemble_variance="False"