第1章-什么是深度学习(笔记)

第1章-什么是深度学习(笔记)

 

在经典的程序设计(即符号主义人工智能的范式)中,人们输入的是规则(即程序)和需要根据这些规则进行处理的数据,系统输出的是答案
(见图 1-2)。

利用机器学习,人们输入的是数据和从这些数据中预期得到的答案,系统输出的是
规则。这些规则随后可应用于新的数据,并使计算机自主生成答案。

 

第1章-什么是深度学习(笔记)

因此,机器学习和深度学习的核心问题在于有意义地变换数据,

换句话说,在于学习输入数据的有用表示(representation)——这种表示可以让数据更接近预期输出。

 

所有机器学习算法都包括自动寻找这样一种变换:

这种变换可以根据任务将数据转化为更加有用的表示。

这些操作可能是前面提到的坐标变换,也可能是线性投影(可能会破坏信息)、平移、非线性操作(比如“选择所有 x>0 的点”),等等。机器学习算法在寻找这些变换时通常没有什么创造性,而仅仅是遍历一组预先定义好的操作,这组操作叫作假设空间(hypothesis space)。

深度学习不是大脑模型。

深度学习是从数据中学习表示的一种数学框架.

神经网络中每层对输入数据所做的具体操作保存在该层的权重(weight)中,

其本质是一串数字。

用术语来说,每层实现的变换由其权重来参数化(parameterize,见图 1-7)。权重有时也被称为该层的参数(parameter)。在这种语境下,学习的意思是为神经网络的所有层找到一组权重值,使得该网络能够将每个示例输入与其目标正确地一一对应。但重点来了:

一个深度神经网络可能包含数千万个参数。找到所有参数的正确取值可能是一项非常艰巨的任务,特别是
考虑到修改某个参数值将会影响其他所有参数的行为。

 

第1章-什么是深度学习(笔记)

想要控制一件事物,首先需要能够观察它。想要控制神经网络的输出,就需要能够衡量该输出与预期值之间的距离。这是神经网络损失函数(loss function)的任务,该函数也叫目标函数(objective function)。损失函数的输入是网络预测值与真实目标值(即你希望网络输出的结果),然后计算一个距离值,衡量该网络在这个示例上的效果好坏(见图 1-8)。

 

深度学习的基本技巧是利用这个距离值作为反馈信号来对权重值进行微调,以降低当前示
例对应的损失值(见图 1-9)。这种调节由优化器(optimizer)来完成,它实现了所谓的反向
传播(backpropagation)算法,这是深度学习的核心算法。下一章中会详细地解释反向传播的工
作原理。

第1章-什么是深度学习(笔记)

虽然一些改变世界的应用(比如自动驾驶汽车)已经触手可及,但更多的应用可能在长时间内仍然难以实现,比如可信的对话系统、达到人类水平的跨任意语言的机器翻译、达到人类水平的自然语言理解。

我们尤其不应该把达到人类水平的通用智能(human-level general intelligence)的讨论太当回事。

在短期内期望过高的风险是,一旦技术上没有实现,那么研究投资将会停止,而这会导致在很长一段时间内进展缓慢.

 

不要相信短期的炒作,但一定要相信长期的愿景。

深度学习不一定总是解决问题的正确工具:

有时没有足够的数据,深度学习不适用;

有时用其他算法可以更好地解决问题。

 

logreg是一种分类算法,而不是回归算法。

 

 

贝尔实验室于 1989 年第一次成功实现了神经网络的实践应用,当时 Yann LeCun 将卷积神经网络的早期思想与反向传播算法相结合,并将其应用于手写数字分类问题,由此得到名为LeNet 的网络,在 20 世纪 90 年代被美国邮政署采用,用于自动读取信封上的邮政编码。

 

SVM 的目标是通过在属于两个不同类别的两组数据点之间找到良好决策边界(decision boundary,见图 1-10)来解决分类问题。决策边界可以看作一条直线或一个平面,将训练数据划分为两块空间,分别对应于两个类别。对于新数据点的分类,你只需判断它位于决策边界的哪一侧。

第1章-什么是深度学习(笔记)

SVM 通过两步来寻找决策边界。
(1) 将数据映射到一个新的高维表示,这时决策边界可以用一个超平面来表示(如果数据像图 1-10 那样是二维的,那么超平面就是一条直线)。

(2) 尽量让超平面与每个类别最近的数据点之间的距离最大化,从而计算出良好决策边界(分割超平面),这一步叫作间隔最大化(maximizing the margin)。这样决策边界可以很好地推广到训练数据集之外的新样本。

 

但是,SVM 很难扩展到大型数据集,并且在图像分类等感知问题上的效果也不好。SVM是一种比较浅层的方法,因此要想将其应用于感知问题,首先需要手动提取出有用的表示(这叫作特征工程),这一步骤很难,而且不稳定。

 

 

深度卷积神经网络(convnet)已成为所有计算机视觉任务的首选算法。更一般地说,它在所有感知任务上都有效。

在 2015 年和 2016 年的主要计算机视觉会议上,几乎所有演讲都与 convnet 有关。与此同时,深度学习也在许多其他类型的问题上得到应用,比如自然语言处理。

它已经在大量应用中完全取代了 SVM 与决策树。举个例子,欧洲核子研究中心(CERN)多年来一直使用基于决策树的方法来分析来自大型强子对撞机(LHC)ATLAS 探测器的粒子数据,但 CERN 最终转向基于 Keras 的深度神经网络,因为它的性能更好,而且在大型数据集上易于训练。

 

 

先前的机器学习技术(浅层学习)仅包含将输入数据变换到一两个连续的表示空间,通常使用简单的变换,比如高维非线性投影(SVM)或决策树。但这些技术通常无法得到复杂问题所需要的精确表示。因此,人们必须竭尽全力让初始输入数据更适合用这些方法处理,也必须手动为数据设计好的表示层。这叫作特征工程。与此相反,深度学习完全将这个步骤自动化:

利用深度学习,你可以一次性学习所有特征,而无须自己手动设计。这极大地简化了机器学习工作流程,通常将复杂的多阶段流程替换为一个简单的、端到端的深度学习模型。
你可能会问,如果问题的关键在于有多个连续表示层,那么能否重复应用浅层方法,以实现和深度学习类似的效果?

在实践中,如果连续应用浅层学习方法,其收益会随着层数增加迅速降低,因为三层模型中最优的第一表示层并不是单层或双层模型中最优的第一表示层。

深度学习的变革性在于,模型可以在同一时间共同学习所有表示层,而不是依次连续学习(这被称为贪婪学习)。

通过共同的特征学习,一旦模型修改某个内部特征,所有依赖于该特征的其他特征都会相应地自动调节适应,无须人为干预。一切都由单一反馈信号来监督:模型中的每一处变化都是为了最终目标服务。

这种方法比贪婪地叠加浅层模型更加强大,因为它可以通过将复杂、抽象的表示拆解为很多个中间空间(层)来学习这些表示,每个中间空间仅仅是前一个空间的简单变换。
深度学习从数据中进行学习时有两个基本特征:

第一,通过渐进的、逐层的方式形成越来越复杂的表示;

第二,对中间这些渐进的表示共同进行学习,每一层的变化都需要同时考虑上下两层的需要。

总之,这两个特征使得深度学习比先前的机器学习方法更加成功。
 

Kaggle 上主要有两大方法:梯度提升机和深度学习。

具体而言,梯度提升机用于处理结构化数据的问题,而深度学习则用于图像分类等感知问题。

 

要想在如今的应用机器学习中取得成功,你应该熟悉这两种技术:

梯度提升机,用于浅层学习问题;

深度学习,用于感知问题。

 

长短期记忆(LSTM,long short-term memory)算法是深度学习处理时间序列的基础,它在 1997 年就被开发出来了,而且此后几乎没有发生变化。

最后,在 2014 年、2015 年和 2016 年,人们发现了更先进的有助于梯度传播的方法,比如批标准化、残差连接和深度可分离卷积。

 

除了硬件和数据之外,直到 20 世纪前十年的末期,我们仍没有可靠的方法来训练非常深的神经网络。因此,神经网络仍然很浅,仅使用一两个表示层,无法超越更为精确的浅层方法,比如 SVM 和随机森林。关键问题在于通过多层叠加的梯度传播。随着层数的增加,用于训练神经网络的反馈信号会逐渐消失。

 

最后附上一张其他地方转载过来的图(不是从这本书中):

第1章-什么是深度学习(笔记)