• 作者:韩信子@ShowMeAI
  • 教程地址:https://www.showmeai.tech/tutorials/37
  • 本文地址:https://www.showmeai.tech/article-detail/262
  • 声明:版权所有,转载请联系平台与作者并注明出处
  • 收藏ShowMeAI查看更多精彩内容

本系列为 斯坦福CS231n《深度学习与计算机视觉(Deep Learning for Computer Vision)》的全套学习笔记,对应的课程视频可以在 这里 查看。更多资料获取方式见文末。


引言

在上一篇 深度学习与计算机视觉教程(2) - 图像分类与机器学习基础 内容中,我们对线性分类器做了一些介绍,我们希望线性分类器能够准确地对图像进行分类,要有一套优化其权重参数的方法,这就是本篇ShowMeAI要给大家介绍到的损失函数与最优化相关的知识。

本篇重点

  • 损失函数
  • 数据损失与正则损失
  • SVM 损失
  • Softmax损失
  • 优化策略
  • 梯度计算方法
  • 梯度下降

1.线性分类:损失函数

1.1 损失函数的概念

回到之前讲解过的小猫分类示例,这个例子中权重值 WWW 非常差,因为猫类别的得分非常低(-96.8),而狗(437.9)和船(61.95)比较高。

我们定义损失函数(Loss Function)(有时也叫代价函数 Cost Function目标函数 ObjectiveLLL 来衡量对预估结果的「不满意程度」。当评分函数输出结果与真实结果之间差异越大,损失函数越大,反之越小。

对于有 NNN 个训练样本对应 NNN 个标签的训练集数据 (xi,yi)(x_{i},y_{i})(xi,yi)),损失函数定义为:

L=1N∑i=1NLi(f(xi,W),yi)L=\frac{1}{N} \sum_{i=1}^NL_i(f(x_i,W), y_i) L=N1i=1NLi(f(xi,W),yi)

  • 即每个样本损失函数求和取平均。目标就是找到一个合适的 WWW 使 LLL 最小。
  • 注意:真正的损失函数 LLL 还有一项正则损失 R(W)R(W)R(W),下面会有说明。

损失函数有很多种,下面介绍最常见的一些。

1.2 多类支持向量机损失 (Multiclass Support Vector Machine Loss)

SVM 的知识可以参考ShowMeAI的图解机器学习教程中的文章支持向量机模型详解,多类 SVM 可以看作二分类 SVM 的一个推广,它可以把样本数据分为多个类别。

1) 数据损失(data loss)

SVM 的损失函数想要 SVM 在正确分类上的得分始终比不正确分类上的得分高出一个边界值 Δ\DeltaΔ

我们先看一条数据样本(一张图片)上的损失函数 LiL_iLi 如何定义,根据之前的描述,第 iii 个数据 (xi,yi)(x_{i},y_{i})(xi,yi) )中包含图像 xix_ixi 的像素和代表正确类别的标签 yiy_iyi。给评分函数输入像素数据,然后通过公式 f(xi,W)f(x_i, W)f(xi,W) )来计算不同分类类别的分值。

这里我们将所有分值存放到 sss 中,第 jjj 个类别的得分就是 sss 的第 jjj 个元素: sj=f(xi,Wj)s_j = f(x_i, W_j)sj=f(xi,Wj)。针对第 iii 条数据样本的多类 SVM 的损失函数定义如下:

Li=∑j≠yimax⁡(0,sj−syi+Δ)L_i = \sum_{j\neq y_i} \max(0, s_j - s_{y_i} + \Delta) Li=j=yimax(0,sjsyi+Δ)

直观来看,就是如果评分函数给真实标签的分数比其他某个标签的分数高出 Δ\DeltaΔ,则对该其他标签的损失为 000;否则损失就是 sj−syi+Δs_j - s_{y_i}+ \Deltasjsyi+Δ。要对所有不正确的分类循环一遍。

下面用一个示例来解释一下:

损失函数与最优化; 多类支持向量机损失; 损失												<div id=