深度学习入门学习--第八章 深度学习

第八章 深度学习
深度学习是加深了层的深度神经网络。基于之前介绍的网络,只需通过叠加层,就可以创建深度网络。
1.加深网络
(1)向更深的网络出发
创建一个比之前实现的网络的更深的CNN。这里使用的卷积层全都是3✖3的小型滤波器,特点是随着层的加深,通道数变大(卷积层的通道数从前面的层开始按顺序以16、16、32、32、64、64的方式增加)。此外,插入了池化层,以逐渐减小中间数据的空间大小;并且,后面的全连接层中使用了Dropout层。
这个网络使用He初始值作为权重的初始值,使用Adam更新权重参数。总结起来,这个网络有如下特点。
1)基于3×3的小型滤波器的卷积层。
2)激活函数是ReLU。
3)全连接层的后面使用Dropout层。
4)基于Adam的最优化。
5)使用He初始值作为权重初始值。
从这些特征中可以看出,这个网络中使用了多个之前介绍的神经网络技术。这个网络的识别精度为99.38%,现在我们使用这个网络进行学习。
(2)进一步提高识别精度
对于MNIST数据集,层不用特别深就获得了(目前)最高的识别精度。一般认为,这是因为对于手写数字识别这样一个比较简单的任务,没有必要将网络的表现力提高到那么高的程度。因此,可以说加深层的好处并不大。而之后要介绍的大规模的一般物体识别的情况,因为问题复杂,所以加深层对提高识别精度大有裨益。
集成学习、学习率衰减、Data Augmentation(数据扩充)等都有助于提高识别精度。尤其是Data Augmentation,虽然方法很简单,但在提高识别精度上效果显著。
Data Augmentation基于算法“人为地”扩充输入图像(训练图像)。具体地说,对于输入图像,通过施加旋转、垂直或水平方向上的移动等微小变化,增加图像的数量。这在数据集的图像数量有限时尤其有效。
除此之外,Data Augmentation还可以通过其他各种方法扩充图像,比如裁剪图像的“crop处理”、将图像左右翻转的“flip处理”等。对于一般的图像,施加亮度等外观上的变化、放大缩小等尺度上的变化也是有效的。不管怎样,通过Data Augmentation巧妙地增加训练图像,就可以提高深度学习的识别精度。
(3)加深层的动机
本节就加深层的重要性,给出一些增补性的数据和说明。
也就是说,可以看到层越深,识别性能也越高。
加深层的好处:1)其中一个好处就是可以减少网络的参数数量。说的详细一点,就是与没有加深层的网络相比,加深了层的网络可以用更少的参数达到同等水平(或者更强)的表现力。
叠加小型滤波器来加深网络的好处是可以减少参数的数量,扩大
感受野
(给神经元施加变化的某个局部空间区域)。并且,通过叠加层,将ReLU等激活函数夹在卷积层的中间,进一步提高了网络的表现力。这是因为向网络添加了基于激活函数的“非线性”表现力,通过非线性函数的叠加,可以表现更加复杂的东西。
2)加深层的另一个好处就是使学习更加高效。与没有加深层的网络相比,通过加深层,可以减少学习数据,从而高效的进行学习。
CNN的卷积层会分层次的提取信息。具体地说,在前面的卷积层中,神经元会对边缘等简单的形状有响应,随着层的加深,开始对纹理、物体部件等更加复杂的东西有响应。
通过加深层,可以分层次的传递信息。这一点也很重要。比如,因为提取了边缘的层的下一层能够使用边缘的信息,所以应该能够高效的学习更加高级的模式。也就是说,通过加深层,可以将各层要学习的问题分解成容易解决的简单问题,从而可以进行高效的学习。
以上就是对加深层的重要性的增补性说明。
2.深度学习的小历史
以ILSVRC这个大规模图像识别比赛为轴,看一下深度学习最近的发展趋势。
(1)ImageNet
ImageNet是拥有超过100万张图像的数据集。它包含了各种各样的图像,并且每张图像都被关联了标签(类别名)。
这些年深度学习取得了不菲的成绩,其中VGG、GoogLeNet、、ResNet已广为人知,与深度学习有关的各种场合都会遇到这些网络。
(2)VGG
VGG是由卷积层和池化层构成的基础的CNN。不过,它的特点在于将有权重的层(卷积层或者全连接层)叠加至16层(或者19层),具备了深度(根据深度,有时也称为“VGG16”或“VGG19”)。
VGG中需要注意的地方是,基于3×3的小型滤波器的卷积层的运算是连续进行的。重复进行“卷积层重叠2次到4次,再通过池化层将大小减半”的处理,最后经由全连接层输出结果。
VGG结构简单,应用性强。
(3)GoogLNet
GoogLNet的特征是,网络不仅在纵向上有深度,在横向上也有深度(广度)。
GoogLNet在横向上有“宽度”,这称为“Inception结构”。
Inception结构使用了多个大小不同的滤波器(和池化),最后再合并他们的结果。GoogLNet的特征就是将这个 Inception结构用作一个构件(构成元素)。此外,在GoogLNet中,很多地方都使用了大小为1×1的滤波器的卷积层。这个1×1的卷积运算在通道方向上减小大小,有助于减少参数和实现高速化处理。
(4)ResNet
ResNet是微软团队开发的网络。它的特征在于具有比以前的网络更深的结构。
加深层对于提升性能很重要,但是,在深度学习中,过度加深层的话,很多情况下学习将不能顺利进行,导致最终性能不佳。ResNet中,为了解决这类问题,导入了“快捷结构”(也称为“捷径”或“小路”)。导入这个快捷结构后,就可以随着层的加深而不断提高性能了(当然,层的加深也是有限度的)。
快捷结构横跨(跳过)了输入数据的卷积层,将输入x合计到输出。通过引入这种快捷结构,即使加深层,也能高效的学习。这是因为,通过快捷结构,反向传播时信号可以无衰减的传递。
因为快捷结构只是原封不动的传递输入数据,所以反向传播时会将来自上游的梯度原封不动的传向下游。因此,基于快捷结构,不用担心梯度会变小(或变大),能够向前一层传递“有意义的梯度”。通过这个快捷结构,之前因为加深层而导致的梯度变小的梯度消失问题就有望得到缓解。
实践中经常会灵活应用使用ImageNet这个巨大的数据集学习到的权重数据,这称为迁移学习,将学习完的权重(的一部分)复制到其他神经网络,进行再学习(fine tuning)。比如,准备一个和VGG相同结构的网络,把学习完的权重作为初始值,以新数据集为对象,进行再学习。迁移学习在手头数据集较少时非常有效。
3.深度学习的高速化
随着大数据和网络的大规模化,深度学习需要进行大量的计算。目前为止,我们都是使用CPU进行计算的,但现实是只用CPU来应对深度学习无法令人放心。实际上,大多数深度学习的框架都支持GPU(Graphics Processing Unit),可以高速的处理大量的运算。另外,最近的框架也开始支持多个GPU和多台机器上的分布式学习。
本节我们将焦点放在深度学习的计算的高速化上,然后逐步展开。
(1)需要努力解决的问题
深度学习中什么样的处理比较耗时。在AlexNex中,大多数时间都被耗费在卷积层上。实际上,卷积层的处理时间加起来占GPU整体的95%,占CPU整体的89%。因此,如何高速、高效的进行卷积层中的运算是深度学习的一大课题。卷积层中进行的运算可以追溯至乘积累加运算。因此,深度学习的高速化的主要课题就变成了如何高速、高效的进行大量的乘积累加运算。
(2)基于GPU的高速化
GPU原本是作为图像专用的显卡使用的,但最近不仅用于图像处理,也用于通用的数值计算。由于GPU可以高速的进行并行数值计算,因此
GPU计算
的目标就是将这种压倒性的计算能力用于各种用途。所谓GPU计算,是指基于GPU进行通用的数值计算的操作。
深度学习中需要进行大量的乘积累加运算(或者大型矩阵的乘积运算)。这种大量的并行运算正是GPU所擅长的(反过来说,CPU比较擅长连续的、复杂的计算)。因此,与使用单个CPU相比,使用GPU进行深度学习的运算可以达到惊人的高速化。
GPU主要由NVIDIA和AMD两家公司提供。虽然两家的GPU都可以用于通用的数值计算,但与深度学习比较“亲近”的是NVIDIA的GPU。实际上,大多数深度学习框架只受益于NVIDIA的GPU。这是因为深度学习的框架中使用了NVIDIA提供的CUDA这个面向GPU计算的综合开发环境。cuDNN是在CUDA上运行的库,它里面实现了为深度学习最优化过的函数。
通过im2col可以讲卷积层进行的运算转换为大型矩阵的乘积。这个im2col方式的实现对GPU来说是非常方便的实现方式。这是因为,相比按小规模的单位进行计算,GPU更擅长计算大规模的汇总好的数据。也就是说,通过基于im2col以大型矩阵的乘积的方式汇总计算,更容易发挥出GPU的能力。

