[返回和气生财首页]·[所有跟帖]·[ 回复本帖 ] ·[热门原创] ·[繁體閱讀]·[坛主管理]

J,深度学习从零开始(1)— 如何学习深度学习?

送交者: 桂花酒[♂★★★和气生财★★★♂] 于 2020-04-14 3:06 已读 57 次  

桂花酒的个人频道

+关注

回答: 深度学习(Deep Learning)从零基础达到入门级水平 由 桂花酒 于 2020-04-14 2:49

深度学习从零开始(1)— 如何学习深度学习?

原创liuzard最后发布于2019-02-17 15:35:04阅读数 428

收藏发布于2019-02-17 15:35:04
分类专栏:深度学习人工智能卷积神经Python
版权声明:本文为博主原创文章,遵循 CC 4.0 BY-SA 版权协议,转载请附上原文出处链接和本声明。本文链接:https://blog.csdn.net/u012995500/article/details/87528681
展开

首先说我个人的结论:

(1)假如是为了找工作,或者短时间内解决问题,我建议最好的入门书是:《Python 深度学习》和《Scikit-Learn与TensorFlow机器学习实用指南(影印版)》和《TensorFlow:实战Google深度学习框架(第2版)》,三本书都是该领域的经典,而且难得的是非常易读,看完就可以利用经典的机器学习和深度学习算法解决常见的问题。

(2)假如想长期学习,深入理解深度学习的原理,并想进一步研究的话。我的建议是自己从零开始不借助任何框架,写一个自己的卷积神经网络。此后再理论和实践两把抓。不要一上来就啃艰深的理论,也不要一直用深度学习的框架,做一个“调包侠”。

转眼间,学习深度学习也已经两年了。也用一些框架写了不少算法,做过不少实践,出了一些论文。但是回顾学习历程,我总觉两脚不着地,不踏实。这种不踏实并没有因为框架用得熟练,项目做多了而逐渐消散,反而经常因为触碰到一些比较深的问题而感到不安。记得2017年,在网上学习了卷积自编码器,自己想将一维卷积自编码器用在时域信号的去噪处理中。在一维卷积自编码器中,要用到一个叫做反卷积的方法,我当时所用的Tensorflow 最新版本还没有一维反卷积这个方法。于是我便自己尝试这个方法,但是由于做“调包侠”久了,写了一个星期的代码还是bug不断,不得已就放弃了。

除了这种自己造轮子的场景,还有用轮子也出现不少问题。我们知道,无论在机器学习还是深度学习,最为关键的就是调参。人言“三分算法,七分调参”不是虚言。但是要练好这调参神功却是不易,学习率要如何设置?要采用什么参数更新方法(SGD,AdaGrad,Adam...)? Batch Normalization 要不要用?选用那种正则化方法?这些都不是看Tensorflow 文档能得到答案的。因此,要想砖搬得好,我意识到看那些光讲框架的书,还有网上的一些实践案例(手写字体识别,风格迁移,图像生成...)是远远不够的。表面上看,看完这些教程和案例,你就可以上手做很多实践。能快速上手当然是好事,但是就像我开头说的那边,这样学到的深度学习充其量不过是“调包侠”而已,要说入门深度学习,还差得甚远。

问题出在哪呢?很显然,是对深度学习的理论理解的不够。理论当然很艰难,但是“欲诣扶桑,非舟莫适”,没有理论的加持,在深度学习这条路上不可能走得远。所以,我们要开始啃那些艰深的大块头了吗?周志华的西瓜书,深度学习花书我都怀着一百二十分的热情买来,但是在几个月之后就放在书架里吃灰了。这当然是我的毅力不济,但是既然已经如此,除了放弃之外,还有没有办法入深度学习这个门呢?

要想彻底理解一个东西,最好的办法就是自己从零开始把它做出来。而在理论的学习过程中,恰恰缺失的是这个做的过程。由于我主要研究卷积神经网络,所以后来我一直在网上找各种博客,学习如何从零开始写一个卷积神经网络。但是在学习的过程中我发现,虽然大部分博客都实现了这个目的,但是解释确比较简略,对于我这种还没有入门的人来说,看得非常痛苦。比如深度学习中最重要的反向传播算法,大部分博客都只是给一个结果,至于代码后面的原理,却很少能讲清楚的。直到后来我看到一本书《深度学习入门——基于Python 的理论与实现》之后,我才有一种恍然大悟的感觉,算是对探索深入学习的本质有了更多的信心。

