0%

https://blog.csdn.net/edward_zcl/article/details/88809212

背景

一个函数运行需要根据不同项目的配置,动态导入对应的配置文件运行。

解决

文件结构

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
a #文件夹
│a.py
│__init__.py
b #文件夹
│b.py
│__init__.py
├─c#文件夹
│c.py
│__init__.py

# c.py 中内容
args = {'a':1}

class C:

def c(self):
pass

目的
向a模块中导入c.py中的对象

解决方案

a.py

1
2
3
4
5
6
7
8
9
import importlib

params = importlib.import_module('b.c.c') #绝对导入
params_ = importlib.import_module('.c.c',package='b') #相对导入

# 对象中取出需要的对象
params.args #取出变量
params.C #取出class C
params.C.c #取出class C 中的c 方法

以上就是动态函数import_module的使用方法


又如:

https://blog.csdn.net/mouday/article/details/84062182

Python编程:importlib.import_module动态导入模块

环境:python 3.6

文件结构

1
2
3
4
5
├── clazz
│ ├── __init__.py
│ ├── a.py
│ └── b.py
└── main.py

a.py 的代码

1
2
def show():
print("show A")

b.py 的代码

1
2
def show():
print("show B")

从main中导入clazz包中的a 和b 模块

main.py

1
2
3
4
5
6
7
8
9
10
11
import importlib

# 绝对导入
a = importlib.import_module("clazz.a")
a.show()
# show A

# 相对导入
b = importlib.import_module(".b", "clazz")
b.show()
# show B

注意,相对导入有个一点., 类似路径。

作者:dpengwang
链接:https://www.jianshu.com/p/bbd258f99fd3
来源:简书

1. 认识 defaultdict

当我使用普通的字典时,用法一般是dict={},添加元素的只需要dict[element] =value即,调用的时候也是如此,dict[element] = xxx,但前提是element字典里,如果不在字典里就会报错,如:

1

这时defaultdict就能排上用场了,defaultdict的作用是在于,当字典里的key不存在但被查找时,返回的不是keyError而是一个默认值,这个默认值是什么呢,下面会说。

如何使用defaultdict

defaultdict接受一个工厂函数作为参数,如下来构造:

1
dict =defaultdict( factory_function)

这个factory_function可以是list、set、str等等,作用是当key不存在时,返回的是工厂函数的默认值,比如list对应[ ],str对应的是空字符串,set对应set( ),int对应0,如下举例:

1
2
3
4
5
6
7
8
9
10
11
12
from collections import defaultdict

dict1 = defaultdict(int)
dict2 = defaultdict(set)
dict3 = defaultdict(str)
dict4 = defaultdict(list)
dict1[2] ='two'

print(dict1[1])
print(dict2[1])
print(dict3[1])
print(dict4[1])

输出:

1
2
3
4
0
set()

[]

原文链接:https://blog.csdn.net/xiaoquantouer/java/article/details/75089200

一、什么是单元测试

单元测试是用来对一个模块、一个函数或者一个类来进行正确性检验的测试工作。

比如对于函数abs(),我们可以编写的测试用例为:

(1)输入正数,比如1、1.2、0.99,期待返回值与输入相同

(2)输入复数,比如-1、-1.2、-0.99,期待返回值与输入相反

(3)输入0,期待返回0

(4)输入非数值类型,比如None、[]、{}、期待抛出TypeError

把上面这些测试用例放到一个测试模块里,就是一个完整的单元测试

二、unittest工作原理

unittest中最核心的四部分是:TestCase,TestSuite,TestRunner,TestFixture

(1)一个TestCase的实例就是一个测试用例。测试用例就是指一个完整的测试流程,包括测试前准备环境的搭建(setUp),执行测试代码(run),以及测试后环境的还原(tearDown)。元测试(unit test)的本质也就在这里,一个测试用例是一个完整的测试单元,通过运行这个测试单元,可以对某一个问题进行验证。

(2)而多个测试用例集合在一起,就是TestSuite,而且TestSuite也可以嵌套TestSuite。

(3)TestLoader是用来加载TestCase到TestSuite中的。

