CS231n Convolutional Neural Networks for Visual Recognition —— optimization

1. 多类 SVM 的损失函数(Multiclass SVM loss)

在给出类别预测前的输出结果是实数值, 也即根据 score function 得到的 score(s=f(xi,W)s=f(x_i, W)),

Li=∑j≠yimax(0,sj−syi+Δ),Δ=1(一般情况下)

L_i=\sum_{j\neq y_i}\max(0, s_j-s_{y_i}+\Delta), \quad \Delta=1(一般情况下)

  • yiy_i 表示真实的类别,syis_{y_i} 在真实类别上的得分;
  • sj,j≠yis_j, j\neq y_i 在其他非真实类别上的得分,也即预测错误时的得分;

则在全体训练样本上的平均损失为:

L=1N∑i=1NLi

L = \frac1N\sum_{i=1}^NL_i

delta = 1
scores = np.dot(W, X)
correct_scores = scores[y, np.arange(num_samples)]diff = score - correct_scores + delta
diff[y, np.arange(num_samples)] = 0thresh = np.maximum(0, diff)
loss = np.sum(thresh)
loss /= num_samples

2. 优化(optimization):梯度计算

首先来看损失函数的定义,如下为第 ii 个样本的损失值(Wc×d⋅Xd×NW_{c\times d}\cdot X_{d\times N},dd 特征向量的维度,cc:输出类别的个数):

Li==∑j≠yimax(0,sj−syi+1)∑j≠yi[max(0,wTjxi−wTyixi+1)]

\begin{split} L_i =&\sum_{j\neq y_i}\max(0, s_j-s_{y_i}+1)\\ =&\sum_{j\neq y_i} \left[ \max(0, w_j^Tx_i - w_{y_i}^Tx_i + 1) \right] \end{split}

  • 遍历 jj,就是遍历 WW 每一列的每一个元素, wTjxi⇒j=1,…,c;i=1,…,Nw_j^Tx_i ⇒ j=1,\ldots,c; i=1,\ldots,N
  • wTjw_j^T 表示 WW 的每一行,共 cc 行;

下面的额关键是如何求得损失函数关于参数 wj,wyiw{j, w_{y_i}} 的梯度:

∇wyiLi=−⎛⎝∑j≠yi1(wTjxi−wTyixi+Δ>0)⎞⎠xi∇wjLi=1(wTjxi−wTyixi+Δ>0)xij≠yi

\begin{split} &\nabla_{w_{y_i}} L_i = - \left( \sum_{j\neq y_i} \mathbb{1}(w_j^Tx_i - w_{y_i}^Tx_i + \Delta > 0) \right) x_i\\ &\nabla_{w_j} L_i = \mathbb{1}(w_j^Tx_i - w_{y_i}^Tx_i + \Delta > 0) x_i\quad j\neq y_i \end{split}

binary = thresh
binary[thresh > 0] = 1          # 实现 indicator 函数col_sum = np.sum(binary, axis=0)
binary[y, np.arange(num_samples)] = -col_sumdW = np.dot(binary, X.T)        # binary 维度信息:c*N, X 维度信息:d*N
dW /= NdW += reg * W

多类 SVM 的损失函数及其梯度计算相关推荐

  1. 多类SVM的损失函数

    原文:Multi-class SVM Loss  作者: Adrian Rosebrock  翻译: KK4SBB 责编:何永灿 from: http://geek.csdn.net/news/det ...

  2. 多分类交叉熵损失函数的梯度计算过程推导

    Softmax函数公式: Si 代表的是第i个神经元的输出 其中wij 是第i个神经元的第 j 个权重,b是偏移值.zi 表示该网络的第i个输出 隐藏层输出经过softmax: 具体过程如下图所示: ...

  3. 最优化基础:损失函数可视化、折页损失函数 梯度计算

      本文主要内容为 CS231n 课程的学习笔记,主要参考 学习视频 和对应的 课程笔记翻译 ,感谢各位前辈对于深度学习的辛苦付出.在这里我主要记录下自己觉得重要的内容以及一些相关的想法,希望能与大家 ...

  4. Contrastive Loss 对比损失函数及梯度的计算

    Contrastive loss 最初源于 Yann LeCun "Dimensionality Reduction by Learning an Invariant Mapping&quo ...

  5. P3:线性分类、损失函数与梯度下降

    子豪兄YYDS: https://www.bilibili.com/video/BV1K7411W7So?p=3 一.线性分类器 线性分类器,确定一条直线,让用例可以分为两类,线性分类器的关键在于一个 ...

  6. CS231n学习笔记-损失函数、损失函数与梯度下降

    第三讲 线性分类.损失函数与梯度下降 问题:线性分类器是不能对非线性数据分类 损失函数 Multiclass SVM loss SVM(支持向量机)采取中庸的方法进行分类,分类时采用最大适配进行分类, ...

  7. 可视化深入理解损失函数与梯度下降 | 技术头条

    作者 | Hugegene 译者 | 刘畅 责编 | Rachel 出品 | AI科技大本营(id:rgznai100) [导语]本文对梯度函数和损失函数间的关系进行了介绍,并通过可视化方式进行了详细 ...

  8. Pytorch中的向前计算(autograd)、梯度计算以及实现线性回归操作

    在整个Pytorch框架中, 所有的神经网络本质上都是一个autograd package(自动求导工具包) autograd package提供了一个对Tensors上所有的操作进行自动微分的功能. ...

  9. 梯度、梯度法、python实现神经网络的梯度计算

    [机器学习]梯度.梯度法.python实现神经网络的梯度计算 一.python实现求导的代码: 二.what is 梯度 三.使用梯度法寻找神经网络的最优参数 四.神经网络的梯度计算 一.python ...

最新文章

  1. cisco PIX防火墙的配置及注解完全手册
  2. SLAM综述-Lidar SLAM
  3. 音视频互动开发平台之AnyChat SDK
  4. HSV RGB颜色空间互转
  5. kubelet创建容器的步骤
  6. 如何看待 Apache Log4j 2 远程代码执行漏洞?
  7. jrebel不能使用ajax,Jrebel不生效的原因和解决办法
  8. mysql8 修改root密码
  9. ESRI ArcGIS 9.0系列软件报价(转)
  10. OpenCV-图像处理(28、轮廓发现(find contour in your image))
  11. Html学习手册(W3CSchool.chm)
  12. Java项目集成永中文档在线预览
  13. canvas绘制图形的相关API
  14. 日积(Running)月累(ZSSURE):Learning How to Learn,学习习惯
  15. [原创]网页中自动连续播放音乐文件的实现
  16. php pecl 扩展,PECL
  17. 吴恩达深度学习课后编程题讲解(python)
  18. 人脸识别、行人识别、图片库
  19. 写论文第二步——管理文献 上(文献管理软件)
  20. 数组转对象 和 对象转数组的简单处理

热门文章

  1. 计算机英语微课,【计算机英语论文】大学计算机基础微课设计研究
  2. java.io.IOException: Server asks us to fall back to SIMPLE auth, but this client is confi的问题
  3. 虚拟机 之 root 用户密码重新设定(忘记了)
  4. socket简介和udp网络程序-发送、接收数据
  5. java jsp验证码_JSP实现随机验证码
  6. ++库 照片风格转换风格_如何用神经网络实现照片的风格转换
  7. ediplus 复制编辑一列_Excel中如何使用公式查找一列中的重复值并且在另一列里面列出来...
  8. 来看一下:构造函数的小秘密详解
  9. python对于文件的读取和重建
  10. LeetCode 304. 二维区域和检索 - 矩阵不可变(动态规划)