为什么要深度学习?
整个逻辑:首先从人工智能存在的挑战出发,讲到我们需要用机器学习来解决这些问题,其中涉及到表示学习的概念和理解,深入表示学习就发现其中存在的核心问题,这时就需要深度学习来解决!
人工智能的挑战:
在人工智能的早期,那些对人类智力非常困难,但对计算机来说相对简单的问题得到迅速解决,比如,那些可以通过一些列形式化的数学规则来描述的问题。人工智能的真正挑战在于解决那些对人来说很容易执行、但很难形式化描述的任务,如识别人们所说的话或图像中的脸。对于这些问题,我们人类往往可以凭借直觉轻易的解决。
针对这些比较直观的问题,我们主要讨论一种方案,该方案可以让计算机从经验中学习,并根据层次化的概念体系来理解世界,而每个概念则通过与某些相对简单的概念之间的关系来定义。层次化的概念让计算机构建较简单的概念来学习复杂概念。
机器学习:
AI系统需要具备自己获取知识的能力,即从原始数据中提取模式的能力。这种能力称为机器学习。算法的性能在很大程度上依赖于给定数据的表示。表示一词也可通俗的理解为通常所说的特征,机器学习算法主要是学习这些特征如何与各种结果相关联。
许多人工智能任务都可以通过以下方式解决:
- 提取一个合适的特征集
- 将这些特征提供给简单的机器学习算法
假设我们想在该散点图中画一条直线来分隔两类数据。在左图中我们使用笛卡尔坐标来表示数据,这个任务是不可能的。在右图中我们用极坐标表示数据,可以用垂直线简单地解决这个任务。因此我们可以看出,如果我们数据的特征提取的足够好,甚至我们可以用简单的机器学习算法(这里的“画一条直线来分隔”就可以理解为使用最简单的分隔方法)就可以起到很好的作用。其实那些大型网络的最后分类层也就是简单的Softmax,之所以效果很好就是因为前面的很多层已经将提取了足够好的特征!
表示学习:
然而对于许多任务来说,我们很难知道应该提取哪些特征。解决这个问题的途径之一是使用机器学习来发掘表示本身,而不仅仅把表示映射输出。这种方法我们称之为表示学习。学习到的表示往往比手动设计的表示表现得更好。
表示学习算法的典型例子是自编玛器。自编码器由一个编码器函数和一个解码器函组合而成。编码器函数将输入数据转换为一种不同的表示,而解码器函数则将这个新的表示转换为原来的形式。我们期望当输入数据经过编码器和解码器之后尽可能的多保留信息,同时希望新的表示有各种好的特性。
表示学习的核心问题:
当设计特征或设计用于学习特征的算法时,我们的目标通常是分离出能解释观察数据的变差因素。这些因素通常是不能被直接观察到的量。当分析汽车的图像时,变差因素包括汽车的位置、颜色、太阳的角度和亮度。在许多现实的人工智能应用中,困难主要源于多个变差因素同时影响着我们能够观察到的每一个数据。显然,从原始数据中提取如此高层次、抽象的特征是非常困难的(可以理解为“通过机器学习来发掘表示本身”的想法是美好的,但是并不容易去实现)。深度学习通过其他较简单的表示来表达复杂表示,解决了上述表示学习中的核心问题。
深度学习干了什么?
深度学习让计算机通过较简单的概念构建复杂的概念。
深度学习模型的典型例子就是前馈深度网络或多层感知机。多层感知机仅仅是一个将一组输入值映射到输出值的数学函数。该函数有许多较简单的函数复合而成。我们可以认为不同数学函数的每一次应用都是为输入提供了新的表示。
上述深度学习模型的输入是图片三个通道的像素值,而计算机难以理解原始感官输入数据的含义。由于模型学习的是将一组像素映射到对象标识的函数,如此复杂的函数如果直接处理,且因为计算机难以理解像素的概念,所以这个任务是几乎不可能的。
深度学习将所需的复杂映射分解为一些列嵌套的简单映射(其中每个由模型的不同层描述)来解决这一问题。给定输入像素,模型所做的工作:第1隐藏层可以轻易地通过比较相邻像素的亮度来识别边缘;有了第1层描述的边缘,第2隐藏层可以容易地搜索可识别为角和扩展轮廓的边集合;给定第2层中关于角和轮廓的图像描述,第3隐藏层可以找到轮廓和角的特定集合来检测特定对象的整个部分。最后,根据图像描述中包含的对象部分,可以识别图像中存在的对象。概括起来,整个过程模型必须确定哪些概念有利于解释观察数据中的关系。
深度学习和机器学习的关系
从上图中可以看出,深度学习既是一种表示学习,也源于机器学习。第一部分我们也介绍过,我们使用一种统称为机器学习的解决方案企图来处理人工智能所存在的挑战;但由于机器学习对于特征提取的依赖性很强,而我们很难知道该提取哪些特征,所以企图使用机器学习来自我发掘特征,也即是表示学习;表示学习存在的核心问题是很难从原始数据中提取那些高层次的、高抽象度的特征,这时深度学习应运而生,它可以将高级特征逐步分解为嵌套的简单特征,很好的解决了这个问题。当然这些统属于实现人工智能的途径之一...
右图的阴影框表示能从数据中学习的组件。经典的机器学习算法仍需要手动的提取特征,如早期图像处理经典算法所提取的HoG特征,SIFT特征等,然后通过设计一个映射函数将这些特征集合映射到对应的输出中。表示学习则先通过机器学习算法自己去学习特征,有了这部分效果较好的特征,表示学习算法的性能将优于传统的机器学习算法。而深度学习则通过逐层组合简单特征的方式去构建更复杂、更抽象、更有利于作为最后映射函数初始输入的高级特征,因此深度学习的性能可以达到最优!
深度学习的历史
这里就不详细介绍历史了,有兴趣的可以详细的去看花书。当然古语说“读史使人明智”嘛,想学好深度学习,该掌握的必要历史知识还是需要去仔细看看的。
深度学习界公认的三次发展浪潮
-
20世纪40年代到60年代,深度学习的雏形出现在控制论中;
- 1943年的McCulloch-Pitts神经元是最早期的模型。该线性模型通过检验函数f(x, w)的正负来识别两种不同类别的输入。这些权重是人为设定的(不可以学习)。
- 20世纪50年代,感知机成为第一个能根据每个类别的输入样本来学习权重的模型。
- 20世纪50年代后期,自适应线性单元简单地返回函数f(x)本身的值来预测一个实数,并学习从数据预测这些数。其调节权重的训练算法可以看做随机梯度下降的一种特例。
上述几种模型仍还是线性模型,但要注意后两种模型已经可以简单的从数据中学习权重。但是线性模型最大的局限性在于,其不能学习异或(XOR)函数,如下图所示,你无法通过一条直线将黑白的点完全分开,这也导致了神经网络的第一次退潮。
-
20世纪80年代到90年代,深度学习变现为联结主义;
- 分布式表示概念的提出。其思想是:系统的每一个输入都应该由多个特征表示,并且每一个特征都应该参与到多个可能输入的表示。
- 20世纪80年代中期,反向传播在训练具有内部表示的深度神经网络中的成功使用及普及。
- 20世界90年代,研究人员在使用神经网络进行序列建模的方面取得了重要进展,并出现了LSTM网络。
分布式表示是一个很核心的概念,深度学习也基于此重要思想。书上举的例子可以帮胡理解分布式表示的含义及优点。
联结主义的中心思想是,当网络将大量间的计算单元连接在一起时可以实现智能行为,可以认为开始研究真正基于神经系统实现的认知模型。但是由于当时计算能力的严重欠缺,同时一些传统的机器学习算法(如SVM,图模型等)的性能也很优异,两者导致了神经网络热潮的第二次衰退。
-
2006年起,通过Hinton等人的研究,以深度学习之名复兴。
- Hinton表明“深度信念网络DBN”的神经网络可以使用一种称为“贪婪逐层预训练”的策略来有效地训练,同时该策略也被证实可以有效训练其它深度网络。
第三次浪潮已经着眼于新的无监督学习技术和深度模型在小数据集的泛化能力。
- Hinton表明“深度信念网络DBN”的神经网络可以使用一种称为“贪婪逐层预训练”的策略来有效地训练,同时该策略也被证实可以有效训练其它深度网络。
上图(来源https://www.leiphone.com/news/201708/LEBNjZzvm0Q3Ipp0.html)中可以看出线性模型(线性激活函数)确实解决不了异或问题,而且在解决复杂问题的时候,同样表现很差!当网络不再是线性模型时,且层数增加模型变大时,网络可以很好的解决异或问题甚至是复杂问题。
文章《The Power of Depth for Feedforward Neural Networks》从理论上证明了加深网络比加宽网络更有用!!!
一个两层的非线性模型,只要模型足够宽(也即是每一层的神经元足够多),理论上可以模拟任何复杂函数。但是如果采取加深模型的方式,当增加到和前面模型相同的参数时,可以有更出色的拟合能力。
下图演示了深度学习的发展趋势(图片来源https://www.leiphone.com/news/201708/LEBNjZzvm0Q3Ipp0.html):