Deep Learning学习笔记(一):什么是深度学习?

“Deep learning methods are representation-learning methods with multiple levels of representation, obtained by composing simple but nonlinear modules that each transform the representation at one level (starting with the raw input) into a representation at a higher, slightly more abstract level. [. . . ] The key aspect of deep learning is that these layers are not designed by human engineers: they are learned from data using a general-purpose learning procedure”
——Yann LeCun, Yoshua Bengio, and Geoffrey Hinton, Nature 2015. [9]

深度学习是机器学习的一个分支,而机器学习又是人工智能的一个分支。
人工智能的核心目标是提供一套可用来解决人类凭直觉和近乎自动地执行而对于计算机确是挑战的问题的算法和技术。这类人工智能问题的一个很好的例子是解释和理解图像的内容——这是人类不费吹灰之力即可完成的事情但已被证明由机器来完成却是极其困难。
虽然人工智能体现了与自动机器推理(推理、计划、启发等)相关的大量、多样的工作,但机器学习的子领域(深度学习)倾向于模式识别从数据中学习
人工神经网络(ANNs)是一类机器学习算法,受大脑结构和功能的启发,研究数据和模式识别。深度学习属于ANN算法家族,在大多数情况下,两者术语可以互换使用。事实上,深度学习领域的术语根据研究趋势、可用的硬件和数据集、以及当时著名研究人员的流行选择有不同的名字和化身。
在这里插入图片描述

1. 神经网络和深度学习的简明历史

神经网络和深度学习的历史很长,“深度学习”自20世纪40年代以来就一直存在,并有了不同的名称变化,包括控制论,连接主义,和最熟悉的人工神经网络。
虽然ANNs的灵感来自于人类的大脑及其神经元之间的相互作用,但它们并不是大脑的真实模型。相反,它们是一种灵感,让我们能够联想一个非常基本的大脑模型和我们如何模仿这种行为之间的相似之处。
第一个神经网络模型来自1943年[11]的McCulloch和Pitts。这个网络是一个二进制分类器,能够根据一些输入来识别两个不同的类别。但问题是,用于确定给定输入的类标签的权重必须人工调整——如果是人工操作,这种类型的模型显然不能很好地衡量计算,需要进行干预。
然后,在20世纪50年代,Rosenblatt[12,13]发表了开创性的感知器算法——这个模型可以自动学习分类输入所需的权重(没有人工干预),感知器架构的一个例子可以在下图看到。事实上,这自动训练程序是随机梯度下降法(SGD)的基础,用于训练深度神经网络。
在这里插入图片描述
在此期间,基于感知器的技术在神经网络中风靡一时,然而,Minsky和Papert[14]在1969年发表的一篇文章实际上使神经系统停滞不前。网络研究近十年。他们的工作证明了一个线性感知器激活函数(不考虑深度)仅仅是一个线性分类器,无法解决非线性问题。一个非线性问题的典型例子是图2.3中的XOR数据集。用一条单线来分隔蓝色和红色是不可能的。
在这里插入图片描述
此外,我们没有计算资源需要构建大型、深度的神经网络(事后看来,它们是绝对正确的)。这单是一篇论文就几乎扼杀了神经网络研究。
幸运的是,反向传播算法和Werbos (1974) , Rumelhart(1986)和LeCun(1998)的研究使神经网络复苏。他们对反向传播算法的研究使多层传播(见下图)成为可能。
在这里插入图片描述
需要训练的前馈神经网络结合非线性激活函数,研究人员现在可以学习非线性函数并解决异或问题,为神经网络的一个全新研究领域打开了大门。进一步的研究表明,神经网络是通用的近似器,能够近似任何连续函数(但不保证网络是否可以实际学习表示函数所需的参数)。
反向传播算法是现代神经网络的基石,有效地训练神经网络并“教”它们从错误中学习。但即便如此,这一次,由于计算机速度慢(与现代机器相比)和缺乏大型计算机,标记训练集后,研究人员无法(可靠地)训练神经网络,超过两个隐藏层的计算是不可行的。
今天,我们所知道的神经网络的最新形式被称为深度学习。深度学习与之前的版本不同之处在于,我们拥有更快、更专业的硬件,有更多可用的培训数据。我们现在可以用更多的隐藏层来训练网络,有能力进行分层学习,即在较低层次或更多层次网络中较高层的抽象模式中学习简单的概念。
将深度学习应用于特征学习的一个典型例子可能是将协同神经网络(LeCun 1988)应用于手写体字符识别,自动学习识别模式(称为“过滤器”)从图像按顺序堆叠一层又一层。网络底层的过滤器代表边角,而更高级的层使用边角来学习更抽象的概念区分图像类。
在许多应用中,CNNs被认为是最强大的图像分类器,目前负责推动最先进的计算机视觉子领域的发展。为了更彻底地回顾神经网络的历史和深度学习,请参考Jason Brownlee在机器学习领域的Goodfellow这篇博客文章。

