cs231n:SVM线性分类器
2016-11-08 22:13
218 查看
线性分类器:为了简单,下面只讨论二分类问题(cs231n)学习笔记
1.1 SVM: 从图像角度理解SVM
假设我们把一张图像的rgb三通道展开为一个vector,用x表示。 这样,我们的数据从Image1 ,2 ... N 变到 x1 ,2,...N。xi是向量 我们就可以用如下函数进行线性分类: f(x,W,b)= Wx + b; //liner classifier
1.2 如何判断我的模型:W、b的好坏呢?
lose function : 基本原则,分类界限好,希望损失小。 分类界限不好,甚至错误,希望损失大。 我们用Li表示第i个样本的数据损失: Li = LossFunction(f(xi,W,b),yi) 注:在svm中f(xi,W,b)是一个score 这个值不是越小越好,因为可能对于你当前的数据集,这个值非常小。 但是对于别的数据集肯能非常不好。原因是出现了过拟合。把噪音也进行了拟合。 因此加上一个正则项R(W),来调整 . 综上:Li = LossFunction(f(xi,W,b),yi)+ lamda*(R(W)) 对于整体数据集合:我们简单的采用平均: L = 1/N *(sigma(Li):i form 1 to N) + lamda * R(w);
1.3 那如何选取W,b呢?
定义合适的loss function 。
1.4 有哪些loss function?
1.4.1 hinge Loss - 折页损失
hinge loss = LossFunction(f(xi,W,b),yi) = max(0 , 1-f(xi)*yi) make it clear if(f(xi)*yi <=1) loss = 1-f(xi)*yi; else loss = 0; analysis:假设 yi = 1; 那么 f(xi)只要大于1,loss都是0; f(xi)不大于1 ,那么产生损失,距离1越远,说明分的越离谱,产生的loss越大。
1.4.2 cross-entropy loss -交叉熵损失
我们这里的二分类标签是yi = {-1,1} ti = (1+yi)/2 P(yi|xi) = 1/(1+exp(-f(xi)*yi)) P(yi = 1| xi) = P(ti = 1| xi) = 1/(1+exp(-f(xi))) P(yi = -1|xi) = P(ti = 0| xi) = 1/(1+exp(f(xi))) 因此P可以表示成一个等式: P(ti|xi) = P(ti = 1|xi)exp(ti) * (1-P(ti=1|xi))exp(1-ti)
1.4.3 logistic loss :
注:我们在这里的二分类标签是yi={-1,1} P(yi|xi) = 1/(1+exp(-f(xi)*yi)) make it clear P(yi = 1| xi) = 1/(1+exp(-f(xi))) P(yi = -1|xi) = 1/(1+exp(f(xi)))
Q&A:
1、cross-entropy loss 和softmax loss 有啥区别?只能说没有区别。其实我们经常在论文中看到softmax loss这个词。但是这个词实际上指的就是cross-entropy loss。
[softmax function] (j代表第j个样本,Zj代表第j个样本socre ,分母k是元素个数,j form 1 to k) 这个函数的输入就是一个实数评分向量,假设输入z=【5,8,2,-8】,那么他的输出就是【4.73%,95.03%,0.235%,0.0001%】
2、softmax 与 cross-entropy loss 什么关系?
Softmax分类器的命名是从softmax函数那里得来的,softmax函数将原始分类评分变成正的归一化数值(看Q&A 1的例子),所有数值和为1,这样处理后交叉熵损失才能应用。
3、softmax 与SVM 什么关系?
首先,他们都是线性分类器,都用的同样的分值向量:
但是,他们用的损失函数不一致。
分析:svm用的是hinge loss ,但是softmax 用的是cross-entropy loss;
这也使得二者对于分类结果的解释不同,svm给出的分数向量是难以直观解释的。例如[12.5, 0.6, -23.0]代表“船”“猫”“狗”;
但是,softmax给出的是归一化的概率向量。给出每个类别的概率。[0.9, 0.09, 0.01]代表“船””猫”“狗”的概率。
python code :
f = np.array([123, 456, 789]) # example with 3 classes and each having large scores p = np.exp(f) / np.sum(np.exp(f)) # Bad: Numeric problem, potential blowup # instead: first shift the values of f so that the highest number is 0: #这一步至关重要,如果不减去,那么指数的幂爆炸式增长。导致double数据类型都得溢出。必须的减去max。 #caffe源码也是这样做的 f -= np.max(f) # f becomes [-666, -333, 0] p = np.exp(f) / np.sum(np.exp(f)) # safe to do, gives the correct answer
code from cs231n http://cs231n.github.io/linear-classify/
相关文章推荐
- CS231n课程笔记3.1:线性分类器(SVM,softmax)的误差函数、正则化
- cs231n-(2)线性分类器:SVM和Softmax
- CS231n 学习笔记(2)——神经网络 part2 :线性分类器,SVM
- SVM入门(四)线性分类器的求解——问题的描述Part1
- cs231n笔记 (一) 线性分类器
- svm理论与实验之5: 线性分类器的求解
- SVM入门(六)线性分类器的求解——问题的转化,直观角度
- SVM入门(五)线性分类器的求解——问题的描述Part2
- Matlab 实现线性svm两类和多类分类器
- SVM入门(五)线性分类器的求解——问题的描述Part2
- SVM入门(四五六)线性分类器的求解
- cs231学习笔记二 线性分类器、SVM、Softmax
- SVM入门(五)线性分类器的求解——问题的描述Part2
- svm理论与实验之6: 线性分类器的求解(续集) — 问题的转化
- svm入门之二、三线性分类器
- SVM入门(五)线性分类器的求解——问题的描述Part2
- 线性分类器、SVM、Softmax
- [转载]SVM入门(二)线性分类器Part 1
- SVM入门(六)线性分类器的求解——问题的转化,直观角度
- SVM入门(四)线性分类器的求解——问题的描述Part1