用一个神经元解释神经网络中的导数

问题描述 投票:0回答:1

我有一个只有一个神经元的最大简单神经网络,我不明白

derivative
变量的定义从何而来。我知道它是导数,给了我函数的“斜率”,但为什么是
input * clear_error
?我们找到了哪个原始函数的导数,为什么是那个?

weight = 10
goal = 12.9
input = 9

alpha = 0.01

for i in range(20):
    prediction = weight * input
    clear_error = prediction - goal
    sq_error = (prediction - goal) ** 2
    
    derivative = input * clear_error
    weight = weight - (derivative * alpha)
    
    print(f"Error: {sq_error}; Prediction: {prediction}")
python math deep-learning neural-network derivative
1个回答
0
投票

写权重为

w
,输入为
x
,目标为
g
,损失函数(即代码中的
sq_error
)为
l
.

然后:

l = (wx - g) ** 2

反向传播我们需要的是损失函数相对于权重梯度,即

dl / dw = 2x(w-x)

...相当于

2 * input * clear_error
.

所以代码中的导数实际上是实际梯度的一半,但是被常数因子超出并不重要(无论如何你正在按 alpha 缩放梯度)。


如果你想进一步分解导数的计算:

u = wx - g
使得
l = u**2

所以

du / dw = x
dl / du = 2u

然后

dl / dw = (dl / du) (du / dw)
(链式规则)

dl / dw = 2ux = 2x(wx - g)

dl / dw = 2 * input * clear_error
就代码中的变量而言。

所以

derivative
等同于
(dl / dw) / 2
.

© www.soinside.com 2019 - 2024. All rights reserved.