怀疑神经网络python代码

时间:2017-02-02 07:16:45

标签: python neural-network artificial-intelligence

我一直在努力研究人工智能,但我对此有疑问。

def sigmoid(x):
return 1/(1+np.exp(-x))

# Derivative of the sigmoid function
def sigmoid_prime(x):
    return sigmoid(x) * (1 - sigmoid(x))

x = np.array([0.1, 0.3])
y = 0.2
weights = np.array([-0.8, 0.5])

# The learning rate, eta in the weight step equation
learnrate = 0.5

# The neural network output
nn_output = sigmoid(x[0]*weights[0] + x[1]*weights[1])
# or nn_output = sigmoid(np.dot(x, w))

# output error
error = y - nn_output

# error gradient
error_grad = error * sigmoid_prime(np.dot(x,w))

# Gradient descent step
del_w = [ learnrate * error_grad * x[0],
          learnrate * error_grad * x[1]]
# or del_w = learnrate * error_grad * x

疑惑:

  • 为什么我们只将权重乘以x,而不是y?

    nn_output = sigmoid(x[0]*weights[0] + x[1]*weights[1])
    
  • 为什么我们在计算梯度下降时增加x的值?

    del_w = [ learnrate * error_grad * x[0],
    learnrate * error_grad * x[1]]
    

x[0]x[1]

相似

1 个答案:

答案 0 :(得分:2)

嗯。比喻救援!

想象一下,你正在将大炮瞄准目标。您可以调整目标曲柄(w)以移动大炮(x)以击中目标(y)。所以你试图通过将曲柄设置(w)应用到大炮(x); 您无法使用目标本身(y),,因为它不在您的控制之下。所以你开火了,你从目标(nn_output)击中了一些位置。您可以看到错过了哪种方式以及您错过了多少(error)以了解如何更改下一次拍摄的方位角和角度(w)。

实际上,更准确地说,在神经网络中,x(“输入”)并不是真正的大炮,而是所有射击的情况:风速,加农炮位置,加农炮模型和特殊性。 .. w(“重量”)实际上不仅仅是一个曲柄:我们根据所有x参数设置曲柄的知识(“如果加农炮离目标很远,那就是角度更高的“,”如果风来自北方,就这样调整“......)。

learnrate是你在调整中的两倍。较高的学习率意味着你可以更快地调整(当你偏离目标时很好),但是当你需要更好的控制时,你可能会在另一个方向上超调。

可能让您感到困惑的一件事是xy不是坐标,因此在其应用中并不对称。当您在屏幕上绘制圆圈时,同样对待xy是有意义的。但是,在此处,xy的关键值不同:x是实际输入(例如x[0]风速,x[1]风向,{{1}大炮年龄,x[2]雷达上的光点方向,x[3]与雷达上的光点距离......),x[4]应该的输出( y目标的经度,目标的y[0]纬度) - 并且将它们视为同样没有任何意义。