gpt4 book ai didi

python - NumPy 的 : calculate the derivative of the softmax function

转载 作者:太空狗 更新时间:2023-10-29 19:31:45 25 4
gpt4 key购买 nike

我正在尝试通过 MNIST 理解简单的 3 层神经网络中的反向传播

输入层有weightsbias。标签是 MNIST,因此它是一个 10 类向量。

第二层是一个线性变换。第三层是 softmax 激活函数,以获取概率输出。

反向传播 计算每一步的导数,并将其称为梯度。

Previous layers 将 globalprevious 渐变附加到 local gradient。我在计算 softmax

local gradient 时遇到问题

一些在线资源解释了 softmax 及其导数,甚至给出了 softmax 本身的代码示例

def softmax(x):
"""Compute the softmax of vector x."""
exps = np.exp(x)
return exps / np.sum(exps)

关于何时 i = j 和何时 i != j 解释导数。这是我想出的一个简单的代码片段,希望能验证我的理解:

def softmax(self, x):
"""Compute the softmax of vector x."""
exps = np.exp(x)
return exps / np.sum(exps)

def forward(self):
# self.input is a vector of length 10
# and is the output of
# (w * x) + b
self.value = self.softmax(self.input)

def backward(self):
for i in range(len(self.value)):
for j in range(len(self.input)):
if i == j:
self.gradient[i] = self.value[i] * (1-self.input[i))
else:
self.gradient[i] = -self.value[i]*self.input[j]

那么self.gradient就是局部梯度,它是一个向量。这个对吗?有没有更好的写法?

最佳答案

我假设您有一个带有 W1 的 3 层 NN,b1 与从输入层到隐藏层的线性变换以及 W2, b2 与从隐藏层到输出层的线性变换相关联。 Z1Z2 是隐藏层和输出层的输入向量。 a1a2代表隐藏层和输出层的输出。 a2 是您的预测输出。 delta3delta2 是误差(反向传播),您可以看到损失函数相对于模型参数的梯度。

enter image description here enter image description here

这是 3 层 NN(输入层,只有一个隐藏层和一个输出层)的一般场景。您可以按照上述过程计算梯度,这应该很容易计算!由于这篇文章的另一个答案已经指出了您代码中的问题,因此我不再重复。

关于python - NumPy 的 : calculate the derivative of the softmax function,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/40575841/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com