《Python深度学习》Chapter 1——什么是深度学习

《Deep Learning with Python 》由Keras之父、现任Google人工智能研究员的弗朗索瓦•肖莱(François Chollet)执笔,详尽介绍了用Python和Keras进行深度学习的探索实践,涉及计算机视觉、自然语言处理、生成式模型等应用。
本书以读书笔记的形式摘抄书中的重点,会加入一些自己的备注和理解(标红及斜体)。
编程语言:Python
深度学习框架:Keras
书籍下载:《Python 深度学习》
《Python深度学习》Chapter 1——什么是深度学习_第1张图片
注: 这本书,偏重于快速上手, 本身用keras写深度学习代码,就是类似搭积木一般,对于深度学习原理各部分讲解不多。
如果想稍深入的了解深度学习中的反向传播算法、归一化、优化算法等问题, 还需要学习吴恩达的机器学习教程:
吴恩达老师的深度学习系列视频
吴恩达老师深度学习笔记整理

人工智能、机器学习、深度学习

又是下面这个经典的图
《Python深度学习》Chapter 1——什么是深度学习_第2张图片

人工智能

人工智能诞生于 20 世纪 50 年代,人工智能的简洁定义如下: 努力将通常由人类完成的智力任务自动化

机器学习

人工智能先驱阿兰 • 图灵在其 1950 年发表的具有里程碑意义的论文“计算机器和智能”,图灵在这篇论文中介绍了图灵测试以及日后人工智能所包含的重要概念。
《Python深度学习》Chapter 1——什么是深度学习_第3张图片
机器学习系统是训练出来的,而不是明确地用程序编写出来的。将与某个任务相关的许多示例输入机器学习系统,它会在这些示例中找到统计结构,从而最终找到规则将任务自动化。

虽然机器学习在 20 世纪 90 年代才开始蓬勃发展,但它迅速成为人工智能最受欢迎且最成功的分支领域。

从数据中学习表示

