您的位置:首页 > 其它

Computer vision

2015-12-29 17:25 281 查看

Task:image classification

-主要问题:语义鸿沟

-挑战(视角变化,光照,大小,形变,遮挡,背景分割,类间变化

-普通的硬性编码很难解决这些问题

Strategy

-数据驱动的方法

1,收集数据并标注(prepare stage : simple & prohibitive)

2,训练分类器 (learning stage : technique & harder)

3,测试(test stage)

NN

--省略学习的过程,或者说只是测试的时候观察样本


Learning stage : 不需要(复杂度O(1))

Test stage : 找出与测试图片[b]最相似的训练图片(复杂度O(NM),M张测试图片,N张训练图片)[/b]

Define the distance of two image

L1 distance(Manhattan distance,不可导)

L2 distance(Euclidean distance,可导)

Lp distance


Extend NN to KNN

Reason : NN 只是观察一张训练图片,对噪音敏感

Solution : 观察K张训练图片,进行Voting。(K为奇数)

Hyperparameters (K)

aim : 在测试集上,让分类准确率最高

probelm : 不能观察测试集

Solution : 从已有的训练集中取出少部分的图片,模拟测试集(验证集)。大多数情况下,训练样本有限,因此根据不同情况选取不同的规模的测试集。

线性分类器

分类器的构建流程

-定义一个分数函数 (features map)

-定义一个损失函数 (error, 指导学习过程)

-正则化 (防止过拟合,因为我们的目的是在测试集上取的最小误差,但是目前优化的损失函数是针对训练集的)

-优化求解模型参数 (需要验证集调节超参数)

线性分类器

线性的分数函数(n维向量,xix_i 为第ii张训练集的特征向量,fif_i 代表属于每一类的分数,分数本身未必具有意义)

f(xi,W,b)=W*xi+b  f(x_i,W,b) =W*x_i +b  

bias 技巧:

f(xi,W)=W*xi  f(x_i,W) =W*x_i  

损失函数 (yiy_i代表第ii张训练集标注标签,可以构建很多,本质上是对错误的进行惩罚,但是这种衡量所谓的错误有很多办法,比如到其他样本的距离,占据总体的比例,自己是否犯错等)

多类别的SVM的loss:

Li=∑j≠yimax(0,f(xi,W)j−f(xi,W)yi+Δ)  L_i = \sum_{j \neq y_i} max(0,f(x_i,W)_j - f(x_i,W)_{y_i} + \Delta) 

特殊的,对于二分类的SVM来说,可能的loss:

Li=C∗max(0,−yi∗f(xi,W)yi+1)+R(W)  L_i = C*max(0,- {y_i}*f(x_i,W)_{y_i} + 1) + R(W)

正则化

防止过拟合,需要加一项对WW的约束(可参见贝叶斯的先验概率),L2L2约束如下

R(W)=∑k∑lW2k,l  R(W) = \sum_{k}\sum_{l} W_{k,l}^2

因此,最终的损失函数是:

L=1N∑i∑j≠yimax(0,f(xi,W)j−f(xi,W)yi+Δ)+α∗R(W)  L= \frac{1}{N} \sum_i\sum_{j \neq y_i} max(0,f(x_i,W)_j - f(x_i,W)_{y_i} + \Delta) + \alpha * R(W)

其中,Δ \Delta & α\alpha 是相互制约的超参数,一般固定Δ=1 \Delta = 1 ,调节α\alpha 。

多类别的Softmax的loss:

Li=−log(efyi∑jefj)  L_i = -\log ( \frac{e^{f_{y_i}}}{ \sum_{j}e^{f_{j}}}) 

其中,

P(yi|xi,W)=efyi∑jefj  P(y_i |x_i,W) = \frac{e^{f_{y_i}}}{ \sum_{j}e^{f_{j}}} 

那么就是目标在给定的参数下,使其似然函数值最大(之前说过,正则化是先验,那么最终的LL从概率情况来看就是最大化后验概率)。

优化(求解定义好模型中的参数)

最常用的求解方法就是梯度下降法,其主要工作在于求LL对于参数的导数(偏导数)

在这里,我们给出上面的两个误差函数的求导公式:

对于SVM(可以一次性迭代每个类别的权重)

∇wiLi=1(wTjxi−wTyi+Δ>0)xi  \nabla_{w_i} L_i = 1(w_j^Tx_i - w_{y_i}^T + \Delta > 0)x_i 

∇yiLi=−(∑j≠yi1(wTjxi−wTyi+Δ>0))xi  \nabla_{y_i} L_i = -(\sum_{j \neq y_i} 1(w_j^Tx_i - w_{y_i}^T + \Delta > 0))x_i 

注意:

使用SGD算法

mini-batch size一般根据内存来选择,不需要验证集来选择,和一般算法的超参数不太一样。

gradient check 是非常必要的。

SGD+Momentum 目前已经很不错。

来源于CS231n课程资料。
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: