汉语言文学网

人生哲理 英语文章 励志文章 人生感悟 爱情文章 经典文章 情感文章 伤感文章 心情文章 搞笑文章 非主流文章 亲情文章 读后感 观后感

《Deep Learning with Python》读后感精选

时间: 2021-02-25 11:03:40  热度: 259℃ 

点击全文阅读

《Deep Learning with Python》是一本由Francois Chollet著作,Manning Publications出版的Paperback图书,本书定价:USD 49.99,页数:350,特精心从网络上整理的一些读者的读后感,希望对大家能有帮助。

《Deep Learning with Python》精选点评:

●作者是keras的开发者,非常适合深度学习入门

●进阶牛书啊。之前的很多不太清楚的细节都讲解到了。写的非常流畅易懂,而且饱含深情(前三章))

●实操入门好书,在普及深度学习上有大功德。

●原来是keras的开发者…

●就是听基础的,其中的代码质量还是很高的。

●keras作者出书,非常适合初学者。

●深度学习交给你的不仅仅是技术,还有人是如何认识事物的思想,而这也是与哲学更为接近的一部分,也是更为有趣的地方。越来越发现自然科学与哲学之间存在的千丝万缕联系是如此有趣,这也是我喜欢机器学习、模式识别的原因,超越技术之外的思想可以泛化到对世界的认知,而对“认知”过程和机理的了解则开启了最为奇妙的认知旅程——认识自己,则认识世界。在看过《形而上学》之后,看康德会有不一样的体会,而这些书应该也会为我看《GEB》奠定很好的基础吧。

●看的第一本关于神经网络的书,写得很好很流畅。第三章往后全是干货,基于Keras给出了很多基础代码实例,但没有涉及到理论如SGD,backpropagation,适合需要快速上手的初学者。

●intro

●Keras作者新作,拿到电子版就一口气读了快两章,不得不说,真的很喜欢,作者的文笔非常简练,写的通俗易懂,而且文中经常有独到的见解,就像作者说的,其实深度学习原理并不复杂,通过讲述力图揭开深度学习神秘的面纱,使大家能够对神经网络有足够的掌握,并通过keras这一建立在TensorFlow theano cntk的高级接口实现深度学习中的各种网络,解决实际中的问题。#追加#终于完整读完了一遍,2018年读的第一本书

《Deep Learning with Python》读后感(一):future of deep learning

主要是记录下我觉得最有用的一部分: the future of deep learning

1. models as programs/ program synthesi

2. beyond backprop and differentiable layers(我觉得不太现实,gradient-free optimization通常效率不够)

另外提到end to end backprop没有利用系统的层次性因此效率不足。改进是增加模块性和层次性,引入解耦的训练模块以及同步机制,以一种层次化的方式。可以关注下deepmind gradient synthesis的工作。

3.auto-ml

4.lifelong learning & modular subroutine reuse

《Deep Learning with Python》读后感(二):8.4节 VAE生成图像 公式错误

电子版8.4节,从300页开始出现了一个明显的错误,包括代码在内。

原文及代码中 decoder 使用 z = z_mean + exp(z_log_variance) * epsilon 生成 latent space 中的一个点,再依靠这些点的分布生成图像,这实际是对原图像分布的还原过程。 高斯分布可以使用 N~(μ, σ) 来描述,但作者这里使用的是方差(variance),方差相比标准差(σ sigma)多了一个平方符号。

所以正确算法应该是 “z = z_mean + exp(z_log_variance/2) * epsilon” ,或者直接使用标准差描述“z = z_mean + exp(z_log_sigma) * epsilon”。 另外,可以参见 keras 中 VAE 的实现代码,使用的是 “z_mean + K.exp(z_log_var / 2) * epsilon”,可见作者书中确实错了。 链接 keras/examples/variational_autoencoder.py

希望对大家有用。

《Deep Learning with Python》读后感(三):特别简单优美的入门介绍

对于新手小白我来说是很好的入门介绍,从模型到应用都能略窥一二,顺带这个风格迁移真的很好玩儿,把我身处的城市画成梵高的世界,希望以后能从模仿到创新实现突破吧。

纽约风景Van Gogh Starry Night风格迁移画作

