提交 0faafc13 编写于 作者: W wizardforcel

2021-01-19 11:35:07

上级 86ec4895
......@@ -22,7 +22,7 @@
![fgsm_panda_image](img/d74012096c3134b776b5e9f70e8178f3.png)
从图中,`x`是正确分类为“熊猫”的原始输入图像,`y``x`的输出,`θ`表示模型参数,而\(J(\ mathbf {\ theta},\ mathbf {x},y)\)是用于训练网络的损耗。 攻击会将梯度反向传播回输入数据,以计算\(\ nabla_ {x} J(\ mathbf {\ theta},\ mathbf {x},y)\)。 然后,它会沿方向(即\(sign(\ nabla_ {x} J(\ mathbf {\ theta}})沿一小步(图片中的\(\ epsilon \)\(0.007 \))调整输入数据 ,\ mathbf {x},y))\))),这将使损失最大化。 然后,当目标图像仍明显是“熊猫”时,目标网络将它们误分类为“长臂猿”。
从图中,`x`是正确分类为“熊猫”的原始输入图像,`y``x`的输出,`θ`表示模型参数,而`J(θ, x, y)`是用于训练网络的损耗。 攻击会将梯度反向传播回输入数据,以计算\(\ nabla_ {x} J(\ mathbf {\ theta},\ mathbf {x},y)\)。 然后,它会沿方向(即\(sign(\ nabla_ {x} J(\ mathbf {\ theta}})沿一小步(图片中的`ε``0.007`)调整输入数据,`(x, y)`,这将使损失最大化。 然后,当目标图像仍明显是“熊猫”时,目标网络将它们误分类为“长臂猿”。
希望本教程的动机已经明确,所以让我们跳入实施过程。
......@@ -126,7 +126,7 @@ CUDA Available: True
\[perturbed\_image = image + epsilon*sign(data\_grad) = x + \epsilon * sign(\nabla_{x} J(\mathbf{\theta}, \mathbf{x}, y))\]
最后,为了维持数据的原始范围,将被扰动的图像裁剪到范围\([0,1] \)
最后,为了维持数据的原始范围,将被扰动的图像裁剪到范围`[0,1]`
```py
# FGSM attack code
......
......@@ -103,7 +103,7 @@ class ReplayMemory(object):
我们的目标是制定一种策略,尝试最大化折现的累积奖励\(R_ {t_0} = \ sum_ {t = t_0} ^ {\ infty} \ gamma ^ {t-t_0} r_t \),其中\ (R_ {t_0} \)也称为*返回*。 折扣\(\ gamma \)应该是`0``1`之间的常数,以确保总和收敛。 这使得来自不确定的遥远未来的回报对我们的代理商而言不如可以对其充满信心的近期回报重要。
Q 学习的主要思想是,如果我们有一个函数\(Q ^ *:State \ times Action \ rightarrow \ mathbb {R} \),这可以告诉我们,如果我们取一个 在给定状态下采取行动,那么我们就可以轻松地制定出使我们的回报最大化的策略:
Q 学习的主要思想是,如果我们有一个函数`Q*:State x Action => R`,这可以告诉我们,如果我们取一个 在给定状态下采取行动,那么我们就可以轻松地制定出使我们的回报最大化的策略:
\[\pi^*(s) = \arg\!\max_a \ Q^*(s, a)\]
......@@ -123,7 +123,7 @@ Q 学习的主要思想是,如果我们有一个函数\(Q ^ *:State \ time
### Q-network
我们的模型将是一个卷积神经网络,该卷积神经网络将吸收当前屏幕补丁和先前屏幕补丁之间的差异。 它有两个输出,分别代表\(Q(s,\ mathrm {left})\)\(Q(s,\ mathrm {right})\)(其中`s`是网络的输入)。 实际上,网络正在尝试预测在给定当前输入的情况下执行每个操作的*预期收益*
我们的模型将是一个卷积神经网络,该卷积神经网络将吸收当前屏幕补丁和先前屏幕补丁之间的差异。 它有两个输出,分别代表`Q(s, left)``Q(s, right)`(其中`s`是网络的输入)。 实际上,网络正在尝试预测在给定当前输入的情况下执行每个操作的*预期收益*
```py
class DQN(nn.Module):
......@@ -282,7 +282,7 @@ def plot_durations():
最后,是训练模型的代码。
在这里,您可以找到执行优化步骤的`optimize_model`函数。 它首先对一批进行采样,将所有张量连接为一个张量,计算\(Q(s_t,a_t)\)\(V(s_ {t + 1})= \ max_a Q(s_ {t + 1}, a)\),并将其合并为我们的损失。 根据定义,如果`s`为终端状态,则设置\(V(s)= 0 \)。 我们还使用目标网络来计算\(V(s_ {t + 1})\),以提高稳定性。 目标网络的权重大部分时间保持冻结状态,但经常更新以策略网络的权重。 通常这是一组固定的步骤,但是为了简单起见,我们将使用情节。
在这里,您可以找到执行优化步骤的`optimize_model`函数。 它首先对一批进行采样,将所有张量连接为一个张量,计算`Q(s[t], a[t])``V(s[t+1])= max[a] Q(s[t+1], a)`,并将其合并为我们的损失。 根据定义,如果`s`为终端状态,则设置`V(s) = 0`。 我们还使用目标网络来计算`V(s[t+1])`,以提高稳定性。 目标网络的权重大部分时间保持冻结状态,但经常更新以策略网络的权重。 通常这是一组固定的步骤,但是为了简单起见,我们将使用情节。
```py
def optimize_model():
......
Markdown is supported
0% .
You are about to add 0 people to the discussion. Proceed with caution.
先完成此消息的编辑!
想要评论请 注册