因此,我把这个学习的过程记录下来,这个系列博客大部分是根据《深度学习入门——基于Python 的理论与实现》而来,当然也会补充我自己的一些心得。假如你想深度地理解深度学习,而不想仅限于做一个“调包侠”,那么这个系列博客应该是对你有所帮助的。当然这个系列博客是我自己学习历程的一个记录,它是一个学习的开始,假如你对深度学习好奇,想理解深度学习的本质,乃至于你想更好地用好深度学习这个工具,我邀请你一同加入到深度学习的原理学习中来。写这篇博客的目的也是为了和同道者交流,希望各位朋友不吝赐教。假如它对你有所启发的话,将是我的一大快乐。

在这个系列博客中,第一步的目标就是利用Python不借助任何深度学习框架,写出一个卷积神经网络(LeNet-5)。在第一步的学习过程中,把所涉及的知识点都理解透彻并用代码加以实现——网络建立、前向传播、反向传播、梯度下降、模型训练、模型测试等等。

在完成第一步的学习之后,相信对深度学习的一系列问题有了直觉上的理解,并且知道深度学习的各部分的实现。在第二步中,我们可以放心地使用深度学习框架,因为我们已经知道了深度学习框架的内部原理。所以,在第二步中,我们会使用深度学习框架实践一些更为复杂的案例(图像识别、语音识别、翻译等),并且像论文一样,进行一定深度地探讨。

在第二步进行的同时,为了实践和理论两者不偏废,我们也会进行理论的学习,这部分的学习包括大部分深度学习所涉及的数学知识——损失函数、链式求导、最大似然估计、降维、流形学习等等。我相信理论的学习和实践是相互助益的。同时,实践和理论的学习也是无止境的,我希望第二步和第三步的学习可以一直进行下去,这意味着我希望这个系列博客可以一直更新下去,也希望与诸位有志于学习深度学习的朋友共勉。

当然,以上的话是写给想长期学习深度学习的朋友看的。假如想短期内应用深度学习解决问题的话,上述的方法就不甚妥当了。我觉得假如想短期内实现一些算法,用在自己的项目的话,最好的入门书是入门书是《TensorFlow:实战Google深度学习框架(第2版)》和《Scikit-Learn与TensorFlow机器学习实用指南》,前者看完基本上能用Tensorflow 写基本的深度学习模型,后者则兼顾机器学习和深度学习,我认为它是机器学习领域内最好的一本入门书,有很强的实践性,同时也兼顾了一些基本的理论。不管学习深浅,我觉得入门是非常重要的,一本好的入门书不仅把知识点讲到,而且还给读者带来极大的热情,我认为上面两本书都做到了。我也很感谢书的作者,在我学习备受挫折的时候给我了很多引导和信心,让我现在可以充满热情继续学习下去。

在接下来的三章中,我会用Python语言从零开始构建自己的卷积神经网络,不借助任何深度学习库。在编写完成之后,可以实现一个深度学习算法的基本要素,从而对原理有一个深入的认识。在这三章的介绍中,我们先从最初的感知机开始,再到普通的三层神经网络,最后到卷积神经网络。在这个过程中,我也将对深度学习中最关键的激活函数、梯度下降、反向传播、损失函数等一一介绍并实现。在这部分中,我力求简易,不跳过任何步骤,做到有基本的高等数学知识就能轻松读懂。

民国大师马一浮在一次书院的讲记中曾说过:“天下之道,常变而已矣。唯知常而后能应变,语变乃所以显常。” 我以为,无论是深度学习还是其他领域,理论即是常,实践即是变。让我们一起学常,知常而应变!
————————————————
版权声明:本文为CSDN博主「liuzard」的原创文章,遵循CC 4.0 BY-SA 版权协议,转载请附上原文出处链接及本声明。
原文链接:https://blog.csdn.net/u012995500/java/article/details/87528681
喜欢桂花酒朋友的这个贴子的话, 请点这里投票,“赞”助支持!

内容来自网友分享,若违规或者侵犯您的权益,请联系我们

所有跟帖:   ( 主贴楼主有权删除不文明回复,拉黑不受欢迎的用户 )


用户名: 密码: [--注册ID--]

标 题:

粗体 斜体 下划线 居中 插入图片插入图片 插入Flash插入Flash动画


     图片上传  Youtube代码器  预览辅助

打开微信,扫一扫[Scan QR Code]
进入内容页点击屏幕右上分享按钮

楼主前期社区热帖:

>>>>查看更多楼主社区动态...



[ 留园条例 ] [ 广告服务 ] [ 联系我们 ] [ 个人帐户 ] [ 创建您的定制新论坛频道 ] [ Contact us ]