李飞飞计算机视觉课程CS231n总结

Computer Vision – Feifei Li

1. 第一章

1.1 K最邻近分类算法(K-NearestNeighbor,KNN)

这是最容易想到的最简单的图像分类算法。主要有两个步骤:

  1. 在训练期间,分类器会记住所有训练数据。
  2. 在测试过程中,kNN通过与所有训练图像进行比较,对每张测试图像进行分类,对于每张测试图像在训练数据中选择K个最相似的训练数据,并且将标签置为k中类别数最大的类。

注意:上述步骤中的k可以通过交叉验证得到。

数据集:CIFAR-10

1.2 支持向量机(Support Vector Machine, SVM)

分离训练样本的超平面有很多,哪个更好?

image-20220330115946972

正中:最好的泛化性能

最大区间:找到使区间最大的参数

如果没有可以正确划分两类样本的超平面怎么办?

将样本从原始空间映射到更高维的特征空间,使样本在这个特征空间内线性可分。

image-20220330120239886

如果原始空间是有限维的,那么一定有一个高维特征空间使样本可分离。

软间距

现实中很难确定合适的核函数,使训练样本在特征空间中线性可分,即便貌似线性可分,也很难断定是否是因过拟合造成的。因此引入软间隔(soft margin),允许在一些样本上不满足约束:

image-20220330120429506

**基本思想:**在最大化区间的同时,不满足约束

1.3 Softmax(非严格最大化)

假设我们有一个数组V,Vi表示V中的第i个元素,那么这个元素的Softmax值就是

image-20220330151544867

好处是:可以把每个值映射成一个概率总和为1,并且是平滑的;计算也便利。

1.4 全连接的神经网络(Fully Connected Neural Network)

前馈网络中的每个神经元根据接收信息的顺序被分成不同的组。每个组可以被视为一个神经层。每一层的神经元接收上一层神经元的输出,并输出到下一层的神经元。整个网络中的信息都是单向传播的,没有反向的信息传播,可以用有向无环图来表示。前馈网络包括全连接前馈网络和卷积神经网络。

层内无连接,层间全连接

第二章

2.1 卷积神经网络(Convolutional Neural Network)

全连接前馈网络的缺点:参数太多;难以提取局部不变特征。

目前的卷积神经网络一般是由卷积层、汇聚层和全连接层交叉堆叠而成的前馈神经网络。全连接层一般在卷积网络的最顶层。卷积神经网络有三个结构上的特性:局部连接、权重共享以及汇5.1 卷积 聚.这些特性使得卷积神经网络具有一定程度上的平移、缩放和旋转不变性。和前馈神经网络相比,卷积神经网络的参数更少。

真正的卷积需要180度翻转,但是在机器学习和图像处理领域这种翻转并无益处,因此实际上采用的不翻转卷积也称互相关,在机器学习领域也直接称之为卷积。

image-20220330153231983

从上图中的一维卷积示例不难看出:卷积可以提取与卷积核相同的特征。第一个提取低频,第二个提取高频。

image-20220330153035644

注意:这是一个真正的卷积。

卷积的变化

步长(Stride)是指卷积核在滑动时的时间间隔。

零填充(Zero Padding)是在输入向量两端进行补零。

image-20220330153207871

经过卷积后张量大小计算: (𝑀 − 𝐾 +2𝑃)/𝑆 + 1。

卷积网络的整体结构

一个卷积块为连续M个卷积层和b个汇聚层( M通常设置为2~ 5,b为0或1)。一个卷积网络中可以堆叠N个连续的卷积块,然后在后面接着K个全连接层( N的取值区间比较大,比如1 ~ 100或者更大;K一般为0~2)。

image-20220330153613380

2.2 批标准化(Batch Normalization)

让深度网络更容易训练的一种方法是使用更复杂的优化程序,如SGD+momentum、RMSProp或Adam。另一个策略是改变网络的结构,使其更容易训练。沿着这些思路的一个想法是批量规范化。

这个想法相对简单。当机器学习方法的输入数据包含零均值和单位方差的不相关特征时,机器学习方法往往效果更好。在训练神经网络时,我们可以在将数据输入网络之前对其进行预处理,以显式修饰其特征;这将确保网络的第一层看到遵循良好分布的数据。然而,即使我们对输入数据进行了预处理,网络深层的激活也可能不再是不相关的,也不再具有零均值或单位方差,因为它们是由网络中较早层的输出产生的。更糟糕的是,在训练过程中,网络每一层的特征分布会随着每一层权重的更新而改变。

