当前位置: 首页 > 文档资料 > Python 机器学习 >

12.7 其他神经网络架构

优质
小牛编辑
121浏览
2023-12-01

本章我们讨论了当前最流行的前馈神经网络中的一种——多层感知器。神经网络是目前机器学习领域中最活跃的研究课题之一,介绍其他神经网络架构超出了本书的范围。如果读者有兴趣了解更多关于深度学习的神经网络和算法,推荐阅读Y.Bengio的论文[1]的介绍和概述部分;Yoshua Bengio由此出版的著作可通过以下链接免费获得:http://www.iro.umontreal.ca/~bengioy/papers/ftml_book.pdf

神经网络相关的内容足以用一整本书来进行讲解,在此,我们只简单介绍一下另外两种神经网络架构:卷积神经网络(convolutional neural network)和循环神经网络(recurrent neural network)。

[1] Y. Bengio. Learning Deep Architectures for AI. Foundations and Trends in Machine Learning, 2(1):1-127,2009.

12.7.1 卷积神经网络

卷积神经网络(Convolutional Neural Network,简写为CNN或ConvNet)在图像识别中的优异表现使其在计算机视觉领域日渐流行,它是当下深度学习领域最流行的神经网络架构之一。卷积神经网络的核心理念在于构建多层特征检测器,以处理输入图片中像素间的空间排列。请注意,卷积神经网络有多个变种。在本节中,我们将讨论此架构的通用理念。如果读者有兴趣了解更多关于卷积神经网络的内容,建议阅读Yann LeCun(http://yann.lecun.com)的相关著作,Yann是卷积神经网络的提出者之一。我特别推荐从下列文献入手学习卷积神经网络:

·Y.LeCun,L.Bottou,Y.Bengio,and P.Haffner.Gradient-based Learning Applied to Document Recognition.Proceedings of the IEEE,86(11):2278-2324,1998.

·P.Y.Simard,D.Steinkraus,and J.C.Platt.Best Practices for Convolutional Neural Networks Applied to Visual Document Analysis.IEEE,2003,p.958.

回忆一下实现多层感知器时,我们将图像展开为向量,并通过输入层使用全连接将其连接到了隐层——此网络架构没有对空间信息进行编码。在卷积神经网络中,我们使用感受野(receptive field)将输入层连接到特征图(feature map)。可以将感受野理解为层叠的窗口,窗口在可以输入图像的像素上滑动,以此创建特征映射。窗口滑动的幅度以及窗口的大小都是模型的先验超参。对特征图的创建称作卷积(convolution)。连接输入像素与特征图单元的层称作卷积层,如下图所示:

需要特别注意的是,特征检测器是可以复用的,这意味着将特征转换到像素单元的感受野在下一层中将共享权重。这里关键一点就是:如果特征检测器在图像中的某一位置是有效的,则它在其他位置同样有效。这种方法的优点在于它极大地减少了参数的数量。由于图像中的不同分块可以采用不同的方式来表示,因此卷积神经网络对于识别图片中不同大小、位置的对象效果很好。由于MNIST数据库中的图片已经做过缩放和中心定位,我们无需对此过多担心。

在卷积神经网络中,卷积层之后紧跟的是汇聚层(pooling layer)(有时也称作子采样层(sub-sampling))。在汇聚层中,我们汇总邻近的特征检测器,以减少传入下一层的特征数量。汇聚层可以看作是一种简单的特征抽取,我们可以将临近特征的平均值或最大值抽取出来,并传递给下一层。为了构建深层卷积神经网络,在将神经网络连至多层感知器进行分类之前,我们先在卷积层和汇聚层之间交替地进行多个层的堆叠。如下图所示:

12.7.2 循环神经网络

循环神经网络(Recurrent Neural Network,RNN)可被理解为包含与时间相关的反馈循环或者反向传播的前馈神经网络。在循环神经网络中,神经元(暂时)释放前,它们只能在有限的时间内处于活动状态。反过来,这些神经元在下一个时间点又会激活其他神经元使之处于活动状态。本质上讲,我们可将循环神经网络看作包含额外时间变量的多层感知器。由于具备这样的时间属性和自身的动态结构,使得网络不光能接受当前的输入值,还可以接受此前的其他输入。

尽管循环神经网络在语音识别、语言翻译,以及手写识别等领域成效显著,不过这种网络架构训练起来却相当困难。这是因为我们不能简单地将错误逐层反向传播,而必须考虑到时间维度,它放大了梯度消失与梯度爆炸的问题。在1997年,Juergen Schmidhuber和他同事提出了所谓的长短时记忆(long short-term memory)单元来解决此问题[1]

此外,我们还应注意,循环神经网络有许多种不同类型的变体,关于它们的详细讨论已经超出了本书的范围。

[1] S. Hochreiter and J. Schmidhuber. Long Short-term Memory. Neural Computation, 9(8):1735-1780, 1997.