2.2 深度学习简介

> 神经元

1904年,生物学家了解了神经元的组成结构。

神经元通常是由细胞核、树突、轴突、突触等组成。一个神经元有多个树突用来接收信息,一个轴突用来传送信息。

1943年,心理学家Warren McCulloch和数学家Walter Pits发明了神经元模型。可以看到下图的左边有许多的输入,类似于神经元的树突,经过一个细胞核的处理,也就是下图中加权求和的部分,再通过激活函数,最后得到一个输出。

两者的结构非常相似,这个神经元模型的结构也非常简单,但是仅仅只有一个这样的结构,也许做的事情并不是特别有用,当亿万个这样的简单结构组合在一起,就可以完成更加复杂的事情。现在深度神经网络在各个领域大放异彩,其实它最基本的结构仍然是这样的简单结构。

> 神经网络

如果我们把多个单一的神经元组合在一起,就会有一些神经元的输出作为另一些神经元的输入,这样就构成了神经网络。把这些神经元看成一个整体的话,这个结构就具有了输入和输出,我们把接收数据输入的层叫做输入层,而最后输出结果的层叫做输出层,中间的神经元组成的中间层叫做隐含层或者隐藏层。

神经网络层数的判别主要是由隐藏层的数量决定的。下图是一个单层的神经网络,这个神经网络在输入层有4个神经元,隐藏层有5个神经元,输出层有2个神经元。

我们需要根据具体要解决的问题来设计相应的神经网络。通常来说,输入层和输出层的神经元数量是固定的,而中间隐藏层到底需要几层,每一层需要多少个神经元的个数是可以自由调整的。

举一个手写字符识别的例子,它的输入是一张手写数字的图片,大小是28×28,即总共有784个像素点,把这些像素点作为输入,那么输入层总共需要784个神经元,而最终得到的结果是一个十分类问题,即可能的结果在0-9之间,所以输出层的神经元个数为10个,这就是设计手写字符识别的神经网络时所需要注意的问题。它的输入层是由图片的特性所决定的。

接下来,我们来看看神经网络具体是怎样工作的。

可以看到下图中输入层的三个节点分别为x1、x2、x3,隐藏层有三个节点,输出层有两个节点。这是一个全连接网络,也就是说,后一层的某一个节点和前一层的每一个节点都相连。

我们以隐藏层中第一个节点为例,它跟x1、x2、x3都相连,但x1、x2、x3对它的作用并不一定相同,x1、x2、x3都带了相应的权值,这个权值由前面这个节点跟它之间的边确定,因此我们可以得到下图的式子:

上述式子中的w就是权值,而b是偏置项,加上偏置项使得整个神经网络的表现力变得更强。

通过这样的公式去做计算,整个神经网络的表现其实还是不足的,这个不足主要体现在后一层跟前一层的关系仍然是一个线性关系,而人们在研究生物体的细胞时候发现,当神经元受到刺激,它的兴奋程度需要超过某一限度,神经元才会激发出反应,从而输出神经脉冲,也就是说它的轴突才会对下面一层进行输出,而当它的兴奋程度低于某一限度时,神经元就不会被激活,它就当作没有接受到信息,也就不会产生反应脉冲。

在自然界中,生物神经元的输入和输出,并不是按线性的比例关系直接计算得到的,因此,我们在设计人工神经网络的时候也参照了这一点,设计了一个“激活函数”。对前面所得到的结果部分做一个非线性化的计算处理,这样使得整个神经网络的表现力变得更好。

在图2-11中我们可以看到,中间隐藏层的部分实际上被分成了两块,前部分是z,后部分是a,图2-12中公式里的a就相当于图2-11中隐藏层的z,它是一个线性的计算和,然后通过一个非线性的激活函数,来计算它下一步的值,也就是变成了下图所示的公式。因此,真正a的值是在原来计算的基础上用一个非线性的激活函数,做了一次非线性的处理,这样能够得到更好的结果。

> 常见的激活函数

在这里我们简单介绍两种简单的激活函数。

> Sigmoid激活函数

S型(Sigmoid)激活函数可以把它的输入转变成介于0-1之间的值。

它的公式如下图所示:

通过下面这张图,我们可以看到,当x=0时,它的值为0.5;当x趋于无穷大,它的值无限接近于1;当x趋于无穷小,它的值无限接近于0。

> ReLU激活函数

修正线性单元激活函数(ReLU),它的效果通常来讲比Sigmoid好一些,而且非常容易计算。

它的公式如下图所示:

通过下面这张图,我们可以看到,当x>0时,它的值为其本身;当x<=0时,它的值等于0。

> 深度神经网络

神经网络算法的核心就是计算、连接、评估、纠错和训练,而深度学习的深度就在于通过不断增加中间隐藏层数和神经元数量,让神经网络变得又宽又深,让系统运行大量数据,训练它。

“深度”一词没有具体的特指,一般就是要求隐藏层很多(一般指5层、10层、几百层甚至几千层)。

> 卷积神经网络

卷积神经网络(Convolutional Neural Networks, CNN)是深度学习中最重要的概念之一。

20世纪60年代,Hubel和Wiesel在研究猫脑皮层中用于局部敏感和方向选择的神经元时发现,其独特的网络结构可以有效降低神经网络的复杂性。

1998年,Yann LeCun提出了LeNet神经网络,标志着第一个采用卷积思想的神经网络面世。但是这个神经网络在当时并没有火起来,主要还是因为对计算量的要求比较大,而当时的计算能力有限,也没有使用GPU,所以它的效果反而没有其他机器学习的效果好,比如支持向量机(Support Vector Machine, SVM)。

LeNet的结构如下图所示,里面分了一些卷积层和池化层,这些概念我们在之后的课程中会详细讲解。

