这是我的代码。我认为这是错误的,因为这个计算的梯度和我的数值估计之间的差异太大了。它似乎不是由于错误地反转矩阵等等。
对于上下文,Y是输出图层,X是输入图层,只有1个隐藏图层。 Theta1是第一个输入层的权重,Theta2是隐藏层的权重。
for t = 1:m
% do fw prop again...
a1 = [1 X(i,:)];
a2 = [1 sigmoid(a1 * Theta1')];
a3 = sigmoid(a2 * Theta2');
delta_3 = a3' - Y(:, t);
delta_2 = Theta2' * delta_3 .* a2' .* (1 - a2)';
delta_2 = delta_2(2:end,:);
Theta1_grad = Theta1_grad + delta_2 * [1 X(i, :)];
Theta2_grad = Theta2_grad + delta_3 * [1 sigmoid([1 X(i,:)] * Theta1')];
end
grad = [Theta1_grad(:) ; Theta2_grad(:)];