希望线性分类器能够准确地对图像进行分类,要有一套优化其权重参数的方法,损失函数与最优化相关的知识。。
0x00 👌 一句话主题描述
希望线性分类器能够准确地对图像进行分类,要有一套优化其权重参数的方法,损失函数与最优化相关的知识。
0x01 😎 调研
1.1 线性分类:损失函数
损失函数(Loss Function)(有时也叫代价函数 Cost Function 或目标函数 Objective) 来衡量对预估结果的「不满意程度」。当评分函数输出结果与真实结果之间差异越大,损失函数越大,反之越小。
对于有 个训练样本对应 个标签的训练集数据 ,损失函数定义为:
- 即每个样本损失函数求和取平均。目标就是找到一个合适的 使 最小。
- 注意:真正的损失函数 还有一项正则损失 ,下面会有说明。
1.2 多类支持 向量机损失 (Multiclass Support Vector Machine Loss)
1) 数据损失(data loss)
SVM 的损失函数想要 SVM 在正确分类上的得分始终比不正确分类上的得分高出一个边界值 。
我们先看一条数据样本(一张图片)上的损失函数 如何定义,根据之前的描述,第 个数据 )中包含图像 的像素和代表正确类别的标签 。给评分函数输入像素数据,然后通过公式 )来计算不同分类类别的分值。
这里我们将所有分值存放到 中,第 个类别的得分就是 的第 个元素: 。针对第 条数据样本的多类 SVM 的损失函数定义如下:
直观来看,就是如果评分函数给真实标签的分数比其他某个标签的分数高出 ,则对该其他标签的损失为 ;否则损失就是 。要对所有不正确的分类循环一遍。
2) 正则化损失(regularization loss)
假设有 1 个数据集和 1 组权重 能够正确地分类每个数据,即所有 都为 ,这样的 是否唯一?其实只要是任意 , 都可以满足 ,因为把差值放大 倍后,仍然会大于 。
所以,我们希望对某些 添加一些偏好,让我们的 W 更趋向于希望的形式,一个常见的做法是向损失函数增加一个正则化惩罚(regularization penalty) ,它同时也能让模型更加泛化。
结合上述思路我们得到完整的多类 SVM 损失函数,它由两个部分组成:数据损失(data loss),即所有样例的平均损失,以及**正则化损失****(regularization loss**)。完整公式如下:
1.3 Softmax 分类器损失
SVM 是最常用的分类器之一,另一个常用的是 Softmax 分类器。Softmax 分类器可以理解为逻辑回归分类器面对多个分类的一般化归纳,又称为多项式逻辑回归(Multinomial Logistic Regression)。
1.4 Softmax 和 SVM 比较
① 计算上有差异
SVM 和 Softmax 分类器对于数据有不同的处理方式。两个分类器都计算了同样的分值向量 (本节中是通过矩阵乘来实现)。不同之处在于对 中分值的解释:
- SVM 分类器将它们看做是类别评分,它的损失函数鼓励正确的类别(本例中是蓝色的类别 2)的分值比其他类别的分值高出至少一个安全边界值。
- Softmax 分类器将这些数值看做是每个类别没有归一化的对数概率,鼓励正确分类的归一化的对数概率变高,其余的变低。
SVM 的最终的损失值是 ,Softmax 的最终的损失值是 ,注意这两个数值大小没有可比性。只在给定同样数据,在同样的分类器的损失值计算中,损失之间比较才有意义。
② 损失的绝对数值不可以直接解释
SVM 的计算是无标定的,而且难以针对所有分类的评分值给出直观解释。Softmax 分类器则不同,它允许我们计算出对于所有分类标签的 「概率」。
但这里要注意,「不同类别概率」 分布的集中或离散程度是由正则化参数 直接决定的。随着正则化参数 不断增强,权重数值会越来越小,最后输出的概率会接近于均匀分布。
也就是说,Softmax 分类器算出来的概率可以某种程度上视作一种对于分类正确性的自信。和 SVM 一样,数字间相互比较得出的大小顺序是可以解释的,但其绝对值则难以直观解释。
③ 实际应用时,SVM 和 Softmax 是相似的
两种分类器的表现差别很小。
- 相对于 Softmax 分类器,SVM 更加 「局部目标化(local objective)」,只要看到正确分类相较于不正确分类,已经得到了比边界值还要高的分数,它就会认为损失值是 ,对于数字个体的细节是不关心的。
- Softmax 分类器对于分数是永不满足的:正确分类总能得到更高的概率,错误分类总能得到更低的概率,损失值总是能够更小。
1.5 优化策略(Optimization Strategy)
**优化策略的目标是:找到能够最小化损失函数值的权重 **。
1) 策略一:随机搜索(Random search)
随机尝试很多不同的权重,然后看其中哪个最好。这是一个差劲的初始方案。
2) 策略二:随机本地搜索
第一个策略可以看做是每走一步都尝试几个随机方向,如果是上山方向就停在原地,如果是下山方向,就向该方向走一步。这次我们从一个随机 开始,然后生成一个随机的扰动 ,只有当 的损失值变低,我们才会更新。
3) 策略三:跟随梯度
前两个策略关键点都是在权重空间中找到合适的方向,使得沿其调整能降低损失函数的损失值。其实不需要随机寻找方向,我们可以直接计算出最好的方向,这个方向就是损失函数的梯度(gradient)。这个方法就好比是感受我们脚下山体的倾斜程度,然后向着最陡峭的下降方向下山。
1.6 梯度计算
计算梯度有两种方法:
- 缓慢的近似方法(数值梯度法),但实现相对简单。
- 分析梯度法,计算迅速,结果精确,但是实现时容易出错,且需要使用微分。
0x02 🤔 整理和总结
- 损失函数,包括数据损失与正则损失
- 多类 SVM 损失与 Softmax 损失比较
- 梯度计算方法(数值梯度与解析梯度)
- 梯度下降优化算法