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。对于图像 ,属于一个label ,其中每个图像维度为D(32×32×3),训练集中含有N个数据(),一共含有K中类别(K=10)。
对于linear classifier,score function可以定义为
注意,在之前的数据处理中,图像 已经转变成 [D×1] 的形式,而得到的f(x) [K×1] 对每种类型都有confidence score,对应的参数weights:W [K×D] 和参数bias vector:b [K×1]
二、线性分类器linear classifier
线性分类器计算每一种类别的score,通过设定不同大小的W,设定在不同位置上图像对颜色的偏好性,比如“轮船”希望在四周有更多的蓝色,因此“ship” classifier在蓝色channel中会有很多正权值。
我们已经把图像转变成 [D×1] 的形式,因此可以将其表示成D维空间中的一个点,而线性分类器得到的score是不同类别的加权图像和,因此可以表示成线性函数。虽然无法展示3072维的空间,但可以想象成二维的
正好在线上的图像得分为0,红色箭头显式的是分数增加方向,即该空间内图像的“car” score均为正
对于参数,W的每一行对应一种类型,也可以理解成一个类别的template/prototype,每一种类别的score是与template比较后得到的分数。在数据训练时,将所有training data合并成一个template(如下图),预测图像时只与template比较,而不需要与数据集中的所有数据一一比较。
此外,也可以将W和b两个参数合为一个,将b作为W最后一列,并在xi中添加末尾一行1,最终达到的效果与原方程相同
在机器学习中,我们通常会将输入数据进行normalization,比如通过将所有feature减去一常量来实现数据居中,从 [0,255] 变成 [-127,127] ;还会将数据等比减小,使得变化范围为 [-1,1]
三、loss function
评价预测结果的函数
1. SVM loss
希望正确的class对应的score比其他类别的score高出固定的
将预测得到的分数简记为 ,则第j个种类对应的分数为 ,则第i个图像对应的Multiclass SVM lossSVM loss希望正确类别得到的分数 比其他类别 高出至少,具体的定义如下,注意 为当前种类预测得到的分数, 为实际种类预测得到的对应分数。
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满足 ,比如如果一个特定的W满足要求,则所有的 都可以满足要求。因此我们希望引入其他的判定条件,在这些W之间进行选择——在loss function中增加一个regulariation penalty ,常用的是squared L2 规则,通过平方来避免大权重的使用
N为training example的个数;可以通过调节超参数 来控制regularization loss的权重,而参数通常通过cross-validation确定。
引入regularization loss后,可以提高正则化程度,因为模型倾向选择W更小的权重,则各个维度都不会对整个score产生很大的影响。比如 和两种权重向量 都满足 ,即会产生相同的score,而w1的L2 penalty为1,w2为0.5,因此模型会选择w2。总的来说,模型倾向选择更小的、更分散的权重,因此最终的分类器也会倾向于同时考虑各个维度的输入值,而不是由几个很大的维度主导结果,这样提高了正则化程度,也避免了overfitting的问题。
注意由于bias b不会对不同维度的输入值占据的权重产生影响,因此一般不会对b进行正则化。但是引入regularization loss后,基本上无法使得L=0
三、参数的设置
一般而言,可以直接设置
两个参数 和 本质上都是控制data loss和regularization loss之间的tradeoff:W直接影响score以及不同类别score之间的差值, 由于W变化可以直接影响差值,只考虑是没有意义的(固定后变化W会使得结果差别很大),因此需要通过 限制W的变化。
四、多分类问题Softmax classifier
对于SVM loss中的score,我们并没有给出一个准确的解释,只要求正确种类对应的分数比其他种类高。在Softmax classifier中,我们会给这些分数赋予特定的意义:函数映射 保持不变,而我们利用得到的scores来计算类别的概率分布。
首先我们利用Softmax function 指数化所有的scores,使其全部成为正数,并且每个scores都处于 [0,1],所有scores和为1,进而得到一个概率分布。
然后我们将推导出的probability和实际的probability进行比较,正确类别的probability为1,其余类别为0。我们希望预测出的正确类别probability接近1,具体的损失函数如下:
我们通过一个示例来理解整个过程。首先图像初始的pixel数据为 (3.2, 5.1, -1.7),我们需要首先进行指数处理,然后归一化得到probability,而损失函数就是
五、比较Softmax vs. SVM
SVM在正确分类的scores比其他分类高出很多后,就“不再留心关注”这些数据点;而Softmax则不停提高正确分类的probability、降低其他分类的probability