1

我试图通过 Torch 教程来理解监督学习。

http://code.madbits.com/wiki/doku.php?id=tutorial_supervised

和反向传播:

http://home.agh.edu.pl/~vlsi/AI/backp_t_en/backprop.html

据我所知,本火炬教程中的参数更新在第 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 是 [目标(期望的输出) - 输出]。

4

1 回答 1

4

在 Torch 中,反向传播的工作方式与数学中的完全一样。df_do损失 wrt 预测的导数,因此完全由您的损失函数定义,即nn.Criterion。最著名的是均方误差 ( nn.MSECriterion): 在此处输入图像描述

请注意,MSE 标准期望目标具有与预测相同的大小(用于分类的 one-hot 向量)。如果您选择 MSE,您的导数向量df_do将计算为:

在此处输入图像描述

然而,MSE 标准通常不适合分类。更合适的是似然准则,它以概率向量作为预测,以真实类的标量索引作为目标。目的是简单地最大化真实类的概率,这等于最小化其负类:

在此处输入图像描述

如果我们给它对数概率向量 qua 预测(它是单调变换,因此不会影响优化结果,但计算更稳定),我们将得到负对数似然损失函数 ( nn.ClassNLLCriterion):

在此处输入图像描述

在这种情况下,df_do如下所示:

在此处输入图像描述

在 Torch 教程中,默认使用 NLL 标准

于 2015-09-15T15:05:36.557 回答