猜你喜欢
深度学习:基于案例理解深度神经网络

深度学习:基于案例理解深度神经网络

书籍作者:翁贝托·米凯卢奇 ISBN:9787111637103
书籍语言:简体中文 连载状态:全集
电子书格式:pdf,txt,epub,mobi,azw3 下载次数:7614
创建日期:2021-02-14 发布日期:2021-02-14
运行环境:PC/Windows/Linux/Mac/IOS/iPhone/iPad/Kindle/Android/安卓/平板
内容简介

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

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


作者简介

翁贝托?米凯卢奇(Umberto Michelucci)

目前在瑞士领先的医疗保险公司从事创新和人工智能(AI)工作。他领导与人工智能、新技术、机器学习以及大学的研究合作相关的多项战略计划。此前,他曾担任多个大型医疗保健项目的数据科学家和首席建模师,并在编程和算法设计方面拥有丰富的实践经验。他管理过商务智能和数据仓库项目,使数据驱动的解决方案能够在复杂的生产环境中实施。最近,Umberto 对神经网络进行了广泛的研究,并应用深度学习来解决与保险、客户行为(如客户流失)和传感器科学相关的一些问题。他曾在意大利、美国和德国学习理论物理,并担任研究员,还在英国接受过高等教育。他经常在会议上发表科学成果,并在同行评审的期刊上发表研究论文。
编辑推荐
适读人群 :深度学习从业者、Python工程师、AI算法工程师、从初级到高级的各级学生、教师、研究人员、其他对深度学习和Python编程感兴趣的人员

1)包含正则化、学习率衰减技术和不同的优化器的完整概述及示例;

2)介绍Dropout和超参数调优等高级技术;

3)包含构建卷积神经网络和递归神经网络模块的概述;

4)额外含有优化Python代码的技巧。

前言

为什么要写一本关于应用深度学习的书?这是我在开始撰写之前问过自己的问题。毕竟,只要在互联网上搜索一下这个主题,你就会被大量的结果所震撼。然而,我遇到的问题是,我发现这些资料只是在非常简单的数据集上实现非常基本的模型,它们只是在一遍又一遍地提供相同的问题、相同的提示和相同的技巧。如果你想学习如何对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)执行逻辑回归。
我希望你喜欢这本书,祝你学有所获!

目录

译者序
前言
审校者简介
致谢
第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

短评

本人入门了一段时间了,终于找到一本专门讲解深度神经网络的书,先看一下

2019-11-28

书读完了,内容非常不错,给五星。前半部分内容浅显易懂,很适合入门,后半部分内容比较有深度,贴合实际的实战场景。

2019-11-29

书不错,支持

2019-11-28

书籍印刷的挺好,看着舒服,我这种喜欢纸质阅读的人很喜欢。书的内容很好,这几本都是喜欢的,看了一些,没看到内容错误,推荐。

2019-11-28

深度神经网络是机器学习的重要分支,在诸多领域都取得了很大的成功。作者结合近年来神经网络的最新进展,从理论和实际应用出发,全面、系统地介绍了神经网络的基本模型、方法和技术,并将神经网络和实际应用有机地结合在一起。

2019-11-28

标签
好书,值得一读,好书,计算机,深度学习,提升,学习系列,人工智能
产品特色