本书阅读了大概半个月时间,期间还用虚拟机还跑了下官方提供的历程,书挺通俗易懂的,而且内容全面。
我认为对于新学的知识来说,第一步,知道能够用来做什么,大概用什么来做就可以,知道一些专业术语,而关于技术实现的细枝末节可以先放一边,到实际用到再查相关技术文档。
原版书中就有很多总结性的话语,大大的节省我们的时间.
学习路线图
第 1 章介绍人工智能、机器学习和深度学习的重要背景知识。
第 2 章介绍从事深度学习必须了解的基本概念:张量、张量运算、梯度下降和反向传播。 这一章还给出了本书第一个可用的神经网络示例。
第 3 章包括上手神经网络所需要了解的全部内容:Keras 简介,它是我们的首选深度学 习框架;
建立自己的工作站的指南;三个基本代码示例以及详细解释。读完这一章,你将能够训练简单的神经网络来处理分类任务和回归任务,你还将充分了解训练过程背后发生的事情。
第 4 章介绍标准的机器学习工作流程。你还会了解常见的陷阱及其解决方案。
第二部分将深入介绍深度学习在计算机视觉和自然语言处理中的实际应用。这一部分给出 了许多示例,对于在现实世界的实践中遇到的深度学习问题,你可以用这些示例作为解决问题 的模板。
第 5 章介绍了一系列实用的计算机视觉示例,重点放在图像分类。
第 6 章介绍了处理序列数据(比如文本和时间序列)的实用技术。
第 7 章介绍了构建最先进深度学习模型的高级技术。
第 8 章介绍了生成式模型,即能够创造图像和文本的深度学习模型,它有时会产生令人 惊讶的艺术效果。
第 9 章将帮你巩固在本书学到的知识,还会探讨深度学习的局限性及其未来的可能性。
第二章 深度学习的数学基础 小结
-
学习是指找到一组模型参数,使得在给定的训练数据样本和对应目标值上的损失函数最小化。
-
学习的过程:随机选取包含数据样本及其目标值的批量,并计算批量损失相对于网络参数的梯度。随后将网络参数沿着梯度的反方向稍稍移动(移动距离由学习率指定)。
-
整个学习过程之所以能够实现,是因为神经网络是一系列可微分的张量运算,因此可以利用求导的链式法则来得到梯度函数,这个函数将当前参数和当前数据批量映射为一个 梯度值。
-
后续几章你会经常遇到两个关键的概念:损失和优化器。将数据输入网络之前,你需要 先定义这二者
-
损失是在训练过程中需要最小化的量,因此,它应该能够衡量当前任务是否已成功解决。
-
优化器是使用损失梯度更新参数的具体方式,比如RMSProp 优化器、带动量的随机梯 度下降(SGD)等。
3.4 电影评论分类:二分类问题小结
下面是你应该从这个例子中学到的要点。
- 通常需要对原始数据进行大量预处理,以便将其转换为张量输入到神经网络中。单词序列可以编码为二进制向量,但也有其他编码方式。
- 带有relu激活的Dense层堆叠,可以解决很多种问题(包括情感分类),你可能会经常用到这种模型。
- 对于二分类问题(两个输出类别),网络的最后一层应该是只有一个单元并使用sigmoid激活的Dense层,网络输出应该是0-1范围内的标量,表示概率值。
- 对于二分类问题的sigmoid标量输出,你应该使用binary_crossentropy 损失函数。
- 无论你的问题是什么,rmsprop优化器通常都是足够好的选择。这一点你无须担心。
- 随着神经网络在训练数据上的表现越来越好,模型最终会过拟合,并在前所未见的数据上得到越来越差的结果。一定要一直监控模型在训练集之外的数据上的性能。
3.5.9新闻分类:多分类问题小结
下面是你应该从这个例子中学到的要点。
- 如果要对N个类别的数据点进行分类,网络的最后一层应该是大小为N的Dense
- 对于单标签、多分类问题,网络的最后一层应该使用softmax激活,这样可以输出在N个输出类别上的概率分布。
- 这种问题的损失函数几乎总是应该使用分类交叉熵。它将网络输出的概率分布与目标的真实分布之间的距离最小化。
- 处理多分类问题的标签有两种方法。
通过分类编码(也叫one-hot编码)对标签进行编码,然后使用categorical_crossentropy作为损失函数。
将标签编码为整数,然后使用sparse_categorical_crossentropy 损失函数。 - 如果你需要将数据划分到许多类别中,应该避免使用太小的中间层,以免在网络中造成信息瓶颈。
3.6.5预测房价:回归问题小结
下面是你应该从这个例子中学到的要点。
- 回归问题使用的损失函数与分类问题不同。回归常用的损失函数是均方误差(MSE)。
- 同样,回归问题使用的评估指标也与分类问题不同。显而易见,精度的概念不适用于回归问题。常见的回归指标是平均绝对误差(MAE)。
- 如果输入数据的特征具有不同的取值范围,应该先进行预处理,对每个特征单独进行缩放。
- 如果可用的数据很少,使用K折验证可以可靠地评估模型。
- 如果可用的训练数据很少,最好使用隐藏层较少(通常只有一到两个)的小型网络,以避免严重的过拟合。
第三章 神经网络入门 小结
- 现在你可以处理关于向量数据最常见的机器学习任务了:二分类问题、多分类问题和标量回归问题。前面三节的“小结”总结了你从这些任务中学到的要点。
- 在将原始数据输入神经网络之前,通常需要对其进行预处理。
- 如果数据特征具有不同的取值范围,那么需要进行预处理,将每个特征单独缩放。
- 随着训练的进行,神经网络最终会过拟合,并在前所未见的数据上得到更差的结果。
- 如果训练数据不是很多,应该使用只有一两个隐藏层的小型网络,以避免严重的过拟合。
- 如果数据被分为多个类别,那么中间层过小可能会导致信息瓶颈。
- 回归问题使用的损失函数和评估指标都与分类问题不同。
- 如果要处理的数据很少,K折验证有助于可靠地评估模型。
第四章 机器学习基础 总结
- 定义问题与要训练的数据。收集这些数据,有需要的话用标签来标注数据。
- 选择衡量问题成功的指标。你要在验证数据上监控哪些指标?
- 确定评估方法:留出验证?K折验证?你应该将哪一部分数据用于验证?
- 开发第一个比基准更好的模型,即一个具有统计功效的模型。
- 开发过拟合的模型。
- 基于模型在验证数据上的性能来进行模型正则化与调节超参数。许多机器学习研究往往只关注这一步,但你一定要牢记整个工作流程。
5.3.3卷积神经网络小结
下面是你应该从以上两节的练习中学到的要点。
- 卷积神经网络是用于计算机视觉任务的最佳机器学习模型。即使在非常小的数据集上也可以从头开始训练一个卷积神经网络,而且得到的结果还不错。
- 在小型数据集上的主要问题是过拟合。在处理图像数据时,数据增强是一种降低过拟合的强大方法。
- 利用特征提取,可以很容易将现有的卷积神经网络复用于新的数据集。对于小型图像数据集,这是一种很有价值的方法。
- 作为特征提取的补充,你还可以使用微调,将现有模型之前学到的一些数据表示应用于新问题。这种方法可以进一步提高模型性能。
现在你已经拥有一套可靠的工具来处理图像分类问题,特别是对于小型数据集。
第五章 深度学习用于计算机视觉 小结
- 卷积神经网络是解决视觉分类问题的最佳工具。
- 卷积神经网络通过学习模块化模式和概念的层次结构来表示视觉世界。
- 卷积神经网络学到的表示很容易可视化,卷积神经网络不是黑盒。
- 现在你能够从头开始训练自己的卷积神经网络来解决图像分类问题。
- 你知道了如何使用视觉数据增强来防止过拟合。
- 你知道了如何使用预训练的卷积神经网络进行特征提取与模型微调。
- 你可以将卷积神经网络学到的过滤器可视化,也可以将类激活热力图可视化。
6.1.4 处理文本数据 小结
现在你已经学会了下列内容。
- 将原始文本转换为神经网络能够处理的格式。
- 使用Keras 模型的Embedding层来学习针对特定任务的标记嵌入。
- 使用预训练词嵌入在小型自然语言处理问题上获得额外的性能提升。
6.2.4 理解循环神经网络 小结
现在你已经学会了以下内容。
- 循环神经网络(RNN)的概念及其工作原理。
- 长短期记忆(LSTM)是什么,为什么它在长序列上的效果要好于普通RNN。
- 如何使用Keras的RNN层来处理序列数据。
6.3.10 循环神经网络的高级用法 总结
下面是你应该从本节中学到的要点。
- 我们在第4章学过,遇到新问题时,最好首先为你选择的指标建立一个基于常识的基准。如果没有需要打败的基准,那么就无法分辨是否取得了真正的进步。
- 在尝试计算代价较高的模型之前,先尝试一些简单的模型,以此证明增加计算代价是有意义的。有时简单模型就是你的最佳选择。
- 如果时间顺序对数据很重要,那么循环网络是一种很适合的方法,与那些先将时间数据展平的模型相比,其性能要更好。
- 想要在循环网络中使用dropout,你应该使用一个不随时间变化的dropout掩码与循环dropout掩码。这二者都内置于Keras的循环层中,所以你只需要使用循环层的 dropout和recurrent_dropout参数即可。
- 与单个RNN层相比,堆叠RNN的表示能力更加强大。但它的计算代价也更高,因此不一定总是需要。虽然它在机器翻译等复杂问题上很有效,但在较小、较简单的问题上可能不一定有用。
- 双向RNN从两个方向查看一个序列,它对自然语言处理问题非常有用。但如果在序列数据中最近的数据比序列开头包含更多的信息,那么这种方法的效果就不明显。
6.4.5 用卷积神经网络处理序列 小结
下面是你应该从本节中学到的要点。
- 二维卷积神经网络在二维空间中处理视觉模式时表现很好,与此相同,一维卷积神经网络在处理时间模式时表现也很好。对于某些问题,特别是自然语言处理任务,它可以替 代 RNN,并且速度更快。
- 通常情况下,一维卷积神经网络的架构与计算机视觉领域的二维卷积神经网络很相似, 它将 Conv1D 层和 MaxPooling1D层堆叠在一起,最后是一个全局池化运算或展平操作。
- 因为RNN 在处理非常长的序列时计算代价很大,但一维卷积神经网络的计算代价很小,所以在RNN 之前使用一维卷积神经网络作为预处理步骤是一个好主意,这样可以使序列变短,并提取出有用的表示交给 RNN 来处理
第六章 深度学习用于文本和序列 总结
你在本章学到了以下技术,它们广泛应用于序列数据(从文本到时间序列)组成的数据集。
如何对文本分词。
什么是词嵌入,如何使用词嵌入。
什么是循环网络,如何使用循环网络。
如何堆叠 RNN 层和使用双向 RNN,以构建更加强大的序列处理模型。
如何使用一维卷积神经网络来处理序列。
如何结合一维卷积神经网络和 RNN 来处理长序列。
-
你可以用RNN 进行时间序列回归(“预测未来”)、时间序列分类、时间序列异常检测和 序列标记(比如找出句子中的人名或日期)。
-
同样,你可以将一维卷积神经网络用于机器翻译(序列到序列的卷积模型,比如 SliceNet)、文档分类和拼写校正。
-
如果序列数据的整体顺序很重要,那么最好使用循环网络来处理。时间序列通常都是这 样,最近的数据可能比久远的数据包含更多的信息量。
-
如果整体顺序没有意义,那么一维卷积神经网络可以实现同样好的效果,而且计算代价更小。文本数据通常都是这样,在句首发现关键词和在句尾发现关键词一样都很有意义。
7.1.7 不用 Sequential 模型的解决方案:Keras 函数式 API小结
以上就是对Keras 函数式API 的介绍,它是构建高级深度神经网络架构的必备工具。本节 我们学习了以下内容。
- 如果你需要实现的架构不仅仅是层的线性堆叠,那么不要局限于 Sequential API。
- 如何使用Keras 函数式API 来构建多输入模型、多输出模型和具有复杂的内部网络拓扑 结构的模型。
- 如何通过多次调用相同的层实例或模型实例,在不同的处理分支之间重复使用层或模型 的权重。
7.2.3使用 Keras 回调函数和 TensorBoard 来检查并监控深度学习模型 小结
- Keras 回调函数提供了一种简单方法,可以在训练过程中监控模型并根据模型状态自动 采取行动。
- 使用TensorFlow 时,TensorBoard 是一种在浏览器中将模型活动可视化的好方法。在 Keras 模型中你可以通过TensorBoard 回调函数来使用这种方法。
7.3.4 让模型性能发挥到极致 小结
- 构建高性能的深度卷积神经网络时,你需要使用残差连接、批标准化和深度可分离卷积。
未来,无论是一维、二维还是三维应用,深度可分离卷积很可能会完全取代普通卷积, 因为它的表示效率更高。 - 构建深度网络需要选择许多超参数和架构,这些选择共同决定了模型的性能。与其将这些选择建立在直觉或随机性之上,不如系统性地搜索超参数空间,以找到最佳选择。目前, 这个搜索过程的计算代价还很高,使用的工具也不是很好。但Hyperopt 和 Hyperas 这两个库可能会对你有所帮助。进行超参数优化时,一定要小心验证集过拟合!
- 想要在机器学习竞赛中获胜,或者想要在某项任务上获得最佳结果,只能通过多个模型 的集成来实现。利用加权平均(权重已经过优化)进行集成通常已经能取得足够好的效 果。请记住,多样性就是力量。将非常相似的模型集成基本上是没有意义的。最好的集 成方法是将尽可能不同的一组模型集成(这组模型还需要具有尽可能高的预测能力)。
第七章 高级的深度学习最佳实践 总结
本章我们学习了以下内容。
- 如何将模型构建为层组成的图、层的重复使用(层权重共享)与将模型用作 Python 函 数(模型模板)。
- 你可以使用 Keras 回调函数在训练过程中监控模型,并根据模型状态采取行动。
- TensorBoard 可以将指标、激活直方图甚至嵌入空间可视化。
- 什么是批标准化、深度可分离卷积和残差连接。
- 为什么应该使用超参数优化和模型集成。
- 借助这些新工具,你可以在现实世界中更好地利用深度学习,并可以开始构建具有高度竞争力的深度学习模型。