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)
但是怎么样?我的意思是为什么渐变dW是np.dot(X.T, dscores)?为什么梯度db是np.sum(dscores, axis=0, keepdims=True)?那么他们如何计算重量和偏差的梯度?也为什么他们计算了regularization gradient?
我刚刚开始学习卷积神经网络和深度学习.我听说这CS231n - Convolutional Neural Networks for Visual Recognition是一个很好的起点.我不知道在哪里放置深度学习相关的帖子.所以,我把它们放在stackoverflow上.如果有任何地方可以发布与深度学习相关的问题,请告诉我.
渐变开始在这里计算:
# 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.它的衍生物w是x,这就是为什么在得分/输出层的梯度dW之间的点积x.
w*x + b相对于的导数b是1,这就是为什么你只是dscores在反向传播时求和的原因.
| 归档时间: |
|
| 查看次数: |
2163 次 |
| 最近记录: |