首页
学习
活动
专区
圈层
工具
发布
社区首页 >专栏 >八、神经网络(上)

八、神经网络(上)

作者头像
程序员三明治
发布2025-12-18 20:33:47
发布2025-12-18 20:33:47
110
举报
文章被收录于专栏:码力up码力up

深度学习是加深了层的深度神经网络。

8.1 加深网络

关于神经网络,我们已经学了很多东西,比如构成神经网络的各种层、学习时的有效技巧、对图像特别有效的CNN、参数的最优化方法等,这些都是深度学习中的重要技术。本节我们将这些已经学过的技术汇总起来,创建一个深度网络,挑战MNIST数据集的手写数字识别。

8.1.1 向更深的网络出发

这里我们来创建一个如图8-1所示的网络结构的CNN(一个比之前的网络都深的网络)。这个网络参考了下一节要介绍的VGG。

这里使用的卷积层全都是3 × 3的小型滤波器,特点是随着层的加深,通道数变大(卷积层的通道数从前面的层开始按顺序以16、16、32、32、64、64的方式增加)。

此外,如图8-1所示,插入了池化层,以逐渐减小中间数据的空间大小;并且,后面的全连接层中使用了Dropout层。

这个网络有如下特点。

基于3×3的小型滤波器的卷积层。

激活函数是ReLU。

全连接层的后面使用Dropout层。

基于Adam的最优化。

使用He初始值作为权重初始值。

图8-1的网络的错误识别率只有0.62%。这里我们实际看一下在什么样的图像上发生了识别错误。图8-2中显示了识别错误的例子

这次的深度CNN尽管识别精度很高,但是对于某些图像,也犯了和人类同样的“识别错误”。从这一点上,我们也可以感受到深度CNN中蕴藏着巨大的可能性。

8.1.2 进一步提高识别精度

针对各种数据集的方法的识别精度(图8-3)。

截止到2016年6月,对MNIST数据集的最高识别精度是99.79%(错误识别率为0.21%),该方法也是以CNN为基础的。不过,它用的CNN并不是特别深层的网络(卷积层为2层、全连接层为2层的网络)。

参考刚才排行榜中前几名的方法,可以发现进一步提高识别精度的技术和线索。比如,集成学习、学习率衰减、Data Augmentation(数据扩充)等都有助于提高识别精度。尤其是Data Augmentation,虽然方法很简单,但在提高识别精度上效果显著。

Data Augmentation基于算法“人为地”扩充输入图像(训练图像)。具体地说,如图8-4所示,对于输入图像,通过施加旋转、垂直或水平方向上的移动等微小变化,增加图像的数量。这在数据集的图像数量有限时尤其有效

8.1.3 加深层的动机

首先,从以ILSVRC为代表的大规模图像识别的比赛结果中可以看出加深层的重要性(详细内容请参考下一节)。这种比赛的结果显示,最近前几名的方法多是基于深度学习的,并且有逐渐加深网络的层的趋势。也就是说,可以看到层越深,识别性能也越高。

下面我们说一下加深层的好处。其中一个好处就是可以减少网络的参数数量。加深了层的网络可以

用更少的参数达到同等水平(或者更强)的表现力。比如,图8-5展示了由5 × 5的滤波器构成的卷积层。

在图8-5的例子中,每个输出节点都是从输入数据的某个5 × 5的区域算出来的。接下来我们思考一下图8-6中重复两次3 × 3的卷积运算的情形。此时,每个输出节点将由中间数据的某个3 × 3的区域计算出来。

那么,中间数据的3 × 3的区域又是由前一个输入数据的哪个区域计算出来的呢?仔细观察图8-6,可知它对应一个5 × 5的区域。也就是说,图8-6的输出数据是“观察”了输入数据的某个5 × 5的区域后计算出来的。

一次5 × 5的卷积运算的区域可以由两次3 × 3的卷积运算抵充。并且,相对于前者的参数数量25(5 × 5),后者一共是18(2 × 3 × 3),通过叠加卷积层,参数数量减少了。而且,这个参数数量之差会随着层的加深而变大。 比如,重复三次3 × 3的卷积运算时,参数的数量总共是27。而为了用一次卷积运算“观察”与之相同的区域,需要一个7 × 7的滤波器,此时的参数数量是49。

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

8.2 深度学习的小历史

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

8.2.1 ImageNet

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

这些年深度学习取得了不斐的成绩,其中VGG、GoogLeNet、ResNet已广为人知,在与深度学习有关的各种场合都会遇到这些网络。下面我们就来简单地介绍一下这3个有名的网络。

