提交 cbd8664e 编写于 作者: W wizardforcel

2021-01-08 21:28:06

上级 11b68f62
......@@ -18,7 +18,7 @@
# 1.政策梯度定理
如“第 9 章”,“深度强化学习”中所讨论的,代理位于环境中,处于状态`s[t]`中,它是状态空间`S`的一个元素。 状态空间![](img/B14853_10_001.png)可以是离散的,也可以是连续的。 代理通过遵循策略![](img/B14853_10_005.png)从动作空间![](img/B14853_10_004.png)采取动作![](img/B14853_10_003.png)。 ![](img/B14853_10_004.png)可以是离散的或连续的。 作为执行动作![](img/B14853_10_003.png)的结果,代理会收到奖励`r[t + 1]`,并且环境转换为新状态`s[t + 1]`。 新状态仅取决于当前状态和操作。 代理的目标是学习一种最佳策略![](img/B14853_10_008.png),该策略可最大化所有状态的回报:
如“第 9 章”,“深度强化学习”中所讨论的,代理位于环境中,处于状态`s[t]`中,它是状态空间`S`的一个元素。 状态空间`S`可以是离散的,也可以是连续的。 代理通过遵循策略`π(a[t], s[t])`从动作空间`A`采取动作`a[t]``A`可以是离散的或连续的。 作为执行动作`a[t]`的结果,代理会收到奖励`r[t + 1]`,并且环境转换为新状态`s[t + 1]`。 新状态仅取决于当前状态和操作。 代理的目标是学习一种最佳策略`π*`,该策略可最大化所有状态的回报:
![](img/B14853_10_009.png) (Equation 9.1.1)
......@@ -26,47 +26,47 @@
![](img/B14853_10_010.png) (Equation 9.1.2)
根据“公式 9.1.2”,还可以通过遵循策略![](img/B14853_10_011.png)将返回解释为给定状态的值。 从“公式 9.1.1”可以看出,与通常的![](img/B14853_10_012.png)相比,与立即奖励相比,未来奖励的权重较低。
根据“公式 9.1.2”,还可以通过遵循策略`π`将返回解释为给定状态的值。 从“公式 9.1.1”可以看出,与通常的`γ^k < 1.0`相比,与立即奖励相比,未来奖励的权重较低。
到目前为止,我们仅考虑通过优化基于值的函数![](img/B14853_10_014.png)来学习策略。
到目前为止,我们仅考虑通过优化基于值的函数`Q(s, a)`来学习策略。
本章的目标是通过参数化![](img/B14853_10_015.png)直接学习该策略。 通过参数化,我们可以使用神经网络来学习策略功能。
本章的目标是通过参数化`π(a[t] | s[t]) -> π(a[t] | s[t], θ)`直接学习该策略。 通过参数化,我们可以使用神经网络来学习策略功能。
学习策略意味着我们将最大化某个目标函数![](img/B14853_10_016.png),这是相对于参数![](img/B14853_10_017.png)的一种性能度量。在间歇式强化学习中,性能度量是起始状态的值。 在连续的情况下,目标函数是平均奖励率。
学习策略意味着我们将最大化某个目标函数`J(θ)`,这是相对于参数`θ`的一种性能度量。在间歇式强化学习中,性能度量是起始状态的值。 在连续的情况下,目标函数是平均奖励率。
通过执行梯度上升来最大化目标函数![](img/B14853_10_016.png)。 在梯度上升中,梯度更新是在要优化的函数的导数方向上。 到目前为止,我们的所有损失函数都通过最小化或通过执行梯度下降进行了优化。 稍后,在`tf.keras`实现中,我们将看到可以通过简单地否定目标函数并执行梯度下降来执行梯度上升。
通过执行梯度上升来最大化目标函数`J(θ)`。 在梯度上升中,梯度更新是在要优化的函数的导数方向上。 到目前为止,我们的所有损失函数都通过最小化或通过执行梯度下降进行了优化。 稍后,在`tf.keras`实现中,我们将看到可以通过简单地否定目标函数并执行梯度下降来执行梯度上升。
直接学习策略的好处是它可以应用于离散和连续动作空间。 对于离散的动作空间:
![](img/B14853_10_019.png) (Equation 10.1.1)
其中![](img/B14853_10_020.png)是第`i`个动作。 ![](img/B14853_10_020.png)可以是神经网络的预测或状态作用特征的线性函数:
其中`a[i]`是第`i`个动作。 `a[i]`可以是神经网络的预测或状态作用特征的线性函数:
![](img/B14853_10_022.png) (Equation 10.1.2)
![](img/B14853_10_023.png)是将状态操作转换为特征的任何功能,例如编码器。
`φ(s[t], a[i])`是将状态操作转换为特征的任何功能,例如编码器。
![](img/B14853_10_024.png)确定每个![](img/B14853_10_020.png)的概率。 例如,在上一章中的柱杆平衡问题中,目标是通过沿二维轴向左或向右移动柱车来保持柱子直立。 在这种情况下,![](img/B14853_10_026.png)和![](img/B14853_10_027.png)分别是左右移动的概率。 通常,代理以最高概率![](img/B14853_10_028.png)采取行动。
`π(a[t] | s[t], θ)`确定每个`a[i]`的概率。 例如,在上一章中的柱杆平衡问题中,目标是通过沿二维轴向左或向右移动柱车来保持柱子直立。 在这种情况下,`a[0]``a[1]`分别是左右移动的概率。 通常,代理以最高概率`a[t] = max[i] π(a[t] | s[t], θ)`采取行动。
对于连续动作空间,![](img/B14853_10_029.png)根据给定状态的概率分布对动作进行采样。 例如,如果连续动作空间在![](img/B14853_10_030.png)范围内,则![](img/B14853_10_029.png)通常是高斯分布,其均值和标准差由策略网络预测。 预测动作是来自此高斯分布的样本。 为了确保不会生成任何无效的预测,该操作将被限制在 -1.0 和 1.0 之间。
对于连续动作空间,`π(a[t] | s[t], θ)`根据给定状态的概率分布对动作进行采样。 例如,如果连续动作空间在`a[t] ∈ [-1.0, 1.0]`范围内,则`π(a[t] | s[t], θ)`通常是高斯分布,其均值和标准差由策略网络预测。 预测动作是来自此高斯分布的样本。 为了确保不会生成任何无效的预测,该操作将被限制在 -1.0 和 1.0 之间。
正式地,对于连续的动作空间,该策略是高斯分布的样本:
![](img/B14853_10_032.png) (Equation 10.1.3)
平均值![](img/B14853_10_033.png)和标准偏差![](img/B14853_10_034.png)都是状态功能的函数:
平均值`μ`和标准偏差`σ`都是状态功能的函数:
![](img/B14853_10_035.png) (Equation 10.1.4)
![](img/B14853_10_036.png) (Equation 10.1.5)
![](img/B14853_10_037.png)是将状态转换为其功能的任何功能。 ![](img/B14853_10_038.png)是确保标准偏差为正值的`softplus`功能。 实现状态特征功能![](img/B14853_10_037.png)的一种方法是使用自编码器网络的编码器。 在本章的最后,我们将训练一个自编码器,并将编码器部分用作状态功能。 因此,训练策略网络是优化参数的问题![](img/B14853_10_040.png)
`φ(s[i])`是将状态转换为其功能的任何功能。 `ζ(x) = log(1 + e^x)`是确保标准偏差为正值的`softplus`功能。 实现状态特征功能`φ(s[t])`的一种方法是使用自编码器网络的编码器。 在本章的最后,我们将训练一个自编码器,并将编码器部分用作状态功能。 因此,训练策略网络是优化参数的问题`θ = [θ[μ], θ[σ]]`
给定连续可微分的策略函数![](img/B14853_10_029.png),策略梯度可以计算为:
给定连续可微分的策略函数`π(a[t] | s[t], θ)`,策略梯度可以计算为:
![](img/B14853_10_042.png) (Equation 10.1.6)
“公式 10.1.6”也被称为*策略梯度定理*。 它适用于离散和连续动作空间。 根据通过 Q 值缩放的策略操作采样的自然对数,可以计算出相对于参数![](img/B14853_10_043.png)的梯度。“公式 10.1.6”利用了自然对数![](img/B14853_10_044.png)的特性。
“公式 10.1.6”也被称为*策略梯度定理*。 它适用于离散和连续动作空间。 根据通过 Q 值缩放的策略操作采样的自然对数,可以计算出相对于参数`θ`的梯度。“公式 10.1.6”利用了自然对数`ᐁx/x = ᐁlnx`的特性。
策略梯度定理在某种意义上是直观的,即性能梯度是根据目标策略样本估算的,并且与策略梯度成比例。 策略梯度由 Q 值缩放,以鼓励对状态值产生积极贡献的行动。 梯度还与动作概率成反比,以惩罚对提高性能没有贡献的频繁发生的动作。
......@@ -88,27 +88,27 @@
![](img/B14853_10_045.png) (Equation 10.2.1)
其中`R[t]`是返回值,如“公式 9.1.2”所定义。`R[t]`是策略梯度定理中![](img/B14853_10_046.png)的无偏样本。
其中`R[t]`是返回值,如“公式 9.1.2”所定义。`R[t]`是策略梯度定理中`Q^π(s[t], a[t])`的无偏样本。
“算法 10.2.1”总结了 REINFORCE 算法[2]。 REINFORCE 是一种蒙特卡洛算法。 它不需要环境动态知识(换句话说,无需模型)。 仅需要经验样本![](img/B14853_10_047.png)来优化策略网络![](img/B14853_10_029.png)的参数。 折扣因子![](img/B14853_10_049.png)考虑到奖励随着步数增加而降低的事实。 梯度被![](img/B14853_10_050.png)打折。 在后续步骤中采用的梯度贡献较小。 学习率![](img/B14853_10_051.png)是梯度更新的比例因子。
“算法 10.2.1”总结了 REINFORCE 算法[2]。 REINFORCE 是一种蒙特卡洛算法。 它不需要环境动态知识(换句话说,无需模型)。 仅需要经验样本`(s[i], a[i], r[i+1], s[i+1])`来优化策略网络`π(a[t] | s[t])`的参数。 折扣因子`γ`考虑到奖励随着步数增加而降低的事实。 梯度被`γ^k`打折。 在后续步骤中采用的梯度贡献较小。 学习率`α`是梯度更新的比例因子。
通过使用折现梯度和学习率执行梯度上升来更新参数。 作为蒙特卡洛算法,REINFORCE 要求代理在处理渐变更新之前先完成一集。 同样由于其蒙特卡洛性质,REINFORCE 的梯度更新具有高方差的特征。
**算法 10.2.1 REINFORCE**
*要求*:可区分的参数化目标策略网络![](img/B14853_10_029.png)
*要求*:可区分的参数化目标策略网络`π(a[t] | s[t], θ)`
*要求*:折扣因子,![](img/B14853_10_013.png)和学习率![](img/B14853_10_051.png)。 例如,![](img/B14853_10_055.png)和![](img/B14853_10_056.png)
*要求*:折扣因子,`γ = [0, 1]`和学习率`α`。 例如,`γ = 0.99``α = 1e - 3`
*要求*![](img/B14853_10_057.png),初始策略网络参数(例如,![](img/B14853_10_058.png))。
*要求*`θ[0]`,初始策略网络参数(例如,`θ[0] -> 0`)。
1. 重复。
2. 通过跟随![](img/B14853_10_029.png)来生成剧集![](img/B14853_10_059.png)
2. 通过跟随`π(a[t] | s[t], θ)`来生成剧集`(s[0]a[0]r[1]s[1], s[1]a[1]r[2]s[2], ..., s[T-1]a[T-1]r[T]s[T])`
3. 对于步骤`t = 0, ..., T - 1`,执行:
4. 计算返回值![](img/B14853_10_062.png)
5. 计算折扣的性能梯度![](img/B14853_10_063.png)
4. 计算返回值`R[t] = Σ γ^t r[t+k], k = 0, ..., T`
5. 计算折扣的性能梯度`ᐁJ(θ) = r^t R[t] ᐁ[θ] ln π(a[t] | s[t], θ)`
1. 执行梯度上升![](img/B14853_10_064.png)
1. 执行梯度上升`θ = θ + αᐁJ(θ)`
在 REINFORCE 中,可以通过神经网络对参数化策略进行建模,如图“图 10.2.1”所示:
......@@ -116,7 +116,7 @@
图 10.2.1:策略网络
如上一节中讨论的,在连续动作空间的情况下,状态输入被转换为特征。 状态功能是策略网络的输入。 代表策略功能的高斯分布具有均值和标准差,均是状态特征的函数。 根据状态输入的性质,策略网络![](img/B14853_10_065.png)可以是 MLP,CNN 或 RNN。 预测的动作只是策略功能的样本。
如上一节中讨论的,在连续动作空间的情况下,状态输入被转换为特征。 状态功能是策略网络的输入。 代表策略功能的高斯分布具有均值和标准差,均是状态特征的函数。 根据状态输入的性质,策略网络`π(θ)`可以是 MLP,CNN 或 RNN。 预测的动作只是策略功能的样本。
“列表 10.2.1”显示了`REINFORCEAgent` 类,该类在`tf.keras`中实现了“算法 10.2.1”。 `train_by_episode()`在情节完成后调用,以计算每个步骤的回报。 `train()`通过针对目标函数`logp_model`优化网络来执行“算法 10.2.1”的第 5 行和第 6 行。 父类`PolicyAgent`在本章介绍的四种策略梯度方法的算法中实现了的通用代码。 在讨论所有策略梯度方法之后,将介绍`PolicyAgent`
......@@ -207,7 +207,7 @@ class REINFORCEAgent(PolicyAgent):
# 3.用基线方法加强
REINFORCE 算法可以通过从收益![](img/B14853_10_066.png)中减去基线来概括。 基线函数![](img/B14853_10_067.png)可以是任何函数,只要它不依赖![](img/B14853_10_068.png)即可。 基线不会改变性能梯度的期望:
REINFORCE 算法可以通过从收益`δ = R[t] - B(s[t])`中减去基线来概括。 基线函数`B(s[t])`可以是任何函数,只要它不依赖`a[t]`即可。 基线不会改变性能梯度的期望:
![](img/B14853_10_069.png) (Equation 10.3.1)
......
Markdown is supported
0% .
You are about to add 0 people to the discussion. Proceed with caution.
先完成此消息的编辑!
想要评论请 注册