【CS231N】2、多类SVM
2024-08-31 11:38:53
一、疑问
1. assignments1
linear_svm.py文件的函数 svm_loss_naive中,使用循环的方式实现梯度计算
linear_svm.py文件的函数 svm_loss_vectorized中,梯度的向量化实现
SVM的损失函数在某个数据点上的计算:
对函数进行微分,比如对进行微分得到:
在代码实现的时候,只需要计算没有满足边界值的分类的数量(因此对损失函数产生了贡献),然后乘以就是梯度了。注意,这个梯度只是对应正确分类的W的行向量的梯度,那些行的梯度是:
二、知识点
1. 数据集划分
训练集:训练模型用;
验证集:用以最优参数的调试选择;
测试集:测定训练好的模型的表现情况;
开发集:在实际开发中,训练集往往包含很多数据,为了节省计算时间,往往使用训练集的一小部分子集,用作模型的训练。
2. 梯度检查
数值梯度和解析梯度的值有时候在某个维度会相差较多。这是因为数值梯度的计算采用的是用前后2个很小的随机尺度(比如0.00001)进行计算,当loss不可导的时候,两者会出现差异。**
3.损失函数
- SVM只关心正确分类的得分与错误分类的得分至少要高于边界值,若不满足,便计算相应的损失值。
- 折叶损失:\(max(0, -)\)函数。
- 平方折叶损失:\(max(0, -)^2\)**。更强烈得惩罚过界的边界值。在某些数据集会工作得更好,可以通过交叉验证来决定使用哪个损失计算函数。
- 由于max操作,损失函数中存在一些不可导点(kinks),这些点使得损失函数不可微,因为在这些不可导点,梯度是没有定义的。但是次梯度依然存在且常常被使用。
4. 设置Delta
超参数delta和\(\lambda\)一起控制损失函数中数据损失和正则化损失之间的权衡。但是对于通过缩小或扩大权重矩阵的值,改变不同分类值之间的差异,因此,在一定程序上改变delta是没有意义的。真正的权衡是通过正则化强度来控制权重能够变大到何种程度。
5. 在初始形式中进行初始化
损失函数的最优化的始终在非限制初始形式下进行。很多这些损失函数从技术上来说是不可微的(比如当时,函数就不可微分),但是在实际操作中并不存在问题,因为通常可以使用次梯度。
最新文章
- SQL Server 2008 阻止保存要求重新创建表的更改问题的设置方法
- MS SQL 两种分页
- asp.net 后台 Http POST请求
- Python自动化之YAML解析
- 清橙 A1206 小Z的袜子(莫队算法)
- Swift游戏实战-跑酷熊猫 10 视差滚动背景
- (spring-第16回【AOP基础篇】)基本概念
- C#中String 与Color之间的相互转换
- 使用rsync+inotify+apache做分布式图片服务器的部署方法
- alibaba笔试2
- 苹果推送通知服务Push Notification探究总结(序)
- git clone下载代码
- C语言数据结构基础学习笔记——图
- 暑假里的第八篇Java
- ELF文件格式分析
- codeforces116B
- C点滴成海------Ubuntu怎么运行C语言
- linux 文本操作
- ZOJ 4100 浙江省第16届大学生程序设计竞赛 A题 Vertices in the Pocket 线段树+并查集
- TAU调研咨询
热门文章
- spring-data-jpa快速入门(二)——简单查询
- [arc081F]Flip and Rectangles-[黑白染色]
- 2 CRM 讲师与学生,highcharts应用
- 洛咕 P2155 [SDOI2008]沙拉公主的困惑
- idea 设置不合并空目录或者包的方法
- Intellij IDEA《十分钟,配置struts2》by me
- 一个针对string的较好的散列算发djb2
- Eclipse的汉化问题
- FATAL ERROR: Tried to use mysqladmin in group......
- 相机标定与矫正opencv+MATLAB