Task:image classification
-主要问题:语义鸿沟
-挑战(视角变化,光照,大小,形变,遮挡,背景分割,类间变化)
-普通的硬性编码很难解决这些问题
Strategy
-数据驱动的方法
–1,收集数据并标注(prepare stage : simple & prohibitive)
–2,训练分类器 (learning stage : technique & harder)
–3,测试(test stage)
NN
--省略学习的过程,或者说只是测试的时候观察样本
Learning stage : 不需要(复杂度O(1))
Test stage : 找出与测试图片最相似的训练图片(复杂度O(NM),M张测试图片,N张训练图片)
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维向量, xi 为第 i 张训练集的特征向量,fi 代表属于每一类的分数,分数本身未必具有意义)
f(xi,W,b)=W*xi+b
bias 技巧:
f(xi,W)=W*xi损失函数 ( yi 代表第 i 张训练集标注标签,可以构建很多,本质上是对错误的进行惩罚,但是这种衡量所谓的错误有很多办法,比如到其他样本的距离,占据总体的比例,自己是否犯错等)
多类别的SVM的loss:
Li=∑j≠yimax(0,f(xi,W)j−f(xi,W)yi+Δ)
特殊的,对于二分类的SVM来说,可能的loss:
Li=C∗max(0,−yi∗f(xi,W)yi+1)+R(W)正则化
防止过拟合,需要加一项对 W 的约束(可参见贝叶斯的先验概率),L2 约束如下
R(W)=∑k∑lW2k,l
因此,最终的损失函数是:
L=1N∑i∑j≠yimax(0,f(xi,W)j−f(xi,W)yi+Δ)+α∗R(W)
其中, Δ & α 是相互制约的超参数,一般固定 Δ=1 ,调节 α 。
多类别的Softmax的loss:
其中,
那么就是目标在给定的参数下,使其似然函数值最大(之前说过,正则化是先验,那么最终的 L 从概率情况来看就是最大化后验概率)。
优化(求解定义好模型中的参数)
最常用的求解方法就是梯度下降法,其主要工作在于求
在这里,我们给出上面的两个误差函数的求导公式:
对于SVM(可以一次性迭代每个类别的权重)
注意:
- 使用SGD算法
- mini-batch size一般根据内存来选择,不需要验证集来选择,和一般算法的超参数不太一样。
- gradient check 是非常必要的。
- SGD+Momentum 目前已经很不错。
来源于CS231n课程资料。