多类 SVM 的损失函数及其梯度计算
2024-09-05 00:57:35
CS231n Convolutional Neural Networks for Visual Recognition —— optimization
1. 多类 SVM 的损失函数(Multiclass SVM loss)
在给出类别预测前的输出结果是实数值, 也即根据 score function 得到的 score(s=f(xi,W)),
Li=∑j≠yimax(0,sj−syi+Δ),Δ=1(一般情况下)
- yi 表示真实的类别,syi 在真实类别上的得分;
- sj,j≠yi 在其他非真实类别上的得分,也即预测错误时的得分;
则在全体训练样本上的平均损失为:
L=1N∑i=1NLi
delta = 1
scores = np.dot(W, X)
correct_scores = scores[y, np.arange(num_samples)]
diff = score - correct_scores + delta
diff[y, np.arange(num_samples)] = 0
thresh = np.maximum(0, diff)
loss = np.sum(thresh)
loss /= num_samples
2. 优化(optimization):梯度计算
首先来看损失函数的定义,如下为第 i 个样本的损失值(Wc×d⋅Xd×N,d 特征向量的维度,c:输出类别的个数):
Li==∑j≠yimax(0,sj−syi+1)∑j≠yi[max(0,wTjxi−wTyixi+1)]
- 遍历 j,就是遍历 W 每一列的每一个元素, wTjxi⇒j=1,…,c;i=1,…,N
- wTj 表示 W 的每一行,共 c 行;
下面的额关键是如何求得损失函数关于参数 wj,wyi 的梯度:
∇wyiLi=−⎛⎝∑j≠yi1(wTjxi−wTyixi+Δ>0)⎞⎠xi∇wjLi=1(wTjxi−wTyixi+Δ>0)xij≠yi
binary = thresh
binary[thresh > 0] = 1 # 实现 indicator 函数
col_sum = np.sum(binary, axis=0)
binary[y, np.arange(num_samples)] = -col_sum
dW = np.dot(binary, X.T) # binary 维度信息:c*N, X 维度信息:d*N
dW /= N
dW += reg * W
最新文章
- 迷之bug
- widgets、dialogs与自动连接(auto-connect)
- Access denied for user 'root'@'localhost' (using password:YES)
- Make Notepad++ auto close HTML/XML tags after the slash(the Dreamweaver way)
- H5-杂七杂八的标签
- (Hibernate进阶)Hibernate搭建开发环境+简单实例(二)
- CLRS:build_max_heap(strorage in array)
- java web页面 base
- CountDownLatch和CyclicBarrier的区别
- slickgrid 一个优秀的JS表格插件
- 实现HTTP跳转到HTTPS
- The method setOnClickListener(View.OnClickListener) in the type View is not applicable
- Apple Catching(dp)
- iOS中Block介绍(一)基础
- Javascript实现继承
- 【转】用信鸽来解释 HTTPS
- [2019.04.16] 由Python写成的自动解压脚本
- [第二届构建之法论坛] 预培训文档(C++版)
- 手机号验证正则表达式+Demo(亲测完毕)
- 《剑指offer》总结三 之二叉树(2)