CS231n Convolutional Neural Networks for Visual Recognition —— optimization

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

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

Li=∑j≠yimax(0,sj−syi+Δ),Δ=1(一般情况下)
  • yi 表示真实的类别,syi 在真实类别上的得分;
  • sj,j≠yi 在其他非真实类别上的得分,也即预测错误时的得分;

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

L=1N∑i=1NLi
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)] = 0 thresh = np.maximum(0, diff)
loss = np.sum(thresh)
loss /= num_samples

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

首先来看损失函数的定义,如下为第 i 个样本的损失值(Wc×d⋅Xd×N,d 特征向量的维度,c:输出类别的个数):

Li==∑j≠yimax(0,sj−syi+1)∑j≠yi[max(0,wTjxi−wTyixi+1)]
  • 遍历 j,就是遍历 W 每一列的每一个元素, wTjxi⇒j=1,…,c;i=1,…,N
  • wTj 表示 W 的每一行,共 c 行;

下面的额关键是如何求得损失函数关于参数 wj,wyi 的梯度:

∇wyiLi=−⎛⎝∑j≠yi1(wTjxi−wTyixi+Δ>0)⎞⎠xi∇wjLi=1(wTjxi−wTyixi+Δ>0)xij≠yi
binary = thresh
binary[thresh > 0] = 1 # 实现 indicator 函数 col_sum = np.sum(binary, axis=0)
binary[y, np.arange(num_samples)] = -col_sum dW = np.dot(binary, X.T) # binary 维度信息:c*N, X 维度信息:d*N
dW /= N dW += reg * W

多类 SVM 的损失函数及其梯度计算的更多相关文章

  1. Softmax 损失-梯度计算

    本文介绍Softmax运算.Softmax损失函数及其反向传播梯度计算, 内容上承接前两篇博文 损失函数 & 手推反向传播公式. Softmax 梯度 设有K类, 那么期望标签y形如\([0, ...

  2. 【CS231N】2、多类SVM

    一.疑问 1. assignments1 linear_svm.py文件的函数 svm_loss_naive中,使用循环的方式实现梯度计算 linear_svm.py文件的函数 svm_loss_ve ...

  3. 实现属于自己的TensorFlow(二) - 梯度计算与反向传播

    前言 上一篇中介绍了计算图以及前向传播的实现,本文中将主要介绍对于模型优化非常重要的反向传播算法以及反向传播算法中梯度计算的实现.因为在计算梯度的时候需要涉及到矩阵梯度的计算,本文针对几种常用操作的梯 ...

  4. [吴恩达机器学习笔记]12支持向量机1从逻辑回归到SVM/SVM的损失函数

    12.支持向量机 觉得有用的话,欢迎一起讨论相互学习~Follow Me 参考资料 斯坦福大学 2014 机器学习教程中文笔记 by 黄海广 12.1 SVM损失函数 从逻辑回归到支持向量机 为了描述 ...

  5. 实验四 (1):定义一个形状类(Shape)方法:计算周长,计算面积

    (1)定义一个形状类(Shape)方法:计算周长,计算面积子类:矩形类(Rectangle) :额外的方法:differ() 计算长宽差圆形类(Circle)三角形类(Triangle)正方形类(Sq ...

  6. Theano学习-梯度计算

    1. 计算梯度 创建一个函数 \(y\) ,并且计算关于其参数 \(x\) 的微分. 为了实现这一功能,将使用函数 \(T.grad\) . 例如:计算 \(x^2\) 关于参数 \(x\) 的梯度. ...

  7. 机器学习进阶-图像梯度计算-scharr算子与laplacian算子(拉普拉斯) 1.cv2.Scharr(使用scharr算子进行计算) 2.cv2.laplician(使用拉普拉斯算子进行计算)

    1. cv2.Scharr(src,ddepth, dx, dy), 使用Scharr算子进行计算 参数说明:src表示输入的图片,ddepth表示图片的深度,通常使用-1, 这里使用cv2.CV_6 ...

  8. 日期时间类:Date,Calendar,计算类:Math

    日期时间类 计算机如何表示时间? 时间戳(timestamp):距离特定时间的时间间隔. 计算机时间戳是指距离历元(1970-01-01 00:00:00:000)的时间间隔(ms). 计算机中时间2 ...

  9. pytorch 反向梯度计算问题

    计算如下\begin{array}{l}{x_{1}=w_{1} * \text { input }} \\ {x_{2}=w_{2} * x_{1}} \\ {x_{3}=w_{3} * x_{2} ...

随机推荐

  1. Python: PS 图像调整--对比度调整

    本文用 Python 实现 PS 里的图像调整–对比度调整.具体的算法原理如下: (1).nRGB = RGB + (RGB - Threshold) * Contrast / 255 公式中,nRG ...

  2. es6 -- set 数据结构

    ES6 提供了新的数据结构 Set.它类似于数组,但是成员的值都是唯一的,没有重复的值. Set 本身是一个构造函数,用来生成 Set 数据结构. const s = new Set(); [2, 3 ...

  3. xshell --- 查看和关闭 进程

    netstat -apn | grep 80 kill -l PID  关闭进程

  4. Js将类数组转化为数组

    说起伪数组,大家可能会想到arguments, 这个我们函数参数的一个类数组,是类数组的代表. 1.拥有length属性,可以使用下标来访问元素,这两点和数组相同. 2.不能使用数组的方法,他们不能使 ...

  5. 关于node的fs路径问题

    我在写一个静态网页的服务器中遇到的一个问题,当时没理解就去查了 因为要访问最外部的json文件,就定义了一个模块读取文件,然后在外边的server.js中调用 但是一直路径错误. 我相信很多人和我一样 ...

  6. POJ 2455 二分+网络流

    题意: 思路: 莫名其妙TLE 啊woc我A了一坨题的网络流模板有问题 !!!! 在常数上会慢 (一个等于号 啊啊啊) 改了所有网络流有关的文章- .... //By SiriusRen #inclu ...

  7. Inversion of Control Containers and the Dependency Injection pattern--Martin Fowler

    原文地址:https://martinfowler.com/articles/injection.html n the Java community there's been a rush of li ...

  8. Rabin-Karp 算法

    Rabin-Karp字符串查找算法 http://blog.chinaunix.net/uid-26548237-id-3968132.html

  9. 如何监控和解决SQL Server的阻塞(1) (当前阻塞)

    1. 什么是"阻塞"? 阻塞是SQL数据库应用"锁"机制的一个副作用.当一个应用请求针对某个数据库对象(例如全表,某行数据, 或者是某个数据页)加锁后,那么这个 ...

  10. ActiveMQ学习总结(3)——spring整合ActiveMQ

    1.参考文献 Spring集成ActiveMQ配置 Spring JMS异步发收消息 ActiveMQ 2.环境 在前面的一篇ActiveMQ入门实例中我们实现了消息的异步传送,这篇博文将如何在spr ...