cs231n

cs231n笔记:最优化

橙三吉。 提交于 2019-12-27 17:29:48
本节是cs231学习笔记: 最优化 ,并介绍了梯度下降方法,然后应用到逻辑回归中 引言   在上一节 线性分类器 中提到,分类方法主要有两部分组成:1.基于参数的评分函数。能够将样本映射到类别的分值。2.损失函数。用来衡量预测标签和真是标签的一致性程度。这一节介绍第三个重要部分: 最优化 (optimization)。损失函数能让我们定量的评估得到的权重W的好坏,而最优化的目标就是找到一个W,使得损失函数最小。工作流程如下图: (x,y) 是给定的数据集, W 是权重矩阵,通过初始化得到。向前传递到评分函数中得到类别的评分值并存储在向量 f 中。损失函数计算评分函数值 f 与类标签 y 的差值,正则化损失只是一个关于权重的函数。在梯度下降过程中,我们计算权重的梯度,然后使用梯度更新权重。一旦理解了这三个部分的关系,我们可以用更加复杂的评分函数来代替线性映射,比如神经网络、甚至卷积神经网络等,而损失函数和优化过程这两部分则相对保持不变。 梯度下降   梯度下降的思想是:要寻找某函数的最值,最好的方法就是沿着函数的梯度方向寻找,移动量的大小称为步长。梯度下降的公式如下: 我们常常听说过梯度上升、梯度下降,那么两者的区别又是什么呢?其实这两者是一样的,只是公式中的减法变成加法,因此公式为: 梯度上升是用来求函数的最大值,而梯度下降是用来求最小值。普通的梯度下降版本如下: #

cs231n笔记(二) 最优化方法

佐手、 提交于 2019-12-27 17:29:20
回顾上一节中,介绍了图像分类任务中的两个要点: 假设函数。 该函数将原始图像像素映射为分类评分值。 损失函数 。该函数根据分类评分和训练集图像数据实际分类的一致性,衡量某个具体参数集的质量好坏。 现在介绍第三个要点,也是最后一个关键部分: 最优化Optimization 。最优化是寻找能使得损失函数值最小化的参数 W 的过程,一旦理解了这三个部分是如何相互运作的,我们将会回到第一个要点,然后将其拓展为一个远比线性函数复杂的函数:首先是神经网络,然后是卷积神经网络。而损失函数和最优化过程这两个部分将会保持相对稳定。 损失函数可视化 : 本节讨论的损失函数一般都是定义在高维度的空间中(比如,在 CIFAR-10 中一个线性分类器的权重矩阵大小是 $[10 \times 3073]$ ,就有 30730 个参数),这样要将其可视化就很困难。然而办法还是有的,在 1 个维度或者 2 个维度的方向上对高维空间进行切片,就能得到一些直观感受。例如,随机生成一个权重矩阵 W ,将其看做向量,该矩阵就与高维空间中的一个点对应。然后沿着某个维度方向前进的同时记录损失函数值的变化。换句话说,就是生成一个随机的方向 $W_1$ 并且沿着此方向计算损失值,计算方法是根据不同的 $a$ 值来计算 $L(W + aW_1)$ 。这个过程将生成一个图表,其 $x$ 轴是 $a$ 值,$y$ 轴是损失函数值

cs231n训练营学习笔记(7)

↘锁芯ラ 提交于 2019-12-24 01:41:43
反向传播 计算复杂函数的解析梯度,(每个变量的导数指明了整个表达式对于该变量的值的敏感程度) 利用计算图这个框架 圆形节点表示运算,也被叫做门(gate) 复杂函数梯度根据链式法则反向递归得到,每个圆形节点可得到局部梯度 下面是一个例子,为了方便理解 更复杂的情况是,各个变量,比如上面局部梯度的x,y,z是向量的时候,局部梯度就变成了雅可比矩阵 但是当维数太大以及一次需要同时处理很多输入的时候,计算雅可比矩阵不太现实 如果节点处的计算是取最大值,那么可以通过分析,知道雅可比矩阵是个对角矩阵,直接计算填入 乘法的向量化梯度计算时候可以通过梯度的维度回推哪个矩阵在前,哪个矩阵该转置,梯度总是和变量一样的维度比较好确认。但是比如说2*2就很难判断是不是转置过了的 这里通过具体看改变了某个x是如何影响q的,可以看出来是变化了一列W,要和q这个列向量相乘需要转置 在线性分类器中,权重和输入是进行点积 ,这说明输入数据的大小对于权重梯度的大小有影响。例如,在计算过程中对所有输入数据样本 乘以1000,那么权重的梯度将会增大1000倍,这样就必须降低学习率来弥补。这就是为什么数据预处理关系重大,它即使只是有微小变化,也会产生巨大影响。 前向后向程序运行: 来源: CSDN 作者: 就叫荣吧 链接: https://blog.csdn.net/qq_29843303/article/details

