曼哈顿距离:先将两张图片转化为两个向量 I 1 I_1 I1 和 I 2 I_2 I2,然后计算他们的L1距离。 d 1 ( I 1 , I 2 ) = ∑ p ∣ I 1 p − I 2 p ∣ d_1(I_1, I_2) = \sum_p \vert I_1^p - I_2^p \vert d1(I1,I2)=p∑∣I1p−I2p∣
最近邻分类器Python
线性分类器:在本模型中,我们从最简单的概率函数开始,一个线性映射: f ( x i , W , b ) = W x i + b f(x_i, W, b) = Wx_i + b f(xi,W,b)=Wxi+b 实际的工作原理如下图所示:
在上面的公式中,假设每个图像数据都被拉长为一个长度为 D D D 的列向量,大小为 [ D × 1 ] [D \times1] [D×1]。其中大小为 [ K × D ] [K \times D] [K×D] 的矩阵 W W W 和大小为 [ K × 1 ] [K \times 1] [K×1] 列向量 b b b 为该函数的参数(parameters)。人们常常混用权重和参数这两个术语。一个单独的矩阵乘法 W x i Wx_i Wxi 就高效地并行评估10个不同的分类器,每个分类器针对一个分类,其中每个类的分类器就是 W W W 的一个行向量。该方法的一个优势是训练数据是用来学习到参数 W W W 和 b b b 的,一旦训练完成,训练数据就可以丢弃,留下学习到的参数即可。线性分类器理解:如下图所示: 图像空间的示意图。其中每个图像是一个点,有3个分类器。以红色的汽车分类器为例,红线表示空间中汽车分类分数为0的点的集合,红色的箭头表示分值上升的方向。所有红线右边的点的分数值均为正,且线性升高。红线左边的点分值为负,且线性降低。
W W W 的每一行都是一个分类类别的分类器。对于这些数字的几何解释是:如果改变其中一行的数字,会看见分类器在空间中对应的直线开始向着不同方向旋转。而偏差 b b b,则允许分类器对应的直线平移。需要注意的是,如果没有偏差,无论权重如何,在 x i = 0 x_i = 0 xi=0 时分类分值始终为0。这样所有分类器的线都不得不穿过原点。
将线性分类器看做模板匹配:关于权重 W W W 的另一个解释是 W W W 的每一行对应着一个分类的模板(有时候也叫作原型)。一张图像对应不同分类的得分,是通过使用内积(也叫点积)来比较图像和模板,然后找到和哪个模板最相似。下图为CIFAR-10数据集的十个分类模板: 【注】:船的模板如期望的那样有很多蓝色像素。如果图像是一艘船行驶在大海上,那么这个模板利用内积计算图像将给出很高的分数。
偏差和权重的合并技巧:它能够将我们常用的参数 W W W 和 b b b 合二为一。一般常用的方法是把两个参数放到同一个矩阵中,同时 x i x_i xi 向量就要增加一个维度,这个维度的数值是常量1,这就是默认的偏差维度。这样新的公式就简化成下面这样: f ( x i , W ) = W x i f(x_i, W) = Wx_i f(xi,W)=Wxi 图像数据预处理:在机器学习中,对于输入的特征做归一化(normalization)处理是常见的套路。而在图像分类的例子中,图像上的每个像素可以看做一个特征。在实践中,对每个特征减去平均值来中心化数据是非常重要的。
在这些图片的例子中,该步骤意味着根据训练集中所有的图像计算出一个平均图像值,然后每个图像都减去这个平均值,这样图像的像素值就大约分布在 [ − 127 , 127 ] [-127, 127] [−127,127] 之间了。下一个常见步骤是,让所有数值分布的区间变为 [ − 1 , 1 ] [-1, 1] [−1,1]。零均值的中心化是很重要的,等我们理解了梯度下降后再来详细解释。
