【自用详细版】计算机视觉新手入门 - 斯坦福CS231n整理

写在最前面:本博客较详细,是为了写给其他同学共同进步,有一定基础的可以作为复习~
若有问题欢迎评论。

初级模型与基础知识

最临近与KNN

最临近(Nearest Neighbor)算法思想:训练过程仅记住每一张图片,预测过程找与输入最邻近的图片,输出该图片标签。

  • 如何比较“远近”?
    L1距离( x + y + z x+y+z x+y+z) / L2(欧式) 距离( x 2 + y 2 + z 2 \sqrt{x^2+y^2+z^2} x2+y2+z2 )
    L1存在坐标依赖性(即改变坐标轴的选取,结果变化),L1距离即为二者每块pixel相减绝对值的累加求和
    L2即为二者各pixel之差的平方求和后开方

  • 选取L1还是L2?
    当坐标有具体含义的时候,或许L1更好,需要结合具体需求并尝试。

KNN(K-Nearest Neighbors)算法思想:找到K个最近的图片,然后选取K个标签中数量最多的作为输出,从而KNN的决策边界更为平滑。

二者不在图片分类中常用,弊端:

  1. predict过程过长(需要遍历比较)。理想的模型应该预测即应用它的时间短,允许训练时间长。
  2. 距离难以反映出图片差异(部分遮挡、平移、染色等可以使距离随人调整)。
  3. 维度灾难:如果我们需要它有良好的效果,需指数倍的训练数据来密布高维空间里的像素

K是一个超参数(hyperparameter),如何选取超参数?

超参数

超参数的定义:无法从学习中获得,必须人为提前设置。

  • 先验知识:训练集(已知标签用于训练的数据)等基本定义

如何选取?

  1. 直接对全部数据训练并测试,选取表现最好的超参数。
    Very terrible!!! Never do this.
    拿上述KNN而言,K=1时永远表现最好(因为我们的训练数据已被存储,预测时匹配到第一个临近的就是其本身)。
  2. 将数据集分为训练集与测试集,选取在测试集中表现最好的超参数。
    看起来不错,但是实际上会导致过拟合(一句话解释过拟合:在实验数据中表现过为良好,难以适应其他未知数据)
  3. 将数据集分为训练集、测试机与验证集,在训练集上训练,选取在验证集上表现最好的超参数,最终将这些超参数应用到测试集上,得出实验数据。
    其实相比第二点,就是多了最后一步:加数据,并将后面新数据的结果作为实验结果。
    【注意】测试集仅跑一次(在超参数确定完成之后),验证集跑多次(用于测试超参数是否表现良好)。
  4. 交叉验证(cross validation)
    小数据集中常用,深度学习中较少(由于训练对于高计算力的需求)。
    将数据集分出一个测试集保留出来(用途同3),将剩余的数据分为很多折(fold),然后每一块轮流作为验证集其余作为训练集。
  • 问题:一旦寻找到最优超参的时候,是否还需要对整个数据集训练(即再使用验证集、测试集作为训练)?

    有时间、有计算资源、想提高准确率,可以考虑。

线性分类器

线性分类器是参数模型中的最简单的例子。

  • 什么是参数模型?
    f ( x , W ) f (x,W) f(x,W)中的W:参数和输入的图片X一样,需要给出,在模型判断中使用。
    它可以通过学习不断更新(即不断通过对前面数据的训练获得)。
    因此在测试中,我们不再需要保留之前的数据,直接通过参数可以获得模型,更有效率。(对比KNN:需要保存训练时的数据进行比较)

  • 整个深度学习都在考量怎么正确建立 f f f 的结构

  • X与ω相乘是最简单的结构,即是线性分类器

对于一个10分类问题,假设图片大小为 32*32,因此我们有 32*32*3 的向量,即共有 3072 的数字(3为RBG三通道)。我们将图片全部展开成一个长列向量(即3072*1的向量),需要获得一个10*1的向量(10个分类分别对应的分数),因此线性分类器的维度为:线性分类器的维度
其中W是参数,将在训练中获得;b为偏好项(bias term)

  • 为什么要设置偏好项?

    如果你的数据集是不平衡的,如猫比狗多,那么就给猫所对应的项增加一个偏好,它与训练数据无关。

优点:好理解,好实施

缺点:

  • 只能解决决策边界为线性的数据
  • 不能解决多分类问题,有几个分类就需要几个模型
  • 每个分类它仅学习一个模板,出现变体之后它会取平均值来作为判断依据,效果不好

如何衡量一个参数的好坏?如何更新参数?我们需要用到损失函数。

损失函数

损失函数的目的就是给出分数,从而判断W的好坏,整个模型的损失函数为:
L = ∑ L i ( f ( x i , W ) , y i ) N L = \frac{\sum{L_i(f(x_i,W),y_i)}}{N} L=NLi(f(xi,W),yi)
其中,N是输入的总数, L i L_i Li 是每一项的损失,我们即研究如何设定计算 L i L_i Li,通过调整W,使得 L i L_i Li 最小。

Hinge Loss 铰链损失函数

引入:多元SVM(略)
SVM中使用的损失函数:Hinge Loss 铰链损失函数
计算公式如图:
铰链损失函数

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 2
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值