(3)分布式学习
虽然通过GPU可以实现深度学习运算的高速化,但即便如此,当网络较深时,学习还是需要几天到几周的时间。并且,前面也说过,深度学习伴随着很多试错。为了创建良好的网络,需要反复进行各种尝试,这样一来就必然会产生尽可能地缩短一次学习所需的时间的要求。于是,将深度学习的学习过程扩展开来的想法(也就是分布式学习)就变得重要起来。
为了进一步提高深度学习所需的计算的速度,可以考虑在多个GPU或者多台机器上进行分布式计算。现在的深度学习框架中,出现了好几个支持多GPU或者多机器的分布式学习的框架。其中,Google的TensorFlow、微软的CNTK在开发过程中高度重视分布式学习。以大型数据中心的低延迟.高吞吐网络作为支撑,基于这些框架的分布式学习呈现出惊人的效果。
比如,在基于TensorFlow的分布式学习中,可以发现,随着GPU个数的增加,学习速度也在提高。实际上,与使用使用1个GPU时相比,使用100个GPU(设置在多台机器上,共100个)似乎可以实现56倍的高速化。这意味着之前花费7天的学习只要3个小时就可能完成,充分说明了分布式学习惊人的效果。
关于分布式学习,“如何进行分布式计算”是一个非常难的课题。它包含了机器间的通信、数据的同步等多个无法轻易解决的问题。可以将这些问题都交给TensorFlow等优秀的框架。
(4)运算精度的位数缩减
深度学习并不那么需要数值精度的位数。计算机中表示小数时,有32位的单精度浮点数和64位的双精度浮点数等格式。根据以往的实验结果,在深度学习中,即便是16位的半精度浮点数,也可以顺利的进行学习。实际上,NVIDIA的下一代GPU框架Pascal也支持半精度浮点数的运算,由此可以认为今后半精度浮点数将被作为标准使用。
4.深度学习的应用案例
本节将以计算机视觉这个领域为中心,介绍几个深度学习能做的事情(应用)。
(1)物体检测
物体检测是从图像中确定物体的位置,并进行分类的问题。对于物体检测问题,人们提出了多个基于CNN的方法。在使用CNN进行物体检测的方法中,有一个叫作R-CNN的有名的方法。R-CNN处理流首先(以某种方法)找出形似物体的区域,然后对提取出的区域应用CNN进行分类。R-CNN中会将图像变形正方形,或者在分类时使用SVM(支持向量机)。
(2)图像分割
图像分割是指在像素水平上对图像进行分类。使用以像素为单位对各个对象分别着色的监督数据进行学习。然后,在推理时,对输入图像的所有像素进行分类。
要基于神经网络进行图像分割,最简单的方法是以所有像素为对象,对每个像素执行推理处理。
FCN(Fully Convolutional Network)方法:该方法通过一次forward处理,对所有像素进行分类。FCN的字面意思是“全部由卷积层构成的网络”。相对于一般的CNN包含全连接层,FCN将全连接层替换成发挥相同作用的卷积层。在物体识别中使用的网络的全连接层中,中间数据的空间容量被作为排成一列的节点进行处理,而只由卷积层构成的网络中,空间容量可以保持原样直到最后的输出。
FCN的特征在于最后导入了扩大空间大小的处理。基于这个处理,变小了的中间数据可以一下子扩大到和输入图像一样的大小。FCN最后进行的扩大处理是基于双线性插值法的扩大(双线性插值扩大)。FCN中,这个双线性插值扩大是通过去卷积(逆卷积计算)来实现的。
全连接中,输出和全部的输入相连。使用卷积层也可以实现与此结构完全相同的连接。即全连接可以替换成进行相同处理的卷积层