在看这本书期间我正好在做学校的大作业,有很多实用的评价模型,调参的部分都用在了大作业中,学以致用,越来越觉得深度学习是个很有意思的内容。

《Deep Learning with Python》读后感(四):精读一个月

这本书从6月11号那天老板递到我手里,到今天刚好六周,在这期间我逐字逐句地啃了这本书,并在每周的周二和周五下午给组里的其他人讲这本书,每次讲3个小时。直到五分钟前刚刚讲完最后一章,写了175页的PPT。

感想从何谈起呢?先说Keras吧,这本书的作者是Keras的作者,所以本书着重介绍Keras在deep learning中的各种用法。Keras非常容易上手,感觉用Keras写deep learning的代码就跟用Python一样,可以方便地把想到的东西用几行代码表达出来。比如今天想写个convnet+fully connected layer的model分类一下MNIST,如果用TensorFlow的话可能要前前后后写很多代码,但是用Keras的话只要不到十行就搞定了,然后就可以跑了,就跟跑“Hello World”一样简单。如果你想来个transfer learning,那也很简单,Keras有很多训练好的model,直接load一个,再在其上加一个fully connected layer,然后就能用训练好的model来训练分类自己的分类器了。很多Keras大牛肯定比我更有经验,我就不班门弄斧了。

说说我是怎么读这本书的吧,因为每周要给组里的人讲两次,基本上就是每次讲一章左右的内容。刚开始的时候,我只是把书里的要点罗列到PPT上,比如什么是overfitting,什么是tensor。到了中间卷积层那章的时候,组里的各位前辈开始对我进行了各种狂轰乱炸,比如为什么convnet比densely connected layer好?为什么前面章节的MNIST分类作者用了densely connected layer而没用convent?还比如为什么要用activation function?几种不同的activation function有啥区别?在什么情况下可以互换?还比如Stochastic Gradient Descent 有几种?各自的优缺点是什么?Dropout为什么有用?为什么Dropout之后要rescale?为什么Depth-wise convolution的效率比一般convolution高,怎么算参数?Transposed convolution为什么也叫deconvolution?背后的数学解释是什么?Sampling的时候何时用Normal distribution何时用Uniform distribution,为什么?

所有这些问题的答案在这本书中找不到,而且最要命的是,仅仅回答问题是不够的,我还必须用数学公式推理证明我的答案是正确的。比如True SGD的优缺点是1,2,3。那么我不能只罗列出这1,2,3。我还必须用公式证明这1,2,3。然后再跑几个实验,再结合实验结果说明这1,2,3。

如果组里某个人问的问题我没回答上来,那么这个问题会被记下来,留到下次会议继续讲,直到讲明白了为止。一开始我还能搞定,但是到了后面几章,完全感觉要失控了。

比如第五章的Visualizing convnet filters和Visualizing heatmaps of class activation。书中的例子短短几行代码将gradient ascent的应用罗列出来了,但是组里的前辈不满足于只知道这样做有用,他们一定要刨根问底让我解释明白为什么这样做有用:

这里,loss value为什么用mean求得?用min或max会怎样?原因是什么?以及为什么用loss和model.input求grads?然后为什么给input_img_data加上grads * step?这样做会造成什么样的结果?

再比如,第八章的Neural style transfer in Keras:

这里为什么要用gram matrix,仅仅回答gram matrix可以用来表述correlation是不够的,还要解释为什么可以表述correlation。在gram_matrix函数中的第一行为什么要permute dimensions?以及style_loss函数里面最后一行,为什么那里有个4,为什么是channels的平方?为什么是size的平方?

以及style transfer原论文中只用了两个loss值(content loss和style loss),但是书中的例子用了三个loss值(content loss,style loss,total variation loss),为什么这里多用了一个total variation loss?为什么用错位的方法计算这个loss值?

就这样一直到最后一章,为了弄清每一个可能会被问到的问题,除了读这本书,我还查阅了《Deep Learning》,《Neural Network Methods in Natural Language Processing》以及《Deep Learning from Scratch》,还有所有相关的论文上,有关的理论解释和公式推理。