CS231n与深度学习入门>>>学习周记1

无人久伴 提交于 2019-12-23 17:55:44
目录 1 感知机 1.1 感知机的基本概念 1.2 感知机实现的简单逻辑电路 1.2.1 与门(AND gate) 1.2.2与非门与或门(NAND gate,OR gate) 1.2.3 感知机的实现 1.2.4 阶段小结 1.3 感知机的局限性 1.3.1 异或门(XOR gate) 1.3.2 阶段小结 2 基本分类器 2.1 最近邻分类器(Nearest Neighbor Classifier) 2.2 K近邻分类器(k - Nearest Neighbor Classifier) 2.3 交叉验证(Cross-validation) 2.4 阶段小结 3 线性分类器 3.1 计分函数(Score function) 3.2 损失函数(Loss function) 3.2.1 支持向量机损失(Multiclass Support Vector Machine (SVM) ) 3.2.2 Softmax损失 3.3 阶段小结 4 优化(Optimization) 4.1 梯度计算 4.2 梯度下降法(Gradient Descent) 4.3 阶段小结 1 感知机 1.1 感知机的基本概念 一个感知机类似于多个神经元构成的一个整体,接收多个信号,输出一个信号。感知机的信号可以形成流,向前方输送信息。而感知机的信号只有"0"和"1"两种取值。

cs231n 作业1两层神经网络

