gpt4 book ai didi

machine-learning - 使用神经网络的连续回归中的梯度

转载 作者:行者123 更新时间:2023-11-30 08:27:02 24 4
gpt4 key购买 nike

我正在尝试实现一个具有 3 层的回归神经网络(1 个输入层、1 个隐藏层和 1 个具有连续结果的输出层)。作为基础,我从 coursera.org 中获取了一个分类 NN。类,但更改了成本函数和梯度计算,以适应回归问题(而不是分类问题):

我的 nnCostFunction 现在是:

function [J grad] = nnCostFunctionLinear(nn_params, ...
input_layer_size, ...
hidden_layer_size, ...
num_labels, ...
X, y, lambda)

Theta1 = reshape(nn_params(1:hidden_layer_size * (input_layer_size + 1)), ...
hidden_layer_size, (input_layer_size + 1));

Theta2 = reshape(nn_params((1 + (hidden_layer_size * (input_layer_size + 1))):end), ...
num_labels, (hidden_layer_size + 1));

m = size(X, 1);

a1 = X;
a1 = [ones(m, 1) a1];
a2 = a1 * Theta1';
a2 = [ones(m, 1) a2];
a3 = a2 * Theta2';
Y = y;

J = 1/(2*m)*sum(sum((a3 - Y).^2))

th1 = Theta1;
th1(:,1) = 0; %set bias = 0 in reg. formula
th2 = Theta2;
th2(:,1) = 0;

t1 = th1.^2;
t2 = th2.^2;
th = sum(sum(t1)) + sum(sum(t2));
th = lambda * th / (2*m);
J = J + th; %regularization


del_3 = a3 - Y;
t1 = del_3'*a2;
Theta2_grad = 2*(t1)/m + lambda*th2/m;

t1 = del_3 * Theta2;
del_2 = t1 .* a2;
del_2 = del_2(:,2:end);
t1 = del_2'*a1;
Theta1_grad = 2*(t1)/m + lambda*th1/m;

grad = [Theta1_grad(:) ; Theta2_grad(:)];
end

然后我在fmincg算法中使用这个函数,但在第一次迭代中fmincg结束了它的工作。我认为我的渐变是错误的,但我找不到错误。

有人可以帮忙吗?

最佳答案

如果我理解正确的话,你的第一个代码块(如下所示) -

m = size(X, 1);

a1 = X;
a1 = [ones(m, 1) a1];
a2 = a1 * Theta1';
a2 = [ones(m, 1) a2];
a3 = a2 * Theta2';
Y = y;

就是在输出层得到输出a(3)

Ng 关于 NN 的幻灯片具有以下配置来计算 a(3)。它与您的代码所呈现的不同。

  • 在中间/输出层,您没有执行激活函数g,例如sigmoid函数。

enter image description here

就没有正则化项的成本函数J而言,Ng 的幻灯片具有以下公式:

enter image description here

我不明白为什么你可以使用以下方法计算它:

J = 1/(2*m)*sum(sum((a3 - Y).^2))

因为您根本没有包含 log 函数。

关于machine-learning - 使用神经网络的连续回归中的梯度,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/13255724/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com