8.2.2 VGG

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

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

8.2.3 GoogLeNet

GoogLeNet的网络结构如图8-10所示。图中的矩形表示卷积层、池化层等。

GoogLeNet的特征是,网络不仅在纵向上有深度,在横向上也有深度(广度)。GoogLeNet在横向上有“宽度”,这称为“Inception结构”,以图8-11所示的结构为基础。Inception结构使用了多个大小不同的滤波器(和池化),最后再合并它们的结果。GoogLeNet的特征就是将这个Inception结构用作一个构件(构成元素)。

8.2.4 ResNet

它的特征在于具有比以前的网络更深的结构。

在深度学习中,过度加深层的话,很多情况下学习将不能顺利进行,导致最终性能不佳。ResNet中,

为了解决这类问题,导入了“快捷结构”(也称为“捷径”或“小路”)。导入这个快捷结构后,就可以随着层的加深而不断提高性能了

如图8-12所示,快捷结构横跨(跳过)了输入数据的卷积层,将输入x合计到输出。

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

ResNet以前面介绍过的VGG网络为基础,引入快捷结构以加深层,其结果如图8-13所示。

如图8-13所示,ResNet通过以2个卷积层为间隔跳跃式地连接来加深层。另外,根据实验的结果,即便加深到150层以上,识别精度也会持续提高。并且,在ILSVRC大赛中,ResNet的错误识别率为3.5%(前5类中包含正确解这一精度下的错误识别率),令人称奇。

8.3 深度学习的高速化

虽然到目前为止,我们都是使用CPU进行计算的,但现实是只用CPU来应对深度学习无法令人放心。实际上,环视一下周围,大多数深度学习的框架都支持GPU(Graphics Processing Unit),可以高速地处理大量的运算。另外,最近的框架也开始支持多个GPU或多台机器上的分布式学习。

8.3.1 需要努力解决的问题

我们先来看一下深度学习中什么样的处理比较耗时。图8-14中以AlexNet的forward处理为对象,用饼图展示了各层所耗费的时间。

从图中可知,AlexNex中,大多数时间都被耗费在卷积层上。实际上,卷积层的处理时间加起来占GPU整体的95%,占CPU整体的89%!因此,如何高速、高效地进行卷积层中的运算是深度学习的一大课题。

8.3.2 基于GPU的高速化

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

深度学习中需要进行大量的乘积累加运算(或者大型矩阵的乘积运算)。这种大量的并行运算正是GPU所擅长的

图8-15是基于CPU和GPU进行AlexNet的学习时分别所需的时间。从图中可知,使用CPU要花40天以上的时间,而使用GPU则可以将时间缩短至6天

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

8.3.3 分布式学习

为了进一步提高深度学习所需的计算的速度,可以考虑在多个GPU或者多台机器上进行分布式计算。现在的深度学习框架中,出现了好几个支持多GPU或者多机器的分布式学习的框架。其中,Google的TensorFlow、微软的CNTK(Computational Network Toolki)在开发过程中高度重视分布式学习。

基于分布式学习,可以达到何种程度的高速化呢?图8-16中显示了基于TensorFlow的分布式学习的效果。

如图8-16所示,随着GPU个数的增加,学习速度也在提高。实际上,与使用1个GPU时相比,使用100个GPU(设置在多台机器上,共100个)似乎可以实现56倍的高速化!这意味着之前花费7天的学习只要3个小时就能完成,充分说明了分布式学习惊人的效果。

本文参与 腾讯云自媒体同步曝光计划,分享自作者个人站点/博客。
原始发表:2025-12-18,如有侵权请联系 cloudcommunity@tencent.com 删除

本文分享自 作者个人站点/博客 前往查看

如有侵权,请联系 cloudcommunity@tencent.com 删除。

本文参与 腾讯云自媒体同步曝光计划  ,欢迎热爱写作的你一起参与!

评论
登录后参与评论
0 条评论
热度
最新
推荐阅读
目录
  • 8.1 加深网络
    • 8.1.1 向更深的网络出发
    • 8.1.2 进一步提高识别精度
    • 8.1.3 加深层的动机
  • 8.2 深度学习的小历史
    • 8.2.1 ImageNet
    • 8.2.2 VGG
    • 8.2.3 GoogLeNet
    • 8.2.4 ResNet
  • 8.3 深度学习的高速化
    • 8.3.1 需要努力解决的问题
    • 8.3.2 基于GPU的高速化
    • 8.3.3 分布式学习
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档