8.1 加深网络

创建一个图示中的网络,挑战MINIST数据集
网络

这个网络使用He初始值作为权重的初始值,使用Adam更新权重参数。
把上述内容总结起来,这个网络有如下特点。

• 基于3×3的小型滤波器的卷积层。
• 激活函数是ReLU。
• 全连接层的后面使用Dropout层。
• 基于Adam的最优化。
• 使用He初始值作为权重初始值。

书中介绍这个网络的识别精度能稳定达到99%以上

8.1.1 数据扩充的介绍

Data Augmentation(数据扩充),虽然方法很简单,但在提高识别精度上效果显著。

具体方法大概是:将训练数据处理一下,以达到扩充数据的目的。

比如:

  • 将原图像旋转一定角度
  • 裁切原图像
  • 改变原图像的亮度、对比度等

该方法在训练数据较少时尤其有效

8.1.3 加深网络的动机

为什么加深网络能提高学习率呢?
原因之一是节省参数

直观理解起来大概是:

假如使用100个参数构建网络

方案1: 构建1个10×10的层
方案2: 构建4个5×5的层

但两种方案比较而言,方案2中,对于每个输入数据,实际上有种参数的组合来处理它
而方案1仅有100种。
多个层之间可以添加激活函数,更能提高神经网络的表现力

而减少参数又可以减少学习时间

8.2 深度学习的小历史

深度学习受到关注

2012年举办的大规模图像识别大赛ILSVRC(ImageNet Large Scale Visual Recognition Challenge)。在那年的比赛中,基于深度学习的方法(通称AlexNet)以压倒性的优势胜出,彻底颠覆了以往的图像识别方法。

8.2.1 ImageNet

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

下面介绍的都是在这个数据集中表现优异的神经网络

8.2.3 VGG

VGG是由卷积层和池化层构成的基础的CNN。

它的特点在于将有权重的层(卷积层或者全连接层)叠加至16层(或者19层),具备了深度(根据层的深度,有时也称为“VGG16”或“VGG19”)。

VGG中需要注意的地方是,基于3×3的小型滤波器的卷积层的运算是连续进行的。如图8-9所示,重复进行“卷积层重叠2次到4次,再通过池化层将大小减半”的处理,最后经由全连接层输出结果。

VGG

 ResNet

深度加深是有限度的:随着深度加深,数据的梯度会降低,学习会越来越困难

ResNet导入了“快捷结构”
VGG
通过这种快捷结构,原来卷积层的输出变成了
一定程度上改善了梯度消失的问题

ResNet可以加深到100多层。

8.3 深度学习的高速化

本节介绍如何加速学习

8.3.1

先看AlexNet在推理时各层占用的时间

时间比例
(fc指的是全连接层)

从图中可知,AlexNex中,大多数时间都被耗费在卷积层上。实际上,卷积层的处理时间加起来占GPU整体的95%,占CPU整体的89%。

8.3.2 基于GPU的高速化

GPU擅长并行运算
CPU擅长连续串行的运算。

在矩阵处理时,需要大量并行运算,此时使用GPU能大大加速学习过程。

8.3.3 分布式学习

分布式学习,简而言之,就是在多个计算机上进行的学习。

Google的TensorFlow、微软的CNTK(Computational Network Toolki)在开发过程中高度重视分布式
学习。

分布式学习需要解决机器间的通信、数据的同步等多个无法轻易解决的问题。
但这些可以交给tensorflow等学习框架解决。

8.3.4 运算精度的位数缩减

不止是CPU和GPU,在深度学习时,内存、总线宽度也有可能成为瓶颈。

关于内存容量,需要考虑将大量的权重参数或中间数据放在内存中。关于总线带宽,当流经GPU(或者CPU)总线的数据超过某个限制时,就会成为瓶颈。考虑到这些情况,我们希望尽可能减少流经网络的数据的位数。

比如:当能用4位大体存储权重参数时,就不要使用6位。

计算机中表示小数时,有32位的单精度浮点数和64位的双精度浮点数等格式。根据以往的实验结果,在深度学习中,即便是16位的半精度浮点数(half float),也可以顺利地进行学习。

另外,使用16位半精度浮点数应该也会缩短运算时间(书中没提,也许是影响不大,但肯定会有影响)

实际上,NVIDIA的下一代GPU框架Pascal也支持半精度浮点数的运算,由此可以认为今后半精度浮点数将
被作为标准使用。

8.5 深度学习的未来

8.5.2 无监督学习

DCGAN(Deep Convolutional Generative Adversarial Network)方法生成的卧室图像的例子。
生成卧室图像

这些并不是照片,而是由深度学习网络自动生成的。
DCGAN的要点在于,它同时使用了两个神经网络。
Generator生成近似真品的图像,Discriminator判别它是不是真图像(是Generator生成的图像还是实际拍摄的图像)。像这样,通过让两者以竞争的方式学习,Generator会学习到更加精妙的图像作假技术,Discriminator则会成长为能以更高精度辨别真假的鉴定师。两者互相切磋、共同成长

有监督的学习:所有的训练数据都有正确解标签
与有监督学习对应的就是无监督的学习。
DCGAN就是无监督的学习。

8.5.3 强化学习

设想这样一个问题:如何训练一个模型来玩《超级马里奥》

之前的监督式学习应该是这样的方法:给每一步都设置正确解标签。

但可不可以不交由人工判断,而是让模型自动学习呢?

这就是强化学习。强化学习没有的正确解标签,而是基于一些指标,比如游戏的金币数、积分、游戏的输赢来确定行动。
当然,强化学习也必须要利用深度学习,因为游戏的输赢等也需要有函数来评估。