我试图backpropagation在一个简单的 3 层神经网络中理解MNIST.
输入层带有weights和bias。标签是MNIST这样的,它是一个10类向量。
第二层是一个linear tranform。第三层是将softmax activation输出作为概率。
Backpropagation计算每一步的导数并将其称为梯度。
以前的图层将global或previous渐变附加到local gradient. 我无法local gradient计算softmax
网上的一些资源对softmax及其派生词进行了解释,甚至给出了softmax本身的代码示例
def softmax(x):
"""Compute the softmax of vector x."""
exps = np.exp(x)
return exps / np.sum(exps)
导数是关于 wheni = j和 when来解释的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是local gradientwhich 是一个向量。这个对吗?有没有更好的方法来写这个?

