感知器和具有 1 个隐藏节点的多层感知器用于求解 XOR

问题描述 投票:0回答:1

我这几天在玩Torch7。

今天,我实现了感知器和多层感知器(MLP)来解决 XOR。

正如预期的那样,MLP 在 XOR 上运行良好,而感知器则不然。

但是我很好奇如果隐藏节点的数量是1,结果会是什么。

我预计 MLP 的结果可能与 Perceptorn 相同,因为它只有 1 个隐藏节点。

但有趣的是,MLP 比 Percentron 更好。

更多细节,感知器得到 0.25 误差(如预期),但具有 1 个隐藏节点的 MLP 得到大约 0.16 误差。

我认为一个隐藏节点充当问题空间中的一条线。

所以,如果只有一个隐藏节点,它可能与感知器相同。

但是这个结果告诉我我错了。

现在,我想知道为什么具有 1 个隐藏节点的 MLP 比 Perceptron 更好。

请告诉我为什么会出现这样的结果。

非常感谢。

以下是感知器代码:

-- perceptron

require 'nn'

-- data
data = torch.Tensor({ {0, 0}, {0, 1}, {1, 0}, {1, 1} })
-- target
target = torch.Tensor({ 0, 1, 1, 0 })

-- model
perceptron = nn.Linear(2, 1)
-- loss function
criterion = nn.MSECriterion()

-- training
for i = 1, 10000 do
   -- set gradients to zero
   perceptron:zeroGradParameters()
   -- compute output
   output = perceptron:forward(data)
   -- compute loss
   loss = criterion:forward(output, target)
   -- compute gradients w.r.t. output
   dldo = criterion:backward(output, target)
   -- compute gradients w.r.t. parameters
   perceptron:backward(data,dldo)
   -- gradient descent with learningRate = 0.1
   perceptron:updateParameters(0.1)
   print(loss)
end

以下是具有 1 个隐藏节点的 MLP 代码:

-- multilayer perceptron

require 'nn'

-- data
data = torch.Tensor({ {0, 0}, {0, 1}, {1, 0}, {1, 1} })
-- target
target = torch.Tensor({ 0, 1, 1, 0 })

-- model
multilayer = nn.Sequential()
inputs = 2; outputs = 1; HUs = 1;
multilayer:add(nn.Linear(inputs, HUs))
multilayer:add(nn.Tanh())
multilayer:add(nn.Linear(HUs, outputs))
-- loss function
criterion = nn.MSECriterion()

-- training
for i = 1, 10000 do
   -- set gradients to zero
   multilayer:zeroGradParameters()
   -- compute output
   output = multilayer:forward(data)
   -- compute loss
   loss = criterion:forward(output, target)
   -- compute gradients w.r.t. output
   dldo = criterion:backward(output, target)
   -- compute gradients w.r.t. parameters
   multilayer:backward(data,dldo)
   -- gradient descent with learningRate = 0.1
   multilayer:updateParameters(0.1)
   print(loss)
end
lua neural-network torch
1个回答
0
投票

这种错误差异可能是由于学习率的差异造成的。您使用的纪元数量足够高,足以找到完美的精度。您应该采取以下措施来解决此问题:在这两种情况下不断降低学习率。将其转至大约 1e-4。

© www.soinside.com 2019 - 2024. All rights reserved.