为了给出深度学习的定义并搞清楚深度学习与其他机器学习方法的区别,我们首先需要知道机器学习算法在做什么。我们需要以下三个要素来进行机器学习。

  • 输入数据点。例如,你的任务是语音识别,那么这些数据点可能是记录人们说话的声音文件。如果你的任务是为图像添加标签,那么这些数据点可能是图像。(输入)
  • 预期输出的示例。对于语音识别任务来说,这些示例可能是人们根据声音文件整理生成的文本。对于图像标记任务来说,预期输出可能是“狗”“猫”之类的标签。(输出
  • 衡量算法效果好坏的方法。这一衡量方法是为了计算算法的当前输出与预期输出的差距。(损失\目标\代价函数

衡量结果是一种反馈信号,用于调节算法的工作方式。这个调节步骤就是我们所说的学习。机器学习模型将输入数据变换为有意义的输出,这是一个从已知的输入和输出示例中进行“学习”的过程。因此,机器学习和深度学习的核心问题在于有意义地变换数据,换句话说,在于学习输入数据的有用表示(representation)——这种表示可以让数据更接近预期输出。

机器学习的技术定义:在预先定义好的可能性空间中,利用反馈信号的指引来寻找输入数据的有用表示

深度学习之“深度”

深度学习是机器学习的一个分支领域:它是从数据中学习表示的一种新方法,强调从连续的**层(layer)**中进行学习,这些层对应于越来越有意义的表示。

“深度学习”中的“深度”指的并不是利用这种方法所获取的更深层次的理解,而是指一系列连续的表示层。数据模型中包含多少层,这被称为模型的深度(depth)。这一领域的其他名称包括分层表示学习(layered representations learning)和层级表示学习(hierarchical representations learning)。现代深度学习通常包含数十个甚至上百个连续的表示层,这些表示层全都是从训练数据中自动学习的。与此
相反,其他机器学习方法的重点往往是仅仅学习一两层的数据表示,因此有时也被称为浅层学习(shallow learning)

在深度学习中,这些分层表示几乎总是通过叫作**神经网络(neural network)**的模型来学习得到的。**深度学习模型不是大脑模型。**没有证据表明大脑的学习机制与现代深度学习模型所使用的相同。

深度学习的技术定义:学习数据表示的多级方法。
即深度学习,可以理解为利用深层神经网络的机器学习。

深度学习的工作原理

下面这张图是这一章的精华
《Python深度学习》Chapter 1——什么是深度学习_第4张图片

  • 神经网络由其权重来参数化:神经网络中每层对输入数据所做的具体操作保存在该层的权重(weight)中,其本质是一串数字。用术语来说,每层实现的变换由其权重来参数化(parameterize)。权重有时也被称为该层的参数(parameter)。 注意参数与超参数的区别
  • 损失函数用来衡量网络输出结果的质量:损失函数(loss function)的输入是网络预测值与真实目标值(即你希望网络输出的结果),然后计算一个距离值,衡量该网络在这个示例上的效果好坏。此处损失函数等价于目标\代价函数(objective function\cost function),不同于吴恩达课程
  • 将损失值作为反馈信息来调节权重:深度学习的基本技巧是利用这个距离值作为反馈信号来对权重值进行微调,以降低当前示例对应的损失值。这种调节由优化器(optimizer)来完成,它实现了所谓的反向传播(backpropagation)算法,这是深度学习的核心算法。

一开始对神经网络的权重随机赋值,因此网络只是实现了一系列随机变换。但随着网络处理的示例越来越多,权重值也在向正确的方向逐步微调,损失值也逐渐降低。这就是训练循环(training loop),将这种循环重复足够多的次数(通常对数千个示例进行数十次迭代),得到的权重值可以使损失函数最小。具有最小损失的网络,其输出值与目标值尽可能地接近,这就是训练好的网络

深度学习已经取得的进展《Python深度学习》Chapter 1——什么是深度学习_第5张图片

不要相信短期炒作,相信人工智能的未来

**不要相信短期的炒作,但一定要相信长期的愿景。**人工智能可能需要一段时间才能充分发挥其潜力。这一潜力的范围大到难以想象,但人工智能终将到来,它将以一种奇妙的方式改变我们的世界。

深度学习之前:机器学习简史

了解这部分历史,对于各种算法的比较及其发展有很大帮助

概率建模 probabilistic modeling

概率建模(probabilistic modeling)是统计学原理在数据分析中的应用。它是最早的机器学习形式之一,至今仍在广泛使用。

其中最有名的算法之一就是朴素贝叶斯算法。这种数据分析方法
比计算机出现得还要早,在其第一次被计算机实现(很可能追溯到 20世纪 50 年代)的几十年前就已经靠人工计算来应用了。贝叶斯定理和统计学基础可以追溯到 18 世纪,你学会了这两点就可以开始使用朴素贝叶斯分类器了。

另一个密切相关的模型是 logistic 回归(logistic regression,简称 logreg),它有时被认为是现代机器学习的“hello world”。面对一个数据集,数据科学家通常会首先尝试使用这个算法,以便初步熟悉手头的分类任务。注意,logistic回归是分类算法,名称中含回归是历史原因

早期神经网络 neural network

虽然人们早在 20 世纪 50 年代就将神经网络作为玩具项目,并对其核心思想进行研究,但这一方法在数十年后才被人们所使用。在很长一段时间内,一直没有训练大型神经网络的有效方法。这一点在 20 世纪 80 年代中期发生了变化,当时很多人都独立地重新发现了反向传播算法——一种利用梯度下降优化来训练一系列参数化运算链的方法,并开始将其应用于神经网络。

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

核方法 kernel method

上节所述神经网络取得了第一次成功,并在 20 世纪 90 年代开始在研究人员中受到一定的重视,但一种新的机器学习方法在这时声名鹊起,很快就使人们将神经网络抛诸脑后。这种方法就是核方法(kernel method)。核方法是一组分类算法,其中最有名的就是支持向量机(SVM,support vector machine)。

SVM 的目标是通过在属于两个不同类别的两组数据点之间找到良好决策边界(decision boundary)来解决分类问题。
《Python深度学习》Chapter 1——什么是深度学习_第6张图片
SVM 刚刚出现时,在简单的分类问题上表现出了最好的性能。当时只有少数机器学习方法得到大量的理论支持,并且适合用于严肃的数学分析,因而非常易于理解和解释, SVM 就是其中之一。由于 SVM 具有这些有用的性质,很长一段时间里它在实践中非常流行。

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

SVM是一种强分类器,特别适用于解决二分类问题。对于数据量适中(1w-5w左右),表现的效果比较好。
SVM的核心在于找到使 间隔最大化的分隔超平面 。

决策树DT、随机森林RF与梯度提升机GBM

决策树(decision tree)是类似于流程图的结构,可以对输入数据点进行分类或根据给定输入来预测输出值。
《Python深度学习》Chapter 1——什么是深度学习_第7张图片
在 21 世纪前十年,从数据中学习得到的决策树开始引起研究人员的广泛关注。到了 2010 年,决策树经常比核方法更受欢迎。

特别是随机森林(random forest)算法,它引入了一种健壮且实用的决策树学习方法,即首先构建许多决策树,然后将它们的输出集成在一起。随机森林适用于各种各样的问题——对于任何浅层的机器学习任务来说,它几乎总是第二好的算法。广受欢迎的机器学习竞赛网站
Kaggle2010 年上线后,随机森林迅速成为平台上人们的最爱,直到 2014 年才被梯度提升机所取代。

与随机森林类似, 梯度提升机(gradient boosting machine)也是将弱预测模型(通常是决策树)集成的机器学习技术。它使用了梯度提升方法,通过迭代地训练新模型来专门解决之前模型的弱点,从而改进任何机器学习模型的效果。随机森林和梯度提升机都是集成学习中的代表算法。

回到神经网络 neural network

真正的转折性时刻出现在 2012 年,当年 Hinton 小组参加了每年一次的大规模图像分类挑战赛 ImageNet(ImageNet 大规模视觉识别挑战赛(ILSVRC))。

2012 年,由 Alex Krizhevsky 带领并由 Geoffrey Hinton 提供建议的小组,实现了 83.6% 的 top-5精度——这是一项重大突破。经典的ALexNet网络 此后,这项竞赛每年都由深度卷积神经网络所主导。到了 2015 年,获胜者的精度达到了 96.4%,此时 ImageNet 的分类任务被认为是一个已经完全解决的问题。

深度学习有何不同

深度学习发展得如此迅速,主要原因在于它在很多问题上都表现出更好的性能。但这并不是唯一的原因。深度学习还让解决问题变得更加简单,因为它将特征工程完全自动化,而这曾经是机器学习工作流程中最关键的一步。
其实也没有完全自动化,只是减化了特征工程, 毕竟在其他机器学习算法中,特征工程师特别重要的一步,步骤繁多且重要。

深度学习的变革性在于,模型可以在同一时间共同学习所有表示层,而不是依次连续学习(这被称为贪婪学习)。通过共同的特征学习,一旦模型修改某个内部特征,所有依赖于该特征的其他特征都会相应地自动调节适应,无须人为干预。一切都由单一反馈信号来监督。

深度学习从数据中进行学习时有两个基本特征:第一, 通过渐进的、逐层的方式形成越来越复杂的表示;第二, 对中间这些渐进的表示共同进行学习

机器学习现状

要想了解机器学习算法和工具的现状,一个好方法是看一下 Kaggle 上的机器学习竞赛。

要想在如今的应用机器学习中取得成功,你应该熟悉这两种技术:梯度提升机,用于浅层学习问题;深度学习,用于感知问题。用术语来说,你需要熟悉 XGBoostKeras,它们是目前主宰 Kaggle 竞赛的两个库。

为什么是深度学习,为什么是现在

深度学习用于计算机视觉的两个关键思想,即卷积神经网络反向传播,在 1989 年就已经为人们所知。长短期记忆(LSTM, long short-term memory)算法是深度学习处理时间序列的
基础,它在 1997 年就被开发出来了,而且此后几乎没有发生变化。那么为什么深度学习在2012 年之后才开始取得成功?这二十年间发生了什么变化?
总的来说,三种技术力量在推动着机器学习的进步:

  • 硬件 GPU 以及 TPU
  • 数据集和基准 如今,大公司使用的图像数据集、视频数据集和自然语言数据集,没有互联网的话根本无法收集。例如, Flickr 网站上用户生成的图像标签一直是计算机视觉的数据宝库。 YouTube 视频也是一座宝库。维基百科则是自然语言处理的关键数据集。
  • 算法上的改进 更好的神经层激活函数(activation function)、 更好的权重初始化方案(weight-initialization scheme)、更好的优化方案(optimization scheme),比如 RMSProp 和 Adam。

你可能感兴趣的:(深度学习)