第三部分学习笔记

16.批量归一化和残差网络

批量归一化(BatchNormalization)

BN是由Google于2015年提出,这是一个深度神经网络训练的技巧,它不仅可以加快了模型的收敛速度,而且更重要的是在一定程度缓解了深层网络中“梯度弥散”的问题,从而使得训练深层网络模型更加容易和稳定。所以目前BN已经成为几乎所有卷积神经网络的标配技巧了,即对每一批数据进行归一化。

批量归一化属于深度模型,主要利用小批量上的均值和标准差,不断调整神经网络中间输出,从而使整个神经网络在各层的中间输出的数值更稳定。

对输入的标准化(浅层模型)

处理后的任意一个特征在数据集中所有样本上的均值为0、标准差为1;标准化处理输入数据使各个特征的分布相近

1.对全连接层做批量归一化

位置:全连接层中的仿射变换和激活函数之间。


2.对卷积层做批量归⼀化

位置:卷积计算之后、应⽤激活函数之前。

如果卷积计算输出多个通道,我们需要对这些通道的输出分别做批量归一化,且每个通道都拥有独立的拉伸和偏移参数。 计算:对单通道,batchsize=m,卷积计算输出=pxq 对该通道中m×p×q个元素同时做批量归一化,使用相同的均值和方差。

3.预测时的批量归⼀化

训练:以batch为单位,对每个batch计算均值和方差。

预测:用移动平均估算整个训练数据集的样本均值和方差。



残差网络(ResNet)

深度CNN网络达到一定深度后再一味地增加层数并不能带来进一步地分类性能提高,反而会招致网络收敛变得更慢,准确率也变得更差。

残差块(Residual Block)

恒等映射:左边:f(x)=x      右边:f(x)-x=0 (易于捕捉恒等映射的细微波动)

在残差块中,输⼊可通过跨层的数据线路更快 地向前传播。



稠密连接网络(DenseNet)

主要构建模块:

稠密块(dense block): 定义了输入和输出是如何连结的。

过渡层(transition layer):用来控制通道数,使之不过大。

稠密块

17.凸优化

优化与深度学习

优化与估计

尽管优化方法可以最小化深度学习中的损失函数值,但本质上优化方法达到的目标与深度学习的目标并不相同。

优化方法目标:训练集损失函数值

深度学习目标:测试集损失函数值(泛化性)

优化在深度学习中的挑战

局部最小值;鞍点(黑塞矩阵为零);梯度消失


凸性 (Convexity)

凸函数:设S是En中的非空凸集,f(x)是定义在S上的实函数,如果对于每一对x1,x2ÎS及每一个a,0≤a≤1,都有:

                                                              f(ax1+(1-a)x2)≤a f(x1)+(1-a)f(x2)

则称函数f(x)为S上的凸函数.上式中,若≤变为<,则称为严格凸函数。若-f(x)为S的凸函数,则称f(x)为S上的凹函数.


Jensen 不等式

性质:

1.无局部极小值

2.与凸集的关系:凸函数满足条件的点构成的集合是凸集

3.二阶条件:二阶导数大于等于零等价于函数是凸函数


18.梯度下降


一维梯度下降


多维梯度下降

自适应方法

牛顿法

收敛性分析


预处理 (Heissan阵辅助梯度下降)

梯度下降与线性搜索(共轭梯度法)


随机梯度下降

参数更新


动态学习率



19.目标检测基础 

目标检测和边界框

锚框

目标检测算法通常会在输入图像中采样大量的区域,然后判断这些区域中是否包含我们感兴趣的目标,并调整区域边缘从而更准确地预测目标的真实边界框(ground-truth bounding box)。不同的模型使用的区域采样方法可能不同。这里我们介绍其中的一种方法:它以每个像素为中心生成多个大小和宽高比(aspect ratio)不同的边界框。这些边界框被称为锚框(anchor box)。我们将在后面基于锚框实践目标检测。

生成多个锚框

交并比

我们刚刚提到某个锚框较好地覆盖了图像中的狗。如果该目标的真实边界框已知,这里的“较好”该如何量化呢?一种直观的方法是衡量锚框和真实边界框之间的相似度。我们知道,Jaccard系数(Jaccard index)可以衡量两个集合的相似度。给定集合A和B,它们的Jaccard系数即二者交集大小除以二者并集大小:

                                                                       J(A,B)=\frac{|A∩B|}{|A∪B|}

