Linear Classification: Support Vector Machine, Softmax

此笔记基于斯坦福cs231n课程
作者:武秉文Jerry,bingwenwu@foxmail.com
转载请注明出处

目录

  • Intro to Linear classification
  • Linear score function
  • Interpreting a linear classifier
  • Loss function
    • Multiclass SVM
    • Softmax classifier
    • SVM vs Softmax
  • Interactive Web Demo of Linear Classification
  • Summary# 线性分类 Linear Classification
    上一讲说了图片分类的问题,是从固定的类别目录中为图片分类一个唯一的标签。另外,还介绍了k-NN分类器,通过与训练集图片进行差异比对来预测标签。也看到k-NN有多不足:
  • 分类器必须记忆所有的训练数据用于预测图片标签。所以当数据量很大时,效率很低。
  • 对测试图片分类时需要的计算成本很大,因为要和所有的训练图片进行比对。

Overview。我们现在要构建一种更有效的方法去分类图片便于我们最后扩展到整合神经网络和卷积神经网络。这个方法有两个主要部分:一个score function(分数函数)将原始数据映射到分类得分,一个loss function(损失函数)量化预测分数与实际值的一致性。然后,我们将把它作为一个优化问题,在这个问题中我们将最小化关于分数函数参数的损失函数。## 从图片映射到标签得分 Parameterized mapping from images to label scores
这个方法的第一个组件是定义一个分数函数能够将一张图片的像素值映射成每一个类别的可能性得分。我们会用一个完整的例子构建该方法。像之前一样我们定义一个图片的训练集$x_i \in R^D$,每一张对应一个标签$y_i$。这里$i=1...N$并且$y_i \in 1...K$。我们有N个样本(每一个样本的维度是D)还有K个独立的标签。例如,在CIFAR-10中我们有一个N = 50,000的训练集,每一个的D = 32 x 32 x 3 = 3072像素,K = 10,因为有十个独立的类别(dog,cat,car,etc)。我们现在定义分数函数$f:R^D \mapsto R^K$将原始的图片像素映射到类别分数。

线性分类。这里我们从最简单的函数开始,即线性映射:$$f(x_i,W,b) = Wx_i+b$$ 在上面的等式中,我们假定图片$x_i$所有的像素平铺到了一个单独的列向量 [D x 1]。矩阵W([K x D]),向量b([K x 1])是函数的参数。在CIFAR-10中,$x_i$包含第i张图片像素平铺后的列向量[3072 x 1],W是[10 x 3072],b是[10 x 1],所以3072个数字作为原始像素值输入到函数中然后输出10个数字(类别分数)。参数W常常被称为weights(权重),bbias vector(调整向量)因为它影响输出的分数,但与$x_i$之间没有关系。但是,你经常会听到人们交替使用权重和参数这些术语。