(4)TextTestRunner是来执行测试用例的,其中的run(test)会执行TestSuite/TestCase中的run(result)方法

(5)测试的结果会保存到TextTestResult实例中,包括运行了多少测试用例,成功了多少,失败了多少等信息。

综上,整个流程就是首先要写好TestCase,然后由TestLoader加载TestCase到TestSuite,然后由TextTestRunner来运行TestSuite,运行的结果保存在TextTestResult中,整个过程集成在unittest.main模块中。

1. pytorch 设定随机种子

为了让实验复现,需要设定随机种子。pytorch 需要设定以下五条语句:

1
2
3
4
torch.manual_seed(myseed)			       # CPU
torch.cuda.manual_seed(myseed) # GPU
torch.cuda.manual_seed_all(myseed) # multi-GPU
torch.backends.cudnn.deterministic = True # cpu/gpu结果保持一致

Fujimoto, S., Meger, D., & Precup, D. (2019). Off-policy deep reinforcement learning without exploration. 36th International Conference on Machine Learning, ICML 2019, 2019-June, 3599–3609.

1. 论文概要

本文解决的问题是 Batch reinforcement learning,批强化学习。这种学习方法是从一个固定的数据集中学习出一个策略,不需要和环境发生进一步的交互。当与环境交互起来费时费力时,批强化学习就是关键的解决方案。批强化学习是介于 Off-policy 强化学习和模仿学习之间的一种方法。

模仿学习的数据收集通过是第二个进程来完成,例如人亲自操作或者精细的编程来实现。假设收集过程中采用的策略是得当的,数据集的质量能得到保证,便可以直接应用模仿学习来从数据集中学习策略。但是大多数模仿学习在面对数据集中的不完整轨迹都会学习失败,或者还需要和环境进一步交互。

大多数 off-policy 强化学习都可以称为 growing batch learning。一边使用数据集(或者称为经验池)中的数据进行学习,一边和环境交互产生新的数据加入数据集。但是当数据集中的数据与当前策略的数据分布差距较大时,off-policy 就会学习失败。本文将 off-policy 存在的主要问题归结于 extrapolation error(推断误差),即错误地估计状态动作对的值,本质上来源于经验池中的数据分布和当前策略不一致。比如,如果经验池中没有选择某个动作的样本,off-policy 就不能学到选择了该动作的策略。

为了解决 off-policy 中的推断误差,本文提出了 Batch-Constrained deep Q-learning (BCQ) 算法,旨在于最大化奖励的同时缩小策略和经验池对状态动作对访问的差异。BCQ 算法的核心是利用 state-conditioned generative model (状态条件生成模型)来只产生先前见过的动作。将这个生成模型与 Q 网络结合,来选择与数据集分布最相似的价值最高的动作。本文还证明了这样的 batch-constrained条件,是要从不完整的数据集中学习有限、确定性 MDP 的值的无偏估计的必要条件。

与模仿学习和 off-policy 强化学习不同,BCQ 算法不再需要与环境进行更深的探索,能够从专家数据集或固定的 suboptimal 数据集中学习。

2. 相关知识

2.1 Bellman operator $\mathcal{T}^\pi$

对于给定的策略 $\pi$,动作值函数可以通过贝尔曼算子来计算:

对于 $\gamma \in 0,1)$,论文 [[1] 证明了贝尔曼算子是一个压缩映射,并存在唯一的不动点 $Q^\pi(s,a)$ 。

最优动作值函数表示为 $Q^*(s,a) = \max_\pi Q^\pi (s,a)$ 。

2.2 DQN & Q-learning

对于连续的状态空间,将动作值函数表示为神经网络 $Q_\theta(s,a)$,并运用 Q-learning 方法对动作值函数进行训练的方法称为 DQN 算法。$Q_\theta(s,a)$ 的训练目标是:

其中 $Q_{\theta’}(s,a)$ 表示目标动作值网络,参数 $\theta’$ 更新采用当前网络参数 $\theta$ 的滑动平均:$\theta’\leftarrow \tau \theta + (1-\tau)\theta$ 。

Q-learning 是一个 off-policy 方法,负责采样的行为策略与学习的目标策略不同。原则上,off-policy 可以采用任意的行为策略。off-policy 方法的损失函数通常是最小化动作值网络估计与从经验回放池 $(s,a,r,s’) \in \mathcal{B}$ 采样的状态动作对的值的差异。

2.3 AC & DDPG

对于连续的动作空间,公式 $\eqref{2}$ 比较难以处理。AC 方法将策略也用神经网络表示 $\pi_\phi$ ,并通过另一个值网络的估计进行更新。策略网络称为 actor,值网络称为 critic 。

DDPG 是一种 AC 方法,同时运用 Q-learning 对值网络进行估计,目标函数可以表示为:

$Q_\theta$ 可以采用 DQN 方法进行训练。

3. 推断误差

推断误差是指数据集的状态动作访问分布与当前策略的状态动作访问分布不一致。说白了就是不同策略采样的分布不同,在计算动作值函数的时候有关概率肯定有差别。

off-policy 对推断误差的处理是,当前策略(例如greedy)利用的数据全部来源于行动策略(例如epsilon-greedy)时,在贝尔曼方程迭代计算动作值函数的时候应该乘上一连串重要性采样的权重。Q-learning 通过技巧(下一步的 Q 的动作由当前策略(例如greedy)给出)。

推断误差主要来源于以下方面:

  • 数据缺失。如果状态动作对 $(s,a)$ 没有在数据集中,这部分的价值就无法更新,此时误差来源于相似数据的价值和逼近误差。例如,对下一个状态的动作值估计 $Q_\theta(s’,\pi(s’))$ 可能与实际值相差很大,原因是数据集中没有与 $(s’,\pi(s’))$ 相近的数据。

  • 模型偏差。由于数据集是有限的,每个状态动作对的访问也是有限的,因此其分布会带来了偏差,计算贝尔曼方程时,期望是针对数据集 $\mathcal{B}$ 的数据分布,而不是真实的 MDP:

  • 训练不匹配。即便有足够的数据,从数据集采样时是均匀采样,训练的损失函数:

    当数据集中的数据分布与当前策略的分布不匹配时,对动作值的估计就会有误差。

需要注意的是,即便将公式 $\eqref{5}$ 的权重换成与当前策略相关,如果当前策略最高价值的状态动作对不在数据集中,依然会带来误差。

当前很多 Off-policy 算法都没有考虑推断误差。很多 off-policy 方法能起作用,原因在于他们的数据集采样的都是最近策略的数据,和当前策略差别不大。但是,当面对数据集和当前策略数据分布很不一致的情况,就会表现糟糕。本文做了三个实验,设计了三种不同的数据集来测试 DDPG 面对数据集分布不匹配时的情况。

  • Final buffer 。训练一个 behavioral DDPG算法100万步(加入了高斯噪声来保证充分探索)并将遇到的 transition 全部储存在经验池,保证足够的覆盖率。
  • Concurrent 。在训练 behavioral DDPG(加入了高斯噪声来保证充分探索)的同时训练 off-policy 的一个 DDPG。它们俩都用 behavioral DDPG 采样的数据集训练。
  • Imitation 。一个训练好的 behavioral DDPG 采样 100 万步,不做任何探索。

最后,off-policy DDPG 在这三种数据集中的表现如下图所示,其中 True Value 是通过蒙特卡洛方法计算出来的:

batch_exp

可以看到,off-policy DDPG 表现都远差于 behavioral DDPG。即使对于 concurrent 任务,behavioral DDPG 和 off-policy DDPG 同时训练,两者也有很大的差距。这说明在稳定的状态分布下,初始策略的差异便可导致推断误差。在 final 任务中,off-policy 拥有覆盖面非常大的数据集,但是对值的估计依然不稳定,性能也很差。在 imitation 任务中,即使给出了专家数据集,off-policy 学到的都是非专家动作,导致值估计很快就发散了。

虽然推断误差不一定是正偏的,但当推断误差与强化学习算法中的最大化相结合时,推断误差提供了一个噪音源,可导致持续的高估计偏差。在 on-policy 下,推断误差导致的过高估计,策略就会采集一些 uncertainty 的数据,对这些错误的状态探索之后,值估计就会慢慢修正。但是 off-policy 是基于数据集的,这些误差将会很难被消除。

4. 算法推导

当前的 off-policy 方法只管根据估计的动作值来选择动作,而不考虑动作值估计的准不准。如果在估计当前数据集中不存在的动作,将会带来很大的误差。但如果只选择那些在数据集中的动作空间,动作值就会估计得很准。

为了解决推断误差的问题,本文基于一个简单的思想:选择策略的时候要使得状态动作对的分布与 batch 的相似。满足这个要求的策略称为:batch-constrained 策略。batch-constrained 策略有以下三个目标:

  1. 最小化所选择的动作与 batch 中的数据的距离。

  2. 产生的状态数据是之前已经熟悉的。

  3. 最大化值函数。

其中目标 1 是最重要的。如果不限制在相关的 transition 下的话,值函数的估计就会很差,也就不能达到接下来的目标。因此本文在优化值函数的时候,引入了 future certainty 的衡量,同时加入距离的限制。本文的算法中是通过一个 state-conditioned generative model 来实现。该模型用一个网络来在一个小范围内最优地扰动生成的动作,并利用另一个 Q 网络来选择价值最高的动作。最后还利用了两个 Q 网络估计并取它们的 soft minimum 来作为价值估计的目标,目的是惩罚那些不熟悉的状态的值。

为了便于分析,先从有限的 MDP 和表格型环境出发,再引入到连续环境的 BCQ 算法。

4.1 有限 MDP 引入推断误差

首先重写以下 Q-learning 的更新公式:

其中 $\pi(s’) = \arg\max_{a’} Q(s’,a’)$ 。

对于数据集 $\mathcal{B} $ 学习的 Q 函数,定义一个对应的 MDP 为 $M_\mathcal{B}$ 。真实的 MDP 记为 $M$ 。$M_\mathcal{B}$ 和 $M$ 具有相同的动作空间和状态空间,初始状态为 $s_{init}$,初始动作值记为 $Q(s,a)$。$M_\mathcal{B}$ 的转移概率 $p_\mathcal{B}(s’|s,a) = \frac{N(s,a,s’)}{\sum_{\tilde s N(s,a,\tilde s)}}$ ,其中 $N(s,a,s’)$ 表示在数据集 $\mathcal{B}$ 遇见 $N(s,a,s’)$ 的数量。如果 $\sum_{\tilde s} N(s,a,\tilde s) = 0$,则 $p_\mathcal{B}(s_{init}|s,a)=1$,并且 $r(s,a,s_{init})$ 被设置为 $Q(s,a)$ 的初始值。

定理 1: 从数据集 $\mathcal{B}$ 中采样进行 Q-learning 学习,在 $MDP_\mathcal{B}$ 下 Q-learning 最终会收敛到最优动作值函数。

定义 $\epsilon_{MDP}$ 为有限 MDP 下的推断误差,数学意义是根据数据集 $\mathcal{B} $ 计算出的 $Q_\mathcal{B}^\pi$ 和根据真实 MDP 计算出的 $Q^\pi$ 的差值:

$\epsilon_{MDP}(s,a)$ 可以重新写成贝尔曼方程的形式:

这意味推断误差可以视为转移概率的差值的函数,其中动作值视为权重。如果选择一个策略使得两个转移概率的差距最小,那么推断误差也能达到最小。为了简便,重写公式 $\eqref{8}$ 如下:

接下来推导消除推断误差的条件。

引理 1:对于所有的奖励函数,当且仅当对于所有的$s’\in S$ 、 $\mu_\pi(s) > 0$、$\pi(a|s) > 0$ ,满足$p_\mathcal{B}(s’|s,a) = p_M(s’|s,a)$,才能保证 $\epsilon_{MDP}^\pi = 0$ 。

引理 1 告诉我们如果 $M_\mathcal{B}$ 和 $M$ 有相同的转移概率,那么策略的价值就可以被正确地评估。这就意味着如果一个策略只经历在数据集中的 transition,那么价值就能被正确估计。

用数学语言来讲,定义一个 batch-constrained 策略 $\pi \in \Pi_\mathcal{B}$,其中 $\mu_\pi(s) > 0$、$\pi(a|s) > 0$ 并且所有的 $(s,a) \in \mathcal{B}$ 。同时定义一个 coherent 数据集 $\mathcal{B}$,满足所有的 $(s,a,s’) \in \mathcal{B}$ 并且 $s’ \in \mathcal{B}$, 除非 $s’$ 是结束状态。有了这样的数据集,就能保证 batch-constrained 策略的存在,它的价值就能被正确评估。

定理 2:对于确定性的 MDP 和任意的奖励函数,当且仅当策略 $\pi$ 是 batch-constrained 时,$\epsilon_{MDP}^\pi = 0$ 。另外,如果数据集 $\mathcal{B}$ 时 coherent 的,那么这样的策略一定存在,只要初始状态 $s_0 \in \mathcal{B}$ 。

将 batch-constrained 策略 Q-learning 结合形成 batch-constrained Q-learning (BCQL),其更新公式为:

定理 3:给定学习率 $\alpha$ 的 Robbins-Monro 随机收敛条件,以及对环境标准的采样,BCQL 可以收敛到最优动作值函数 $Q^*$ 。

定理 3 说明对于确定性的 MDP,以及 coherent 的数据集,BCQL 能够收敛到最优策略 $\pi^ \in \Pi_\mathcal{B}$,对所有 $\pi \in \Pi_\mathcal{B}$ 和 $(s,a) \in \mathcal{B}$ 满足 $Q^{\pi^} \ge Q^\pi(s,a)$ 。

定理 4:给定确定性 MDP 和 coherent 数据集 $\mathcal{B}$,连同学习率 $\alpha$ 的 Robbins-Monro 随机收敛条件,BCQL 将会收敛到 $Q_\mathcal{B}^\pi(s,a)$,其中 $\pi^*(s) = \arg\max_{a \; s.t. \; (s,a) \in \mathcal{B}} Q^\pi_\mathcal{B}(s,a)$ 是最优 batch-constrained 策略。

定理 4 说明 BCQL 能保证学习的策略优于任何的行动策略。与标准的 Q-learning 不同的是,BCQL 没有对状态动作对访问上的要求,只要求数据集是 coherent 的。

4.2 BCQ 算法

将 BCQL 算法拓展到连续环境,本文提出了 BCQ 算法。其中为了满足 Batch-constrained 的条件,BCQ 利用了一个生成模型。对于给定的状态,BCQ 利用生成模型来生成与 batch 相似的动作集合,并通过 Q 网络来选择价值最高的动作。另外,本文还对价值估计过程增加了对未来稀有的状态进行惩罚,与 Clipped Double Q-learning 算法 [2] 类似。最后,BCQ 能学到与数据集的状态动作对访问分布相似的策略。

给定状态 $s$,本文将 $(s,a) $ 和数据集 $\mathcal{B}$ 中的状态动作对的相似度建模成条件概率 $P_\mathcal{B}^G(a|s)$ 。为了估计 $P_\mathcal{B}^G(a|s)$ ,本文采用了参数化的生成模型 $G_\omega(s)$,从中采样动作来逼近 $\arg\max_a P_\mathcal{B}^G(a|s)$ 。

对于生成模型,本文采用了变分自动编码器(conditional variational auto-encoder, VAE)。为了提高生成动作的多样性,本文引入了扰动模型 $\xi_\phi(s,a,\Phi)$,对动作 $a$ 的扰动范围是 $[-\Phi,\Phi]$ 。此时策略可以表示为:

参数 $n$ 和 $\Phi$ 的选择让 BCQ 算法介于模仿学习和强化学习之间。当 $\Phi=0$ 且 $n=1$ 时,BCQ 就类似于模仿学习;当 $\Phi=a_\max-a_\min$ 且 $n \rightarrow \infty$ 时,BCQ 算法就类似于 Q-learning 算法。

扰动模型 $\xi_\phi$ 的训练和 DDPG 算法的训练目标类似:

为了对未来一些不常见的状态进行惩罚,本文采用 Clipped Double Q-learning 算法 [2] 对动作值 $Q$ 进行估计,也就是训练两个动作值网络 $\{Q_{\theta_1},Q_{\theta_2}\}$,取它们的最小值作为动作值的估计。本文对 Clipped Double Q-learning 算法进行了一点改进,对两个动作值采用新的结合方式:

其中超参数 $\lambda$ 是控制对不确定的状态的惩罚力度。当 $\lambda = 1$ 时,公式 $\eqref{13}$ 其实是另一篇论文 Clipped Double Q-learning 的做法 [2] ,也是本文的一作提出来的。

算法和一般的 DQN 相比,BCQ 使用了两个 Q 网络和两个目标 Q 网络,一个扰动网络 $\xi_\phi$ 和对应的目标扰动网络以及一个 VAE 生成模型 $G_\omega(s )$。在训练时,首先从数据集中采样 transition,然后训练 VAE 模型,生成和 batch 中相似的 action,然后从生成器中采样,用扰动网络扰动动作的取值。最后更新 Q 网络和目标 Q 网络。

BCQ

5. 工程设置

参考文献

[1] Bertsekas, D. P. and Tsitsiklis, J. N. Neuro-Dynamic Pro- gramming. Athena scientific Belmont, MA, 1996.

[2] Fujimoto, S., van Hoof, H., and Meger, D. Addressing func- tion approximation error in actor-critic methods. In Inter- national Conference on Machine Learning, volume 80, pp. 1587–1596. PMLR, 2018.

Nachum, O., Norouzi, M., Xu, K., & Schuurmans, D. (2018). TruST-PCL: An off-policy trust region method for continuous control. 6th International Conference on Learning Representations, ICLR 2018 - Conference Track Proceedings, 1–14.

1. 论文概述

TRPO 在连续空间的强化学习上获得了成功,提高了基于策略梯度强化学习方法的稳定性和收敛速度。但是,当前的基于置信域优化的方法需要和环境进行大量的 on-policy 交互,样本效率很低。DDPG 是成功运用在连续环境中的 off-policy 强化学习方法,但是 DDPG 牺牲了稳定性来提升了样本效率,同时非常依赖于超参数的选取。

本文为了解决 on-policy 置信域方法的样本效率问题,提出了 Trust-PCL 方法。Trust-PCL 方法是基于 PCL 方法 [1] 的路径一致性原理,即在任意连续的子轨迹中,状态值和熵正则化的最优策略间满足一致性关系。Trust-PCL 方法引入了相对熵正则化器,保证了优化的稳定性。本文得到一个结论是,向最大奖励的强化学习目标引入相对熵正则化器之后,状态值和熵正则化的最优策略间依然对任意的轨迹满足一致性关系。

此外,本文提出了一种简单的方法来确定相对熵调整器的系数,使之不受奖励尺度的影响。

阅读全文 »

Nachum, O., Norouzi, M., Xu, K., & Schuurmans, D. (2017). Bridging the gap between value and policy based reinforcement learning. Advances in Neural Information Processing Systems, 2017-Decem(Nips), 2776–2786.

1. 论文概述

本文基于 softmax temporal value consistency 和熵正则化下的策略最优性,建立一个新的强化学习中值和策略的联系。具体指的是,本文展示了 softmax consistent action values 对应于最优熵正则化策略概率的推论。根据这个推论,本文提出了一个新的强化学习算法,Path Consistency Learning (PCL),旨在于最小化动作样本轨迹的 soft consistency error,且无论动作轨迹是 on-policy 还是 off-policy 产生。

基于策略梯度的方法主要问题是样本效率,因为策略梯度是从 rollout 中估计的,。尽管可以使用一些几何上的方法,比如 Natural gradient,Relative entropy policy,Trust region 等方法,但方差控制问题依然很大。AC 一类方法可以通过 critic 代替 rollout,牺牲一些偏差来降低方差,但即便是这样,因为很多 AC 方法采用的是 on-policy,依然存在样本效率低的问题。另外基于值的方法,比如 Q-learning 算法,可以从环境采样的动作轨迹进行学习,这一类 off-policy 方法的样本效率比 on-policy 要高。但是这类算法的主要问题是不能和估计函数稳定地交互,调节超参数比较困难。

理想上,我们想将 on-policy 的无偏性和稳定性与 off-policy 的样本高效性结合起来。这个思路造就了一系列 off-policy AC 方法,比如 Q-Prop,DDPG,A3C 等方法。尽管它们相对于 on-policy AC 方法有所提高,但是他们仍旧没有解决在函数逼近下与 off-policy 学习相关的理论困难。

本文探索了熵正则化框架下策略优化和 softmax value consistency 的关系,本文称为 path consistency,路径一致性。利用这个观察结论,本文设计了一款性能稳定的 off-policy AC 学习方法,并说明如何将 actor 和 critic 统一在一个模型中,而不是用两个独立的模型表示。

阅读全文 »

Haarnoja, T., Tang, H., Abbeel, P., & Levine, S. (2017). Reinforcement learning with deep energy-based policies. 34th International Conference on Machine Learning, ICML 2017, 3, 2171–2186.

1. 论文概述

本文将最大化熵方法运用在连续状态和动作空间的强化学习方法中,设计了名为 soft Q-learning 的算法。这种算法的优点是提高探索效率,并且便于让智能体在不同任务中共享学习到的技能。

强化学习可以使用确定性策略和随机策略。随机策略可以提高探索率,但是这种探索率通常是通过引入噪声或者初始化一个熵很高的随机策略。随机策略在某些场景下有些潜在优点,比如随机策略可以实现很高的探索率和组合性(组合性是指与其他算法结合的难易程度)。另外在面对不确定的动态属性,随机策略能表现出很好的鲁棒性,并且提高计算效率和收敛。

当我们将最优控制和概率推理联系起来的时候,随机策略就是一个最优解决方案。直观上,将控制问题视为推理的过程,目的不是为了产生一个确定性的 the lowest cost 行为,而是产生一系列的 low-cost 行为,并且最大化对应策略的熵。假设我们能学习到了完成任务的所有途径,那么完成任务的最优途径实际上只是学习到的所有途径中的一个具体化。

因此这种最大化熵的随机策略可以视为更具体的行为和复杂的任务的一个初始化。例如用这种方法训练一个 robot 向前走的 model,然后这个 model 作为下次训练 robot 跳跃、奔跑的初始化参数。随机策略也可以作为多模态奖励场景下的探索机制,并且在处理干扰时鲁棒性更强。

但是将最大化熵与随机策略结合并应用在连续的状态和动作空间,以及任意类型的策略分布上是具有挑战性的。本文的贡献是将随机策略和最大化熵结合,提出一个容易训练并且高效的算法:soft Q-learning 算法。

阅读全文 »

Fujimoto, S., Van Hoof, H., & Meger, D. (2018). Addressing Function Approximation Error in Actor-Critic Methods. 35th International Conference on Machine Learning, ICML 2018, 4, 2587–2601.

1. TD3 概念

Q-learning 和 actor-critic 都存在状态值过估计以及收敛于次优策略的问题。本文依照 double Q-learning 的思想提出了 TD3 算法,研究了过估计误差和目标网络间的联系,以及通过延迟策略的更新来降低每次更新的误差,提高策略的性能。

离散动作空间的过估计问题已经进行了研究,提出了 double Q-learning 算法。但是对于连续动作空间的 actor-critic 框架,过估计问题和误差的累积问题同样存在。过估计问题的来源主要是对带有噪声的状态值进行最大化,导致了最终目标产生过估计。另外,基于时间差分算法的强化学习算法,会利用一个本身不正确的状态估计值来进行下一次更新,导致误差累积。过估计和误差累积通常会导致一个本来很差的状态被估计成很高的状态值,产生次优策略。

阅读全文 »