实际上,我们可以把边界框内的像素区域看成是像素的集合。如此一来,我们可以用两个边界框的像素集合的Jaccard系数衡量这两个边界框的相似度。当衡量两个边界框的相似度时,我们通常将Jaccard系数称为交并比(Intersection over Union,IoU),即两个边界框相交面积与相并面积之比,如图所示。交并比的取值范围在0和1之间:0表示两个边界框无重合像素,1表示两个边界框相等。

9.4.3 标注训练集的锚框

在训练集中,我们将每个锚框视为一个训练样本。为了训练目标检测模型,我们需要为每个锚框标注两类标签:一是锚框所含目标的类别,简称类别;二是真实边界框相对锚框的偏移量,简称偏移量(offset)。在目标检测时,我们首先生成多个锚框,然后为每个锚框预测类别以及偏移量,接着根据预测的偏移量调整锚框位置从而得到预测边界框,最后筛选需要输出的预测边界框。

我们知道,在目标检测的训练集中,每个图像已标注了真实边界框的位置以及所含目标的类别。在生成锚框之后,我们主要依据与锚框相似的真实边界框的位置和类别信息为锚框标注。那么,该如何为锚框分配与其相似的真实边界框呢?


输出预测边界框

在模型预测阶段,我们先为图像生成多个锚框,并为这些锚框一一预测类别和偏移量。随后,我们根据锚框及其预测偏移量得到预测边界框。当锚框数量较多时,同一个目标上可能会输出较多相似的预测边界框。为了使结果更加简洁,我们可以移除相似的预测边界框。常用的方法叫作非极大值抑制(non-maximum suppression,NMS)。

我们来描述一下非极大值抑制的工作原理。对于一个预测边界框B,模型会计算各个类别的预测概率。设其中最大的预测概率为p,该概率所对应的类别即B的预测类别。我们也将p称为预测边界框B的置信度。在同一图像上,我们将预测类别非背景的预测边界框按置信度从高到低排序,得到列表L。从L中选取置信度最高的预测边界框B1作为基准,将所有与B1的交并比大于某阈值的非基准预测边界框从L中移除。这里的阈值是预先设定的超参数。此时,L保留了置信度最高的预测边界框并移除了与其相似的其他预测边界框。 接下来,从L中选取置信度第二高的预测边界框B2作为基准,将所有与B2的交并比大于某阈值的非基准预测边界框从L中移除。重复这一过程,直到L中所有的预测边界框都曾作为基准。此时L中任意一对预测边界框的交并比都小于阈值。最终,输出列表L中的所有预测边界框。

小结

1.以每个像素为中心,生成多个大小和宽高比不同的锚框。

2.交并比是两个边界框相交面积与相并面积之比。

3.在训练集中,为每个锚框标注两类标签:一是锚框所含目标的类别;二是真实边界框相对锚框的偏移量。

4.预测时,可以使用非极大值抑制来移除相似的预测边界框,从而令结果简洁。


多尺度目标检测

在锚框那节中,我们在实验中以输入图像的每个像素为中心生成多个锚框。这些锚框是对输入图像不同区域的采样。然而,如果以图像每个像素为中心都生成锚框,很容易生成过多锚框而造成计算量过大。举个例子,假设输入图像的高和宽分别为561像素和728像素,如果以每个像素为中心生成5个不同形状的锚框,那么一张图像上则需要标注并预测200多万个锚框(561×728×5)。

减少锚框个数并不难。一种简单的方法是在输入图像中均匀采样一小部分像素,并以采样的像素为中心生成锚框。此外,在不同尺度下,我们可以生成不同数量和不同大小的锚框。值得注意的是,较小目标比较大目标在图像上出现位置的可能性更多。举个简单的例子:形状为1×1、1×2和2×2的目标在形状为2×2的图像上可能出现的位置分别有4、2和1种。因此,当使用较小锚框来检测较小目标时,我们可以采样较多的区域;而当使用较大锚框来检测较大目标时,我们可以采样较少的区域。

为了演示如何多尺度生成锚框,我们先读取一张图像。它的高和宽分别为561像素和728像素。



20.图像风格迁移

样式迁移