这是我读的第一本Deep Learning书,作为一个初学者,我认为这本书讲述了Keras在deep learning中的各种基本应用,比如如何调参,如何构建densely connected layers,convnet layers,RNNs等等。也介绍了其他高级应用如:weight sharing和用functional API构建复杂图。

同时这本书也包括了一些有趣的内容如:visualizing filters and heatmaps,style transfer,GAN。这些内容从另外的角度阐述了一些有关梯度,损失,深度学习的应用,以及这些应用带给我们的启示。所以看到有评论说本书适合进阶也是合理的。

当然,书里也有些错误或表达不当的地方,如有评论提到variance和sigma的混淆,以及276页Text-generation loop那部分代码每次用不同temperature的时候,作者不应该只是用上一个temperature生成的text做seed。

最后,这本书非常值得一读,深度学习四大名著之一实至名归。

《Deep Learning with Python》读后感(五):一日用Keras,终生用Keras

本书自出版以来收到众多好评,因为是 Keras 作者写的书,所以全书基本围绕着 Keras 讲深度学习的各种实现,从 CNN,RNN到GAN等等,总体偏入门,但也承载着很多作者对深度学习整体性的思考。值得一提的是作者推荐用GPU 跑书中的例子,这不是开玩笑, 用CPU 跑你会感到很绝望的~

本书代码都放在作者的 [Github]上,基本与书中内容一致,当然很多内容的解释在书中会更详细一些。Keras 的文档很全,对新手也比较友好,所以很多人觉得看文档就行,没必要看书,其实书和文档各有优缺点。

书最大的优点是框架性,能提供一个“整体视角”,让读者在脑中建立一个完整的地图,知道哪些常用哪些不常用,再据此针对性地查漏补缺就比较方便了,而如果直接查文档面对海量的API往往会无所适从。然而书因为要照顾整体性,必然会抛弃一些与主旨无关的内容或细节,而这正是文档的优点,可以把所有内容都囊括进来,不需要太考虑整体可读性。而且查文档有种探宝的意味,时常不经意间发现了一个神奇的功能居然被实现了。

全书分为两大部分,第一部分是对于深度学习的全局介绍,包括其与人工智能、机器学习的关系,一些相关的基本概念如张量(tensor)、梯度下降、神经网络、反向传播算法等等。其中第三章举了三个简单的例子,分别对应的任务是二分类、多分类和回归,让读者快速了解 Keras 的基本使用方法,熟悉使用深度学习处理数据问题的典型流程。

这里插一句,对于入门这个领域一直存在着两种声音: 一种是top-down式,从实践入手,讲究先沉浸在实际的项目中,再回到理论;另一种是bottom-up式,典型的学习方式是先学习各类书和课程,从理论和数学入手,再到实践。本书作者 François Chollet 是坚定的 top-down 派,记得之前网上看过一篇文章就是讲作者和其他业界大佬撕逼哪种方式好。。。 作者在一个访谈中也提到:

对于那些在 MOOC(Udacity, Coursera, edx, MIT Opencourseware)或者书上自学机器学习/深度学习的人,你有什么建议?François Chollet:我认为学习机器学习的最好方法是:首先,清楚地理解关键算法是怎样起作用的,试着自己在 Numpy 中重新实现一个有趣的例子(Numpy 卷积网络、Numpy 多层感知器, Numpy LSTM)。熟悉实际应用,看看 Keras repo 提供的 Keras 实例。尝试着修改它们,使得它们适应新的数据,并调整模型的结构直到你得到了在你的问题上所能得到的最好结果。通过 Kaggle 竞赛获得一种做研究和在现实生活中应用数据科学的感觉。最后,你可以开始阅读理论书籍(例如 Goodfellow, Bengio 和 Courville 的深度学习书籍)和论文来深化对于你正在进行的工作的更加抽象和数学的理解。

可见作者很推崇在 kaggle 中实际应用所学到的东西,书中写到:

The only real way to learn is through practice and actual coding—that’s the philosophy of this book, and Kaggle competitions are the natural continuation of this.

书的第二部分难度进一步增加,主要是关于深度学习在计算机视觉和自然语言处理中的实际应用,主角自然是经典的卷积神经网络和循环神经网络,另外第8章浮光掠影般讲了 VAE 和 GAN,但限于篇幅其实有种意犹未尽的感觉。

