Skip to content
体验新版
项目
组织
正在加载...
登录
切换导航
打开侧边栏
大唐爆破僧
apachecn-dl-zh
提交
264e6d0a
A
apachecn-dl-zh
项目概览
大唐爆破僧
/
apachecn-dl-zh
与 Fork 源项目一致
Fork自
OpenDocCN / apachecn-dl-zh
通知
1
Star
0
Fork
0
代码
文件
提交
分支
Tags
贡献者
分支图
Diff
Issue
0
列表
看板
标记
里程碑
合并请求
0
Wiki
0
Wiki
分析
仓库
DevOps
项目成员
Pages
A
apachecn-dl-zh
项目概览
项目概览
详情
发布
仓库
仓库
文件
提交
分支
标签
贡献者
分支图
比较
Issue
0
Issue
0
列表
看板
标记
里程碑
合并请求
0
合并请求
0
Pages
分析
分析
仓库分析
DevOps
Wiki
0
Wiki
成员
成员
收起侧边栏
关闭侧边栏
动态
分支图
创建新Issue
提交
Issue看板
体验新版 GitCode,发现更多精彩内容 >>
提交
264e6d0a
编写于
1月 23, 2021
作者:
W
wizardforcel
浏览文件
操作
浏览文件
下载
电子邮件补丁
差异文件
2021-01-23 12:03:43
上级
c1977733
变更
1
隐藏空白更改
内联
并排
Showing
1 changed file
with
23 addition
and
21 deletion
+23
-21
new/rl-tf/04.md
new/rl-tf/04.md
+23
-21
未找到文件。
new/rl-tf/04.md
浏览文件 @
264e6d0a
...
@@ -181,11 +181,11 @@ Episode T
...
@@ -181,11 +181,11 @@ Episode T
每个
`Episode T`
都以以下初始化开始:
每个
`Episode T`
都以以下初始化开始:
*
对于所有状态
`s`
,合格分数
`e(s) = 0`
*
对于所有状态
`s`
,合格分数
`e(s) = 0`
*
对于所有状态
`s`
,给定
`Episode T`
中的状态值
!
[](
img/96757d13-12cc-4ae2-b27b-1b8383db5a88.png
)
等于!
[](
img/4ba99034-9dea-402d-871b-ac5949e7b310.png
)
*
对于所有状态
`s`
,给定
`Episode T`
中的状态值
`V[T](s)`
等于
`V[T-1](s)`
在情节的每个时间步,即当前步
`t`
,我们更新要离开的状态
!
[](
img/93bfad9d-15d6-48dc-8f47-8f9aef8070ba.png
)
的资格,然后为所有状态更新以下内容:
在情节的每个时间步,即当前步
`t`
,我们更新要离开的状态
`s[t-1]`
的资格,然后为所有状态更新以下内容:
*
针对当前离开状态
!
[](
img/3c8ca4ff-4fda-4e46-bf29-46dd17cbb4de.png
)
(即!
[](
img/a11db6ce-2582-4ac7-89d7-d7c972b0ec78.png
)
)和要更改其值的状态的合格分数!
[](
img/9d156535-7cde-4d47-827f-877259ece162.png
)
使用时间差误差的状态值函数
*
针对当前离开状态
`s[t-1]`
(即
`r[t] + γ V[T-1](s[t]) + V[T-1](s[t-1])`
)和要更改其值的状态的合格分数
`e(s)`
使用时间差误差的状态值函数
*
通过给定折扣系数进行折扣的资格分数
*
通过给定折扣系数进行折扣的资格分数
由于这些更新针对所有状态独立发生,因此可以针对所有状态并行执行这些操作。
由于这些更新针对所有状态独立发生,因此可以针对所有状态并行执行这些操作。
...
@@ -202,7 +202,7 @@ Episode T
...
@@ -202,7 +202,7 @@ Episode T
![](
img/49b93224-b17b-4deb-b5cf-bf76e9eb19db.png
)
![](
img/49b93224-b17b-4deb-b5cf-bf76e9eb19db.png
)
在基于结果的模型中,这是不正确的,在该模型中,我们不使用状态估计值
!
[](
img/26066305-bae0-4820-be46-b1b21dcfaa41.png
)
,而是使用整个奖励序列,直到事件结束为止。 因此,在蒙特卡洛方法基于结果的模型的情况下,值函数由以下公式给出:
在基于结果的模型中,这是不正确的,在该模型中,我们不使用状态估计值
`V[T](s[t])`
,而是使用整个奖励序列,直到事件结束为止。 因此,在蒙特卡洛方法基于结果的模型的情况下,值函数由以下公式给出:
![](
img/24c5dac2-f8c8-45a1-b87c-bf33254da2aa.png
)
![](
img/24c5dac2-f8c8-45a1-b87c-bf33254da2aa.png
)
...
@@ -220,14 +220,14 @@ Episode T
...
@@ -220,14 +220,14 @@ Episode T
```
```
因此,这里我们仅使用时间差误差
!
[](
img/bbe74c85-c403-4b25-bf57-53e9fd7a9692.png
)
更新当前离开状态!
[](
img/187fe806-bcca-4c11-8794-13c5058b5cf7.png
)
的值函数。
因此,这里我们仅使用时间差误差
`r[t] + γ V[T-1](s[t]) + V[T-1](s[t-1])`
更新当前离开状态
`s[t-1]`
的值函数。
#
TD
规则
#
`TD(λ)`
规则
`TD(1)`
和
`TD(0)`
规则产生一个通用规则,即
`TD(λ)`
,因此对于
!
[](
img/4b1123cb-72a4-481e-81e9-6835853ffc68.png
)
并应满足以下条件:
`TD(1)`
和
`TD(0)`
规则产生一个通用规则,即
`TD(λ)`
,因此对于
`λ ∈ [0, 1]`
并应满足以下条件:
*
如果
!
[](
img/d6400b9d-6c9e-4370-b506-ff40da00344d.png
)
= 0
,则
`TD(λ)`
趋于
`TD(0)`
*
如果
`λ = 0`
,则
`TD(λ)`
趋于
`TD(0)`
*
如果
!
[](
img/d6400b9d-6c9e-4370-b506-ff40da00344d.png
)
= 1
,则
`TD(λ)`
趋于
`TD(1)`
*
如果
`λ = 1`
,则
`TD(λ)`
趋于
`TD(1)`
`TD(0)`
和
`TD(1)`
都基于时间连续预测之间的差异进行更新。
`TD(0)`
和
`TD(1)`
都基于时间连续预测之间的差异进行更新。
...
@@ -242,11 +242,11 @@ Episode T
...
@@ -242,11 +242,11 @@ Episode T
```
```
这满足前面两个条件,并且可以合并
!
[](
img/4b1123cb-72a4-481e-81e9-6835853ffc68.png
)
的任何值。
这满足前面两个条件,并且可以合并
`λ ∈ [0, 1]`
的任何值。
# 策略梯度
# 策略梯度
根据策略梯度定理,对于先前指定的策略目标函数和任何可微分策略
!
[](
img/20afea81-2790-4090-9aa2-1760249c17fd.png
)
,策略梯度如下:
根据策略梯度定理,对于先前指定的策略目标函数和任何可微分策略
`π[θ](s, a)`
,策略梯度如下:
![](
img/406f3ccb-146a-485c-b05a-89a8f4d935cd.png
)
![](
img/406f3ccb-146a-485c-b05a-89a8f4d935cd.png
)
...
@@ -254,7 +254,7 @@ Episode T
...
@@ -254,7 +254,7 @@ Episode T
# 蒙特卡洛策略梯度
# 蒙特卡洛策略梯度
在
**蒙特卡洛策略梯度**
方法中,我们使用随机梯度上升方法更新参数,并按照策略梯度定理进行更新,并使用
!
[](
img/1181ceb5-bd76-4d0f-9b7c-d232ea3145ff.png
)
作为!
[](
img/7b469909-8042-48f5-a02f-8b3131c036b6.png
)
的无偏样本。 在此,!
[](
img/ac53328a-b0d7-4305-a938-3e4c23fc3c85.png
)
是从该时间步开始的累计奖励。
在
**蒙特卡洛策略梯度**
方法中,我们使用随机梯度上升方法更新参数,并按照策略梯度定理进行更新,并使用
`v[t]`
作为
`Q[π[θ]](s[t], a[t])`
的无偏样本。 在此,
`v[t]`
是从该时间步开始的累计奖励。
蒙特卡洛策略梯度法如下:
蒙特卡洛策略梯度法如下:
...
@@ -269,7 +269,7 @@ end for
...
@@ -269,7 +269,7 @@ end for
Output
:
final
Output
:
final
```
```
# 评论家算法
#
演员
评论家算法
先前使用蒙特卡洛策略梯度方法进行的策略优化导致较大的差异。 为了解决此问题,我们使用评论家来估计状态作用值函数,如下所示:
先前使用蒙特卡洛策略梯度方法进行的策略优化导致较大的差异。 为了解决此问题,我们使用评论家来估计状态作用值函数,如下所示:
...
@@ -278,19 +278,21 @@ Output: final
...
@@ -278,19 +278,21 @@ Output: final
这产生了著名的
**演员评论家算法**
。 顾名思义,演员评论家算法出于以下目的维护两个网络:
这产生了著名的
**演员评论家算法**
。 顾名思义,演员评论家算法出于以下目的维护两个网络:
*
一个网络充当评论者,它更新状态动作函数逼近器的权重
`w`
参数向量
*
一个网络充当评论者,它更新状态动作函数逼近器的权重
`w`
参数向量
*
其他网络充当演员,它根据批评者给出的方向更新策略参数向量
!
[](
img/49aece0d-9f5a-4d27-8ccc-13b01329f2de.png
)
*
其他网络充当演员,它根据批评者给出的方向更新策略参数向量
`θ`
下图代表了演员评论家算法:
下图代表了演员评论家算法:
![](
img/ca78b5e5-1459-4f34-ad61-de744f663054.png
)
![](
img/ca78b5e5-1459-4f34-ad61-de744f663054.png
)
因此,在执行者批评算法的情况下,实际策略梯度公式中的真实状态作用值函数
!
[](
img/091617b0-180f-4323-8f54-6ccc8001c015.png
)
被替换为近似状态作用值函数!
[](
img/a764a644-e5f7-46ab-88f8-999b59a38cc6.png
)
。 因此:
因此,在执行者批评算法的情况下,实际策略梯度公式中的真实状态作用值函数
`Q[π[θ]](s, a)`
被替换为近似状态作用值函数
`Q[w](s, a)`
。 因此:
![](
img/d8b7251d-91aa-4183-add1-5a5a0f9f8d0c.png
)
和
![](
img/d8b7251d-91aa-4183-add1-5a5a0f9f8d0c.png
)
并且:
![](
img/d9896c48-a57d-45e1-974e-3d9bed7c4af3.png
)
![](
img/d9896c48-a57d-45e1-974e-3d9bed7c4af3.png
)
因此,为了估计状态作用值函数,评论者网络使用
`TD(0)`
(先前讨论)来更新权重参数
`w`
,并更新策略参数向量
!
[](
img/86eb3024-7437-442e-b21a-1b2c1ccffbfc.png
)
演员网络使用策略梯度。 演员评论家算法的一种简单方法如下所示:
因此,为了估计状态作用值函数,评论者网络使用
`TD(0)`
(先前讨论)来更新权重参数
`w`
,并更新策略参数向量
`θ`
演员网络使用策略梯度。 演员评论家算法的一种简单方法如下所示:
```
py
```
py
Initialize
s
,
Initialize
s
,
...
@@ -322,7 +324,7 @@ Output : final
...
@@ -322,7 +324,7 @@ Output : final
![](
img/e4d88794-1d88-4b34-89cb-b726ea224273.png
)
![](
img/e4d88794-1d88-4b34-89cb-b726ea224273.png
)
在这里,
!
[](
img/f9d82ccb-5cc8-4e13-aee3-09e4de688a27.png
)
被称为
**优势函数**
!
[](
img/9431ca65-6206-44c7-960b-d75003b7db7f.png
)
。 因此,策略梯度公式变为:
在这里,
`Q[π[θ]](s, a) - A[π[θ]](s)`
被称为
**优势函数**
`A[π[θ]](s, a)`
。 因此,策略梯度公式变为:
![](
img/5b410fc8-1d5b-4a36-9250-730d1a651b86.png
)
![](
img/5b410fc8-1d5b-4a36-9250-730d1a651b86.png
)
...
@@ -387,11 +389,11 @@ end for
...
@@ -387,11 +389,11 @@ end for
| 上,上,下,下,下,下,上 | 输 | 坏 |
| 上,上,下,下,下,下,上 | 输 | 坏 |
| 下,上,上,下,上,上 | 赢 | 好 |
| 下,上,上,下,上,上 | 赢 | 好 |
因此,我们能够创建示例数据,在这些示例中,我们认为赢得的案例是该操作的正确标签。 因此,我们将增加这些动作的对数概率,即
!
[](
img/9870b991-5c5f-4c6f-9154-14acf670dbc1.png
)
,并且丢失每个动作的情况将被视为错误标签。 因此,在这些情况下,我们将减少这些操作的对数概率。
因此,我们能够创建示例数据,在这些示例中,我们认为赢得的案例是该操作的正确标签。 因此,我们将增加这些动作的对数概率,即
`log p(y[i], x[i])`
,并且丢失每个动作的情况将被视为错误标签。 因此,在这些情况下,我们将减少这些操作的对数概率。
因此,在收集了一批轨迹之后,我们将最大化优势与对数概率的乘积,即
!
[](
img/33fcf07a-587f-4876-a81d-6d77f467c7f7.png
)
因此,在收集了一批轨迹之后,我们将最大化优势与对数概率的乘积,即
`Σ[i] A[i] x log p(y[i], x[i])`
。
在此,
!
[](
img/67380edd-b86f-448f-a76c-9ac522a1c13b.png
)
是与状态操作对关联的优势。 优势是一个标量,它量化了操作最终的效果。 如果我们想在将来鼓励给定的行动,则!
[](
img/33f8b677-10bd-421d-aa20-94676af257a6.png
)
会很高,而如果我们想阻止该行动,则!
[](
img/33f8b677-10bd-421d-aa20-94676af257a6.png
)
会很低。 正优势使该状态的将来更有可能发生该行为,而负优势使该状态的将来不太可能发生该行为。
在此,
`A[i]`
是与状态操作对关联的优势。 优势是一个标量,它量化了操作最终的效果。 如果我们想在将来鼓励给定的行动,则
`A[i]`
会很高,而如果我们想阻止该行动,则
`A[i]`
会很低。 正优势使该状态的将来更有可能发生该行为,而负优势使该状态的将来不太可能发生该行为。
首先,我们将导入所需的重要依赖项,如下所示:
首先,我们将导入所需的重要依赖项,如下所示:
...
...
编辑
预览
Markdown
is supported
0%
请重试
或
添加新附件
.
添加附件
取消
You are about to add
0
people
to the discussion. Proceed with caution.
先完成此消息的编辑!
取消
想要评论请
注册
或
登录