1.1 深度学习概述
科学技术的发展是曲折的。回顾70多年的发展历史,受算法瓶颈、硬件算力的影响,深度学习的发展经历了多次低潮。直到2006年,“深度学习鼻祖”杰里弗·欣顿(Geoffrey Hinton)提出了梯度消失问题的解决方案,深度学习研究才开始了新一轮的热潮。
1.1.1 深度学习的历史
深度学习(参考文献[1])的历史最早可以追溯到1943年,心理学家沃伦·麦卡洛克(Warren McCulloch)和数学家沃尔特·皮茨(Walter Pitts)根据生物的神经元结构,提出了最早的神经元数学模型——MCP(McCulloch-Pitts)模型。MCP模型实际上是按照生物的神经元结构及其工作原理简化抽象出来的,麦卡洛克和皮茨希望能够用计算机来模拟人的神经元反应过程,也就是所谓的“模拟人脑”。该模型将神经元的数据处理工作简化为3个阶段,分别是对输入信号的加权、求和与激活。其中激活阶段为了模拟神经元采用了非线性的激活方式,这也是神经网络与线性计算的根本区别。
普通的MCP模型并没有学习能力,只能完成一些固定的逻辑判定,直到1958年美国科学家弗兰克·罗森布拉特(Frank Rosenblatt)提出了第一个可以自动学习权重的神经元模型,其被称为“感知机”。感知机常被用于分类任务,即使在今天,感知机仍然是入门机器学习学科必学的基础模型,1962年,该模型被证明能够收敛,它的理论与实践效果引起第一次神经网络研究的热潮。
科学技术的发展总是迂回曲折上升的,深度学习也不例外。1969年,美国科学家马尔温·明斯基(Marvin Minsky)等人指出了感知机的缺陷——它无法解决简单的异或问题,这直接导致以感知机为基础的相关神经网络研究陷入低潮。
20世纪80年代,神经网络研究迎来了复兴。1986年,欣顿提出了反向传播(Back Propagation,BP)算法与非线性映射函数Sigmoid,BP算法和Sigmoid有效解决了非线性分类和神经网络学习的问题。放眼现在,BP算法仍然是当今绝大多数神经网络进行训练的方法,欣顿也因此被誉为“神经网络之父”。20世纪八九十年代,卷积神经网络、循环神经网络、长短期记忆(Long Short-Term Memory,LSTM)网络等被相继提出。但是随着以支持向量机(Support Vector Machine,SVM)为代表的浅层机器学习算法研究的兴起,神经网络的研究再次陷入低潮。
2006年,神经网络又一次迎来了复兴,欣顿和他的学生提出了多层神经网络训练时梯度消失问题的解决方案,即采用多层预训练的方式, 同时他们还提出了深度学习的概念, 至此“深度学习时代”到来!2011年,泽维尔·格罗特(Xavier Glorot)提出了线性整流单元(Rectified Linear Unit,ReLU)激活函数,它是当今使用最多的非线性激活函数之一,此后大量的深度神经网络如雨后春笋般“破土而出”,如AlexNet、VGG(Visual Geometry Group)、GoogLeNet、ResNet、DenseNet等。值得注意的是,这些网络都是应用在计算机视觉领域的。除此之外,还有应用于自然语言处理的网络,如LSTM和最近火热的BERT(Bidirectional Encoder Representations from Transformers,一种预训练语言模型)等。当然近年来也有学者提出了应用于无线通信领域的网络,如DetNet、CsiNet等。总而言之,目前深度学习研究正处于新一轮的热潮,同时工业界关于深度学习技术的应用也已硕果累累。
1.1.2 深度学习的原理
1.1.1小节提到了神经元模型,神经元模型的工作流程可分为3个步骤,首先输入数据向量,然后进行数据处理,最后输出处理好的数据向量。神经元模型在进行数据处理时又分成3个阶段,依次是加权、求和与激活。许多神经元以特定的规则排列并连接成网状就形成了神经网络。如图1.1所示,图中的网络称为全连接(Fully Connected,FC)神经网络,其中每一个圆圈表示一个神经元。如图1.1所示,通过排列,神经元之间形成了固定的层级关系。图1.1中的网络共分3层:习惯上将第一层称为输入层;将最后一层称为输出层;因为外部看不到输入层与输出层之间的网络结构,所以将第一层与最后一层中间包含的所有层称为隐藏层。之所以把图1.1所示网络称为全连接神经网络,是因为后一层的神经元会把它前一层的所有神经元的输出都作为自己的输入。值得注意的是,神经元之间的每一个连接都代表着一个权重(用w表示)。
图1.1 全连接神经网络结构
神经网络实际上是一个将输入向量映射到输出向量的非线性函数,其中非线性主要由神经元的非线性激活函数提供。图1.1所示的神经网络可以记为
(1.1)
神经网络能够通过反向传播进行“训练”来缩小输出值与期望值之间的差距。具体来说,在获得了输出值以后,在监督学习条件下,便可以计算出网络输出值与期望值之间的损失函数值,然后通过BP算法(依据的是链式求导法则),能够计算出损失函数关于神经网络中每一个权重的梯度,这样通过梯度下降算法,如式(1.2)所示,就可以实现权重的迭代更新,使得损失函数值变得更小,其中lr是梯度下降算法的学习率(Learning Rate,LR)。通过大量数据不断地训练,神经网络会越来越“适应”当前数据集,在当前数据集中的损失函数值就会越来越小,那么预测得也就会越来越准,同时在一些分布相似但未参与训练的数据集上也会有不错的表现。
(1.2)
深度学习网络可以看作多层的神经网络,当然神经网络不仅限于全连接神经网络,还包括卷积神经网络、循环神经网络等一众变化多端、风格各异的优秀网络。也正是因为网络结构多变,深度学习才具备了巨大的潜力与更多的可能。虽然不同的网络结构迥异,但相通的是,绝大多数神经网络都是依托大量数据进行监督学习,并通过BP算法来实现参数迭代更新的。
下面介绍一种计算机视觉领域常见的神经网络——卷积神经网络。常见卷积神经网络的结构如图1.2所示。与全连接神经网络相比,卷积神经网络在结构上有很大差异,全连接神经网络中的神经元都是按照一维排列的,而卷积神经网络中的神经元是按照三维排列的,3个维度分别是长度、宽度和高度,可以分别与图像中的长、宽、通道一一对应,所以卷积神经网络天然适用于处理图像问题。卷积神经网络通常包含卷积层、池化层和全连接层,其中池化层负责对图像进行“过滤”,卷积层负责对图像进行卷积操作。相比于全连接层,卷积层的参数更少,并且卷积层能够考虑到图像像素位置的相关性。基于以上特点,卷积神经网络常常是图像领域的不二之选,同时,一些包含位置相关性的问题也会考虑应用卷积神经网络。
图1.2 常见卷积神经网络的结构