接下来说一下每章中的主要内容和一些比较有意思的点。

Chapter 1

第一章主要说的就是“什么是深度学习?”。 著名的三环图,人工智能、机器学习、深度学习三者的关系:

作者提到机器学习与统计学颇有渊源,但二者的不同之处在于机器学习往往需要处理海量高维数据,而很多传统的统计分析方法只适用于小数据。另外,机器学习尤其是深度学习,是工程导向的,具有”应用倒逼理论“的特点,其理论体系还没有完整建立起来,因而需要不断地动手实验来验证各种想法。这其实与现在很多观点认为深度学习像“炼丹术” 不谋而合,结合上文中作者的top-down派,这一点也不足为奇。

李航的《统计学习方法》中提到机器学习的三大要素:模型+策略+算法。第一章的这张图是对此理念的完美体现:

模型是事先定义好的神经网络架构,深度学习的模型中一般有着上百万个的权重(weights),这些权重决定了输入数据X后模型会输出什么样的预测结果Y‘,而所谓的“学习”就是寻找合适的权重使得预测结果和真实目标尽可能接近。而说道接近就涉及到了如何度量两个值的接近程度,这就是策略要做的事情,其实就是定义合适的目标函数(损失函数)。目标函数以真实目标Y和预测结果Y'作为输入,输出一个损失值(loss score)作为反馈信号来更新权重以减少这个损失值,而具体实现这一步骤的就是算法,即上图中的优化器(optimizer),优化器的典型例子就是梯度下降以及其各种变种。

所以这张图清晰地描绘了神经网络整个的训练过程,开始时权重被初始化为一些随机值,所以其预测结果和真实目标Y相差较大,进而损失值也会很大。随着优化器不断地更新权重,使得损失值也会越来越小,最后当损失值不再减少时我们就得到了一个训练好的神经网络。

Keras的设计基本上也是按照这个思路,先定义整个网络,具体表现为加各种各样的层(layer),再指定相应的损失函数和优化器,就可以开始训练了。在另外一页作者说可以把层(layers)想象成深度学习的乐高积木,那么是时候祭出这张图了:

Chapter 2

第二章讲了一些基本概念,Keras的基本用法,张量,矩阵运算,随机梯度下降等等,有意思的是作者说根据其多年经验,对于一些数学概念使用Numpy代码片段更易被擅长编程的人所接受,所以通篇都是像下图这么解释的(这里解释的是relu激活函数),然而我觉得这明显不如数学公式直观。

Chapter 3

第三章提供了三个简单的例子以让读者快速上手Keras,分别为IMDB电影数据集的情感分析、新闻主题分类和房价预测,这三个例子对应了二分类、多分类和回归这三个机器学习中最常遇到的问题。虽然都是比较简单的例子,但麻雀虽小却也五脏俱全,书中依然对各种可能碰到的问题做了比较详尽的阐述,比如如何将数据预处理成适合神经网络的输入,如何定义神经网络层,如何标准化数据,如何处理过拟合和欠拟合等等。而在这之前,作者简要介绍了Keras。

Keras是一个基于Python的深度学习框架,最大的特点是易用性,近年来增长势头迅猛,在Kaggle上也非常流行,我印象中几个比赛前几名的Solution如果是神经网络的话基本都用了Keras。

关于 Keras 在 Kaggle 上流行的原因,作者在一篇采访中说:

在机器学习竞赛中,这些获胜者很少是从一开始就想出了最好的想法,然后简单地部署它,提交结果,最后很快忘了这回事。开发一个好的模型需要对最初的想法进行多次迭代,直到时间到了;你总是能进一步改进你的模型。最终的模型与你最初尝试解决这个问题时所设想的方案几乎没有任何共同点,因为一个事先想好的方案基本上从来不会在现实试验中存活下来。所以赢不是说你最初的理论构想有多棒,而在于你的设想有多少能通过现实的考验。你不会输给比你更聪明的人,你会输给那些比你重复更多实验的人,他们一点点精化他们的模型。如果你把 Kaggle 上的团队按照实验的次数排名,我保证你会发现试验次数排名与最后的竞争排行榜有很强的关联。Keras 被设计作为一种可快速构建许多不同模型的原型的方法,其关注的重点是尽可能减少从想法到实验结果验证之间所需的时间。Keras API 和工作流程基本上可以减少设置新实验的开销(overhead)(代码开销和认知开销)。所以使用 Keras 让你可以更快地迭代,尝试更多事物。最终,这能让你赢得比赛(或发表论文)。能够以最小的延迟将想法变成结果对实现好的研究来说是很关键的——这是 Keras 背后的核心信念之一。

