线性分类Linear Classification

        KNN算法需要储存所有的训练数据,空间开销大;并且每次预测时都需要遍历整个training set,时间开销也很大。为此,我们引入线性分类的方法,包括score function将源数据映射到class scores,loss function评价预测的predicted scores和实际之间的差距,同时,loss function也作为用于选择参数的依据。

一、Score function:Parameterized mapping from images to label scores

        将原始图像数据(pixel values)映射到各个种类的confidence score。对于图像 x_i\epsilon R^D,属于一个label y_i ,其中每个图像维度为D(32×32×3),训练集中含有N个数据(i=1...N),一共含有K中类别(K=10)。

        score function f:R^D \mapsto R^K        

         对于linear classifier,score function可以定义为

f(x_i,W,b)=Wx_i+b

        注意,在之前的数据处理中,图像 x_i 已经转变成 [D×1] 的形式,而得到的f(x) [K×1] 对每种类型都有confidence score,对应的参数weights:W [K×D] 和参数bias vector:b [K×1]

二、线性分类器linear classifier

        线性分类器计算每一种类别的score,通过设定不同大小的W,设定在不同位置上图像对颜色的偏好性,比如“轮船”希望在四周有更多的蓝色,因此“ship” classifier在蓝色channel中会有很多正权值。

线性分类Linear Classification_第1张图片

        我们已经把图像转变成 [D×1] 的形式,因此可以将其表示成D维空间中的一个点,而线性分类器得到的score是不同类别的加权图像和,因此可以表示成线性函数。虽然无法展示3072维的空间,但可以想象成二维的

线性分类Linear Classification_第2张图片

        正好在线上的图像得分为0,红色箭头显式的是分数增加方向,即该空间内图像的“car” score均为正

         对于参数,W的每一行对应一种类型,也可以理解成一个类别的template/prototype,每一种类别的score是与template比较后得到的分数。在数据训练时,将所有training data合并成一个template(如下图),预测图像时只与template比较,而不需要与数据集中的所有数据一一比较。

        此外,也可以将W和b两个参数合为一个,将b作为W最后一列,并在xi中添加末尾一行1,最终达到的效果与原方程相同

        f(x_i,W)=Wx_i=[W|b]*[x_i|1]^T

线性分类Linear Classification_第3张图片

        在机器学习中,我们通常会将输入数据进行normalization,比如通过将所有feature减去一常量来实现数据居中,从 [0,255] 变成 [-127,127] ;还会将数据等比减小,使得变化范围为 [-1,1]

三、loss function

        评价预测结果的函数

        1. SVM loss

        希望正确的class对应的score比其他类别的score高出固定的 \Delta

        将预测得到的分数简记为 s=f(x_i,W),则第j个种类对应的分数为 s_j,则第i个图像对应的Multiclass SVM lossSVM loss希望正确类别得到的分数 s_y_i 比其他类别 s_j 高出至少\Delta,具体的定义如下,注意 s_j为当前种类预测得到的分数, s_y_i为实际种类预测得到的对应分数。

        L_i=\sum_{j\neq y_i}^{}max(0,s_j-s_y_i+\Delta )=\sum_{j\neq y_i}^{}max(0,w_j^Tx_i-w_y_i^Tx_i+\Delta )

def L_i(x, y, W):
    """
    Compute the multiclass svm loss for a single example (x,y)
    - x is a column vector representing an image (e.g. 3073 x 1 in CIFAR-10)
    with an appended bias dimension in the 3073-rd position (i.e. bias trick)
    - y is an integer giving index of correct class (e.g. between 0 and 9 in CIFAR-10)
    - W is the weight matrix (e.g. 10 x 3073 in CIFAR-10)
    """
    delta = 1.0
    scores = W.dot(x)
    margins = np.maximum(0, scores-scores[y]+delta)
    # ignore the y-th position and only consider margin on max wrong class
    margins[y]=0
    loss_i=np.sum(margins)
    return loss_i

        2. 正则化Regularization

        实际上,有一组W都可以使得我们的dataset满足 L_i=0,比如如果一个特定的W满足要求,则所有的\lambda W(\lambda>1) 都可以满足要求。因此我们希望引入其他的判定条件,在这些W之间进行选择——在loss function中增加一个regulariation penalty R(W),常用的是squared L2 规则,通过平方来避免大权重的使用

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

L=\underbrace{\frac{1}{N}\sum_iL_i}_{data loss}+\underbrace{\lambda R(W)}_{regularization loss}

        N为training example的个数;可以通过调节超参数 \lambda来控制regularization loss的权重,而参数通常通过cross-validation确定。

        引入regularization loss后,可以提高正则化程度,因为模型倾向选择W更小的权重,则各个维度都不会对整个score产生很大的影响。比如 x=[1,1,1,1] 和两种权重向量 w_1=[1,0,0,0] w_2=[0.25,0.25,0.25,0.25] 都满足 w_1^2x=w_2^Tx=1,即会产生相同的score,而w1的L2 penalty为1,w2为0.5,因此模型会选择w2。总的来说,模型倾向选择更小的、更分散的权重,因此最终的分类器也会倾向于同时考虑各个维度的输入值,而不是由几个很大的维度主导结果,这样提高了正则化程度,也避免了overfitting的问题。

        注意由于bias b不会对不同维度的输入值占据的权重产生影响,因此一般不会对b进行正则化。但是引入regularization loss后,基本上无法使得L=0

三、参数的设置

        一般而言,可以直接设置 \Delta=1.0

        两个参数 \Delta和 \lambda本质上都是控制data loss和regularization loss之间的tradeoff:W直接影响score以及不同类别score之间的差值, 由于W变化可以直接影响差值,只考虑\Delta是没有意义的(固定\Delta后变化W会使得结果差别很大),因此需要通过 \lambda限制W的变化。

四、多分类问题Softmax classifier

       对于SVM loss中的score,我们并没有给出一个准确的解释,只要求正确种类对应的分数比其他种类高。在Softmax classifier中,我们会给这些分数赋予特定的意义:函数映射 f(x_i;W)=Wx_i 保持不变,而我们利用得到的scores来计算类别的概率分布。

        首先我们利用Softmax function \frac{e^{f_{yi}}}{\sum_j e^{f_j}} 指数化所有的scores,使其全部成为正数,并且每个scores都处于 [0,1],所有scores和为1,进而得到一个概率分布。

        然后我们将推导出的probability和实际的probability进行比较,正确类别的probability为1,其余类别为0。我们希望预测出的正确类别probability接近1,具体的损失函数如下:

L_i=-log(\frac{e^{f_{yi}}}{\sum_j e^{f_j}})=-f_{yi}+log\sum_je^{f_j}

         我们通过一个示例来理解整个过程。首先图像初始的pixel数据为 (3.2, 5.1, -1.7),我们需要首先进行指数处理,然后归一化得到probability,而损失函数就是 L_i=-logP

 五、比较Softmax vs. SVM

        SVM在正确分类的scores比其他分类高出很多后,就“不再留心关注”这些数据点;而Softmax则不停提高正确分类的probability、降低其他分类的probability

 

你可能感兴趣的:(CS231n,python,计算机视觉)