15天共读深度学习Day14

版权声明:感谢阅读,欢迎批评指正。 https://blog.csdn.net/skyejy/article/details/89811940

1.Data Augmentation 数据扩充

人为地扩充输入图像(训练图像)

对于输入图像,通过施加旋转、垂直或者水平方向上的移动等微小变化,增加图像的数量。这在数据集的图像数量有限时尤其有效。Data Augmentation 还可以通过其他各种方法扩充图像,比如裁剪图像的“crop 处理”、将图像左右翻转的“flip 处理”(flip 处理只在不需要考虑图像对称性的情况下有效)等。对于一般的图像,施加亮度等外观上的变化、放大缩小等尺度上的变化也是有效的。不管怎样,通过 Data Augmentation 巧妙地增加训练图像,就可以提高深度学习的识别精度。

2.加深层的好处

(1)可以减少网络的参数数量。与没有加深层的网络相比,加深了层的网络可以用更少的参数达到同等水平(或者更强)的表现力;叠加小型滤波器来加深网络的好处是可以减少参数的数量,扩大感受野(receptive field,给神经元施加变化的某个局部空间区域)。并且,通过叠加层,将 ReLU 等激活函数夹在卷积层的中间,进一步提高了网络的表现力。这是因为向网络添加了基于激活函数的“非线性”表现力,通过非线性函数的叠加,可以表现更加复杂的东西。

(2)加深层的另一个好处就是使学习更加高效。与没有加深层的网络相比,通过加深层,可以减少学习数据,从而高效地进行学习。

3.ImageNet 

ImageNet 是拥有超过 100 万张图像的数据集。它包含了各种各样的图像,并且每张图像都被关联了标签(类别名)。每年都会举办使用这个巨大数据集的 ILSVRC 图像识别大赛。

ILSVRC 大赛有多个测试项目,其中之一是“类别分类”(classification),在该项目中,会进行 1000 个类别的分类,比试识别精度。我们来看一下最近几年的 ILSVRC 大赛的类别分类项目的结果。图 中展示了从 2010 年到 2015 年的优胜队伍的成绩。这里,将前 5 类中出现正确解的情况视为“正确”,此时的错误识别率用柱形图来表示。

图 中需要注意的是,以 2012 年为界,之后基于深度学习的方法一直居于首位。实际上,我们发现 2012 年的 AlexNet 大幅降低了错误识别率。并且,此后基于深度学习的方法不断在提升识别精度。特别是 2015 年的 ResNet(一个超过 150 层的深度网络)将错误识别率降低到了 3.5%。据说这个结果甚至超过了普通人的识别能力。

4.VGG

VGG是由卷积层和池化层构成的基础的CNN 不过,它的特点在于将有权重的层(卷积层或者全连接层)叠加至16层或19层,具备了深度(根据层的深度,有时也称VGG16或者VGG19)

VGG结构简单,应用性强。

5.GoogLeNet

其特征是不仅在纵向上有深度,在横向上也有深度(广度)

GoogLeNet在横向上有“宽度”,这称为“Inception”结构

“Inception”结构使用了多个大小不同的滤波器(和池化),最后再合并它们的结果。此外,在 GoogLeNet 中,很多地方都使用了大小为 1 × 1 的滤波器的卷积层。这个 1 × 1 的卷积运算通过在通道方向上减小大小,有助于减少参数和实现高速化处理。

6.ResNet

ResNet是微软团队开发的网络。它的特征在于具有比以前的网络更深的结构。

我们已经知道加深层对于提升性能很重要。但是,在深度学习中,过度加深层的话,很多情况下学习将不能顺利进行,导致最终性能不佳。ResNet 中,为了解决这类问题,导入了“快捷结构”(也称为“捷径”或“小路”)。导入这个快捷结构后,就可以随着层的加深而不断提高性能了(当然,层的加深也是有限度的)。

快捷结构横跨(跳过)了输入数据的卷积层,将输入 x 合计到输出。

图 中,在连续 2 层的卷积层中,将输入 x 跳着连接至 2 层后的输出。这里的重点是,通过快捷结构,原来的 2 层卷积层的输出 f(x)变成了f(x)+x  。通过引入这种快捷结构,即使加深层,也能高效地学习。这是因为,通过快捷结构,反向传播时信号可以无衰减地传递。

这里的“weight layer”是指卷积层。

