学习DL搁置很久了,终于下定决心开始咯~~
Deep Learning(Ian Goodfellow&&Yoshua Bengio&&Aaron Courville)-原书来源:http://www.deeplearningbook.org/
从人工智能说起,谈到人工智能要解决的问题。在早期,人工智能倾向于研究那些对人类来说困难,但对机器来说相对直接而简单的问题,这些问题的共同点在于可以很容易用形式化的数学规则来描述。而人工智能面临的真正挑战在于解决那些对人来说容易,但很难形式化的问题。早期解决的这些问题不需要太多的关于世界的知识,而在人工智能中关键的挑战在于:如何将这些不规则的知识融入到计算机中。通常人们日常生活所需的大量知识都是主观的,带有启发式,很难被形式化。
于是人们开始尝试对知识用形式化的语言进行硬编码(hard-code)。这些依赖于硬编码知识的系统所面临的困难表明:人工智能系统需要能够从原始数据中自动抽取模式来获得属于自己的知识的能力。而这种能力称为 机器学习(machine learning)。简单的机器学习算法的性能严重依赖于所给定的数据表示。这种对数据表示的依赖在计算机科学中,甚至是日常生活中都是一种常见的现象。人们很容易基于阿拉伯数字进行算术运算,却发现用罗马数字作算术运算很耗时。对多数的人工智能任务来讲,只要设计足够好的特征集合,即使喂给简单机器学习算法,也可以得到足够好的性能。但是,对于很多task来说,如何抽取特征本身就是一个难题。
表示学习(Representation learning)是这样的一种解决方案。它使使用机器学习方法不但用来发现从表示到输出的映射,而且用来发现表示本身。表示学习的优势,一方面在于 学习到的表示所展现的性能要优于手工设计的表示所达到的性能,另一方面在于可以以最小的人工干预,快速适应新的task。AutoEncoder就是这样的一个例子。他是编码函数和解码函数的综合,旨在得到一个新的表示使得该表示通过输入-编码-新的表示-解码之后,能够保留输入中尽可能多的信息。当我们设计特征或者设计用来特征学习的算法时,希望能够区分差异因子,来解释观测数据。这里的差异因子指的是能够区分不同源信息的影响,不能通过乘法来连接,且不能直接被观测到的量。这些因子可以看成是概念或抽象用来解释数据的丰富多样性。许多差异因子影响到了我们所能观测到的每一块数据,也只有通过复杂的,接近人类水平的理解来识别,如人说话的口音。解决这个问题和表示学习几乎一样困难。
深度学习(Deep Learning)试图通过从更加简单的表示中学习,来解决表示学习中的核心问题。前向深度网络(Feedforward Deep Network)或者多层感知机(Multilayer Perceptron)就是这样的例子。多层感知机可以简单理解为一个从输入到输出的映射函数,该函数是由多个简单的函数构成,采用不同的函数,产生不同的新的表示。深度学习一方面提供了学习数据的正确表示的思想,另一方面,深度本身使得计算机学习到一个多步的计算机程序。每一层所获得的表示可以看作在执行完一系列并行指令后所得到的计算机的存储状态。越深的网络执行的串行指令越多。串行指令具有很强的能力原因在于后续的指令可以参考前面指令所产生的结果。从这个角度来看,并不是每层中激活的所有信息都用来编码差异因子以解释输入,还有一部分用来存储状态信息以执行整个程序。
两种度量学习模型的深度:(1)可以用计算图来表达,即计算图的深度。执行整个结构所需顺序指令的数目。(2)对于概率模型来说,指的是描述概念间相互关系的图的深度。
AI,ML,RL,以及DL三者之间的关系:AI>ML>RL>DL。(1)Machine Learning is the only viable approach to building AI systems that can operate in complicated, real-world environments. (2)Deep Learning is a particular kind of machine learning that achieves great power and flexibility by learning to represent the world as a nested hierarchy of concepts, with each concept defined in relation to simpler concepts, ad more abstract representations computed in terms of less abstract ones.
(一)面向的读者:university student and software engineers
(二)Deep Learning的历史趋势
1. Deep Learning的许多名字以及命运随之改变的神经网络
该部分主要介绍深度学习与神经网络的纠葛。深度学习的历史可以追溯到1940s,准确说应该是神经网络的历史可以追溯到1940s。1940s~1960s称为cybernetics,1980s~1990s称为连接主义(connectionism),直到2006年才开始被称为deep learning。事实上伴随着深度学习的还有一个名称是人工神经网络(Artificial Neural Network)。两者的渊源是:深度学习是受生物大脑的启发,主要有两点:(1)大脑提供例证,从概念上的直接建立智能行为的方式是对大脑背后的计算机制 进行反向工程以复制其功能;(2)理解大脑以及人类智能背后的机理本身是一个有趣的问题,将这其中的基本问题应用到机器学习模型上也是非常有用的。
现今的深度学习已经远远超出了神经科学的视角,可以视为一种更加通用的学习多层组合的原理(Principle of learning multiple levels of composition)。
现今深度学习的先驱是简单的线性模型。这些模型的典型代表如McCulloch-Pitts Neuron以及Adaptive Linear Element(ADALINE),对现代机器学习的愿景产生了巨大影响。学习这些权重的算法便是其中的一个例子。学习ADALINE的训练算法的特列是随机梯度下降(Stochastic Gradient Descent),这个算法的改进版依然是现今深度学习模型的主要训练算法。线性模型有很多局限性,其中最受诟病的就是不能学习异或函数。
神经科学只能视为深度学习学者们的一种重要的灵感来源,但不是绝对的指导准则。神经科学逐步丧失其在深度学习中的重要角色,主要原因在于我们对于大脑的认知有限,不足以成为有效的指导的准则。(1)神经科学给我们理由希望深度学习能同时解决多个任务。(2)我们可以从神经科学中借鉴一些粗糙的原理,如许多计算单元相互交互可以使得其更加聪明,这是受大脑的启发得到的。灵感的重要来源并不能作为严格的指导。即使神经科学成功启发了多个神经网络的体系结构,但是关于生物学习的过程并不能为我们的训练这些体系结构的算法提供更多的信息。
媒体过分强调深度学习与大脑的相似性,但是我们不能将深度学习视为模拟大脑的一种尝试。现今深度学习的灵感来自多个领域,尤其是应用数学基础中的线性代数,概率论,信息论,数值优化等。一些深度学习的研究者喜欢引用神经科学作为灵感来源,还有一些研究者根本不关心神经科学。值得注意的是确实存在这样的一个深度学习的分支主要研究如何从算法层面理解大脑的工作机制,称为计算神经科学(Computational Neuroscience)。
深度学习历史中的出现的一些原理至今仍在沿用。(1)大量简单的计算单元以网络的形式连接在一起可以达到实现智能行为(连接主义的核心思想)。(2)分布式表示的思想(Distributed Learning):Each input to a system should be represented by many features, and each feature should be involved in the representation of many possible input.(3)用BP算法(Back-Propagation)来训练神经网络。(4)90年代提出的用神经网络来建模序列的方法,如LSTM等。(5)2006年Hinton提出的DeepBlief network采用greedy layer-wise pretraining的方法来达到高效的训练。这个阶段的深度神经网络已经达到可以和其他基于手工设计的机器学习算法相匹敌,深度学习更关注于深度在理论上的重要程度。现今的深度学习起初关注无监督学习以及深度学习在小数据集上的泛化能力,后来更加关注有监督学习,以及深度学习对于大规模标注数据的使用。
2. 随着可用训练数据的增加,深度学习优势愈加明显
3. 随着软硬件架构的改善,深度学习模型的大小也在增加
当今神经网络的主要成就归功于有足够的计算资源能够运行大的模型。Faster Computers + Larger Memory +the availability of larger datasets共同导致了the growth of model sizes. 从隐式单元引入之时算起,神经网络的大小每隔2.4年就会翻倍。有图有真相,见原文。这种趋势还会持续数十年。预计到2050年,神经元的规模可以达到和人脑相当的水平。
4. 深度学习在更加复杂的应用上展现更好地精度