首先非常感谢你购买《概率深度学习:使用 Python、Keras和 TensorFlow Probability》,希望它能帮助你更深入地了解深度学习,同时也希望你能从中得到启发,把概率深度学习方法很好地应用到工作中。
我们三位作者都是研究统计学出身,于2014年一起开始了深度学习之旅。令人兴奋的是,深度学习至今仍是我们职业生涯的中心。深度学习有着广泛的应用,但我们对深度学习模型与统计学概率方法相结合而得到的强大性能特别关注和着迷。根据我们的经验,对概率深度学习潜力的深刻理解既需要掌握概率深度学习方法的基本思想和基本原理,又需要具备一定的实践经验。为此,《概率深度学习:使用 Python、Keras和 TensorFlow Probability》试图在两者之间找到平衡。
《概率深度学习:使用 Python、Keras和 TensorFlow Probability》在讨论具体方法之前,通常会给出清晰的思路和典型应用实例,以便于读者理解。同时,利用随附的Jupyter notebooks程序文件,你也可以亲自动手编程实现《概率深度学习:使用 Python、Keras和 TensorFlow Probability》所讨论的所有方法。衷心希望你能从《概率深度学习:使用 Python、Keras和 TensorFlow Probability》中学到尽可能多的知识,如同我们写这本书时学到的那样。请愉快阅读《概率深度学习:使用 Python、Keras和 TensorFlow Probability》,并始终保持好奇心!
关 于 本 书
通过《概率深度学习:使用 Python、Keras和 TensorFlow Probability》,我们希望将深度学习的基础概率原理介绍给更广泛的读者。实质上,在深度学习中,几乎所有的神经网络都是概率模型。
这其中有两个强大的概率原理,它们分别是最大似然和贝叶斯。其中最大似然支配着所有传统的深度学习方法。将网络理解为采用最大似然原理训练得到的概率模型,可以帮助提高网络性能,就像谷歌从WaveNet提升到WaveNet++时所做的那样,也可以用来生成令人惊叹的应用程序,就像OpenAI在Glow(Glow是一个生成逼真人脸图像的强大网络)中所做的那样。当网络需要表达“我不确定”时,贝叶斯方法就会发挥作用。奇怪的是,传统的神经网络无法做到这一点。《概率深度学习:使用 Python、Keras和 TensorFlow Probability》的副标题是“使用Python、Keras和TensorFlow Probability”,它反映了这样一个事实:你应该亲自动手编写一些代码。
《概率深度学习:使用 Python、Keras和 TensorFlow Probability》读者对象
《概率深度学习:使用 Python、Keras和 TensorFlow Probability》是为那些想要了解深度学习的基本概率原理的人编写的。理想情况下,你最好具有一些深度学习或机器学习方面的基础,不会抵触少许的数学和Python代码。我们不会省去必要的数学推导,同时在代码中也会包含示例。我们相信将数学与代码相结合,更能加深你的理解。
《概率深度学习:使用 Python、Keras和 TensorFlow Probability》的组织方式:路线图
《概率深度学习:使用 Python、Keras和 TensorFlow Probability》分为三部分,共8章。第Ⅰ部分解释传统的深度学习(DL)架构以及如何训练神经网络。
l 第1章——奠定基础,引入概率深度学习。
l 第2章——讨论网络结构,介绍全连接神经网络(fcNN),这是一种通用网络,还有卷积神经网络(CNN),这是图像处理的理想选择。
l 第3章——展示了神经网络如何设法拟合数百万个参数。为了便于理解,我们在最简单的线性回归网络上展示梯度下降和反向传播。
第Ⅱ部分重点讨论概率神经网络模型。与第Ⅲ部分相反,我们专注于最大似然方法,它们是所有传统深度学习的背后基础。
l 第4章——探讨最大似然原理,它是机器学习和深度学习的背后基础。该章中将此原理应用于分类和简单回归问题。
l 第5章——介绍TFP概率编程工具箱,一个构建深度概率模型的框架。我们将其用于稍微复杂的回归问题,如计数数据预测问题。
l 第6章——更复杂的回归模型处理。最后,解释如何使用概率模型来掌握复杂分布,比如人脸图像描述。
第Ⅲ部分介绍贝叶斯神经网络。贝叶斯神经网络可对不确定性进行处理。
l 第7章——激发贝叶斯深度学习需求,解释其基本原理。通过线性回归简单示例解释贝叶斯原理。
l 第8章——说明如何构建贝叶斯神经网络。该章讨论两种方法,分别是蒙特卡罗(MC)dropout和变分推理。
如果你具有深度学习方面的经验,可以跳过第Ⅰ部分。此外,第Ⅱ部分的第6章,从第6.3节开始介绍标准化流。这些内容与第Ⅲ部分的相关性不大,对于理解第Ⅲ部分来说,不必阅读此部分内容。第6.3.5节中的数学运算较为繁杂,所以如果不擅长数学运算,可以跳过它。第8.2.1和8.2.2节也存在同样的情况。
关于代码
《概率深度学习:使用 Python、Keras和 TensorFlow Probability》包含许多源代码示例,它们主要以代码的形式单独出现或以代码加注释的形式共同出现。但无论哪种情况,源代码都以等宽体字体格式显示,以与普通文本进行区分。
代码示例以Jupyter notebooks文件的形式给出。这些notebooks文件包括附加的注释,大多数文件还包括一些应该完成的小练习,以便更好地理解《概率深度学习:使用 Python、Keras和 TensorFlow Probability》中介绍的概念。你可以在GitHub网站https://github.com/ tensorchiefs/dl_book/目录中找到所有相关代码;也可以直接访问网站目录https://tensorchiefs.github.io/dl_book/,在其中找到所有notebooks文件的链接;或扫描《概率深度学习:使用 Python、Keras和 TensorFlow Probability》封底的二维码,下载所有notebooks文件。notebooks文件按章节进行编号,例如nb_ch08_02指的是第8章中的第2个notebook文件。
除了nb_06_05,《概率深度学习:使用 Python、Keras和 TensorFlow Probability》中的所有示例均使用TensorFlow v2.1和TensorFlow Probability v0.8进行调试。描述计算图的notebook文件nb_ch03_03和nb_ch03_04在TensorFlow v1中更容易理解。对于这些notebooks文件,都提供了两个TensorFlow版本。由于nb_06_05文件中所需权重仅能由TensorFlow v1版本提供,因此nb_06_05仅适用于TensorFlow v1。
你可以在Google的Colab中或本地直接执行这些notebooks文件。Colab很方便,不必安装,可以直接使用浏览器运行。只需要单击一个链接,便可以在云中调试运行相关代码。强烈建议你选择这种方式调试代码。
TensorFlow仍处于快速发展中,对于几年后新的TensorFlow版本,我们无法保证现在提供的代码还能运行。为此,我们提供了一个Docker容器,请参见网站https://github.com oduerr/dl_book_docker/。可以使用它来执行除了nb_06_05,以及TensorFlow1.0版本的nb_ch03_03和nb_ch03_04的所有notebooks文件。如果想在本地执行notebooks文件,则此Docker容器是最佳选择。