*(3)图像标题的生成*
一个基于深度学习生成图像标题的代表性方法是被称为NIC(Neural Image Caption)的模型。NIC由深层的CNN和处理自然语言的RNN构成。RNN是呈递归式连接的网络。经常被用于自然语言、时间序列数据等连续性的数据上。
NIC基于CNN从图像中提取特征,并将这个特征传给RNN。RNN以CNN提取出的特征为初始值,递归的生成文本。
我们将组合图像和自然语言等多种信息进行的处理称为**多模态处理**。

RNN的R表示Recurrent(递归的)。这个递归指的是神经网络的递归的网络结构。根据这个递归结构,神经网络会受到之前生成的信息的影响(换句话说,会记忆过去的信息),这是RNN的特征。对于自然语言、时间序列数据等连续性的数据,RNN以记忆过去的信息的方式运行。

5.深度学习的未来
(1)图像风格变换
有一项研究是使用深度学习来“绘制”带有艺术气息的画。输入两个图像后,会生成一个新的图像。两个输入图像中,一个称为“内容图像”,另一个称为“风格图像”。
这个方法是在学习过程中使网络的中间数据近似内容图像的中间数据。这样一来,就可以使输入图像近似内容图像的形状。此外,为了从风格图像中吸收风格,导入了风格矩阵的概念。
(2)图像的生成
现在有一种研究是生成新的图像时不需要任何图像(虽然需要事先使用大量的图像进行学习,但在“画”新图时不需要任何图像)。比如,基于深度学习,可以实现从0生成“卧室”的图像。基于DCGAN(Deep Convolutional Generative Adversarial Network)方法生成卧室图像,这些图像是谁都没有见过的图像(学习数据中没有的图像),是从0生成的新图像。
能画出以假乱真的图像的DCGAN会将图像的生成过程模型化。使用大量图像训练这个模型,学习结束后,使用这个模型,就可以生成新的图像。
DCGAN中使用了深度学习,其技术要点是Generator(生成者)和Discriminator(识别者)这两个神经网络。Generator生成近似真品的图像,Discriminator判别它是不是真图像(是Generator生成的图像还是实际拍摄的图像)。像这样,通过让两者以竞争的方式学习,Generator会学习到更加精妙的图像作假技术,Discriminator则会成长为能够更高精度辨别真假的鉴定师。两者互相切磋、共同成长,这是GAN(Generative Adversarial Network)这个技术的有趣之处。
这里并没有给出监督数据,只给了大量的图像(图像的集合),这样的问题称为无监督学习。
(3)自动驾驶
(4)Deep Q-Network(强化学习)
就像人类通过摸索实验来学习一样,让计算机也在摸索实验的过程中自主学习,这称为强化学习。
强化学习的基本框架是,代理(Agent)根据环境选择行动,然后通过这个行动改变环境。根据环境的变化,代理获得某种报酬。强化学习的目的是决定代理的行动方针,以获得更好的报酬。
在使用了深度学习的强化学习的方法中,有一个叫做Deep Q-Network(通称DQN)的方法。该方法基于被称为Q学习的强化学习算法。这里省略了Q学习的细节,不过在Q学习中,为了确定合适的行动,需要确定一个被称为最优行动价值函数的函数。为了近似这个函数,DQN使用了深度学习(CNN)。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值