Skip to content
体验新版
项目
组织
正在加载...
登录
切换导航
打开侧边栏
D_ACMER
apachecn-dl-zh
提交
86ec4895
A
apachecn-dl-zh
项目概览
D_ACMER
/
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,发现更多精彩内容 >>
提交
86ec4895
编写于
1月 19, 2021
作者:
W
wizardforcel
浏览文件
操作
浏览文件
下载
电子邮件补丁
差异文件
2021-01-19 11:32:28
上级
e9c1289b
变更
3
隐藏空白更改
内联
并排
Showing
3 changed file
with
9 addition
and
9 deletion
+9
-9
new/pt-tut-17/11.md
new/pt-tut-17/11.md
+1
-1
new/pt-tut-17/34.md
new/pt-tut-17/34.md
+2
-2
new/pt-tut-17/35.md
new/pt-tut-17/35.md
+6
-6
未找到文件。
new/pt-tut-17/11.md
浏览文件 @
86ec4895
...
...
@@ -6,7 +6,7 @@
此实现使用 PyTorch 张量上的运算来计算正向传播,并使用 PyTorch autograd 来计算梯度。
在此实现中,我们实现了自己的自定义 autograd 函数来执行
\(
P_3'(x)
\)
。 通过数学,
\(
P_3'(x)= rac {3} {2}
\
left(5x ^ 2-1 ight)
\)
在此实现中,我们实现了自己的自定义 autograd 函数来执行
`P'[3](x)`
。 通过数学,
\(
P_3'(x)= rac {3} {2}
\
left(5x ^ 2-1 ight)
\)
```
py
import
torch
...
...
new/pt-tut-17/34.md
浏览文件 @
86ec4895
...
...
@@ -107,13 +107,13 @@ Q 学习的主要思想是,如果我们有一个函数\(Q ^ *:State \ time
\[\p
i^
*(s) = \arg\!\max_a \ Q^*
(s, a)
\]
但是,我们对世界一无所知,因此无法访问
\(
Q ^
* \)。 但是,由于神经网络是通用函数逼近器,因此我们可以简单地创建一个并将其训练为类似于\(Q ^ *
\)
的函数。
但是,我们对世界一无所知,因此无法访问
`Q*`
。 但是,由于神经网络是通用函数逼近器,因此我们可以简单地创建一个并将其训练为类似于
`Q*`
的函数。
对于我们的训练更新规则,我们将使用一个事实,即某些策略的每个
`Q`
函数都遵循 Bellman 方程:
\[
Q^{
\p
i}(s, a) = r +
\g
amma Q^{
\p
i}(s',
\p
i(s'))
\]
等式两侧之间的差异称为时间差异误差
\(\
delta
\)
:
等式两侧之间的差异称为时间差异误差
`delta`
:
\[\d
elta = Q(s, a) - (r +
\g
amma
\m
ax_a Q(s', a))
\]
...
...
new/pt-tut-17/35.md
浏览文件 @
86ec4895
...
...
@@ -311,9 +311,9 @@ class Mario(Mario): # subclassing for continuity
### 学习
Mario 在后台使用
[
DDQN 算法
](
https://arxiv.org/pdf/1509.06461
)
。 DDQN 使用两个 ConvNet-
\(
Q_ {online}
\)
和
\(
Q_ {target}
\)
-独立地逼近最佳作用值函数。
Mario 在后台使用
[
DDQN 算法
](
https://arxiv.org/pdf/1509.06461
)
。 DDQN 使用两个 ConvNet-
`Q_online`
和
`Q_target`
-独立地逼近最佳作用值函数。
在我们的实现中,我们在
\(
Q_ {online}
\)
和
\(
Q_ {target}
\)
之间共享特征生成器
`features`
,但是为每个特征维护单独的 FC 分类器。
`θ_target`
(
\(
Q_ {target}
\)
的参数)被冻结,以防止反向传播进行更新。 而是定期与
`θ_online`
同步(稍后会对此进行详细介绍)。
在我们的实现中,我们在
`Q_online`
和
`Q_target`
之间共享特征生成器
`features`
,但是为每个特征维护单独的 FC 分类器。
`θ_target`
(
`Q_target`
的参数)被冻结,以防止反向传播进行更新。 而是定期与
`θ_online`
同步(稍后会对此进行详细介绍)。
#### 神经网络
...
...
@@ -363,15 +363,15 @@ class MarioNet(nn.Module):
学习涉及两个值:
**TD 估计**
-给定状态
`s`
的预测最佳
\(
Q ^
*
\)
**TD 估计**
-给定状态
`s`
的预测最佳
`Q*`
\[
{TD}_e = Q_{online}^
*
(s,a)
\]
**TD 目标**
-当前奖励和下一状态
`s'`
中的估计
\(
Q ^
*
\)
的汇总
**TD 目标**
-当前奖励和下一状态
`s'`
中的估计
`Q*`
的汇总
\[
a' = argmax_{a} Q_{online}(s', a)
\]
\[
{TD}_t = r +
\g
amma Q_{target}^
*
(s',a')
\]
由于我们不知道下一个动作
`a'`
是什么,因此我们在下一个状态
`s'`
中使用动作
`a'`
最大化
\(
Q_ {online}
\)
。
由于我们不知道下一个动作
`a'`
是什么,因此我们在下一个状态
`s'`
中使用动作
`a'`
最大化
`Q_online`
。
请注意,我们在
`td_target()`
上使用了
[
@ torch.no_grad()
](
https://pytorch.org/docs/stable/generated/torch.no_grad.html#no-grad
)
装饰器来禁用梯度计算(因为我们无需在
`θ_target`
上进行反向传播。)
...
...
@@ -400,7 +400,7 @@ class Mario(Mario):
#### 更新模型
当 Mario 从其重播缓冲区中采样输入时,我们计算
`TD_t`
和
`TD_e`
并反向传播该损耗
\(
Q_ {online}
\)
以更新其参数
`θ_online`
(
\
(
\
alpha
\)
是传递给
`optimizer`
的学习率
`lr`
)
当 Mario 从其重播缓冲区中采样输入时,我们计算
`TD_t`
和
`TD_e`
并反向传播该损耗
`Q_online`
以更新其参数
`θ_online`
(
\
(
\
alpha
\)
是传递给
`optimizer`
的学习率
`lr`
)
\[\t
heta_{online}
\l
eftarrow
\t
heta_{online} +
\a
lpha
\n
abla(TD_e - TD_t)
\]
...
...
编辑
预览
Markdown
is supported
0%
请重试
或
添加新附件
.
添加附件
取消
You are about to add
0
people
to the discussion. Proceed with caution.
先完成此消息的编辑!
取消
想要评论请
注册
或
登录