我试图理解反向传播背后的公式。 所以如果我们的最后一层是 sigmoid 我们可以计算
dZ = A−Y
但如果我们在神经网络中间有一层,它的计算方式就像dZ = dA⋅A⋅(1−A)
。
我们的通用公式是
dZi = dAi⋅Ai⋅(1−Ai)
。
然后我们有
dA = A−Y
。这样我们就可以得到 dZ = dA⋅A⋅(1−A) = (A−Y)⋅A⋅(1−A)
以及 dZ = A−Y
。
现在这让我很困惑。
任何人都可以帮忙吗?我需要一个解释。
PS:我从chatgpt获得了公式,我问过它这是什么意思,但没有得到一个可以理解的答案。
似乎有一些符号交叉。
A
似乎总是表示该层的输出。 Z
是层内线性变换的结果,因此A = sigmoid(Z)
。 dA
和 dZ
这里是梯度,这作为符号是不幸的,因为通常微分或方向导数都是这样表示的。替代方案是 bA
和 gA
。
在最后一层之后,应用误差函数,这里是与真实值之差的范数平方的 0.5 倍
Y
。该函数的梯度是gA = A-Y
。进入最后一层,激活函数贡献gZ = gA * diff_sigmoid(Z)
。这是一般公式。但常用作激活的logistic sigmoid函数满足一个自治微分方程dA/dZ = A*(1-A)
,因此导数可以用gZ = gA * (A*(1-A))
代替。对于其他激活函数,此类快捷方式可能不适用,则必须将导数实现为 Z
的函数。