有一些要注意:

  • 首先,单个矩阵乘积$Wx_i$可以有效的并行处理十个不同的类别,因为每个分类器是W中的一行。
  • 我们将输入数据$(x_i,y_i$当做给定的,但我们可以控制参数W,b的值。我们的目的就是找到合适的参数值可以正确分类。我们之后会讨论具体的细节,希望正确的类别分数要高于其他不正确类别的分数。
  • 这个方法的一个优点就是:训练集用来学习参数W,b,但一旦训练完成,我们就可以完全抛弃训练集,只保留训练后的参数值。因为我们测试分类器时只需要调用这个函数就可以了。
  • 最后,注意分类测试图片包括矩阵乘法和加法,这比比较训练集和测试集图片要快的多。

预测:卷积神经网络将图像像素精确地映射到如上所示的分数,但映射(f)将会更复杂并且将包含更多参数。## Interpreting a linear classifier
一个线性分类器通过3个颜色通道,按照加权总和一张图片所有的像素值去计算一个类别的分数。取决于权重值的精确程度,这个函数有能力在图像中某些位置喜欢或不喜欢(取决于每个权重的符号)某些颜色。例如,如果图像有很多蓝色(可能对应于水),那么“船”类就更有可能。你可能会预期“船舶”分类器将在其蓝色通道权重(存在蓝色增加船舶分数)和红色/绿色通道中的负权重(红色/绿色存在会降低船的分数)。


mapping

一个映射图片到类别分数的例子如上。出于可视化的考虑,我们假定这个图片只有4个像素(4个黑白像素,我们为了简化问题不考虑颜色通道),然后我们有三个类别分数要计算(红-猫,绿-狗,蓝-船)。(声明:实际中,这里的颜色只是简单表明3个类别,而不是RGB颜色)。我们把图片像素拉伸为一个列向量,然后进行矩阵乘法去得到每个类别的分数。注意这里的权重W一点也不好:因为这个权重计算后猫的分数很低,这里的权重表示图片里更像一只狗。


Analogy of images as high-dimensional points。因为图片被拉伸成了高维列向量,我们可以把图片转为空间中的一个点(例如:每个CIFAR-10中的图片都是在一个3072维度空间中的一点)。类比一下,整个数据集就是(有标注的)一组点。

因为我们用所有像素值的加权平均作为每个类别的分数,每个类别分数是在这个空间中的一个线性函数。所以我们不能可视化3072维度的空间,但是如果我们想象把它压缩为一个二维空间,那么我们可以尝试可视化分类器做了什么:


image space

如图所示,每张图片就是坐标中的一个点,并且三个分类器也可视化出来了。用车的分类器(红色)为例,红线表示空间中所有车分数为0的点,所以红线右侧是正分数,红线左侧是负分数。


$W$中的每一行都是一个类别的分类器。这些$W$行内的数字的几何意义是如果改变某一行的值,在空间内的这条线就会发生旋转。参数$b$,另一方法,让我们的分类器能够翻译这些线。比如,若没有偏移参数,输入$x_i=0$,无论权重参数怎样,结果都是0,所以所有的线都会过坐标原点。

Interpretation of linear classifiers as template matching.

另一种对$W$中行向量的理解是每一行对应一个类别的模板(或者有时称为原型)。然后通过内积(点积)逐一比较每个模板和图像以找到最适合的图像来获得图像的每个类别的分数。通过这个术语,线性分类器正在进行模板匹配。另一种想法是,我们仍然能够有效的使用最近邻,但不是有几千张训练集图片,每个类别只使用一张图片(尽管我们会学习它,但并不一定是训练集中的图像),我们使用(负)内积作为距离而不是L1或者L2距离。


weight

稍微向前跳一点内容:在CIFAR-10学习的最后,形成了最终学习后的权重值。比如船的模板包括了很多蓝色的像素。这样的模板因此就会在内积计算时给海上船只的图片一个高的分数。


另外的,注意观察马的模板里似乎是一匹有两个头的马,因为数据集中的马有朝向左边,有朝向右边。线性分类器会合并两类马到一个单独的模板。Similarly, the car classifier seems to have merged several modes into a single template which has to identify cars from all sides, and of all colors. In particular, this template ended up being red, which hints that there are more red cars in the CIFAR-10 dataset than of any other color.所以线性分类器很难处理不同颜色的汽车,但是之后我们看到的神经网络能够解决这个问题。往后看,神经网络能够在隐藏层中开发可以检测特定车型的 中间神经元(例如,面向左侧的绿色汽车,面向前方的蓝色汽车等),并且下一层上的神经元可以将这些通过各个汽车探测器的加权总和转换成更准确的汽车得分。

Bias trick。这里提出一个普遍的简化方法去将两个参数$W,b$作为一个参数。回想分数函数的定义:$$f(x_i,W,b) = Wx_i+b$$ 去独立的跟踪两组参数$W,b$是有点困难的。一个一般的技巧是将两组参数合并为一个单独的矩阵,通过用一个额外的维度扩展列向量$x_i$,然后将常数1作为默认的偏移参数维度。用这额外的维度,新的分数函数可以简化为一个独立的矩阵乘法:$$f(x_i,W) = Wx_i$$ 拿CIFAR-10举例,现在$x_i$是[3073 x 1]而不是[3072 x 1],$W$现在是[10 x 3073]而不是[10 x 3072]。下图可视化了这个过程:


bias trick

技巧说明。进行矩阵乘法,然后添加一个偏移向量相当于所有输入向量添加常数为1的偏差维度,并将权重矩阵扩展1列-(偏差列向量)。因此,如果我们通过向所有向量赴埃及数据来预处理我们的数据,我们只需要学习一个单一的权重矩阵,而不是两个分别存储了权重和偏差的矩阵。


Image data prepocessing。上面的例子我们使用了像素的原始值(0到255)。在机器学习中,一个普遍的方法是对你的输入数据进行正则化(对于图片而言,每个像素可以看做一个特征feature)。实际中,center your data(中心化数据)是很重要的,通过每个特征减去平均值。对于图片而言,计算出“平均图片”然后每个训练图片都减去它,这样所有的像素值范围变成了[-127, 127]。更一般的处理是将输入特征值范围正则化成[-1, 1]。其中,零均值居中是很重要的,但知道理解了梯度下降时候才能证明这一点。

损失函数Loss function

之前我们定义了一个从像素值映射到类别分数的函数,用一组权重$W$作为参数。我们不能控制给定的输入数据的值$(x_i,y_i)$,但是我们可以控制权重的值,并且我们想合理的确定它们以至于能够正确的进行分类。

比如,返回之前的例子。猫图片分类的例子,此时的权重一点都不好因为猫分类的分数相比于其他两类很低。我们将用损失函数(有时称为成本函数cost function或者目标)的结果衡量结果的偏差程度。直观的说,如果我们对训练数据进行 分类的工作做得不好,那么损失函数值会很高,如果我们做得很好,损失函数值会很低。

多类别SVM Multiclass Support Vector Machine loss

有很多定义损失函数细节的方法。作为第一个例子我们首先使用一种常用的损失函数——Multiclass Support Vector Machine(SVM)。SVM损失函数“希望”每个图像的正确类别的分数高于不正确类别的某个固定边界值$\Delta$。SVM“想要”某个结果,因为这个结果会产生较低的损失(就是我们想要的)。

现在我们更加精确一点。回想一下,对于第i个样本我们给定了图片$x_i$的所有像素和正确分类的标签$y_i$。分数函数输入这些像素然后计算列向量$f(x_i,W)$作为类别分数,我们将其缩写为$s$(scores的缩写)。比如,第j类的分数是列向量的第j个元素:$s_j=f(x_i,W)j$。第i个样本的多类SVM损失函数定义如下:$$L_i = \sum{j\neq y_i} \max(0, s_j - s_{y_i} + \Delta)$$ Example.假如我们有三个类别,分数为s = [13,-7,11],第一个类是正确的分类(即$y_i = 0$)。同时假定$\Delta$(一个之后会讨论的超参数)为10。然后计算所有错误类别的和,所以我们得到:$$L_i = \max(0, -7 - 13 + 10) + \max(0, 11 - 13 + 10)$$ 你可以看到第一项是0因为[-7-13+10]是负数,max函数过后变成0.我们这一类的损失函数结果为0因为正确类别分数(13)比错误类别分数(-7)至少大10.实际上差别是20,比10大多了但是SVM只关注差距至少10的;任何超过这个范围的额外的差距都通过max函数看做0.第二项计算[11-13+10]的结果是8.即便正确结果分数13比11大,但差距没有到达10,差距只有2,所以损失函数结果是8(即离边界差距值差多少)。总结,SVM损失函数想要正确分类$y_i$的分数至少比不正确类别的分数高$\Delta$。如果不是的话,我们将这些损失求和。

注意这个例子中我们使用线性分数函数($f(x_i;W)=Wx_i$),所以我们能够重写损失函数的等价表达式:$$L_i = \sum_{j\neq y_i} \max(0, w_j^T x_i - w_{y_i}^T x_i + \Delta)$$ $w_j$是$W$中的第j行转置后的列向量。然而这不是必须的一旦我们考虑更加复杂的分数函数$f$。

这部分我们最后要讨论的术语是hinge loss(例子中的$max(0,-)$)。你会有时看到人们使用squared hinge loss SVM (or L2-SVM),形式是$max(0,-)^2$,更加强烈的处理越界(平方而不是开方)。非平方版本更加标准,但一些数据库平方版本效果更加好。这些可以在交叉验证中确定。

损失函数在训练集上量化我们对于预测结果的差异程度。


margin

多类支持向量机“希望”正确类的分数比所有其他分数至少高出边界值$\Delta$。如果任何类别在红色区域(或更高)内有分数,则会有累计损失。否则,损失就是0.我们的目标是找到同时满足训练数据中所有样本的这个约束条件的权重,并给出尽可能低的总损失。


Regularization。之前提出的损失函数有一个bug。假定我们有一个数据集和一组能够正确分类每一个样本的权重W(即$L_i=0$,对所有的i)。这个问题就是W不一定是独一无二的。可能有很多相似的W能够正确分类每一个样本。一个简单的方法是如果一些参数W能够正确分类每个样本,那么$\lambda W$($\lambda > 1$)也会得到结果为0的损失函数。因为这种转变统一延伸了所有得分的幅度,因此也是它们的绝对差异。

换句话说,我们想能够编码一些倾向性,这样能够倾向于一组具体的权重W,去掉其他的模棱两可的值。我们能通过用regularizaion penalty $R(W)$ 扩展损失函数去做到这点。最常用的regularization penalty是L2形式,通过对所有参数的元素进行平方惩罚阻止大的权重:$$R(W) = \sum_k\sum_l W_{k,l}^2$$ 在上面的表达式中,我们把W中每个元素的平方进行求和。注意到regularization函数不是在数据集上定义的函数,它只基于权重。包括规范化惩罚完成了完整的多类SVM损失函数,其由两部分组成:数据损失(所有样本的损失函数值$L_i$的平均值)和正则化损失。所有完整的多类别SVM形式如下:$$L = \underbrace{ \frac{1}{N} \sum_i L_i }\text{data loss} + \underbrace{ \lambda R(W) }\text{regularization loss} \\$$ 或者将其完全展开:$$L = \frac{1}{N} \sum_i \sum_{j\neq y_i} \left[ \max(0, f(x_i; W)j - f(x_i; W){y_i} + \Delta) \right] + \lambda \sum_k\sum_l W_{k,l}^2$$ N是训练样本的数量。如你所见,我们对损失对象附加了规范化惩罚,权重由超参数$\lambda$决定。一般没有直接的方法设置这个参数,而是通过交叉验证确定。

最吸引人的性质是惩罚大的权重会提高一般性,因为它意味着任何的输入维度本身都无法对分数产生大的印象。举例,假定我们有一输入向量$x = [1,1,1,1]$和两个权重向量$w_1 = [1,0,0,0]$、$w_2 = [0.25,0.25,0.25,0.25]$。可得$w_1^Tx = w_2^Tx=1$,所以两个权重向量都产生了相同的点积,但是$w_1$的L2惩罚是1.0而$w_2$的L2惩罚只有0.25.因此,根据L2惩罚,权重向量$w_2$更好,因为L2惩罚更喜欢较小且更加分散的权重向量,因此鼓励最终分类器将所有输入维度都考虑到较小的数值而不是几个输入维度的值比较大。我们之后会看到,这个效果能够在测试集上提升一般性表现,而且更加不容易overfitting(过拟合)

注意偏移量参数没有这样的效果,因为不像权重,它们不控制输入维度的影响程度。因此我们一般只规范化权重W而不是偏移量b。但是,实际上这通常只会产生微不足道的影响。最后请注意由于正则化惩罚,我们永远无法在所有样本中实现0.0的精确损失,因为这仅在W=0的时候才有可能。

代码。这里是一个损失函数(没有规范化)的Python实现,既有非列向量化版本,也有半向量化版本:

def L_i(x, y, W):
  """
  unvectorized version. 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 # see notes about delta later in this section
  scores = W.dot(x) # scores becomes of size 10 x 1, the scores for each class
  correct_class_score = scores[y]
  D = W.shape[0] # number of classes, e.g. 10
  loss_i = 0.0
  for j in xrange(D): # iterate over all wrong classes
    if j == y:
      # skip for the true class to only loop over incorrect classes
      continue
    # accumulate loss for the i-th example
    loss_i += max(0, scores[j] - correct_class_score + delta)
  return loss_i

def L_i_vectorized(x, y, W):
  """
  A faster half-vectorized implementation. half-vectorized
  refers to the fact that for a single example the implementation contains
  no for loops, but there is still one loop over the examples (outside this function)
  """
  delta = 1.0
  scores = W.dot(x)
  # compute the margins for all classes in one vector operation
  margins = np.maximum(0, scores - scores[y] + delta)
  # on y-th position scores[y] - scores[y] canceled and gave delta. We want
  # to ignore the y-th position and only consider margin on max wrong class
  margins[y] = 0
  loss_i = np.sum(margins)
  return loss_i

def L(X, y, W):
  """
  fully-vectorized implementation :
  - X holds all the training examples as columns (e.g. 3073 x 50,000 in CIFAR-10)
  - y is array of integers specifying correct class (e.g. 50,000-D array)
  - W are weights (e.g. 10 x 3073)
  """
  # evaluate loss over all examples in X without using any for loops
  # left as exercise to reader in the assignment

从这一部分可以看出,SVM损失采用一种特定的方法来衡量训练数据预测与正确值标签的一致性。另外,对训练集做出良好的预测相当于使损失最小化。

现在我们要做的就是想出一种求可以最小化损失的权重的方法。

Parctical Considerations

设置$\Delta$。我们跳过了超参数和它的设定。它应该设置为怎样的值呢?我们是否需要对它进行交叉验证呢?事实证明在所有情况下,$\Delta = 1$是安全可行的设置。超参数$\Delta$和$\lambda$似乎是两个不同的超参数,但实际上他们控制着相同的权衡:在数据损失和规范化损失之间的权衡。理解这一点的关键是权重W的大小对分数有直接的影响(也就是他们之间的差异):随着我们缩小W中的值,分数的差距也会缩小,随着我们放大权重W,分数差异也会变得更大。因此,在分数之间的边界值的确切值(比如$\Delta = 1$,$\Delta = 100$)某种程度上没有什么意义因为权重可以随意的压缩或者放大差距。因此,唯一的权衡就是我们允许权重如果变化(通过规范化程度$\lambda$)。

与二分SVM的关系。你之前可能了解过二分SVM,它对应的第i个样本的损失函数可以写为:

$$L_i = C \max(0, 1 - y_i w^Tx_i) + R(W)$$

C是一个超参数,$y_i \in { -1,1 }$。可以将二分SVM看做多维SVM的一个特例(只有两个类别)。C和$\lambda$控制着相同的权衡,并且它们之间的关系是$C \propto \frac{1}{\lambda}$。

Softmax classifier

SVM是两种最常用的分类器之一。另一个常用的选择就是Softmax 分类器,它有一个不同的损失函数。如果你之前听过binary Logistic Regression classifier,那么Softmax分类器就是将它扩展到了多个类别。不同于SVM将输出$f(x_i,W)$作为每个类别的分数(未经校准而且难以转化含义)。Softmax分类器给一个相对更加直接的输出(正则类别概率)。在Softmax分类器中,映射函数$f(x_i;W)=Wx_i$不变,但是我们现在将这些分数转化为每个类别的未正则化的log概率并且用cross-entropy loss代替hinge loss

$$L_i = -\log\left(\frac{e^{f_{y_i}}}{ \sum_j e^{f_j} }\right) \hspace{0.5in} \text{or equivalently} \hspace{0.5in} L_i = -f_{y_i} + \log\sum_j e^{f_j}$$

我们用$f_j$表示第j个向量中的元素关于类别$f$的分数。像之前一样,数据集完整的损失是所有训练样本的$L_i$平均值的规范化$R(W)$。$f_j(z) = \frac{e^{z_j}}{\sum_k e^{z_k}}$ 就是softmax function:它将任意实数分数(以$z$为单位),并将其压缩到一个介于0和1之间的向量之和,并使其和为1。

信息论角度。一个“真”概率分布$p$和一个似然估计分布$q$之间的交叉熵定义如下:

$$H(p,q) = - \sum_x p(x) \log q(x)$$

因此Softmax分类器就是在估计类别概率($q = e^{f_{y_i}} / \sum_j e^{f_j}$)和“真”概率分布之间最小化交叉熵。

Probabilistic interpretation。看下面的表达式:

$$P(y_i \mid x_i; W) = \frac{e^{f_{y_i}}}{\sum_j e^{f_j} }$$

能够被理解成给定图片$x_i$和权重参数$W$下正确标签$y_i$的条件概率。为了说明这点,记住Softmax分类器将输出向量$f$的值变成非正则化的log概率。因此指数运算后给出了(非正则化)概率,然后除法运算实现了正则化以至于概率和为1。因此在概率解释中,我们要最小化正确类别的负log概率,也可以理解为实现极大似然估计(maximum likelihood estimation)。这个观点的一个好的特征就是我们现在可以将完全损失函数中的规范化项$R(W)$解释为来自一个Gaussian prior的权重矩阵$W$,这个矩阵时通过Maximum a Posterior (MAP)estimation而不是MLE。

Practical Issues:Numeric stability。当实际写Softmax函数的代码时,中间值$e^{f_{y_i}}$和$\sum_j e^{f_j}$因为指数计算会可能变得非常大。除以一个非常大的数会不稳定,所以使用正则化技巧很重要。注意到如果我们在分子分母同时乘以一个常数$C$,我们可以得到下面的表达式:

$$\frac{e^{f_{y_i}}}{\sum_j e^{f_j}}
= \frac{Ce^{f_{y_i}}}{C\sum_j e^{f_j}}
= \frac{e^{f_{y_i} + \log C}}{\sum_j e^{f_j + \log C}}$$

我们可以任意选择$C$的值。它不会改变结果你,但是我们可以使用这个值去提高计算稳定性。一个常用的选择是$\log C = -\max_j f_j$。这说明我们应该移动向量$f$中的值,使其最高值为0。代码如下:

f = np.array([123, 456, 789]) # example with 3 classes and each having large scores
p = np.exp(f) / np.sum(np.exp(f)) # Bad: Numeric problem, potential blowup

# instead: first shift the values of f so that the highest number is 0:
f -= np.max(f) # f becomes [-666, -333, 0]
p = np.exp(f) / np.sum(np.exp(f)) # safe to do, gives the correct answer

为了明确,SVM分类器使用hinge loss,或者有时叫做max-margin loss。Softmax 分类器使用cross-entropy loss。Softmax分类器名字来源于它使用的Softmax函数,用来把原始类别分数转化成正则化的正数且求和为1,这样交叉熵就可以被应用。

SVM vs. Softmax

一个可以帮助理解SVM和Softmax分类器的区别的图片。


distinction

一个数据点的SVM和Softmax分类器之间的区别示例。在这两种情况下,我们都需要计算相同的分数向量$f$(例如通过之前的矩阵乘法)。不同之处在于对$f$中分数的理解:SVM将它们理解为类别的分数,他的损失函数让正确的分类(类别2,蓝色)的分数高于其他分类的分数。Softmax分类器将分数解释为每个分类的(非正则化)的对数概率,然后让正确分类的(正则化)对数概率高(相当于它的负数最低)。对于Softmax分类器,这个例子的最终损失是1.58(SVM)和1.04(注意这里1.04使用自然对数),但要注意这些数字是不可比较的;它们只与在同一分类器和相同数据内计算的损失有关。


Softmax classifier provides "probailities" for each class。与计算未经校准且不易解释所有类别分数的SVM不同,Softmax分类器允许我们计算所有标签的“概率”。例如,给定一副图像,SVM分类器可能为“cat”,“dog”和“ship”类别提供分数[12.5, 0.6, -23.0]。Softmax分类器可以改为计算三个标签的概率[0.9, 0.09, 0.0],这可以让你解释对每个类别的信心。然而,我们把“概率”一词放在引号中的原因是,这些概率的峰值或扩散直接取决于规范化化强度$\lambda$,这是你可以控制的参数。比如,假定三个类别的未正则化log概率是[1, -2, 0]。那么Softmax函数会计算:
$$[1, -2, 0] \rightarrow [e^1, e^{-2}, e^0] = [2.71, 0.14, 1] \rightarrow [0.7, 0.04, 0.26]$$

现在,如果规范化强度$\lambda$比较高,那么权重$W$会被惩罚更多就变成更小的权重$W$了。比如,假定权重小一半变成[0.5, -1, 0]。Softmax现在回计算:
$$[0.5, -1, 0] \rightarrow [e^{0.5}, e^{-1}, e^0] = [1.65, 0.37, 1] \rightarrow [0.55, 0.12, 0.33]$$

概率现在更加分散。而且,由于非常强的规范化强度$\lambda$,在权重趋向于小数值的极限内,输出概率将接近均匀分布。因此,有Softmax分类器计算的概率更好的被认为是置信度,同SVM一样,分数的排序是可以解释的。

交互web demo


可交互web demo


总结

  • We defined a score function from image pixels to class scores (int this section, a linear function that depends on weights W and biases b).
  • Unlike kNN classifier, the advantage of this parametric approach is that once we learn the parameters we can discard the training data. Additionally, the prediction for a new test iamge is fast since it requires a single matrix multiplication with W, not an exhaustive comparison to every single training example.
  • We introduced the bias trick, which allows us to fold the bias vector into the weight matrix for convenience of only having to keep track of one parameter matrix.
  • We defined a loss function (we introduced two commonly used losses for linear classifiers: the SVM and the Softmax) that measures how compatible a given set of parameters is with respect to the ground truth labels in the training dataset. We also saw that the loss function was defined in such way that making good predictions on the training data is equivalent to having a small loss.

下一步是如何有效的确定能给到最低损失的参数。这个过程叫做optimization(优化)。

©著作权归作者所有,转载或内容合作请联系作者
  • 序言:七十年代末,一起剥皮案震惊了整个滨河市,随后出现的几起案子,更是在滨河造成了极大的恐慌,老刑警刘岩,带你破解...
    沈念sama阅读 194,319评论 5 459
  • 序言:滨河连续发生了三起死亡事件,死亡现场离奇诡异,居然都是意外死亡,警方通过查阅死者的电脑和手机,发现死者居然都...
    沈念sama阅读 81,801评论 2 371
  • 文/潘晓璐 我一进店门,熙熙楼的掌柜王于贵愁眉苦脸地迎上来,“玉大人,你说我怎么就摊上这事。” “怎么了?”我有些...
    开封第一讲书人阅读 141,567评论 0 319
  • 文/不坏的土叔 我叫张陵,是天一观的道长。 经常有香客问我,道长,这世上最难降的妖魔是什么? 我笑而不...
    开封第一讲书人阅读 52,156评论 1 263
  • 正文 为了忘掉前任,我火速办了婚礼,结果婚礼上,老公的妹妹穿的比我还像新娘。我一直安慰自己,他们只是感情好,可当我...
    茶点故事阅读 61,019评论 4 355
  • 文/花漫 我一把揭开白布。 她就那样静静地躺着,像睡着了一般。 火红的嫁衣衬着肌肤如雪。 梳的纹丝不乱的头发上,一...
    开封第一讲书人阅读 46,090评论 1 272
  • 那天,我揣着相机与录音,去河边找鬼。 笑死,一个胖子当着我的面吹牛,可吹牛的内容都是我干的。 我是一名探鬼主播,决...
    沈念sama阅读 36,500评论 3 381
  • 文/苍兰香墨 我猛地睁开眼,长吁一口气:“原来是场噩梦啊……” “哼!你这毒妇竟也来了?” 一声冷哼从身侧响起,我...
    开封第一讲书人阅读 35,192评论 0 253
  • 序言:老挝万荣一对情侣失踪,失踪者是张志新(化名)和其女友刘颖,没想到半个月后,有当地人在树林里发现了一具尸体,经...
    沈念sama阅读 39,474评论 1 290
  • 正文 独居荒郊野岭守林人离奇死亡,尸身上长有42处带血的脓包…… 初始之章·张勋 以下内容为张勋视角 年9月15日...
    茶点故事阅读 34,566评论 2 309
  • 正文 我和宋清朗相恋三年,在试婚纱的时候发现自己被绿了。 大学时的朋友给我发了我未婚夫和他白月光在一起吃饭的照片。...
    茶点故事阅读 36,338评论 1 326
  • 序言:一个原本活蹦乱跳的男人离奇死亡,死状恐怖,灵堂内的尸体忽然破棺而出,到底是诈尸还是另有隐情,我是刑警宁泽,带...
    沈念sama阅读 32,212评论 3 312
  • 正文 年R本政府宣布,位于F岛的核电站,受9级特大地震影响,放射性物质发生泄漏。R本人自食恶果不足惜,却给世界环境...
    茶点故事阅读 37,572评论 3 298
  • 文/蒙蒙 一、第九天 我趴在偏房一处隐蔽的房顶上张望。 院中可真热闹,春花似锦、人声如沸。这庄子的主人今日做“春日...
    开封第一讲书人阅读 28,890评论 0 17
  • 文/苍兰香墨 我抬头看了看天上的太阳。三九已至,却和暖如春,着一层夹袄步出监牢的瞬间,已是汗流浃背。 一阵脚步声响...
    开封第一讲书人阅读 30,169评论 1 250
  • 我被黑心中介骗来泰国打工, 没想到刚下飞机就差点儿被人妖公主榨干…… 1. 我叫王不留,地道东北人。 一个月前我还...
    沈念sama阅读 41,478评论 2 341
  • 正文 我出身青楼,却偏偏与公主长得像,于是被迫代替她去往敌国和亲。 传闻我的和亲对象是个残疾皇子,可洞房花烛夜当晚...
    茶点故事阅读 40,661评论 2 335

推荐阅读更多精彩内容