十年热恋 提交于 2019-12-16 16:25:43
from __future__ import print_function from builtins import range from builtins import object import numpy as np import matplotlib . pyplot as plt from past . builtins import xrange class TwoLayerNet ( object ) : """ A two-layer fully-connected neural network. The net has an input dimension of N, a hidden layer dimension of H, and performs classification over C classes. We train the network with a softmax loss function and L2 regularization on the weight matrices. The network uses a ReLU nonlinearity after the first fully connected layer. In other words, the network has the following

cs231n笔记(3)

自作多情 提交于 2019-12-11 06:53:04
1. Hinge Loss 表达式 Hinge loss也称之为Multiclass SVM loss L ( W ) = 1 / N ∑ i = 1 N ∑ i ≠ j m a x ( 0 , S i − S j + 1 ) L(W) =1/N \sum_{i=1}^N \sum_{i\neq j} max(0, S_i-Sj+1) L ( W ) = 1 / N ∑ i = 1 N ​ ∑ i  ​ = j ​ m a x ( 0 , S i ​ − S j + 1 ) 2. 正则化 当Hinge loss = 0 时,W的取值不唯一,而通过添加正则项可以使得w的值唯一。 3. Softmax 与cross-entropy损失公式 Softmax: P ( Y = k ∣ X = x i ) = e s k ∑ j e s j P(Y=k|X=x_i)=\frac{e^{s_k}}{\sum_j e^{s_j}} P ( Y = k ∣ X = x i ​ ) = ∑ j ​ e s j ​ e s k ​ ​ cross-entropy loss: L = − l o g ( P ( Y = k ∣ X = x i ) ) L = -log(P(Y=k|X=x_i)) L = − l o g ( P ( Y = k ∣ X = x i ​ ) ) 最大值是无穷大,最小值是0

李飞飞计算机视觉课CS231n第四天

坚强是说给别人听的谎言 提交于 2019-12-11 05:44:00
1. Hinge Loss 表达式 L i = ∑ j ≠ y i m a x ( 0 , s j − s y i + 1 ) L_{i}=\sum_{j\ne y_{i}}max(0, s_{j}-s_{y_{i}}+1) L i ​ = j  ​ = y i ​ ∑ ​ m a x ( 0 , s j ​ − s y i ​ ​ + 1 ) 函数存在一个问题,即当 L = 0 L=0 L = 0 的时候 w w w 并不唯一,而使用正则项可以解决这个问题。 2. SoftMax 表达式 P ( Y = k ∣ X = x i ) = e s k ∑ j e s j P(Y=k|X=x_{i})=\frac{e^{s}k}{\sum_{j}e^{s}j} P ( Y = k ∣ X = x i ​ ) = ∑ j ​ e s j e s k ​ ,其中 s = f ( x i ; W ) s=f(x_{i};W) s = f ( x i ​ ; W ) 来源: CSDN 作者: cofisher 链接: https://blog.csdn.net/qq_36758914/article/details/103465729

CS231n学习笔记二

痴心易碎 提交于 2019-12-10 07:59:00
线性分类器 1.得分函数 (该函数将图像的像素值映射到每个类的置信分数) 线性分类器: 其中参数W是权重,参数b是偏差向量。需要注意的几点: 输入数据 是给定的,我们可以控制参数W,b的设置。我们的目标是在整个训练集中,以这样的方式计算分数匹配标签,直觉上我们希望正确的类有一个评分的得分高于不正确的类。 这种方法的一个优点是使用训练数据来学习参数W,b,一旦学习完成,我们可以丢弃整个训练集,只保留学习的参数。新的测试图像可以简单地通过函数计算的分数进行分类。 对测试图像进行分类只需要一个矩阵乘法和加法,这比将测试图像与所有训练图像进行比较要快得多。 线性分类器计算一个类的分数时,是计算3个颜色通道的所有像素值的加权和。根据我们为这些权重设置的值,函数有能力“喜欢”或“不喜欢”图像中某些位置的某些颜色(取决于每个权重的符号)。例如,如果图像的侧面有很多蓝色(可能与水相对应),那么该图像更可能是“ship”类。这样我们会期望“ship”在其蓝色通道权值中有很多正权值(蓝色的出现会增加ship的得分),而在红色或绿色通道中出现负权值(红色/绿色的出现会降低ship的得分)。 通常我们将W,b合写在一起,将 增加一个维度 数据预处理: 图像原始像素值是在[0,255]中。在机器学习中,经常需要对输入的特征进行标准化处理(在图像中,每个像素都被认为是一个特征)。特别是

cs231n训练营学习笔记(4)

雨燕双飞 提交于 2019-12-10 06:07:35
知道了W是什么之后的问题是怎样选出W:先用损失函数衡量W的好坏,然后用优化方法选出最好的W 目录 损失函数和优化 1. Hinge Loss 表达式 二元SVM或叫二分类SVM的推导(待写) 2. 加正则的目的 3. Softmax 与交叉熵损失公式 softmax softmax如何在编程计算的时候稳定 交叉熵 交叉熵损失的最大值与最小值(待写) softmax 求导(待写) 4. Hinge loss与Softmax的区别 5.梯度下降作为优化方法 各种其他优化方法(待写) 损失函数和优化 这是损失函数的一般表达式 1. Hinge Loss 表达式 是正确类的分数(横轴), 是其他类的分数,它们组成线性分类器的结果 这里正确类分数需要比其他类分数高出的分数1是可以随意选择的,因为这个分数的绝对值并不需要多关心,只关心分数间的相对差值,讲义里有详细证明。 这里是损失函数随错误分类分数增大而增加是线性的,如果改为平方,那么意味着对于分类很错误的情况会带来非常大的损失,也就是这样设计会避免分类很错的情况出现,但是如果分类错误不明显就只做微小修正。 所以选择哪种损失函数要根据具体应用更关心哪种分类错误。 二元SVM或叫二分类SVM的推导(待写) 二分类SVM的情况下,只有两个类,每个样本要么为正要么为负 2. 加正则的目的 当损失函数结果为0的时候,W是不唯一的

斯坦福CS231n—深度学习与计算机视觉----学习笔记 课时12&&13

╄→гoц情女王★ 提交于 2019-12-10 03:05:50
课时12 神经网络训练细节part2(上) 训练神经网络是由四步过程组成,你有一个完整的数据集图像和标签,从数据集中取出一小批样本,我们通过网络做前向传播得到损失,告诉我们目前分类效果怎么样。然后我们反向传播来得到每一个权重的梯度,这个梯度告诉我们如何去调整每一个权重,最终我们能够更好的分类图片。 为什么要使用激活函数? 如果在整个的神经网络中不使用激活函数,你的网络的分类能力基本等同于一个线性分类器,所以激活函数是相当关键的。他提供了所有的方法,你可以他用来存储数据 BN使得网络的训练更加健壮。 参数更新 补救SGD垂直进展快的方法,使用动量更新,他可以理解为一个球滚动着接近中间,在这个情况下的梯度可以视作一种动力,物理学中的这种力量,就相当于加速度,而mu倍的v相当于摩擦力。 v初始化为0,其实没什么影响 学习速率是应用到所有方向上的 Nesterov动量更新 我们直接达到这个目的,然后计算梯度。 我们进行了重新整理 虽然有很多局部最小值,但是他们的损失其实是差不多的。当你扩大神经网络的规模时候,你的最坏和最好局部最小值之间的差别随着时间的推移会越来越小。有研究表明,基本上也就不存在坏的局部最小值了,当然这也只在很小的网络中出现。事实上,你用不同的值初始化,你会得到相同的结果和损失,所以,基本上不存在不好的局部最小值。 AdaGrad更新 由凸优化理论发展而来的