卷积神经网络最大的特点就是卷积和池化。这个图例的输入是32×32,图中的C1、C3、C5都是卷积层,卷积核会在这个二维的图形平面上移动,跟卷积核做计算,不断提取出新的图像,这些新的图像可以获取一定的特征。这里还有两个池化层S2和S4,池化的过程一方面可以降低模型的过拟合程度,另一方面可以强化图像中的显著特性。在最后,它也用了两个连接层进行连接,所以整个网络结构还是比较复杂的。

> AlexNet

2012年,卷积神经网络在图像识别领域出现了一个惊人的表现,也就是在ImageNet的大规模视觉识别挑战赛上,AlexNet获得了冠军,由此引发了新一轮对神经网络的热情。

AlexNet可以认为是最早的现代神经网络,它证明了卷积神经网络在复杂模型下的有效性,而且它当时使用了GPU去训练,使得在可接受的时间范围内,得到比较好的结果,推动了有监督深度学习的发展。

下面是AlexNet的网络结构图。它本质上就是把LeNet的深度进行了扩展并运用了一些ReLU激活函数以及dropout这个防止过拟合的技术。

AlexNet有5个卷积层和3个最大池化层,而且它可分为上下两个完全相同的分支,这两个分支在第三个卷积层和全连接层上可以相互交换信息。

AlexNet在2012年引起了轰动,主要是因为在ImageNet的大规模视觉识别挑战赛中获得了冠军,它的成绩领先第二名非常多而且比2011年提高了10个百分点,是非常不容易的。随着深度学习网络的发展,到了2015年的时候,对这些图片的识别已经超过了人眼的精确度。

ImageNet本身的数据集是非常大的,有1400多万幅图片,涵盖了2万多个类别,所以在这个比赛中获得冠军而且识别度这么高是非常有分量的。

> VGG Net

VGG Net有5个卷积层组,有2层全连接层用于提取图像特征,还有1层全连接层用于分类特征,根据5个卷积层组每一个组的不同配置,卷积层数是从8到16递增的,它的网络结构图如下图所示:

VGG Net的泛化性很好,常用于图像特征的抽取、目标检测、候选框生成等等。它最大的问题在于它的参数数量非常多,一般来说,根据它的层数有两种典型的,一种是VGG 16,还有一种是VGG 19。VGG 19基本来说是参数量最多的卷积神经网络架构。

> Google Net

Google Net使用了一种Inception的网中网结构,即原来的节点现在也是一个网络,这样既保持了网络结构的稀疏性,又不降低模型的计算性能。可以说Inception网络是CNN分类器发展史上一个重要里程碑。在Inception出现之前,大部分流行的CNN仅仅是把卷积层堆叠的越来越多,使网络越来越深,以此希望得到更好的性能,而Google Net使用了Inception结构之后,整个网络结构的宽度和深度都可以扩大,能够带来较大的性能提升。

> 神经网络大观

神经网络的发展经过了这么多年,其实已经形成了很多种不同的结构。

下面这张图中列出了一些典型的结构,有兴趣的同学可以了解一下。

> 深度学习的发展历程

1943年,提出了数学上的神经元模型,开启了神经网络发展的起点。

1958年,提出了感知机模型,这个感知机模型也是首个可以学习的人工神经网络。引发了神经网络研究的第一次兴起。其实它只是一个单层的神经网络,比较单薄。

1969年,这个领域的权威学者Minsky 用数学公式证明了只有单层神经网络的感知机无法对异或逻辑进行分类,Minsky还指出要想解决异或可分问题,需要把单层神经网络扩展到两层或者以上。然而在那个年代计算机的运算能力,是无法支撑这种运算量的。只有一层计算单元的感知机,暴露出了它的天然缺陷,使得神经网络研究进入了第一个寒冬。

1986年,Hinton等人提出了反向传播方法,有效解决了两层神经网络的算力问题。引发了神经网络研究的第二次兴起。

1995年,支持向量机诞生。支持向量机可以免去神经网络需要调节参数的不足,还避免了神经网络中局部最优的问题。一举击败神经网络,成为当时人工智能领域的主流算法,使得神经网络进入了它的第二个冬季。

1998年,诞生了卷积神经网络,也就是LeNet,这是第一个卷积神经网络,也为之后深度学习打下了基础。

2006年,深层次神经网络出现。深度学习的概念由Hinton等人于2006年提出。基于深度置信网络(Deep Belief Network,DBN)提出非监督贪心逐层训练算法,为解决深层结构相关的优化难题带来希望,随后提出多层自动编码器深层结构。也正是因为DBN克服了深度神经网络训练时的缺点,才使得神经网络重新焕发了生机,而且一发不可收拾。此外Lecun等人提出的(Convolutional Neural Network,CNN)是第一个真正多层结构学习算法,它利用空间相对关系减少参数数目以提高训练性能。最早被用来识别支票上的手写数字,所用的网络是LeNet。

2012年,卷积神经网络在图像识别领域中的惊人表现,又引发了神经网络研究的再一次兴起。

2016年,AlphaGo战胜了围棋世界冠军,又引爆了新一轮的深度学习高潮。

回顾深度学习整个的发展历程,其实有点像人工智能的发展历程,也经历了几起几落。此外,深度学习仍在发展之中,它还存在着一些问题,比如面向任务单一、依赖于大规模有标签数据、几乎是个黑箱模型,可解释性不强等等。不过无监督的深度学习、迁移学习、深度强化学习和贝叶斯深度学习等这些新的算法越来越受到关注。另外,我们可以感觉到现在所说的人工智能基本都是用深度学习来做代表的,深度学习具有很好的可推广性和应用性,但不是人工智能的全部,未来人工智能需要有更多类似技术。

Last updated