加深网络
前情回顾
- 构成神经网络的各种层
- 学习时的有效技巧
- 对图像特别有效的CNN
- 参数的最优化方法
向更深的网络出发
网络特点
- 基于3×3 的小型滤波器的卷积层。
- 激活函数是ReLU。
- 全连接层的后面使用Dropout层。
- 基于Adam的最优化。
- 使用He初始值作为权重初始值。
进一步提高识别精度
对于手写数字识别这样一个比较简单的任务,没有必要将网络的表现力提高到那么高的程度
大规模的一般物体识别的情况,因为问题复杂,所以加深层对提高识别精度大有裨益。
方法
- 集成学习
- 学习率衰减
- Data Augmentation 数据增广
- 旋转、平移
- 裁剪图像的crop处理
- 将图像左右翻转的flip处理
- 亮度等外观上的变化
- 放大缩小
加深层的动机
层越深,识别性能也越高
one
可以减少网络的参数数量,说得详细一点,就是与没有加深层的网络相比,加深了层的网络可以用更少的参数达到同等水平(或者更强)的表现力
每个输出节点都是从输入数据的某个5 × 5 的区域算出来的
图8-6 的输出数据是“观察”了输入数据的某个5 × 5 的区域后计算出来的
一次5 × 5 的卷积运算的区域可以由两次3 × 3 的卷积运算抵充。并且,相对于前者的参数数量25(5 × 5),后者一共是18(2 × 3 × 3),通过叠加卷积层,参数数量减少了。而且,这个参数数量之差会随着层的加深而变大。
two
使学习更加高效
在前面的卷积层中,神经元会对边缘等简单的形状有响应,随着层的加深,开始对纹理、物体部件等更加复杂的东西有响应
通过加深网络,就可以分层次地分解需要学习的问题
通过加深层,可以分层次地传递信息,这一点也很重要。通过加深层,可以将各层要学习的问题分解成容易解决的简单问题,从而可以进行高效的学习。
深度学习的小历史
ImageNet
ImageNet是拥有超过100 万张图像的数据集
VGG
VGG是由卷积层和池化层构成的基础的CNN
它的特点在于将有权重的层(卷积层或者全连接层)叠加至16 层(或者19 层),具备了深度(根据层的深度,有时也称为“VGG16”或“VGG19”)
VGG中需要注意的地方是,基于3×3 的小型滤波器的卷积层的运算是连续进行的
GoogLeNet
GoogLeNet的特征是,网络不仅在纵向上有深度,在横向上也有深度(广度)。
GoogLeNet在横向上有“宽度”,这称为“Inception 结构”
Inception 结构使用了多个大小不同的滤波器(和池化),最后再合并它们的结果。GoogLeNet 的特征就是将这个Inception 结构用作一个构件(构成元素)。此外,在GoogLeNet 中,很多地方都使用了大小为1 × 1 的滤波器的卷积层。这个1 × 1 的卷积运算通过在通道方向上减小大小,有助于减少参数和实现高速化处理
ResNet
ResNet 是微软团队开发的网络。它的特征在于具有比以前的网络更深的结构。
ResNet中,为了解决这类问题,导入了“快捷结构”(也称为“捷径”或“小路”)。导入这个快捷结构后,就可以随着层的加深而不断提高性能了(层的加深也是有限度的)
通过快捷结构,反向传播时信号可以无衰减地传递。
[!IMPORTANT]
实践中经常会灵活应用使用ImageNet 这个巨大的数据集学习到的权重数据,这称为迁移学习
将学习完的权重(的一部分)复制到其他神经网络,进行再学习(fine tuning)
迁移学习在手头数据集较少时非常有效。
深度学习的高速化
大多数深度学习的框架都支持GPU(Graphics Processing Unit),可以高速地处理大量的运算
最近的框架也开始支持多个GPU或多台机器上的分布式学习
需要努力解决的问题
如何高速、高效地进行卷积层中的运算是深度学习的一大课题
虽然图8-14是推理时的结果,不过学习时也一样,卷积层中会耗费大量时间
基于GPU的高速化
由于GPU可以高速地进行并行数值计算,因此GPU计算的目标就是将这种压倒性的计算能力用于各种用途
分布式学习
为了进一步提高深度学习所需的计算的速度,可以考虑在多个GPU或者多台机器上进行分布式计算
以大型数据中心的低延迟·高吞吐网络作为支撑,基于这些框架的分布式学习呈现出惊人的效果
“如何进行分布式计算”是一个非常难的课题。它包含了机器间的通信、数据的同步等多个无法轻易解决的问题。可以将这些难题都交给TensorFlow 等优秀的框架
运算精度的位数缩减
关于数值精度(用几位数据表示数值),我们已经知道深度学习并不那么需要数值精度的位数。这是神经网络的一个重要性质。这个性质是基于神经网络的健壮性而产生的。这里所说的健壮性是指,比如,即便输入图像附有一些小的噪声,输出结果也仍然保持不变
在深度学习中,即便是16 位的半精度浮点数(half float),也可以顺利地进行学习
深度学习的使用案例
在图像、语音、自然语言等各个不同的领域,深度学习都展现了优异的性能。本节将以计算机视觉这个领域为中心,介绍几个深度学习能做的事情(应用)。
物体检测
图像分割
在像素水平上对图像进行分类
有人提出了一个名为FCN(Fully Convolutional Network)[37] 的方法。该方法通过一次forward处理,对所有像素进行分类(图8-20)。
FCN的特征在于最后导入了扩大空间大小的处理。基于这个处理,变小了的中间数据可以一下子扩大到和输入图像一样的大小。FCN最后进行的扩大处理是基于双线性插值法的扩大(双线性插值扩大)。FCN中,这个双线性插值扩大是通过去卷积(逆卷积运算)来实现的
图像标题的生成
一个基于深度学习生成图像标题的代表性方法是被称为NIC(Neural Image Caption)的模型
NIC由深层的CNN和处理自然语言的RNN(Recurrent Neural Network)构成
RNN是呈递归式连接的网络,经常被用于自然语言、时间序列数据等连续性的数据上
深度学习的未来
图像风格变换
图像的生成
图8-24 中展示的图像是基于DCGAN(Deep Convolutional Generative Adversarial Network)方法生成的卧室图像的例子。
通过让两者以竞争的方式学习,Generator 会学习到更加精妙的图像作假技术,Discriminator 则会成长为能以更高精度辨别真假的鉴定师。两者互相切磋、共同成长,这是GAN(Generative Adversarial Network)这个技术的有趣之处。
自动驾驶
Deep Q-Network(强化学习)
就像人类通过摸索试验来学习一样(比如骑自行车),让计算机也在摸索试验的过程中自主学习,这称为强化学习(reinforcement learning)
强化学习的基本框架是,代理(Agent)根据环境选择行动,然后通过这个行动改变环境。根据环境的变化,代理获得某种报酬。强化学习的目的是决定代理的行动方针,以获得更好的报酬
小结
- 对于大多数的问题,都可以期待通过加深网络来提高性能。
- 在最近的图像识别大赛ILSVRC中,基于深度学习的方法独占鳌头,使用的网络也在深化。
- VGG、GoogLeNet、ResNet等是几个著名的网络。
- 基于GPU、分布式学习、位数精度的缩减,可以实现深度学习的高速化。
- 深度学习(神经网络)不仅可以用于物体识别,还可以用于物体检测、图像分割。
- 深度学习的应用包括图像标题的生成、图像的生成、强化学习等。最近,深度学习在自动驾驶上的应用也备受期待。