反向传播在 Torch 7 中是如何工作的?
How backpropagation works in torch 7?
我试图通过火炬教程来理解监督学习。
http://code.madbits.com/wiki/doku.php?id=tutorial_supervised
和反向传播:
http://home.agh.edu.pl/~vlsi/AI/backp_t_en/backprop.html
据我所知,这个 torch 教程中的参数更新是在第 4 步训练过程中,
output = model:forward(inputs[i])
df_do = criterion:backward(output, targets[i])
model:backward(inputs[i], df_do)
例如,我得到了这个
output = -2.2799
-2.3638
-2.3183
-2.1955
-2.3377
-2.3434
-2.3740
-2.2641
-2.3449
-2.2214
[torch.DoubleTensor of size 10]
targets[i] = 9
df_do是这个吗?
0
0
0
0
0
0
0
0
-1
0
[torch.DoubleTensor of size 10]
我知道这个例子中目标是9,输出是4,所以结果是错误的,给df_do的第9个元素“-1”。
但是为什么?
根据http://home.agh.edu.pl/~vlsi/AI/backp_t_en/backprop.html,
df_do 是 [目标(期望输出)- 输出]。
在 Torch 中,反向传播的工作方式与在数学中的工作方式完全相同。 df_do
是损失 w.r.t 的 导数。预测 ,因此完全由您的 loss function 定义,即 nn.Criterion
。
最著名的是均方误差 (nn.MSECriterion
):
请注意,MSE 标准期望目标具有与预测相同的大小(用于 class 化的 one-hot 向量)。如果您选择 MSE,您的导数向量 df_do
将计算为:
但是,MSE 标准通常不适合 class化。更合适的是 Likelihood criterion,它以 probability vector 作为预测,以真实 class 的标量索引作为目标。目的是简单地最大化真实 class 的概率,等于最小化它的负概率:
如果我们给它log-probability向量qua预测(它是单调变换因此不影响优化结果但计算更稳定),我们将得到负对数似然损失函数(nn.ClassNLLCriterion
):
那么,df_do
如下:
我试图通过火炬教程来理解监督学习。
http://code.madbits.com/wiki/doku.php?id=tutorial_supervised
和反向传播:
http://home.agh.edu.pl/~vlsi/AI/backp_t_en/backprop.html
据我所知,这个 torch 教程中的参数更新是在第 4 步训练过程中,
output = model:forward(inputs[i])
df_do = criterion:backward(output, targets[i])
model:backward(inputs[i], df_do)
例如,我得到了这个
output = -2.2799
-2.3638
-2.3183
-2.1955
-2.3377
-2.3434
-2.3740
-2.2641
-2.3449
-2.2214
[torch.DoubleTensor of size 10]
targets[i] = 9
df_do是这个吗?
0
0
0
0
0
0
0
0
-1
0
[torch.DoubleTensor of size 10]
我知道这个例子中目标是9,输出是4,所以结果是错误的,给df_do的第9个元素“-1”。
但是为什么?
根据http://home.agh.edu.pl/~vlsi/AI/backp_t_en/backprop.html,
df_do 是 [目标(期望输出)- 输出]。
在 Torch 中,反向传播的工作方式与在数学中的工作方式完全相同。 df_do
是损失 w.r.t 的 导数。预测 ,因此完全由您的 loss function 定义,即 nn.Criterion
。
最著名的是均方误差 (nn.MSECriterion
):
请注意,MSE 标准期望目标具有与预测相同的大小(用于 class 化的 one-hot 向量)。如果您选择 MSE,您的导数向量 df_do
将计算为:
但是,MSE 标准通常不适合 class化。更合适的是 Likelihood criterion,它以 probability vector 作为预测,以真实 class 的标量索引作为目标。目的是简单地最大化真实 class 的概率,等于最小化它的负概率:
如果我们给它log-probability向量qua预测(它是单调变换因此不影响优化结果但计算更稳定),我们将得到负对数似然损失函数(nn.ClassNLLCriterion
):
那么,df_do
如下: