首页>参考读物>计算机科学与技术>人工智能

深度学习:基于案例理解深度神经网络
作者 : [瑞士] 翁贝托·米凯卢奇(Umberto Michelucci)著
译者 : 陶阳 邓红平 译
出版日期 : 2019-09-27
ISBN : 978-7-111-63710-3
定价 : 89.00元
扩展资源下载
扩展信息
语种 : 简体中文
页数 : 280
开本 : 16
原书名 : Applied Deep Learning: A Case-Based Approach to Understanding Deep Neural Networks
原出版社: Apress
属性分类: 店面
包含CD : 无CD
绝版 : 未绝版
图书简介

本书探讨了深度学习中的高级主题,例如优化算法、超参数调整、Dropout和误差分析,以及解决在训练深度神经网络时遇到的典型问题的策略。你首先要研究激活函数,主要是单个神经元(relu、sigmoid和swish),了解如何使用TensorFlow进行线性和逻辑回归,并选择正确的代价函数。接着讨论了具有多个层和神经元的更复杂的神经网络结构,并探讨了权重的随机初始化问题。一整章致力于对神经网络误差分析的全面概述,给出了解决来自不同分布的方差、偏差、过度拟合和数据集问题的例子。

图书特色

包含正则化、学习率衰减技术和不同的优化器的完整概述及示例
介绍Dropout和超参数调优等高级技术
包含构建卷积神经网络和递归神经网络模块的概述

图书前言

为什么要写一本关于应用深度学习的书?这是我在开始撰写之前问过自己的问题。毕竟,只要在互联网上搜索一下这个主题,你就会被大量的结果所震撼。然而,我遇到的问题是,我发现这些资料只是在非常简单的数据集上实现非常基本的模型,它们只是在一遍又一遍地提供相同的问题、相同的提示和相同的技巧。如果你想学习如何对10个手写数字的MNIST数据集(修正版国家标准与技术研究所数据集)进行分类,那么你很幸运(几乎所有拥有博客的人都在这样做,主要是复制TensorFlow网站上提供的代码)。搜索其他内容以了解逻辑回归的工作原理?没那么容易。如何准备数据集以进行有趣的二值分类?更难。我觉得有必要填补这个空白。我花了好几个小时试图调试模型,以找到原因,如标签错了那样低级的错误。例如,我有1和2,而不是0和1,但没有博客提醒我这一点。在开发模型时进行适当的指标分析很重要,但没有人教你如何做(至少那些易于访问的资料不能),这个差距需要填补。我发现学习更复杂的例子,从数据准备到误差分析,是学习正确技术的一种非常有效和有趣的方法。在本书中,我一直试图涵盖完整而复杂的例子来解释那些以其他方式不易理解的概念。如果你没有看到选择错误值时会发生什么,那就无法理解为什么选择正确的学习率非常重要。因此,我总是用真实的例子和完全成熟且经过测试的Python代码来解释概念,你可以重用它们。请注意,本书的目标不是让你成为Python或TensorFlow专家,也不是让你成为能够开发新的复杂算法的人。Python和TensorFlow只是非常适合开发模型并快速获得结果的工具,因此,我使用它们。我可以使用其他工具,但上述工具是从业者最常使用的,因此选择它们是有意义的。如果你必须学习,那么最好选择在自己的项目和职业生涯中要使用的工具。
本书的目标是让你以新的眼光看待更高级的资料。我尽可能多地涵盖数学知识,因为我认为有必要完全理解许多概念背后的来龙去脉和深层原因。如果你不知道梯度下降算法的数学原理,就无法理解为什么大的学习率会使你的模型(严格来说,代价函数)发散。在所有的真实项目中,你都不必计算偏导数或复数和,但你必须了解它们才能评估哪些方案可行,哪些不可行(尤其是为什么不可行)。只有在你从头开发只有一个神经元的简单模型之后,你才能欣赏为什么像TensorFlow这样的库会让你的生活更轻松。这是一个非常有益的事情,我将在第10章向你展示。一旦完成,你将永远记住它,并且你将非常欣赏诸如TensorFlow这样的库。
我建议你真正尝试理解数学基础(尽管这并不是阅读本书的必要条件),因为这将使你能够完全理解许多本来无法完全理解的概念。机器学习是一个非常复杂的主题,如果没有很好地掌握数学知识或Python,想彻底理解它是不可能的。在每一章中,我都会重点介绍在Python中进行有效开发的重要技巧。本书的所有内容都有具体的例子和可重现的代码作为后盾,所有内容都以相关实际示例展开。通过这种方式,一切都会立即变得有意义,你会记住它。
请花些时间研究本书中的代码并亲自试用。正如每位好老师都知道的那样,当学生尝试自己解决问题时,学习效果最好。尝试去做,去犯错,然后从中学习。请在阅读每一章时输入代码,然后尝试修改它。例如,在第2章中,我将向你展示如何在两个手写数字1和2之间执行二值分类识别。请获取代码并尝试两个不同的数字。请多写代码吧!
按照设计,本书中的代码尽可能编写得很简单,它没有经过优化。我知道可以编写效果更好的代码,但这样做会牺牲清晰度和可读性。本书的目的不是教你编写高度优化的Python代码,只是想让你了解算法的基本概念及其局限性,并为你在此领域继续学习奠定坚实的基础。无论如何,我当然会指出重要的Python实现细节,例如,如何尽可能避免使用标准Python循环。
本书中的所有代码都是为了支持我为每一章设定的学习目标而编写的。建议使用NumPy和TensorFlow等库,因为它们允许将数学公式直接转换为Python。我也知道其他软件库(如TensorFlow Lite、Keras等)可能更易于使用,但它们只是工具。重要的是你能理解方法背后的概念。如果你做到了,你可以选择任何工具,并且将能够得到良好的实现。如果你不理解算法的工作原理,那么无论使用哪种工具,你都无法进行正确的实施或正确的误差分析。我强烈反对每个人都理解数据科学概念,数据科学和机器学习是困难和复杂的学科,需要深入理解其背后的数学知识和子科目。
我希望你阅读这本书时会有收获(我在写作时也有很多收获),你会发现这些例子和代码很有用。我也希望你会有很多获得重大发现的顿悟时刻,这时候,你终于明白为什么某些东西会按照你期望的方式工作(或者为什么不工作)。我希望你能找到既有趣又有用的完整例子。如果我能帮助你理解一个以前不清楚的概念,我会很高兴。
本书的一些章节对数学知识的要求还是很高的。例如,在第2章中,我计算了偏导数。但不要担心,如果你不理解它们,可以简单地跳过方程式。我确保在忽略大多数数学细节的情况下,主要概念还是可以理解的。但是,你应该真正知道矩阵是什么,如何做矩阵乘法,矩阵的转置是什么,等等。基本上,你需要很好地掌握线性代数。如果你没有,建议你在阅读本书之前先阅读一本基本的线性代数图书。如果你有很好的线性代数和微积分背景,强烈建议你不要跳过数学部分,它们真的可以帮助你理解本书。例如,它将很好地帮助你理解学习率或梯度下降算法的工作原理。不要被更复杂的数学符号吓到,而应对像下面这样的复杂方程感到自信(这是我们将用于线性回归算法的均方误差,稍后将详细解释,所以,如果你现在不知道这些符号的含义,也不要担心):

你应该理解并对诸如求和或数学级数等概念充满信心。如果你对这些概念没把握,请在开始学习本书之前对其进行回顾,否则,你会错过一些重要的概念,你必须牢牢掌握这些概念才能继续从事你的深度学习工作。本书的目标不是为你提供数学基础,我假定你是有数学基础的。深度学习和神经网络(一般来说,统称机器学习)是复杂的,任何试图说服你相信这很简单的人都是在撒谎,或者说他们根本就不了解深度学习和神经网络。
我不会花时间来证明或推导算法或方程式,你必须相信我提供的算法或方程式的正确性。另外,我不会讨论具体方程的适用性。例如,对于那些对微积分有很好理解的人,我不会讨论计算导数的函数的可微性问题。我只是简单地假设你可以应用我给你的公式。多年的项目实践表明,在深度学习社区内部,这些方法和方程式都能按预期工作,可以在实践中使用。关于那种高级主题的内容需要一本单独的书来讲解。
在第1章中,你将学习如何设置Python环境以及计算图。我将讨论使用TensorFlow执行数学计算的一些基本示例。在第2章中,将介绍使用单一神经元可以做些什么。我将介绍激活函数是什么以及最常用的类型,例如sigmoid、ReLU或tanh。我将展示梯度下降的工作原理以及如何使用单一神经元和TensorFlow实现逻辑和线性回归。在第3章中,将介绍全连接网络。我将讨论矩阵维度、过拟合,并向你介绍Zalando数据集。然后,将使用TensorFlow构建本书第一个真实网络,并开始研究梯度下降算法的更复杂变化,例如,小批量梯度下降。此外,还将研究不同的权重初始化方法以及如何比较不同的网络架构。在第4章中,将研究动态学习率衰减算法,例如阶梯、阶跃或指数衰减,然后将讨论高级优化器,例如Momentum、RMSProp和Adam。此外,还将提供有关如何使用TensorFlow开发自定义优化器的一些提示。在第5章中,将讨论正则化,包括l1、l2、Dropout和Early Stop Ping等众所周知的方法,将研究这些方法背后的数学理论以及如何在TensorFlow中实现它们。在第6章中,将讨论人工水平性能和贝叶斯误差等概念。接下来,将介绍一个指标分析工作流,使你可以识别与数据集有关的问题。此外,将k折交叉验证作为验证结果的工具。在第7章中,将讨论黑盒类问题和超参数调优、网格和随机搜索等算法,以及在哪里更有效和为什么。然后将介绍一些技巧,例如粗到细优化。本章的大部分内容专门用于讨论贝叶斯优化,即如何使用它以及采集函数是什么。此外,还将提供一些技巧,例如,如何在对数尺度上调整超参数,然后将对Zalando数据集执行超参数调优,以展示它是如何工作的。在第8章中,将研究卷积和循环神经网络。我将向你展示执行卷积和池化的含义,还将展示两种架构的基本TensorFlow实现。在第9章中,将介绍我正在与苏黎世应用科学大学(Zurich University of Applied Sciences,位于Winterthur)合作开展的实际研究项目,以及如何以不太标准的方式使用深度学习。最后,在第10章中,将向你展示如何完全从头开始使用Python中的单个神经元(不使用TensorFlow)执行逻辑回归。
我希望你喜欢这本书,祝你学有所获!

上架指导

计算机\人工智能

封底文字

本书探讨深度学习中的高级主题,例如优化算法、超参数调整、Dropout和误差分析,并讨论如何解决在训练深度神经网络时遇到的典型问题。书中首先介绍单一神经元网络的激活函数(ReLu、sigmoid和Swish),然后介绍如何使用TensorFlow进行线性和逻辑回归,以及如何选择正确的代价函数,之后讨论具有多个层和神经元的更复杂的神经网络结构,并探讨权重的随机初始化问题。本书用一整章对神经网络误差分析进行全面概述,给出如何解决来自不同分布的方差、偏差、过拟合和数据集问题的例子。

本书还讨论在不使用任何Python库(NumPy除外)的情况下,如何从零开始完全实现逻辑回归,以便用诸如TensorFlow这样的库进行快速和有效的实验。本书包括每种方法的案例研究,以便将所有理论信息付诸实践。你还将学到Python代码的优化技巧(例如,使用NumPy对循环进行向量化)。

通过阅读本书,你将学到:
• 利用Python和TensorFlow以正确的方式实现高级技术
• 调试和优化高级方法(如Dropout和正则化)
• 进行误差分析(以确定是否存在偏差问题、方差问题、数据偏移问题等)
• 创建专注于利用复杂数据集进行深度学习的机器学习项目

译者序

现在深度学习在人工智能领域很热门,大多数研究人员支持它,也有一些专家学者持反对意见,他们认为深度学习不是万能的,所以他们寻找新的机器学习方法,寻求人工智能技术的新突破。尽管如此,深度学习热度没有降低,而且获得了广泛的应用。深度学习是机器学习的一个扩展领域,它已经在文本、图像和语音等领域发挥了巨大作用。在深度学习下实现的算法与人脑中的刺激和神经元之间的关系具有相似性。深度学习在计算机视觉、语言翻译、语音识别、图像生成等方面具有广泛的应用。大多数深度学习算法都基于人工神经网络,如今,大量可用的数据和丰富的计算资源使得这种算法的训练变得简单。随着数据量的增长,深度学习模型的性能会不断提高。在深度学习理论方面,我们团队有基础,而且也展开了相应的应用研究,包括机器视觉、人脸识别、自然语言处理等方向。正当我们团队开始展开深度学习应用研究的时候,接到了这本书的翻译任务,这真是太巧了。
拿到这本书之后,我首先就被书名吸引住了,从书名看,这是一本实践性很强的书,比许多理论高深的书籍更受读者的欢迎,尤其是在当前大环境下,急需一些实践好书,让更多的工程技术人员可以拿来就用,而不必去关注深奥难懂的理论。接着,我仔细阅读了书中的内容,作者由浅入深、从理论到实践的创作思路验证了我的想法。第1章从应用实践所需的工具TensorFlow讲起,让读者熟悉工具,为后续章节应用TensorFlow打下基础。后面内容对深度学习的方方面面逐步进行讲解,理论与实践并举,介绍十分深入,而且强调实用性,并给出实现代码。通过本书,读者即使对深度学习理论掌握不够,也可以通过TensorFlow工具应用深度学习来解决实际问题,而且还可以比较各种不同的学习方法。这确实是一本很优秀的应用深度学习的入门教材。于是,我欣然接受了本书的翻译任务。
我认真通读本书两遍,对于本书有一定的理解后试着翻译起来,然而翻译远不像想象中那样容易。说实在的,即使理解了英文意思,要把它表达为确切的中文,包括正确表达大量术语,也是很令人头疼的。另外,为了能够及早让中文版与读者见面,具有较好TensorFlow实践应用基础的北大硕士邓红平老师也加入进来,我们共同完成本书翻译任务。
接到翻译任务的时候,正是寒假期间,所以我们几乎将全部假期时间都放在翻译上。寒假之后,我们又把所有业余时间都用上了,遇到疑难问题时我们共同切磋,反复推敲,以确定最好的译文。每翻译一章,就交给我审校,及时统一意见。为了保证翻译效果,我们还逐行在TensorFlow中实现其中的代码。
这么一本优秀的著作在给我们带来无穷的工作动力的同时,无疑也给翻译带来了无形的压力。为了尽量保证每章译稿的质量并保持译文的前后一致性,整本书的审校工作全部由我本人独立完成,同时我及时反馈并提供了统一的术语翻译。在翻译过程中我们也阅读了大量相关的教材和论文,包括网上的常用译法以及公认的英文术语,并前后进行了五次自我校对。在校对过程中,有很多同仁也提出了很多宝贵的意见和建议,包括我们团队中的一些学生,他们应用其中的代码进行了有效的实践。对于他们的无私帮助我表示由衷的感谢,感谢他们对我们的翻译工作给予的支持。另外还要感谢我的妻子,在前后两个多月里,我几乎所有的时间都用在翻译和校对上,而她则默默地承担起全部家务以及抚育孩子的责任。
虽然得到了大家的帮助,我们也认真努力,但限于我们的专业水平和理解能力,加上时间仓促,最后的译稿中难免存在理解上的偏差,译文也会有许多生硬之处,希望读者不吝赐教,提出宝贵的意见和建议,以便我们能够不断改进。
谢谢!

陶阳

图书目录

译者序
前言
审校者简介
致谢
第1章 计算图和TensorFlow1
1.1 如何构建Python环境1
1.1.1 创建环境3
1.1.2 安装TensorFlow7
1.1.3 Jupyter记事本8
1.2 TensorFlow基本介绍10
1.2.1 计算图10
1.2.2 张量12
1.2.3 创建和运行计算图13
1.2.4 包含tf.constant的计算图13
1.2.5 包含tf.Variable的计算图14
1.2.6 包含tf. placeholder的计算图15
1.2.7 运行和计算的区别18
1.2.8 节点之间的依赖关系18
1.2.9 创建和关闭会话的技巧19
第2章 单一神经元21
2.1 神经元结构21
2.1.1 矩阵表示法23
2.1.2 Python实现技巧:循环和NumPy24
2.1.3 激活函数25
2.1.4 代价函数和梯度下降:学习率的特点32
2.1.5 学习率的应用示例34
2.1.6 TensorFlow中的线性回归示例38
2.2 逻辑回归示例47
2.2.1 代价函数47
2.2.2 激活函数48
2.2.3 数据集48
2.2.4 TensorFlow实现51
2.3 参考文献54
第3章 前馈神经网络56
3.1 网络架构57
3.1.1 神经元的输出59
3.1.2 矩阵维度小结59
3.1.3 示例:三层网络的方程59
3.1.4 全连接网络中的超参数60
3.2 用于多元分类的softmax函数60
3.3 过拟合简要介绍61
3.3.1 过拟合示例61
3.3.2 基本误差分析66
3.4 Zalando数据集68
3.5 使用TensorFlow构建模型71
3.5.1 网络架构71
3.5.2 softmax函数的标签转换:独热编码73
3.5.3 TensorFlow模型74
3.6 梯度下降变体77
3.6.1 批量梯度下降77
3.6.2 随机梯度下降78
3.6.3 小批量梯度下降79
3.6.4 各种变体比较80
3.7 错误预测示例84
3.8 权重初始化84
3.9 有效添加多个层87
3.10 增加隐藏层的优点89
3.11 比较不同网络89
3.12 选择正确网络的技巧92
第4章 训练神经网络93
4.1 动态学习率衰减93
4.1.1 迭代还是周期94
4.1.2 阶梯式衰减95
4.1.3 步长衰减96
4.1.4 逆时衰减98
4.1.5 指数衰减100
4.1.6 自然指数衰减101
4.1.7 TensorFlow实现105
4.1.8 将方法应用于Zalando数据集108
4.2 常用优化器109
4.2.1 指数加权平均109
4.2.2 Momentum112
4.2.3 RMSProp115
4.2.4 Adam117
4.2.5 应该使用哪种优化器117
4.3 自己开发的优化器示例118
第5章 正则化123
5.1 复杂网络和过拟合123
5.2 什么是正则化127
5.3 ?p范数128
5.4 ?2正则化128
5.4.1 ?2正则化原理128
5.4.2 TensorFlow实现129
5.5 ?1正则化136
5.5.1 ?1正则化原理与TensorFlow实现137
5.5.2 权重真的趋于零吗137
5.6 Dropout140
5.7 Early Stopping143
5.8 其他方法144
第6章 指标分析145
6.1 人工水平表现和贝叶斯误差146
6.2 关于人工水平表现的故事148
6.3 MNIST中的人工水平表现149
6.4 偏差150
6.5 指标分析图151
6.6 训练集过拟合151
6.7 测试集152
6.8 如何拆分数据集153
6.9 不平衡类分布:会发生什么157
6.10 精确率、召回率和F1指标161
6.11 不同分布的数据集164
6.12 k折交叉验证170
6.13 手动指标分析示例177
第7章 超参数调优183
7.1 黑盒优化183
7.2 黑盒函数注意事项184
7.3 超参数调优问题185
7.4 黑盒问题示例186
7.5 网格搜索186
7.6 随机搜索190
7.7 粗到细优化192
7.8 贝叶斯优化195
7.8.1 Nadaraya-Watson回归195
7.8.2 高斯过程195
7.8.3 平稳过程196
7.8.4 用高斯过程预测196
7.8.5 采集函数200
7.8.6 上置信界(UCB)201
7.8.7 示例201
7.9 对数尺度采样207
7.10 使用Zalando数据集的超参数调优208
7.11 径向基函数注意事项214
第8章 卷积神经网络和循环神经网络216
8.1 卷积核和过滤器216
8.2 卷积217
8.3 卷积运算示例223
8.4 池化227
8.5 构建CNN块230
8.5.1 卷积层230
8.5.2 池化层231
8.5.3 各层的叠加231
8.5.4 CNN示例232
8.6 RNN介绍237
8.6.1 符号237
8.6.2 RNN的基本原理238
8.6.3 循环神经网络名称的由来239
8.6.4 学会统计239
第9章 研究项目244
9.1 问题描述244
9.2 数学模型246
9.3 回归问题246
9.4 数据准备250
9.5 模型训练258
第10章 从零开始进行逻辑回归261
10.1 逻辑回归的数学背景262
10.2 Python实现264
10.3 模型测试266
10.3.1 数据集准备267
10.3.2 运行测试268
10.4 结论268

教学资源推荐
作者: [西]何塞·曼努埃尔·戈麦斯-佩雷斯(Jose Manuel Gomez-Perez),[西]罗纳德·德诺(Ronald Denaux),[西]安德烈·加西亚-席尔瓦(Andres Garcia-Silva) 著
作者: (美)Ramesh Jain,Rangachar Kasturi,Brian G.Schunck
作者: [英]大卫·巴伯(David Barber) 著
作者: [英] 麦克·威尔逊(Mike Wilson)著
参考读物推荐
作者: [俄] 马克西姆·拉潘(Maxim Lapan) 著
作者: [中]郑楠(Nan Zheng),[美]皮纳基·马祖姆德(Pinaki Mazumder) 著
作者: John Shawe-Taylor, Nello Cristianini
作者: 叶强 闫维新 黎斌 编著