我试图实现支持向量机的损失函数及其梯度。 我发现了一些实现这两种方法的示例项目,但是我不知道它们如何在计算梯度时使用损失函数。
我不明白的是,在计算梯度时,如何使用损失函数的结果?
示例项目按如下方式计算渐变:
for i in xrange(num_train):
scores = X[i].dot(W)
correct_class_score = scores[y[i]]
for j in xrange(num_classes):
if j == y[i]:
continue
margin = scores[j] - correct_class_score + 1 # note delta = 1
if margin > 0:
loss += margin
dW[:,j] += X[i]
dW[:,y[i]] -= X[i]
dW表示渐变结果。X是训练数据的数组。 但我不明白损失函数的导数是如何产生这段代码的。
如果减法小于零,则损耗为零,因此W的梯度也为零。如果子弧大于零,那么W的梯度就是损耗的部分消去。
在这种情况下,计算梯度的方法是微积分(解析的,不是数值的!)。因此,我们将损失函数与W(yi)区分如下:
关于W(j)当j!=yi是:
1只是指示符函数,所以当条件为真时,我们可以忽略中间形式。当你写代码的时候,你提供的例子就是答案。
因为您使用的是cs231n示例,所以如果需要的话,一定要检查note和视频。
希望这有帮助!
相关问题 更多 >
编程相关推荐