在本节中,我们将介绍如何使用卷积神经网络自动将某图像中的样式应用在另一图像之上,即样式迁移(style transfer)。这里我们需要两张输入图像,一张是内容图像,另一张是样式图像,我们将使用神经网络修改内容图像使其在样式上接近样式图像。下图中的内容图像为本书作者在西雅图郊区的雷尼尔山国家公园(Mount Rainier National Park)拍摄的风景照,而样式图像则是一副主题为秋天橡树的油画。最终输出的合成图像在保留了内容图像中物体主体形状的情况下应用了样式图像的油画笔触,同时也让整体颜色更加鲜艳。


方法

下图用一个例子来阐述基于卷积神经网络的样式迁移方法。首先,我们初始化合成图像,例如将其初始化成内容图像。该合成图像是样式迁移过程中唯一需要更新的变量,即样式迁移所需迭代的模型参数。然后,我们选择一个预训练的卷积神经网络来抽取图像的特征,其中的模型参数在训练中无须更新。深度卷积神经网络凭借多个层逐级抽取图像的特征。我们可以选择其中某些层的输出作为内容特征或样式特征。以下图为例,这里选取的预训练的神经网络含有3个卷积层,其中第二层输出图像的内容特征,而第一层和第三层的输出被作为图像的样式特征。接下来,我们通过正向传播(实线箭头方向)计算样式迁移的损失函数,并通过反向传播(虚线箭头方向)迭代模型参数,即不断更新合成图像。样式迁移常用的损失函数由3部分组成:内容损失(content loss)使合成图像与内容图像在内容特征上接近,样式损失(style loss)令合成图像与样式图像在样式特征上接近,而总变差损失(total variation loss)则有助于减少合成图像中的噪点。最后,当模型训练结束时,我们输出样式迁移的模型参数,即得到最终的合成图像。



定义损失函数

内容损失:与线性回归中的损失函数类似,内容损失通过平方误差函数衡量合成图像与内容图像在内容特征上的差异。平方误差函数的两个输入均为extract_features函数计算所得到的内容层的输出。

样式损失:

总变差损失:

样式迁移的损失函数即内容损失、样式损失和总变差损失的加权和。通过调节这些权值超参数,我们可以权衡合成图像在保留内容、迁移样式以及降噪三方面的相对重要性。

小结

1.样式迁移常用的损失函数由3部分组成:内容损失使合成图像与内容图像在内容特征上接近,样式损失令合成图像与样式图像在样式特征上接近,而总变差损失则有助于减少合成图像中的噪点。

2.可以通过预训练的卷积神经网络来抽取图像的特征,并通过最小化损失函数来不断更新合成图像。

3.用格拉姆矩阵表达样式层输出的样式。


21. 图像分类案例1

Kaggle上的图像分类(CIFAR-10)

CIFAR-10 - Object Recognition in Images | Kaggle

定义模型

ResNet-18网络结构:ResNet全名Residual Network残差网络。Kaiming He 的《Deep Residual Learning for Image Recognition》获得了CVPR最佳论文。他提出的深度残差网络在2015年可以说是洗刷了图像方面的各大比赛,以绝对优势取得了多个比赛的冠军。而且它在保证网络精度的前提下,将网络的深度达到了152层,后来又进一步加到1000的深度。


22.图像分类案例2

Kaggle上的狗品种识别(ImageNet Dogs)

 Dog Breed Identification | Kaggle

在这项比赛中,我们尝试确定120种不同的狗。该比赛中使用的数据集实际上是著名的ImageNet数据集的子集。

定义模型

这个比赛的数据属于ImageNet数据集的子集,我们使用微调的方法,选用在ImageNet完整数据集上预训练的模型来抽取图像特征,以作为自定义小规模输出网络的输入。

此处我们使用与训练的ResNet-34模型,直接复用预训练模型在输出层的输入,即抽取的特征,然后我们重新定义输出层,本次我们仅对重定义的输出层的参数进行训练,而对于用于抽取特征的部分,我们保留预训练模型的参数。


23.GAM

生成对抗网络(Generative Adversarial Networks)

