了解softmax分类器

Shu*_*his 4 machine-learning calculus gradient-descent deep-learning softmax

我试图从这个链接中理解一个简单的Softmax分类器实现 - CS231n - 用于视觉识别的卷积神经网络.他们在这里实现了一个简单的softmax分类器.在链接上的Softmax分类器的示例中,2D空间上有随机的300个点以及与它们相关联的标签.softmax分类器将了解哪个点属于哪个类.

这是softmax分类器的完整代码.或者你可以看到我提供的链接.

# initialize parameters randomly
W = 0.01 * np.random.randn(D,K)
b = np.zeros((1,K))

# some hyperparameters
step_size = 1e-0
reg = 1e-3 # regularization strength

# gradient descent loop
num_examples = X.shape[0]
for i in xrange(200):

   # evaluate class scores, [N x K]
   scores = np.dot(X, W) + b 

   # compute the class probabilities
   exp_scores = np.exp(scores)
   probs = exp_scores / np.sum(exp_scores, axis=1, keepdims=True) # [N x K]

   # compute the loss: average cross-entropy loss and regularization
   corect_logprobs = -np.log(probs[range(num_examples),y])
   data_loss = np.sum(corect_logprobs)/num_examples
   reg_loss = 0.5*reg*np.sum(W*W)
   loss = data_loss + reg_loss
   if i % 10 == 0:
   print "iteration %d: loss %f" % (i, loss)

   # compute the gradient on scores
   dscores = probs
   dscores[range(num_examples),y] -= 1
   dscores /= num_examples

   # backpropate the gradient to the parameters (W,b)
   dW = np.dot(X.T, dscores)
   db = np.sum(dscores, axis=0, keepdims=True)

   dW += reg*W # regularization gradient

   # perform a parameter update
   W += -step_size * dW
   b += -step_size * db
Run Code Online (Sandbox Code Playgroud)

我不明白他们如何计算这里的渐变.我假设他们在这里计算了渐变 -

   dW = np.dot(X.T, dscores)
   db = np.sum(dscores, axis=0, keepdims=True)
   dW += reg*W # regularization gradient
Run Code Online (Sandbox Code Playgroud)

但是怎么样?我的意思是为什么渐变dWnp.dot(X.T, dscores)?为什么梯度dbnp.sum(dscores, axis=0, keepdims=True)?那么他们如何计算重量和偏差的梯度?也为什么他们计算了regularization gradient

我刚刚开始学习卷积神经网络和深度学习.我听说这CS231n - Convolutional Neural Networks for Visual Recognition是一个很好的起点.我不知道在哪里放置深度学习相关的帖子.所以,我把它们放在stackoverflow上.如果有任何地方可以发布与深度学习相关的问题,请告诉我.

IVl*_*lad 7

渐变开始在这里计算:

# compute the gradient on scores
dscores = probs
dscores[range(num_examples),y] -= 1
dscores /= num_examples
Run Code Online (Sandbox Code Playgroud)

首先,这设置dscores等于softmax函数计算的概率.然后,它1从为第二行中的正确类计算的概率中减去,然后除以第三行中的训练样本的数量.

为什么减去1?因为1理想情况下,您需要正确标签的概率.所以它从它实际预测的内容中减去它应该预测的内容:如果它预测接近的东西1,减法将是一个大的负数(接近零),所以渐变会很小,因为你接近一个解决方案.否则,它将是一个小的负数(远离零),因此梯度将更大,您将采取更大的步骤来解决方案.

你的激活功能很简单w*x + b.它的衍生物wx,这就是为什么在得分/输出层的梯度dW之间的点积x.

w*x + b相对于的导数b1,这就是为什么你只是dscores在反向传播时求和的原因.