Mer*_*ozo 15 python gradient machine-learning svm
我正在尝试实现SVM损失函数及其渐变.我找到了一些实现这两个的示例项目,但是在计算渐变时我无法弄清楚它们如何使用loss函数.
我无法理解的是,在计算渐变时如何使用损失函数的结果?
示例项目按如下方式计算渐变:
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]
Run Code Online (Sandbox Code Playgroud)
dW用于梯度结果.X是训练数据的数组.但是我不明白损失函数的导数是如何产生这个代码的.
在这种情况下计算梯度的方法是微积分(从分析上来说,不是在数值上!)。所以我们像这样区分 W(yi) 的损失函数:

并且关于 W(j) 当 j!=yi 是:
1 只是指示函数,因此当条件为真时我们可以忽略中间形式。当您编写代码时,您提供的示例就是答案。
由于您使用的是 cs231n 示例,如果需要,您一定要查看笔记和视频。
希望这可以帮助!
| 归档时间: |
|
| 查看次数: |
7810 次 |
| 最近记录: |