在前面的内容我们大都讨论了如何进行预测。 在某种形式上,我们使用了深度神经网络学习的从数据点到标签的映射。 这种学习称为判别学习,例如,我们希望能够区分照片中的猫和狗中的照片。 分类器和回归器都是歧视性学习的例子。 通过反向传播训练的神经网络颠覆了我们认为关于大型复杂数据集的判别式学习的所有知识。 在短短5至6年间,高分辨率图像的分类精度已从无用变成了人类级别。

但是,机器学习不仅仅是解决区分性任务。 例如,给定一个大型数据集,而没有任何标签,我们可能想要学习一个简洁地捕获此数据特征的模型。 给定这样一个模型,我们可以对类似于训练数据分布的综合数据点进行采样。 例如,给定大量的面孔照片,我们可能希望能够生成新的真实感图像,看起来好像它可能来自同一数据集。 这种学习称为生成建模。

直到最近,还没有能够合成新颖的逼真的图像的方法。 但是,深度神经网络用于判别学习的成功开辟了新的可能性。 在过去三年中,一大趋势是应用区分性深网来克服我们通常不认为是监督学习的问题中的挑战。 递归神经网络语言模型是使用判别网络(经过训练可预测下一个字符)的一个示例,该网络一旦受过训练就可以充当生成模型。

2014年,一篇突破性论文介绍了Generative Adversarial Network(GANs)Goodfellow.Pouget-Abadie.Mirza.ea.2014,这是一种利用判别模型的力量来获得良好的生成模型的聪明新方法。 GAN的核心思想是,如果我们不能将假数据与真实数据区分开,那么数据生成器就很好。在统计中,这称为两样本检验,用来回答是否从相同的分布中提取数据集的问题的检验。大多数统计文件与GAN之间的主要区别在于,后者以建设性的方式使用了这一思想。换句话说,他们不只是训练模型说“嘿,这两个数据集看起来好像不是来自相同的分布”,而是使用两个样本的检验为生成的模型提供训练信号。这使我们能够改进数据生成器,直到它生成类似于真实数据的内容为止。至少,它需要愚弄分类器。即使我们的分类器是最先进的深度神经网络。


可以看到GAN架构。GAN架构有两部分。首先,我们需要一个设备(例如,深层网络,但实际上可能是任何东西,例如游戏渲染引擎),这可能是 能够生成看起来像真实事物的数据。 如果要处理图像,则需要生成图像。 如果要处理语音,则需要生成音频序列,依此类推。 我们称其为发电机网络。 第二部分是鉴别器网络。 它试图将伪造数据与真实数据区分开。 这两个网络相互竞争。 生成器网络试图欺骗鉴别器网络。 此时,鉴别器网络将适应新的伪造数据。 该信息继而用于改善发电机网络,等等。

24.DCGAN

深度卷积生成对抗网络(Deep Convolutional Generative Adversarial Networks)

上节介绍了GAN的工作原理。 证明了他们可以从一些简单,易于采样的分布(如均匀分布或正态分布)中抽取样本,并将它们转换为看起来与某些数据集的分布相匹配的样本。 尽管我们提出的匹配2D高斯分布的例子很明确,但这并不是特别令人兴奋。

在本节中,我们将演示如何使用GAN生成逼真的图像。 我们将基于在:cite:Radford.Metz.Chintala.2015中引入的深度卷积GAN(DCGAN)建立模型。 我们将借鉴已证明在区分计算机视觉问题上如此成功的卷积架构,并展示如何通过GAN来利用它们来生成逼真的图像。

鉴别器

鉴别器是普通的卷积网络,只是它使用泄漏的ReLU作为其激活功能。 给定,其定义为

可以看出,正常的ReLU是α=0,身份函数是α=1。 对于,泄漏ReLU是一个非线性函数α∈(0,1),为负输入提供非零输出。 它旨在解决“垂死的ReLU”问题,因为神经元可能总是输出负值,因此由于ReLU的梯度为0,因此无法取得任何进展。

小结

1.DCGAN体系结构具有四个用于鉴别器的卷积层和四个用于生成器的“小跨度”卷积层。

2.鉴别器是一个具有批归一化(输入层除外)和泄漏性ReLU激活的4层跨卷积。

3.泄漏的ReLU是一个非线性函数,为负输入提供非零输出。 它旨在解决“垂死的ReLU”问题,并帮助渐变在整个体系结构中更轻松地流动。

©著作权归作者所有,转载或内容合作请联系作者
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。

推荐阅读更多精彩内容