# ES

> [Evolution Strategies as a Scalable Alternative to Reinforcement Learning](https://arxiv.org/pdf/1703.03864.pdf)

我们探索使用Evolution Strategies（ES），一类黑盒优化算法，作为基于MDP的流行RL技术的替代方案，如Q-learning和Policy Gradients。 MuJoCo和Atari上的实验表明，ES是一种可行的解决方案策略，可以根据可用的CPU数量进行非常好的扩展：通过使用基于常见随机数的新型通信策略，我们的ES实现只需要传达标量，使其可以扩展到超过一千个并行进程。 这使我们能够在10分钟内解决3D人体行走，并在训练一小时后获得大多数Atari游戏的竞争结果。 此外，我们强调了作为黑盒优化技术的ES的几个优点：它不受行动频率和延迟奖励的影响，能够容忍极长的视野，并且不需要temporal discounting或值函数逼近。

本文的主要发现如下：

1. 我们发现使用虚拟批量标准化极大地提高了进化策略的可靠性。 如果没有这些方法，ES在我们的实验中证明是脆弱的，但通过这些重新参数化，我们在各种环境中取得了很好的结果。
2. 我们发现进化策略方法可高度并行化：通过引入基于常见随机数的新型通信策略，即使使用超过一千名工作人员，我们也能够在运行时实现线性速度。 特别是，使用1,440个工作进程，我们能够在10分钟内解决MuJoCo 3D人形任务。
3. 进化策略的数据效率惊人地好:我们能够匹配A3C 在大多数Atari环境中，使用的数据量在3倍到10倍之间。由于没有执行反向传播和没有值函数，所需的计算量减少了大约3倍，这在一定程度上抵消了数据效率的轻微下降。ES1小时训练结果需要的计算量与A3C1天训练结果相同，而在23个游戏测试上表现更好，在28个上表现更差。在MuJoCo任务中，我们能够匹配信任区域策略优化，使用的数据最多不超过10倍。
4. 我们发现ES表现出比像TRPO这样的策略梯度方法更好的探索行为:在MuJoCo人形机器人任务中，ES已经能够学习各种各样的步态(比如侧向行走或者向后行走)。TRPO从未观察到这些不寻常的步态，这表明了一种本质上不同的勘探行为
5. 我们发现进化策略方法是稳健的:对于所有Atari环境，我们使用固定超参数实现了上述结果，对于所有MuJoCo环境，我们使用了一组不同的固定超参数(一个二元超参数除外，它在不同的MuJoCo环境中并不保持恒定)

## 方法

### 进化策略

进化算法的常规流程为：初始种群>>交叉变异>>评价>>筛选下一代......直到问题收敛

令 $$F$$ 为评价函数， $$\theta$$ 为策略的参数，带噪音的分布 $$p\_{\psi}(\theta)$$ 为当前的策略种群

则优化的最终目标是最大化 $$\mathbb{E}*{\theta \sim p*{\psi}} F(\theta)$$ ，natural evolution strategies (NES)使用梯度

$$\nabla\_{\psi} \mathbb{E}*{\theta \sim p*{\psi}} F(\theta)=\mathbb{E}*{\theta \sim p*{\psi}}\left{F(\theta) \nabla\_{\psi} \log p\_{\psi}(\theta)\right}$$

我们用多元高斯分布来生成噪音，则可得到梯度

$$\nabla\_{\theta} \mathbb{E}*{c \sim N(0, I)} F(\theta+\sigma \epsilon)=\frac{1}{\sigma} \mathbb{E}*{c \sim N(0, I)}{F(\theta+\sigma \epsilon) \epsilon}$$

于是有算法1

![](/files/-LaNIJSZSwErA_aAwElP)

这里初始种群为带扰动的初始策略网络，评价函数视为环境的回报，基于评价函数用梯度下降产生下一代群体。

### 进化策略的扩展和并行化

ES非常适合扩展到许多并行工作者：1）它在完整的episode上运行，因此只需要进程之间的不频繁通信。 2）每个进程获得的唯一信息是episode的标量返回：如果我们在优化之前在进程之间同步随机种子，每个进程都知道其他进程使用了什么扰动，因此每个进程只需要与另一个进程之间传递单个标量同意参数更新。3 )它不需要值函数近似。具有值函数估计的RL本质上是连续的:为了改进给定的策略，通常需要对值函数进行多次更新来获得足够的信号。因此该算法可以有效的扩展到上千个工作进程。

![](/files/-LaNIJSah6nhh2FDe0bl)

ES的探索由参数扰动驱动，对于ES来改进参数 $$θ$$ ，种群中的一些成员必须获得比其他成员更好的回报：即高斯扰动向量偶尔导致新的个体 $$\theta+\sigma \epsilon$$ 具有更好的回报是至关重要的。

对于Atari环境，我们发现DeepMind的卷积体系结构上的高斯参数扰动并不总能导致充分的探索：对于某些环境，随机扰动的参数倾向于编码总是采取一种特定反应的策略，而不管 作为输入的状态。 但是，我们发现通过在策略规范中使用虚拟批量规范化，我们可以匹配大多数游戏的策略梯度方法的性能。

### 参数空间中的平滑 vs 动作空间中的平滑

RL的一大困难来源于缺乏策略的信息梯度：这种梯度可能由于环境或策略的不平滑而不存在，或者可能只能作为高方差估计来获得，因为环境通常只能通过采样来访问。令 $$\mathbf{a}=\left{a\_{1}, \dots, a\_{T}\right}$$ ，其中 $$a\_{t}=\pi(s ; \theta)$$， 则我们的优化目标为 $$F(\theta)=R(\mathbf{a}(\theta))$$ 。

因为允许动作是离散的，并且允许策略是确定性的， $$F(\theta)$$ 可能是非平滑的；更重要的是，因为我们不能明确地访问决策问题的潜在状态转移函数，梯度不能用类似反向传播的算法来计算。为了使问题变得平滑并有一种方法来估计它的梯度，我们需要添加噪声。

策略梯度方法在动作空间添加噪音 $$\epsilon$$ ，所以目标函数为 $$F\_{P G}(\theta)=\mathbb{E}\_{\epsilon} R(\mathbf{a}(\epsilon, \theta))$$ ，梯度为

$$
\nabla\_{\theta} F\_{P G}(\theta)=\mathbb{E}*{\epsilon}\left{R(\mathbf{a}(\epsilon, \theta)) \nabla*{\theta} \log p(\mathbf{a}(\epsilon, \theta) ; \theta)\right}
$$

对于进化策略，这里使用的方法是基于参数扰动的噪音，即参数 $$\tilde{\theta}=\theta+\xi$$ ，$$a\_{t}=\mathbf{a}(\xi, \theta)=\pi(s ; \tilde{\theta})$$

$$
\nabla\_{\theta} F\_{E S}(\theta)=\mathbb{E}*{\xi}\left{R(\mathbf{a}(\xi, \theta)) \nabla*{\theta} \log p(\tilde{\theta}(\xi, \theta) ; \theta)\right}
$$


---

# Agent Instructions: Querying This Documentation

If you need additional information that is not directly available in this page, you can query the documentation dynamically by asking a question.

Perform an HTTP GET request on the current page URL with the `ask` query parameter:

```
GET https://hujian.gitbook.io/deep-reinforcement-learning/fang-fa/jie-ji-you-xi/es.md?ask=<question>
```

The question should be specific, self-contained, and written in natural language.
The response will contain a direct answer to the question and relevant excerpts and sources from the documentation.

Use this mechanism when the answer is not explicitly present in the current page, you need clarification or additional context, or you want to retrieve related documentation sections.
