• 问答
  • 技术
  • 实践
  • 资源
研一,在学机器学习和深度学习,为什么感觉越学越不会,怎么解决这个问题?
技术讨论

(比如说看了prml前几章感觉什么也没学到)


研一刚入学,一定要“小步慢跑”,学一个算法就一定要学透(公式推导+代码编写),不要今天看一下SVM、明天瞅一眼MLP。写代码能够学到东西,跑代码是学不到任何东西的。从基本的算法开始,比如KNN,花上一周时间按照类似下面的流程进行实验:
(0)公式推理
(1)筛选数据
(2)模型搭建(编写代码)
(3)指标计算
(4)调参分析(不断优化)
(5)重新理解公式推理按照上述步骤学完第一个算法以后,再以相同的过程学习第二个算法。


对不同算法重复相同的实验流程,能让自己对模式识别那本书理解更深刻。我认为从事深度学习最忌讳的就是“急”,python还没学好,就去学pytorch;pytorch还没学好,就去跑开源项目。编程基础和理论基础还没打好,就去看论文跑开源代码,时间都浪费在环境配置和版本兼容调试上面了。

美其名曰项目驱动学习,实际上就是浮土筑高台。研一基础不牢靠,研二很难静下心来弥补缺失的知识。然后就有趣了,研一整年没能学到扎实的技能,导致二年级做实验的时候举步维艰。在这种焦虑的情况下只能继续听从“项目驱动学习”这种策略,害怕组会、害怕导师催你。(我并非反对项目驱动学习,我反对的是没有ML或DL基础的情况下就搞项目)。

相反的,如果研一的基础非常扎实,天天写代码夯实实践基础,天天推导公式夯实理论基础。研二的时候就能水到渠成,自然就能把论文实验做的很好,磨刀不误砍柴工。一步急,步步急,最后就只会跑别人代码调调参数,关掉github以后连一个基本的CNN分类pipeline都写不出来(数据清洗+数据读取+网络设计+损失选择+模型训练+指标计算+调优)。粗略的读一读理论证明,然后找个开源代码跑一下,我认为这种方式真的学不好模式识别那门课。补充:


关于学习经历

一开始,我每天固定两个小时学Python,两个小时看吴大佬的有题目的视频教程,两个小时自己实现课后习题。这期间感觉自己进步很大,但是总觉得哪里出了问题,却又说不出来。两个多月以后,课程完结,开始学习tensorflow,看书敲代码,出现问题就百度。

虽然自己能实现类似resnet这种基础网络,但是自我感觉没有之前那么好了,好像越学越糊涂。再后来,我开始看论文了,找那些有开源实现的论文,看一篇论文,学习一篇代码。在这样稳扎稳打的步伐下,我感觉自己又进入了快速上升期。既然能搞懂别人的论文了,能不能自己来一篇?于是我开始去怎么提出新东西,进而意识到我应该先对自己领域现存方法有所了解,知道它们的优点和不足。


按照这种想法,我开始有意识的泛读自己领域的顶会论文,了解最流行的方法。我意识到,最简单的创新实际上就是把别的领域的东西搬过来用,所以我从nlp找了点思想用到对抗上(此时我并不知道已经有人这么做了,毕竟自己掌握的文献还不够)。不管怎么说,我算是有自己的成果了。这就足够了吗?不是的。我越发感觉到自己的不足,深度学习仅仅在cv领域就有各个子分支,每个分支就算整个研究生生涯都不一定能吃透。更要命的是,我发现我一直都是在写算法,从没考虑过如何部署模型,也就是整天纸上谈兵。。。

所以我最近开始学网络知识,学习什么是客户机服务器模式,学习flask,想把自己的模型部署到web服务器上。总得来说,我没有采纳我当初所看见的建议,那些建议有的列出来一系列书单,有的列出来一系列课程,对我个人来说是不太可行的计划我一般都不去做。我觉得应该从自己想解决的问题入手,旧问题的解决往往伴随新问题的诞生。我最开始只是想知道啥玩意是反向传播,后来却自己搞出一篇论文,是那些困扰我的问题激励着我进一步研究,每次解决问题都会有那种喜悦的心理,这是我进步的源泉。



补充:关于pytorch

曾经写过一些pytorch的日志,包含数据采样、增强、模型搭建等等:

file

来源:本人的【人工智能与深度学习研究社】
https://zhuanlan.zhihu.com/c_1176057805353766912

  • 1
  • 0
  • 1463
收藏
暂无评论