2. 分层特征学习

机器学习算法(通常)分为三个阵营——监督的、非监督的和半监督学习。我们将在本章讨论监督和非监督学习,将半监督学习留到以后讨论。
有监督的情况下,一个机器学习算法给出了一组输入和目标输出。然后,该算法尝试学习可用于自动映射输入数据的模式指向正确的目标输出。监督学习类似于让老师看着你考试,根据你以前的知识,你要尽力把正确答案记在你的试卷上;然而,如果你猜错了,你的老师会引导你下一次做出更好、更有根据的猜测。
无监督的情况下,机器学习算法试图自动发现有区别的特征,而不需要任何关于输入的提示。在这种情况下,我们的学生尝试把相似的问题和答案放在一起,即使学生不知道正确的答案是什么,而老师也不会给他们提供真正的答案。无监督学习显然是一个比有监督学习更具挑战性的问题——通过知道答案,我们可以更容易地定义可以将输入数据映射到的正确的目标分类的区分模式。
在机器学习的背景下应用图像分类,机器学习算法的目标是获取这些图像集,并识别用于区分各种不同的图像类/对象的模式。
在过去,我们使用手工设计的特征来量化图像的内容——我们很少使用在原始像素强度作为我们的机器学习模型的输入,而在深度学习中常常使用。对于数据集中的每一幅图像,我们都进行了特征提取,即根据某种算法(称为特征提取器或图像描述符)进行分类,并返回一个向量对图像内容进行量化。下图2.5描述了对含有药片的图像进行量化的过程,通过一系列黑盒颜色、纹理和形状的图像描述。

我们手工设计的功能试图编码纹理、形状、颜色。
其他方法如关键点探测器和局部不变描述描述突出(感兴趣的)图像区域。
其他方法如当图像的视点角度相对我们训练的分类器不发生明显变化时进行目标检测,方向梯度直方图被证明是非常好的。使用HOG +线性SVM检测器方法的一个例子可以在图2.6中看到,在图2.6中我们检测到了图像中存在的停止标志。
在这里插入图片描述
一段时间以来,图像中目标检测的研究一直以HOG及其变体为指导,包括计算昂贵的方法,如可变形零件模型和范例svm 。
在每一种情况下,都需要手工定义一个算法来量化和编码图像的某个方面(即形状、质地、颜色等)。给定一个像素的输入图像,我们将应用我们手工定义的算法到像素点,并接收一个量化图像内容的特征向量——图像像素本身除了作为我们的特征提取过程的输入之外没有其他用途。由特征提取得到的特征向量正是我们感兴趣的部分,因为它们是我们机器学习模型的输入。
深度学习,特别是卷积神经网络,采用了一种不同的方法,不是手动定义一组规则和算法来提取图像的特征,而是从训练过程中自动学习特征。
让我们再一次回到机器学习的目标:计算机应该能够从他们正在设法解决的问题的经历中学习。
利用深度学习,我们试图从概念层次的角度来理解这个问题。每一个概念是建立在其他概念之上的。概念在网络的较低层编码了问题的基本表示,而更高层次的层使用这些基本层来形成更多抽象的概念。这种层次化的学习方式让我们完全摆脱了手工设计的特征提取过程,将CNNs视为端到端学习者。
对于给定的图像,我们将像素强度值作为输入提供给CNN。一系列的隐藏层用于从我们的输入图像中提取特征。这些隐藏的层相互构建层次结构。首先,在较低的层网络中只检测到边缘样区域,这些边缘区域用于定义角(边缘相交的地方)和轮廓,将边角和轮廓结合起来,可以在接下来的部分中产生抽象的“物体部分”层。
再次记住这些过滤器正在学习检测的概念类型是自动学习的——在学习过程中没有我们的干预。最后利用输出层对图像进行分类,得到输出类标签,输出层可以直接或间接地受到网络中其他节点的影响。
我们可以把这个过程看作是分层学习:网络中的每一层都使用以前的层的输出作为“构建块”来构建越来越抽象的概念。在我们的网络中这些层是自动学习的-没有手工干预。图2.7比较了使用手工特征的经典图像分类算法和基于深度学习和卷积神经网络的表示法学习。
在这里插入图片描述
深度学习和卷积神经网络的主要好处之一就是它允许我们跳过特征提取步骤,而专注于训练我们的网络学习这些过滤器的过程,然而,我们将发现,训练一个网络在给定的图像数据集上获得合理的精度并不总是一件容易的事情。

