From bd2f8db8b2f122282ac473c31cb00d43656fe282 Mon Sep 17 00:00:00 2001 From: wizardforcel <562826179@qq.com> Date: Fri, 8 Jan 2021 22:01:41 +0800 Subject: [PATCH] 2021-01-08 22:01:41 --- new/adv-dl-tf2-keras/10.md | 112 ++++++++++++++++++++++++------------- 1 file changed, 72 insertions(+), 40 deletions(-) diff --git a/new/adv-dl-tf2-keras/10.md b/new/adv-dl-tf2-keras/10.md index 274e9124..653ded5b 100644 --- a/new/adv-dl-tf2-keras/10.md +++ b/new/adv-dl-tf2-keras/10.md @@ -211,36 +211,48 @@ REINFORCE 算法可以通过从收益`δ = R[t] - B(s[t])`中减去基线来概 ![](img/B14853_10_069.png) (Equation 10.3.1) -“公式 10.3.1”隐含![](img/B14853_10_070.png),因为![](img/B14853_10_067.png)不是![](img/B14853_10_072.png)的函数。 尽管引入基准不会改变期望值,但会减小梯度更新的方差。 方差的减少通常会加速学习。 +“公式 10.3.1”隐含`E[π] [B(s[t]) ᐁ[θ] ln π(a[t] | s[t], θ)] = 0`,因为`B(s[t])`不是`a[t]`的函数。 尽管引入基准不会改变期望值,但会减小梯度更新的方差。 方差的减少通常会加速学习。 -在大多数情况下,我们使用值函数![](img/B14853_10_073.png)作为基准。 如果收益被高估,则比例系数将通过值函数成比例地减小,从而导致较低的方差。 值函数也已参数化![](img/B14853_10_074.png),并与策略网络一起进行了训练。 在连续动作空间中,状态值可以是状态特征的线性函数: +在大多数情况下,我们使用值函数`B(s[t]) = V(s[t])`作为基准。 如果收益被高估,则比例系数将通过值函数成比例地减小,从而导致较低的方差。 值函数也已参数化`V(s[t]) = V(s[t]; θ[v])`,并与策略网络一起进行了训练。 在连续动作空间中,状态值可以是状态特征的线性函数: ![](img/B14853_10_075.png) (Equation 10.3.2) -“算法 10.3.1”用基线方法[1]总结了 REINFORCE。 这与 REINFORCE 相似,只不过将返回值替换为![](img/B14853_10_076.png)。 区别在于我们现在正在训练两个神经网络。 +“算法 10.3.1”用基线方法[1]总结了 REINFORCE。 这与 REINFORCE 相似,只不过将返回值替换为`δ`。 区别在于我们现在正在训练两个神经网络。 算法 10.3.1 带基线的 REINFORCE -*要求*:可微分的参数化目标策略网络![](img/B14853_10_029.png)。 +*要求*:可微分的参数化目标策略网络`π(a[t] | s[t], θ)`。 -*要求*:可微分的参数化值网络![](img/B14853_10_078.png)。 +*要求*:可微分的参数化值网络`V(s[t], θ[v])`。 -*要求*:折现因子![](img/B14853_10_013.png),性能梯度的学习率![](img/B14853_10_080.png)和值梯度![](img/B14853_10_081.png)的学习率。 +*要求*:折现因子`γ ∈ [0, 1]`,性能梯度的学习率`α`和值梯度`α[v]`的学习率。 -*要求*:![](img/B14853_10_082.png),初始策略网络参数(例如,![](img/B14853_10_058.png))。 ![](img/B14853_10_084.png),初始值网络参数(例如![](img/B14853_10_085.png))。 +*要求*:`θ[0]`,初始策略网络参数(例如,`θ[0] -> 0`)。 `θ[v0]`,初始值网络参数(例如`θ[v0] -> 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], ..., a[T-1]a[T-1]r[T]s[T])`。 3. 对于步骤`t = 0, ..., T - 1`,执行: -4. 计算返回值![](img/B14853_10_062.png)。 -5. 减去基线![](img/B14853_10_090.png)。 -6. 计算折现值梯度![](img/B14853_10_091.png)。 -7. 执行梯度上升![](img/B14853_10_092.png)。 -8. 计算折扣的性能梯度![](img/B14853_10_093.png)。 +4. 计算返回值: -1. 执行梯度上升![](img/B14853_10_064.png)。 + ![](img/B14853_10_062.png) +5. 减去基线: -如图“图 10.3.1”所示,除了策略网络![](img/B14853_10_095.png)之外,价值网络![](img/B14853_10_096.png)也同时受到训练。 通过性能梯度![](img/B14853_10_097.png)更新策略网络参数,而通过梯度![](img/B14853_10_098.png)调整值网络参数。 由于 REINFORCE 是蒙特卡罗算法,因此值函数训练也是蒙特卡罗算法。 + ![](img/B14853_10_090.png) +6. 计算折现值梯度: + + ![](img/B14853_10_091.png) +7. 执行梯度上升: + + ![](img/B14853_10_092.png) +8. 计算折扣的性能梯度: + + ![](img/B14853_10_093.png) + +1. 执行梯度上升: + + ![](img/B14853_10_064.png) + +如图“图 10.3.1”所示,除了策略网络`π(θ)`之外,价值网络`V(θ)`也同时受到训练。 通过性能梯度`ᐁJ(θ)`更新策略网络参数,而通过梯度`ᐁV(θ[v])`调整值网络参数。 由于 REINFORCE 是蒙特卡罗算法,因此值函数训练也是蒙特卡罗算法。 学习率不一定相同。 请注意,价值网络也在执行梯度上升。 @@ -322,37 +334,47 @@ class REINFORCEBaselineAgent(REINFORCEAgent): 在带有基线的 REINFORCE 方法中,该值用作基线。 它不用于训练值功能。 在本节中,我们介绍 REINFORCE 与基线的变化,称为演员评论家方法。 政策和价值网络扮演着参与者和批评者网络的角色。 策略网络是参与者决定给定状态时要采取的操作。 同时,价值网络评估参与者或政策网络做出的决策。 -价值网络充当批评者的角色,可以量化参与者所选择的行动的好坏。 价值网络通过将状态值![](img/B14853_10_099.png)与收到的奖励![](img/B14853_10_100.png)和观察到的下一个状态![](img/B14853_10_101.png)的折现值之和来评估状态值。 差异![](img/B14853_10_102.png)表示为: +价值网络充当批评者的角色,可以量化参与者所选择的行动的好坏。 价值网络通过将状态值`V(s, θ[v]`与收到的奖励`r`和观察到的下一个状态`γV(s', θ[v])`的折现值之和来评估状态值。 差异`δ`表示为: ![](img/B14853_10_103.png) (Equation 10.4.1) -为了简单起见,我们在中删除了`r`和`s`的下标。“公式 10.4.1”类似于“第 9 章”,“深度强化学习”中讨论的 Q 学习中的时间差异。 下一个状态值被![](img/B14853_10_104.png)折现。估计遥远的未来奖励很困难。 因此,我们的估计仅基于近期![](img/B14853_10_105.png)。 这就是*自举*技术。 +为了简单起见,我们在中删除了`r`和`s`的下标。“公式 10.4.1”类似于“第 9 章”,“深度强化学习”中讨论的 Q 学习中的时间差异。 下一个状态值被`γ = [0.0, 1.0]`折现。估计遥远的未来奖励很困难。 因此,我们的估计仅基于近期`r + γV(s', θ[v])`。 这就是*自举*技术。 -自举技术和“公式 10.4.1”中状态表示的依赖性通常会加速学习并减少差异。 从“公式 10.4.1”,我们注意到价值网络评估了当前状态`s`=`s[t]`,这是由于策略网络的上一个操作![](img/B14853_10_106.png)。 同时,策略梯度基于当前动作![](img/B14853_10_107.png)。 从某种意义上说,评估延迟了一步。 +自举技术和“公式 10.4.1”中状态表示的依赖性通常会加速学习并减少差异。 从“公式 10.4.1”,我们注意到价值网络评估了当前状态`s = s[t]`,这是由于策略网络的上一个操作`a[t-1]`。 同时,策略梯度基于当前动作`a[t]`。 从某种意义上说,评估延迟了一步。 “算法 10.4.1”总结了演员评论家方法[1]。 除了评估用于训练政策和价值网络的国家价值评估外,还可以在线进行训练。 在每个步骤中,两个网络都经过训练。 这与 REINFORCE 和带有基线的 REINFORCE 不同,在基线之前,代理完成了一个情节。 首先,在当前状态的值估计期间向价值网络查询两次,其次,为下一个状态的值查询。 这两个值都用于梯度计算中。 **算法 10.4.1 演员评论家** -*要求*:可微分的参数化目标策略网络![](img/B14853_10_108.png)。 +*要求*:可微分的参数化目标策略网络`π(a | s, θ)`。 -*要求*:可微分的参数化值网络![](img/B14853_10_109.png)。 +*要求*:可微分的参数化值网络`V(s, θ[v])`。 -*要求*:折现因子![](img/B14853_10_110.png),性能梯度的学习率![](img/B14853_10_111.png)和值梯度![](img/B14853_10_112.png)的学习率。 +*要求*:折现因子`γ ∈ [0, 1]`,性能梯度的学习率`α`和值梯度`α[v]`的学习率。 -*要求*:![](img/B14853_10_082.png),初始策略网络参数(例如,![](img/B14853_10_058.png))。 ![](img/B14853_10_084.png),初始值网络参数(例如![](img/B14853_10_085.png))。 +*要求*:`θ[0]`,初始策略网络参数(例如,`θ[0] -> 0`)。 `θ[v0]`,初始值网络参数(例如`θ[v0] -> 0`)。 1. 重复。 2. 对于步骤`t = 0, ..., T - 1`,执行: -3. 对动作![](img/B14853_10_118.png)进行采样。 -4. 执行动作并观察奖励![](img/B14853_10_100.png)和下一个状态![](img/B14853_10_120.png)。 -5. 评估状态值估计![](img/B14853_10_121.png)。 -6. 计算折现值梯度![](img/B14853_10_122.png)。 -7. 执行梯度上升![](img/B14853_10_092.png)。 -8. 计算折现性能梯度![](img/B14853_10_124.png)。 -9. 执行梯度上升![](img/B14853_10_064.png)。 +3. 对动作`a ~ π(a | s, θ)`进行采样。 +4. 执行动作并观察奖励`r`和下一个状态`s'`。 +5. 评估状态值估计: + + ![](img/B14853_10_121.png) +6. 计算折现值梯度: + + ![](img/B14853_10_122.png) +7. 执行梯度上升: -1. ![](img/B14853_10_126.png) + ![](img/B14853_10_092.png) +8. 计算折现性能梯度: + + ![](img/B14853_10_124.png) +9. 执行梯度上升: + + ![](img/B14853_10_064.png) + +1. `s = s'` “图 10.4.1”显示了演员评论家网络: @@ -444,24 +466,34 @@ A2C 的相应网络类似于“图 10.4.1”,因为我们仅更改了梯度计 **算法 10.5.1 优势演员评论家(A2C)** -*要求*:可微分的参数化目标策略网络![](img/B14853_10_029.png)。 +*要求*:可微分的参数化目标策略网络`π(a[t] | s[t], θ)`。 -*要求*:可微分的参数化值网络![](img/B14853_10_078.png)。 +*要求*:可微分的参数化值网络`V(s[t], θ[v])`。 -*要求*:折现因子![](img/B14853_10_013.png),性能梯度的学习率![](img/B14853_10_111.png),值梯度的学习率![](img/B14853_10_112.png)和熵权![](img/B14853_10_137.png)。 +*要求*:折现因子`γ ∈ [0, 1]`,性能梯度的学习率`α`,值梯度的学习率`α[v]`和熵权`β`。 -*要求*:![](img/B14853_10_082.png),初始策略网络参数(例如,![](img/B14853_10_058.png))。 ![](img/B14853_10_084.png),初始值网络参数(例如![](img/B14853_10_085.png))。 +*要求*:`θ[0]`,初始策略网络参数(例如,`θ[0] -> 0`)。 `θ[v0]`,初始值网络参数(例如`θ[v0] -> 0`)。 1. 重复。 -2. 通过跟随![](img/B14853_10_029.png)来生成情节(![](img/B14853_10_142.png))。 +2. 通过跟随`π(a[t] | s[t], θ)`来生成剧集`(s[0]a[0]r[1]s[1], s[1]a[1]r[2]s[2], ..., a[T-1]a[T-1]r[T]s[T])`。 3. ![](img/B14853_10_144.png) 4. 对于步骤`t = 0, ..., T - 1`,执行: -5. 计算返回值![](img/B14853_10_146.png)。 -6. 计算值梯度![](img/B14853_10_147.png)。 -7. 累积梯度![](img/B14853_10_092.png)。 -8. 计算性能梯度![](img/B14853_10_149.png)。 +5. 计算返回值: + + ![](img/B14853_10_146.png) +6. 计算值梯度: + + ![](img/B14853_10_147.png)。 +7. 累积梯度: + + ![](img/B14853_10_092.png)。 +8. 计算性能梯度: + + ![](img/B14853_10_149.png)。 + +1. 执行梯度上升: -1. 执行梯度上升![](img/B14853_10_064.png)。 + ![](img/B14853_10_064.png) “列表 10.5.1”显示了`A2CAgent`类,该类在`tf.keras`中实现了“算法 10.5.1”。 与两个 REINFORCE 方法不同,返回值是从最后一个体验单元或状态到第一个体验单元或状态的计算得出的。 在每个体验单元,通过调用各自模型的`fit()`方法,优化第 7 行和第 9 行中用于目标和价值函数`logp_model`和`value_model`的网络。 注意,在对象实例化期间,熵损失的`beta`或权重设置为`0.9`,以指示将使用熵损失函数。 此外,使用 MSE 损失功能训练`value_model`。 -- GitLab