【1】的作者假设,深度神经网络内部特征分布的移动可能会使深度网络的训练更加困难。为了克服这个问题,【1】提出在网络中插入批量规范化层。在训练时,批量归一化层使用迷你批次的数据来估计每个特征的平均值和标准差。这些估计的平均数和标准差然后被用来对迷你批的特征进行中心化和规范化。在训练过程中,这些平均值和标准差被保留下来,在测试时,这些运行平均值被用于中心化和规范化特征。

这种归一化策略可能会降低网络的代表性,因为有时某些层的特征不是零均值或单位方差,并且可能是最优的。为此,批量归一化层包括每个特征维度的可学习移位和尺度参数。

计算

我们首先计算出平均值𝜇和方差𝑣。有了𝜇和𝑣的计算结果,我们就可以计算出标准差𝜎和归一化数据𝑌。下面的公式和图形说明描述了计算过程(𝑦𝑖是向量𝑌的第i个元素)。

image-20220330154740569

2.3 丢弃法(Dropout)

当训练一个深度神经网络时,我们可以随机丢弃一部分神经元(同时丢弃其对应的连接边)来避免过拟合,这种方法称为丢弃法(Dropout Method)。Dropout是一种规范化神经网络的技术,它在前向传递过程中随机地将一些输出激活设置为零。

image-20220330155106697

解释

集成学习角度的解释每做一次丢弃,相当于从原始的网络中采样得到一个子网络。如果一个神经网络有 𝑛 个神经元,那么总共可以采样出 2𝑛 个子网络.每次迭代都相当于训练一个不同的子网络,这些子网络都共享原始网络的参数。那么,最终的网络可以近似看作集成了指数级个不同网络的组合模型。

从贝叶斯学习的角度解释dropout也可以解释为贝叶斯学习的一种近似。使用𝑦 = 𝑓(𝒙; 𝜃) 表示要学习的神经网络。贝叶斯学习假设参数𝜃是一个随机向量,先验分布是𝑞(𝜃),贝叶斯方法的预测是

image-20220330155310017

其中𝑓(𝒙, 𝜃𝑚) 是第 𝑚 次应用丢弃方法后的网络,其参数 𝜃𝑚 是所有参数 𝜃 的采样。

2.4 PyTorch

PyTorch是一个在Tensor对象上执行动态计算图的系统,其行为类似于numpy ndarray。它配备了一个强大的自动分化引擎,消除了手动反向传播的需要。

为什么使用PyTorch?

  1. 我们的代码现在将在GPU上运行! 更快的训练。当使用像PyTorch或TensorFlow这样的框架时,你可以利用GPU的力量来实现你自己的定制神经网络架构,而不需要直接编写CUDA代码。
  2. 我们希望您准备好在您的项目中使用这些框架之一,这样您就可以比手动编写要使用的每个功能更有效地进行试验。
  3. 我们希望你能站在巨人的肩膀上! TensorFlow和PyTorch都是优秀的框架,它们会让你的生活变得更加轻松,现在你已经了解了它们的内涵,你可以自由地使用它们了。
  4. 我们希望您接触到您可能在学术界或工业界遇到的那种深度学习代码。

第三章

3.1 使用RNN的图像说明(Image Captioning with RNNs)

图片说明问题:给出一张图片输出对图片内容的文字描述。常用数据集:COCO Dataset。

循环神经网络(Recurrent Neural Network,RNN)是一类具有短期记忆能力的神经网络。在循环神经网络中,神经元不但可以接受其他神经元的信息,也可以接受自身的信息,形成具有环路的网络结构。

简单循环网络(Simple Recurrent Network,SRN)是一个非常简单的循环神经网络,只有一个隐藏层的神经网络.在一个两层的前馈神经网络中,连接存在相邻的层与层之间,隐藏层的节点之间是无连接的.而简单循环网络增加了从隐藏层到隐藏层的反馈连接。

基于门控的循环神经网络:

  • 长短期记忆网络(Long Short-Term Memory Network,LSTM)

遗忘门𝒇𝑡 控制上一个时刻的内部状态𝒄𝑡−1 需要遗忘多少信息

输入门𝒊𝑡 控制当前时刻的候选状态𝒄t有多少信息需要保存

输出门𝒐𝑡控制当前时刻的内部状态𝒄𝑡有多少信息需要输出到外部状态

image-20220330160854110

  • 门控循环单元(Gated Recurrent Unit,GRU)网络是一种比LSTM网络更加简单的循环神经网络。

image-20220330160948376

3.2 生成式对抗网络(Generative Adversarial Networks)

参考

2014年,Goodfellow等人提出了一种训练生成模型的方法,称为生成对抗网络(简称GANs)。在一个GAN中,我们建立了两个不同的神经网络。我们的第一个网络是一个传统的分类网络,称为判别器。我们将训练判别器来获取图像,并将它们分类为真实(属于训练集)或虚假(不存在于训练集)。我们的另一个网络,称为生成器,将采取随机噪声作为输入,并使用神经网络将其转换为图像。生成器的目标是欺骗判别器,使其认为它产生的图像是真的。

