我正在尝试验证本书的结果:'Artificial Intelligence: A guide to Intelligent Systems 2nd Edition' by Michael Negnevitsky,第181-183页,关于神经网络XOR门。
该算法很简单,本书要求NN在224个时期或896个迭代中学习。它显示了手动计算的第一个迭代,我的程序计算相同的值。但这就是相似之处停止的地方。
我无法让它在本书附图6.11所示的任何地方执行。书中的网络(图6.10)如下图所示,然后是我的MATLAB代码。
网络
操作学习曲线异或:
代码:
close all; clear; clc;
alpha = 0.1; % Learning rate parameter
% Initial conditions in the book
w13 = 0.5;
w14 = 0.9;
w23 = 0.4;
w24 = 1.0;
w35 = -1.2;
w45 = 1.1;
t3 = 0.8;
t4 = -0.1;
t5 = 0.3;
cost = zeros(1,4);
X = [1 0 1 0;
1 1 0 0];
Y = [0 1 1 0];
for epoch=1:250
for i=1:4
x1 = X(1,i);
x2 = X(2,i);
yd = Y(i);
y3 = logsig(x1 * w13 + x2 * w23 - t3); % neuron 3 output
y4 = logsig(x1 * w14 + x2 * w24 - t4); % neuron 4 output
y5 = logsig(y3 * w35 + y4 * w45 - t5); % network output
e = yd - y5; % error
cost(epoch,i) = e^2;
delta5 = y5 * (1 - y5) * e;
% output neuron weight differentials
dw35 = alpha * y3 * delta5;
dw45 = alpha * y4 * delta5;
dt5 = alpha * (-1) * delta5;
delta3 = y3 * (1 - y3) * delta5 * w35;
delta4 = y4 * (1 - y4) * delta5 * w45;
% Hidden neuron weight differentials
dw13 = alpha * x1 * delta3;
dw23 = alpha * x2 * delta3;
dt3 = alpha * (-1) * delta3;
dw14 = alpha * x1 * delta4;
dw24 = alpha * x2 * delta4;
dt4 = alpha * (-1) * delta4;
% Weight updates
w13 = w13 + dw13;
w14 = w14 + dw14;
w23 = w23 + dw23;
w24 = w24 + dw24;
w35 = w35 + dw35;
w45 = w45 + dw45;
t3 = t3 + dt3;
t4 = t4 + dt4;
t5 = t5 + dt5;
end
if(sum(cost,2) < 0.001)
break
end
end
semilogy(1:250, sum(cost,2))
%% Test
for i=1:4
x1 = X(1,i);
x2 = X(2,i);
yd = Y(i);
y3 = logsig(x1 * w13 + x2 * w23 - t3);
y4 = logsig(x1 * w14 + x2 * w24 - t4);
y5 = logsig(y3 * w35 + y4 * w45 - t5);
disp([' YD Y'])
disp([yd y5])
end
我希望有人看到我做错了什么。或者,在不太可能的情况下,确认书中的结果不可能与给出的信息(我怀疑它,因为根据我发现,2-2-1 NN应该能够轻松学习XOR) 。我只想拥有一个非常简单的2-2-1神经网络,只需要很少的代码。