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课程资料。
相关文章推荐
- POJ训练计划2418_Hardwood Species(Trie树)
- 开发工具
- 网络编程学习笔记--1.socket可读可写条件
- DWR3使用
- 神经网络中的BPTT算法简单介绍
- 判断两个UIColor的颜色值是否相等
- Android之JAVASe基础篇-面向对象-对象数组(三)
- php取数组随机数
- TexturePacker非常棒的游戏资源图像处理工具
- TCP慢启动、拥塞避免、快速重传、快速回复
- NAS环境中的备份:服务器、NDMP协议
- notebook 的使用
- Python 使用 xlrd 读取 Excel格式文件
- UIAlertView使用
- HTML5的新特性
- CoreGraphics --- 翻转坐标系
- Ios - 计算Label文字中字体的frame - 实用代码
- Access restriction:The type JPEGCodec is not accessible due to restriction on required library C:\Program Files\Java\jre6\lib\rt.jar
- libevent 编译 Windows
- Educational Codeforces Round 3 B. The Best Gift