Keras中包含了两种定义模型的方法:Sequential模型和Functional模型。Sequential模型是多个网络层的线性堆叠,而Functional模型则使得用户可以定义多输出模型、非循环有向模型或具有共享层的模型等复杂模型。Functional模型具有很高的灵活性,而Sequential模型可以看做其一个特例。本书前半部分都是用Sequential模型,后半部分高级内容会使用Functional模型。

Chapter 4

第四章比较理论化,介绍了机器学习的方方面面:监督学习、无监督学习、强化学习的概念,如何评估模型,特征工程,如何处理过拟合等等。这其中令我印象最深刻的点是讲到 dropout 是一种神经网络中常用的正则化方法,作者提到 Geoffrey Hinton 是受到了银行中欺诈预防的启发,大牛的脑洞就是不一样啊~ Hinton说:

我去银行的时候经常发现柜员一直在换,我询问了这么做的原因,但却没人知道。后来我想明白了,如果想要成功地进行银行欺诈往往需要内部员工的配合,这使我意识到如果对每个样本随机丢弃一部分不同的神经元,这样就能阻止“阴谋”的发生,进而减少过拟合。

这里的意思是dropout相当于对每一层的输出值添加了噪声,将一些不重要的偶然模式剔除,这等于减少了”阴谋“ 的发生。如果不剔除的话神经网络会开始记忆这些偶然模式,进而容易过拟合。

关于drouput为什么效果好,基本上没有数学上的证明,因而诞生了很多直觉上的解释(比如上文中Hinton的)。在《Hands On Machine Learning with Scikit Learn and TensorFlow》中,作者阐述了另一种有趣的解释:

如果一个公司的员工每天早上都是扔硬币决定今天去不去上班,那么这个公司会运作良好吗?这并非没有可能,这意味着任何重要的工作都会有替代者,不会只依赖于某一个人。同样员工也会学会和公司内各种不同的人合作,而不是每天面对固定的人,每个员工的能力也会得到提升。这个想法虽然不见得适用于企业管理,但却绝对适用于神经网络。在进行dropout后,一个神经元不得不与随机挑选出来的其他神经单元共同工作,而不是原先一些固定的周边神经元。这样经过几轮训练这些神经元的个体表现力大大增强,同时也减弱了神经元节点间的联合适应性,增强了泛化能力。

台大的李宏毅老师也贡献了一个直觉解释,见下图:

我们知道通常是在训练神经网络的时候使用 dropout,这样会降低神经网络的拟合能力,而在预测的时候则关闭 dropout。这就好像在练轻功的时候在脚上绑着很多重物,但是在真正和别人打的时候会把重物全拿走,这样就会一下子变得很强2333 。

Chapter 5 & 6

从第五章开始,本书进入第二部分,开始从宏观转向具体的问题。第五章和第六章谈了深度学习的两大主力:卷积神经网络和循环神经网络分别在图像和文本领域的应用。因为这里的重点是实战,所以里面谈到的原理大致有个直觉上的认识就行了(比如下面分别是是书中卷积和循环神经网络的图示),如果想要深入的话还是得找 《Deep Learning》。

Chapter 7

第七章讲了Keras的一些高级应用。其中的重点是Functional模型,其使得用户能像函数一样操作层(layer),并通过一个 tensor 来调用它。这增加了灵活性,从而一些比较复杂的网络也不再是问题。比如下图中的问答模型是一个典型的多输入模型:

或者像构建Inception这样的有向无环图:

本章最后作者提到了一个集成方法,用树模型和深度神经网络做Ensemble很多时候能取得不错的效果。他在2014年Kaggle上的Higgs Boson比赛中获得了第4名,使用的就是多种树模型和深度神经网络的融合。Ensemble的真谛在于模型多样性,几个准确率最高但多样性不足的模型做Ensemble可能还不如用几个多样性高但准确率低一点的模型。

于是,我顺便翻到了作者的 Kaggle账号。

Chapter 8

第8章无疑是书中最吸引人的一章,作者教你使用Keras实现一些比较神奇的功能,如文本生成,艺术风格转换等等。我按照这些内容做了两个例子,顺便吐槽下豆瓣为什么不能插代码。。

《运用深度学习进行文本生成》

《运用深度学习进行艺术风格转换》

============================ 2019.5.4 Update ============================

Chapter 9

先上作者的一个演讲视频,讲的内容和本书第 9 章有很多类似的地方。https://www.bilibili.com/video/av30762338

最后一章作为完结篇,作者谈的东西都比较形而上,因而我写得也会比较形而上。。

深度学习直接带动了人工智能的第三次浪潮,但很多业内人士始终对此持谨慎态度,认为不该进行过度解读。因为深度学习的原理,说白了 (如书中所述),就是一堆向量从输入空间到目标空间的几何变换,仅此而已。下图来自于李宏毅老师的 PPT,机器学习大致就是寻找一个函数,输入一些数字 (如图片、声音、文字等都可以转换成一堆数字) 后,它能输出结果,而这个函数中就包含着众多几何变换。

既然基本原理如此简单,那为什么很多人对现在的人工智能发展感到恐慌?作者提到了比较关键的一点,那就是我们人类经常会不由自主地拟人化客体,比如在一块石头上画个笑脸,这块石头就变为了”乐观开朗“的石头; 气候问题严重,就认为地球需要被保护 (其实是人类自己需要保护自己,几亿年前地球的环境远比现在恶劣却依然延续了下来)。如果说函数是输入值到输出值的映射,那么这种拟人化也就是行为到心理的映射。当我们训练出一个可以正确识别猫的模型,我们倾向于认为这个模型”理解“了什么是猫。然而事实是深度学习模型根本不理解什么是猫什么是狗 (至少不是以人类可以理解的方式) ,近几年大火的 GAN 就显示出模型是多么地容易被愚弄,可见模型对于事物本身并没有本质上的认识。要想模型具有人类般的 extreme generalization (书中语) 能力,还有很长的路要走。

然而就我看来,人们感到恐慌的另一个原因,是在于不了解,因为恐惧的根源在于未知。《经济学人》这篇文章中提到,近年来业内业外对人工智能的态度两极分化。不搞人工智能的人通常对近年来的该领域的进展感到惊异,仿佛一夜之间就要全面取代人类了。而搞人工智能的人会觉得:“什么嘛,这不就是找一个损失函数,不断优化,找到最优参数得出结果么,这其中根本不存在思维、推理、认知,因而离真正的智能还差得远了”。 认为 AI 具有人的思维,能推理布局,能天神下凡,能拯救世界,本书作者直言这是 “pure fantasy” ,是对智能和技术的双重误读。

写到这里看来作者是代入了一些主观情绪在里面了,作为一名“严谨”的科研技术人员,看见外界各路传媒,畅销书整天天花乱坠般宣扬着 AI 会不断进化,统治全人类等等,难免会嗤之以鼻哈哈。不过人们的担忧其实也不无道理,比如像 AlphaGo 知道自己在下围棋吗? 我的看法是不知道,它不过是为了达到强化学习里设定的最大奖励罢了,这与人类认知里的围棋文化实在是大相径庭。而这才是最可怕的,我们人类所看重的东西: 善良、专一、共情、自由、平等、民主、金钱、身份、权力等等,AI 眼里都没有这些概念,因而它们所做的决策可能不会关注这些东西。纵使现在的人工智能没有作者所说的推理和抽象能力,其依然可能无意识下误伤友军。

最后吐槽一句,现在 tensorflow 2.0 版本出来后全面 keras 化,给人的感觉是不知道是在用 tf 还是 keras 了,不知这究竟是福还是祸。。。

/

猜你喜欢

推荐经典文章