所以,我希望這是一個真正的愚蠢的事情,我正在做,並有一個簡單的答案。我試圖訓練一個2x3x1神經網絡來完成XOR問題。它沒有工作,所以我決定深入瞭解發生了什麼。最後,我決定分配我的自我重量。這是我想出的權重向量:異或與神經網絡(Matlab)
theta1 = [11 0 -5; 0 12 -7;18 17 -20];
theta2 = [14 13 -28 -6];
(在Matlab中表示法)。我故意試圖使沒有兩個權重是一樣的(除非在零)
而且,我的代碼,在MATLAB很簡單的是
function layer2 = xornn(iters)
if nargin < 1
iters = 50
end
function s = sigmoid(X)
s = 1.0 ./ (1.0 + exp(-X));
end
T = [0 1 1 0];
X = [0 0 1 1; 0 1 0 1; 1 1 1 1];
theta1 = [11 0 -5; 0 12 -7;18 17 -20];
theta2 = [14 13 -28 -6];
for i = [1:iters]
layer1 = [sigmoid(theta1 * X); 1 1 1 1];
layer2 = sigmoid(theta2 * layer1)
delta2 = T - layer2;
delta1 = layer1 .* (1-layer1) .* (theta2' * delta2);
% remove the bias from delta 1. There's no real point in a delta on the bias.
delta1 = delta1(1:3,:);
theta2d = delta2 * layer1';
theta1d = delta1 * X';
theta1 = theta1 - 0.1 * theta1d;
theta2 = theta2 - 0.1 * theta2d;
end
end
我相信這是正確的。我用有限差分方法測試了各種參數(theta),看看它們是否正確,而且它們似乎是正確的。
但是,當我運行它時,它最終只歸結爲返回全零。如果我做xornn(1)(1次迭代)我得到
0.0027 0.9966 0.9904 0.0008
但是,如果我做xornn(35)
0.0026 0.9949 0.9572 0.0007
(它開始在錯誤的方向上的後裔)和由(45)我得到
0.0018 0.0975 0.0000 0.0003
如果我運行它10,000次迭代,它只是返回全0。
這是怎麼回事?我必須添加正規化嗎?我會認爲這樣一個簡單的網絡不需要它。但是,無論如何,爲什麼它擺脫了我親手餵食的明顯的良好解決方案?
謝謝!