因为快捷结构只是原封不动地传递输入数据,所以反向传播时会将来自上游的梯度原封不动地传向下游。这里的重点是不对来自上游的梯度进行任何处理,将其原封不动地传向下游。因此,基于快捷结构,不用担心梯度会变小(或变大),能够向前一层传递“有意义的梯度”。通过这个快捷结构,之前因为加深层而导致的梯度变小的梯度消失问题就有望得到缓解。

7.迁移学习

实践中经常会灵活应用使用 ImageNet 这个巨大的数据集学习到的权重数据,这称为迁移学习,将学习完的权重(的一部分)复制到其他神经网络,进行再学习(fine tuning)。比如,准备一个和 VGG 相同结构的网络,把学习完的权重作为初始值,以新数据集为对象,进行再学习。迁移学习在手头数据集较少时非常有效。

8.基于GPU的高速化

GPU 原本是作为图像专用的显卡使用的,但最近不仅用于图像处理,也用于通用的数值计算。由于 GPU 可以高速地进行并行数值计算,因此 GPU 计算的目标就是将这种压倒性的计算能力用于各种用途。所谓 GPU 计算,是指基于 GPU 进行通用的数值计算的操作。

深度学习中需要进行大量的乘积累加运算(或者大型矩阵的乘积运算)。这种大量的并行运算正是 GPU 所擅长的(反过来说,CPU 比较擅长连续的、复杂的计算)。因此,与使用单个 CPU 相比,使用 GPU 进行深度学习的运算可以达到惊人的高速化。下面我们就来看一下基于 GPU 可以实现多大程度的高速化。

GPU 主要由 NVIDIA 和 AMD 两家公司提供。虽然两家的 GPU 都可以用于通用的数值计算,但与深度学习比较“亲近”的是 NVIDIA 的 GPU。实际上,大多数深度学习框架只受益于 NVIDIA 的 GPU。这是因为深度学习的框架中使用了 NVIDIA 提供的 CUDA 这个面向 GPU 计算的综合开发环境。

9.分布式学习

虽然通过 GPU 可以实现深度学习运算的高速化,但即便如此,当网络较深时,学习还是需要几天到几周的时间。并且,前面也说过,深度学习伴随着很多试错。为了创建良好的网络,需要反复进行各种尝试,这样一来就必然会产生尽可能地缩短一次学习所需的时间的要求。于是,将深度学习的学习过程扩展开来的想法(也就是分布式学习)就变得重要起来。

为了进一步提高深度学习所需的计算的速度,可以考虑在多个 GPU 或者多台机器上进行分布式计算。现在的深度学习框架中,出现了好几个支持多 GPU 或者多机器的分布式学习的框架。其中,Google 的 TensorFlow、微软的 CNTK(Computational Network Toolki)在开发过程中高度重视分布式学习。以大型数据中心的低延迟·高吞吐网络作为支撑,基于这些框架的分布式学习呈现出惊人的效果。
关于分布式学习,“如何进行分布式计算”是一个非常难的课题。它包含了机器间的通信、数据的同步等多个无法轻易解决的问题。可以将这些难题都交给 TensorFlow 等优秀的框架。

10.深度学习的应用案例

深度学习并不局限于物体识别,还可以应用于各种各样的问题。此外,在图像、语音、自然语言等各个不同的领域,深度学习都展现了优异的性能。

以计算机视觉这个领域为中心,介绍几个深度学习能做的事情(应用)。

(1)物体检测

物体检测是从图像中确定物体的位置,并进行分类的问题。

物体检测是比物体识别更难的问题。之前介绍的物体识别是以整个图像为对象的,但是物体检测需要从图像中确定类别的位置,而且还有可能存在多个物体。

对于这样的物体检测问题,人们提出了多个基于 CNN 的方法。这些方法展示了非常优异的性能,并且证明了在物体检测的问题上,深度学习是非常有效的。

(2)图像分割

图像分割是指在像素水平上对图像进行分类。如图所示,使用以像素为单位对各个对象分别着色的监督数据进行学习。然后,在推理时,对输入图像的所有像素进行分类。

(3)图像标题的生成

有一项融合了计算机视觉和自然语言的有趣的研究,给出一个图像后,会自动生成介绍这个图像的文字(图像的标题)。

猜你喜欢

转载自blog.csdn.net/skyejy/article/details/89811940
今日推荐