神经网络python代码中的疑问

神经网络python代码中的疑问,python,neural-network,artificial-intelligence,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 ra

我一直在努力学习人工智能,但我有以下关于它的疑问

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]

嗯。类似于救援

想象一下,你正把一门大炮对准一个目标。你有你的瞄准曲柄(
w
),你可以调整它来移动加农炮(
x
)来击中目标(
y
)。因此,您尝试通过将曲柄设置(
w
)应用到加农炮(
x
)来命中;您不能将目标本身(
y
)用于此目的,因为它不在您的控制之下。所以你开火,击中目标的某个位置(
nn\u输出
)。您可以查看您错过了多少(
错误
)的方向,以确定如何更改下一次拍摄的方位角和角度(
w

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

learnrate
是指你在调整中有多紧张。大的学习率意味着你调整得更快(当你偏离目标时很好),但当需要更好的控制时,你有可能在另一个方向上过度调整


有一件事可能会让您感到困惑,那就是
x
y
不是坐标,因此在它们的应用中是不对称的。当您在屏幕上绘制圆时,类似地处理
x
y
是有意义的。然而,在这里,
x
y
是两个截然不同的值:
x
是实际输入(例如
x[0]
风速,
x[1]
风向,
x[2]
炮龄,
x[3]
雷达上光点的方向,
x[4]
到雷达上光点的距离,
y
是应该输出的值(
y[0]
目标的经度,
y[1]
目标的纬度)-对它们一视同仁是没有意义的。

你可以看看这个并比较你的代码:什么意思,增加
x
的值?