这是多个θ值的梯度下降的正确向量实现吗?

时间:2016-05-14 00:13:56

标签: matlab machine-learning neural-network gradient-descent

这是我的matlab代码预测[1; 1; 1]给出[1; 0; 1]:

m = 1; 
alpha = .00001; 

x = [1;0;1;0;0;0;0;0;0]; 
y = [1;1;1;0;0;0;0;0;0]; 
theta1 = [4.7300;3.2800;1.4600;0;0;0;4.7300;3.2800;1.4600]; 
theta1 = theta1 - (alpha/m .* (x .* theta1-y)' * x)' 
theta1 = reshape(theta1(1:9) , 3 , 3) 
sigmoid(theta1 * [1; 0; 1]) 


x = [1;0;1;0;0;0;0;0;0]; 
y = [1; 1; 1;0;0;0;0;0;0]; 
theta2 = [8.892;6.167;2.745;8.892;6.167;2.745;8.892;6.167;2.745]; 
theta2 = theta2 - (alpha/m .* (x .* theta2-y)' * x)' 
theta2 = reshape(theta2(1:9) , 3 , 3) 
sigmoid(theta2 * [1; 0; 1]) 


x = [1;0;1;0;0;0;0;0;0]; 
y = [1; 1; 1;0;0;0;0;0;0]; 
theta3 = [9.446;6.55;2.916;9.351;6.485;2.886;8.836;6.127;2.727]; 
theta3 = theta3 - (alpha/m .* (x .* theta3-y)' * x)' 
theta3 = reshape(theta3(1:9) , 3 , 3) 
sigmoid(theta3 * [1; 0; 1])

我是单独计算theta1,theta2,theta3,但我认为他们 应该在每次计算之间联系起来吗?

虽然梯度下降似乎在起作用:

sigmoid(theta1 * [1; 0; 1]) =
    0.9999
    0.9986
    0.9488

sigmoid(theta2 * [1; 0; 1]) =  
    1.0000
    1.0000
    0.9959

sigmoid(theta3 * [1; 0; 1]) = 
    1.0000
    1.0000
    0.9965

这表明每个theta值(网络中的层)预测越来越接近[1; 1; 1]

更新:sigmoid功能:

function g = sigmoid(z)
g = 1.0 ./ (1.0 + exp(-z));
end

Update2:

与提供关键见解的用户davidhigh进行了长时间的讨论后,进行了以下更改:

x = [1;0;1]; 
y = [1;1;1]; 

theta1 =

    4.7300    3.2800    1.4600
         0         0         0
    4.7300    3.2800    1.4600

theta2 =

    8.8920    8.8920    8.8920
    6.1670    6.1670    6.1670
    2.7450    2.7450    2.7450

theta3 =

    9.4460    6.5500    2.9160
    9.3510    6.4850    2.8860
    8.8360    6.1270    2.7270

我的问题的症结在于我不会将每一层的输出提供给下一层,一旦我做出这个改变,我就会得到更好的结果:

z1 = sigmoid(theta1 * x)

z1 =

    0.9980
    0.5000
    0.9980

z2 = sigmoid(theta2 * z1)

z2 =

    1.0000
    1.0000
    0.9989

z3 = sigmoid(theta3 * z2)

z3 =

    1.0000
    1.0000
    1.0000

z3是预测值,正确为[1;1;1;],而之前约为[1;1;1;]

0 个答案:

没有答案