3.“深”有多深?

杰夫·迪安(Jeff Dean)在2016年演讲《构建智能计算机系统的深度学习》中的一句话:当你听到“深度学习”这个词时,就想到一个大型的、深度的神经网络。Deep通常指的是层的数量,这个很流行的术语被新闻界采用了。
这是一个很好的引用,因为它让我们将深度学习概念化为层建立在彼此之上,逐渐增加深度的大型神经网络。问题是我们仍然对于“一个神经网络需要多少层”这个问题没有一个具体的答案。
简而言之,专家们对网络的深度没有共识。
现在我们来看看网络类型的问题。根据定义,卷积神经网络(CNN)是一种深度学习算法。但假设我们的CNN算法只有一个卷积层,是一个很浅的网络,属于深度学习算法家族但仍然被认为是“深”吗?
我个人的观点是,任何具有两个以上隐藏层的网络都可以考虑为“深”。我的推理是基于之前对ANNs的研究,这些研究在很大程度上受到以下方面的限制:
(1)我们缺乏可用于训练的大型标签数据集
(2) 我们的计算机速度太慢,无法训练大型神经网络
(3) 不充分的激活函数
由于这些问题,在20世纪80年代和90年代期间我们无法很容易地训练具有两个以上隐藏层的网络。事实上,Geoff Hinton支持这种观点,在他2016年的演讲《Deep Learning》中说明了为什么深度学习(ANNs)在20世纪90年代没有发展:
(1)我们标记的数据集小了几千倍。
(2)我们的电脑慢了几百万倍。
(3)我们以一种愚蠢的方式初始化了网络权重。
(4) 我们使用了错误类型的非线性激活函数。
所有这些原因都指向一个事实,即训练网络的深度大于两个隐藏层是无法完成的。在当前科研条件下,我们可以看到时代已经改变。我们现在有:
(1)更快的电脑
(2)高度优化的硬件(即GPU)
(3)数以百万计的图像中大的标签数据集
(4)更好地理解权值初始化函数以及哪些方法有效、哪些方法无效
(5)优越的激活函数和对先前非线性函数停滞不前的研究的理解
转述Andrew Ng 2013年的演讲《深度学习、自我学习和无监督功能学习》,我们现在有更多的数据,能够构建更深层次的神经网络并进行训练。
随着网络深度的增加,分类精度也随之提高,远超过传统的机器学习算法(即逻辑回归、支持向量机、决策树等),一个灵感来自安德鲁·吴2015年的演讲《关于深度学习,数据科学家应该知道什么》,在图2.8中可以看到,它提供了这种行为的一个例子。
在这里插入图片描述
随着训练数据量的增加,神经网络算法获得了更高的分类精度,而以往的方法在某一点上停滞不前。因为在更高的准确性和更多的数据之间的关系,我们倾向于将深度学习与大型数据集联系起来。
在开发自己的深度学习应用程序时,建议使用以下规则确定你的神经网络是否是深度学习:
(1)你是否使用了专门的网络架构,比如卷积神经网络,递归神经网络,还是长短时记忆(LSTM)网络?如果是,你正在进行深度学习。
(2)你的网络深度> 2吗?如果是,你正在做深度学习。
(3)你的网络深度> 10吗?如果是这样,你正在执行非常深入的深度学习。
说了这么多,尽量不要被围绕着深度学习之类的流行词和什么是深度学习所困扰,在最核心的地方是在过去的60年里基于不同的思想流派,深度学习经历了许多不同的化身——但每一个都是受大脑的结构和作用的启发,各种思想流派集中于人工神经网络。无论网络的深度、宽度或专门的网络架构如何,你仍然在使用人工神经网络进行机器学习。

4.总结

正如我们所发现的,深度学习从20世纪40年代就开始了,基于不同的思想流派和流行的研究趋势在一个特定的时间有不同的名称和化身。最核心的是,深度学习属于人工神经网络(ANNs)家族的一套受大脑结构和功能启发的学习模式算法。
究竟是什么使神经网络“深入”,专家们还没有达成共识;然而,我们知道:
(1)深度学习算法以分层的方式学习,将多层堆叠起来学习越来越抽象的概念。
(2)一个网络应该> 2层来考虑“深度”
(3)一个有>10层的网络被认为是非常深的(尽管这个数字会随着时间的变化而变化),像ResNet这样的架构已经成功地训练了超过100层。

发布了23 篇原创文章 · 获赞 25 · 访问量 874

猜你喜欢

转载自blog.csdn.net/qq_42878057/article/details/104782532