我们可以将生成器 (𝐺) 试图欺骗判别器 (𝐷) 和判别器试图正确分类真假图像视为最小化游戏之间的这种反复。

image-20220330161258232

其中𝑧∼𝑝(𝑧)是随机噪声样本,𝐺(𝑧)是使用神经网络发生器𝐺生成的图像,而𝐷是判别器的输出,指定一个输入是真实的概率。在Goodfellow等人的文章中,他们分析了这个最小化游戏,并展示了它与训练数据分布和从𝐺生成的样本之间的Jensen-Shannon分歧最小化的关系。

为了优化这个最小化游戏,我们将权衡对𝐺目标采取梯度下降步骤,对𝐷目标采取梯度上升步骤。

  1. 更新生成器(𝐺)以最小化鉴别器做出正确选择的概率。
  2. 更新鉴别器(𝐷)以最大化鉴别器做出正确选择的概率。

虽然这些更新对分析很有用,但在实践中却表现不佳。相反,当我们更新发生器时,我们将使用一个不同的目标:最大限度地提高鉴别器做出错误选择的概率。这一微小的变化有助于避免当鉴别器有信心时生成器梯度消失的问题。这是大多数GAN论文中使用的标准更新,在Goodfellow等人的原始论文中也使用过。

在此任务中,我们将交替进行以下更新。

  1. 更新生成器(𝐺)以最大化鉴别器对生成的数据做出错误选择的概率

image-20220330161816772

  1. 更新判别器(𝐷)以最大化判别器对真实数据和生成数据做出正确选择的概率

image-20220330161923075

3.3 自我监督的对比性学习(Self-Supervised Contrastive Learning)

什么是自监督学习?

现代的机器学习需要大量的标记数据。但很多时候,获得大量的人类标记的数据是具有挑战性和/或昂贵的。有没有一种方法,我们可以要求机器自动学习一个模型,在没有标记数据集的情况下产生良好的视觉表现?是的,这就是自我监督学习!

自我监督学习(SSL)允许模型使用给定数据集中的数据自动学习一个 “好的 “表示空间,而不需要它们的标签。具体来说,如果我们的数据集是一堆图像,那么自我监督学习允许模型学习并为图像生成一个 “好的 “表示向量。

SSL方法之所以大受欢迎,是因为学到的模型在其他数据集上也能继续表现良好,即在模型没有被训练过的新数据集上也能表现良好。

“好”是什么意思?

一个“好的”表示向量需要捕获图像的重要特征,因为它与数据集的其余部分相关。这意味着数据集中表示语义相似实体的图像应该具有相似的表示向量,而数据集中的不同图像应该具有不同的表示向量。例如,两个苹果图像应该具有相似的表示向量,而一个苹果图像和一个香蕉图像应该具有不同的表示向量。

对比性学习:SimCLR

最近,SimCLR引入了一个新的架构,使用对比学习来学习好的视觉表征。对比学习的目的是为相似的图像学习相似的表示,为不同的图像学习不同的表示。正如我们在这个笔记本中所看到的,这个简单的想法使我们能够在不使用任何标签的情况下训练出一个令人惊讶的好模型。

具体来说,对于数据集中的每张图片,SimCLR会生成该图片的两个不同的增强视图,称为正对。然后,鼓励模型为这对图像生成类似的表示向量。请看下面的架构图。

image-20220330162448897

给定一个图像x,SimCLR使用两种不同的数据增强方案t和t’来生成正对的图像𝑥̂𝑖和𝑥̂𝑗。 𝑓是一个基本的编码器网,从增强的数据样本中提取表示向量,分别得到ℎ𝑖和ℎ𝑗。最后,一个小的神经网络投影头𝑔将表示向量映射到应用对比性损失的空间中。对比损失的目标是使最终的向量𝑧𝑖=𝑔(ℎ𝑖)和𝑧=𝑔(ℎ𝑗)之间的一致性最大化。我们将在后面更详细地讨论对比性损失,你会得到实现它。

训练完成后,我们扔掉投影头𝑔,只用𝑓和表示ℎ来执行下游任务,如分类。你将有机会在训练好的SimCLR模型上微调一个层,用于分类任务,并将其性能与基线模型(没有自监督学习)进行比较。

文章出处登录后可见!

已经登录?立即刷新

共计人评分,平均

到目前为止还没有投票!成为第一位评论此文章。

(0)
扎眼的阳光的头像扎眼的阳光普通用户
上一篇 2022年4月1日 下午9:32
下一篇 2022年4月1日 下午9:52

相关推荐