- 作者:韩信子@ShowMeAI
- 教程地址:http://www.showmeai.tech/tutorials/37
- 本文地址:http://www.showmeai.tech/article-detail/262
- 声明:版权所有,转载请联系平台与作者并注明出处
- 收藏ShowMeAI查看更多精彩内容
本系列为 斯坦福CS231n《深度学习与计算机视觉(Deep Learning for Computer Vision)》的全套学习笔记,对应的课程视频可以在 这里 查看。更多资料获取方式见文末。
引言
在上一篇 深度学习与计算机视觉教程(2) - 图像分类与机器学习基础 内容中,我们对线性分类器做了一些介绍,我们希望线性分类器能够准确地对图像进行分类,要有一套优化其权重参数的方法,这就是本篇ShowMeAI要给大家介绍到的损失函数与最优化相关的知识。
本篇重点
- 损失函数
- 数据损失与正则损失
- SVM 损失
- Softmax损失
- 优化策略
- 梯度计算方法
- 梯度下降
1.线性分类:损失函数
1.1 损失函数的概念
回到之前讲解过的小猫分类示例,这个例子中权重值 W 非常差,因为猫类别的得分非常低(-96.8),而狗(437.9)和船(61.95)比较高。
我们定义损失函数(Loss Function)(有时也叫代价函数 Cost Function 或目标函数 Objective) L 来衡量对预估结果的「不满意程度」。当评分函数输出结果与真实结果之间差异越大,损失函数越大,反之越小。
对于有 N 个训练样本对应 N 个标签的训练集数据 (x_{i},y_{i})),损失函数定义为:
- 即每个样本损失函数求和取平均。目标就是找到一个合适的 W 使 L 最小。
- 注意:真正的损失函数 L 还有一项正则损失 R(W),下面会有说明。
损失函数有很多种,下面介绍最常见的一些。
1.2 多类支持向量机损失 (Multiclass Support Vector Machine Loss)
SVM 的知识可以参考ShowMeAI的图解机器学习教程中的文章支持向量机模型详解,多类 SVM 可以看作二分类 SVM 的一个推广,它可以把样本数据分为多个类别。
1) 数据损失(data loss)
SVM 的损失函数想要 SVM 在正确分类上的得分始终比不正确分类上的得分高出一个边界值 Delta。
我们先看一条数据样本(一张图片)上的损失函数 L_i 如何定义,根据之前的描述,第 i 个数据 (x_{i},y_{i}) )中包含图像 x_i 的像素和代表正确类别的标签 y_i。给评分函数输入像素数据,然后通过公式 f(x_i, W) )来计算不同分类类别的分值。
这里我们将所有分值存放到 s 中,第 j 个类别的得分就是 s 的第 j 个元素: s_j = f(x_i, W_j)。针对第 i 条数据样本的多类 SVM 的损失函数定义如下:
直观来看,就是如果评分函数给真实标签的分数比其他某个标签的分数高出 Delta,则对该其他标签的损失为 0;否则损失就是 s_j - s_{y_i} Delta。要对所有不正确的分类循环一遍。
下面用一个示例来解释一下: