[IT技术] 准研一,导师让学习pytroch,之前没接触过机器学习,是直接学pytorch还是先学机器学习?

[复制链接]
eee1573 发表于 2023-10-4 20:03:55|来自:北京 | 显示全部楼层 |阅读模式
准研一,导师让学习pytroch,之前没接触过机器学习,是直接学pytorch还是先学机器学习?
全部回复5 显示全部楼层
lhczyc 发表于 2023-10-4 20:04:23|来自:北京 | 显示全部楼层
这是我给研究生新生二年级之前的学习计划:
1)Python,numpy,Pandas
2) 机器学习,优化理论, scikit-learm
3)pytorch
4)image classification/resnet/vit/efficientnet
5)object detection/Faster RCNN/yolov3/v5/Detr
6)Transformer/bert/T5/Bark
7)HuggingFace生态
8)NLP+HuggingFace
只有在研一面扩得足够广,实验做得足够多,高年级才可能有想法。
sevil 发表于 2023-10-4 20:04:37|来自:北京 | 显示全部楼层
只问一个,想读博么?如果要读博,建议别看什么机器学习西瓜书了,研三上申博士,研二结束至少得发个两篇吧,论文送审也很长时间的,研一基本就得有思路开始准备做了。
说实话,计算机这个东西,大家都开源的,而且时代飞速发展,和基础学科不一样,那些东西你十年二十年都不会变的,学了就学了,而且你也不会让一个数学系研究生从研一开始学高数不是。在计算机领域,不跟着最前沿的东西看,你从基础学,追不上最前沿的,那谈何发论文?去年clip刚出的时候,我们组里想跟进做点工作的,结果上海封市了,停了两个月,clip已经不行了,dalle2出了,又过了两个月,chatgpt也出了,这些年ai界的成果是以月计的,甚至前年vit刚出的时候,跟进都是按天出的,你说你还从头学机器学习,哪里这么多时间给你补基础?
且不说深度学习基本都来源的,你拿了模型之后,搭积木的结构改起来并不吃力,也不算深度学习现在基本用的都是transformer的结构,你之前的cnn,lstm读来读去其实能用到现在的东西并不多,更别说机器学习里的算法都是sklearn集成的,一行代码就解决了,你在那儿吭哧吭哧搞半天效果还不如别人调库。
计算机能不停发展的原因就是一个理念,不要重复造轮子,所以前人不断把东西集成简化,就是希望后人可以在他们的肩膀上走更远,你在哪儿说不行,我就要自己造轮子,我还要连路也一起修了。那我再说一句,你造完轮子过了几天,真的还记得轮子怎么造嘛?
我不知道为啥这么多老师都让学生从基础学起来,我现在研二,研一的时候上学期在学运筹学,后来里面的数学有点过于难了,琢磨了半年没想到啥写论文的idea,下学期转学深度学习,两个月啃西瓜书,把所有的公式手推了一遍,可以自己算svm,两个月学深度学习基础,发现花书上的代码都work不了,各种版本问题导致的bug,然后自己开始github找基础模型自己写,从头搭了resnet,vgg,googlenet等等一堆基础模型,但是有什么用?等我研二真的开始做科研了,准确的说是研二组里来了个比较热心的博士,会主动教学怎么做科研之后,我才发现去年一年干的事都是在浪费时间,研一新入学的学弟一个暑假看得已经比我前面了,他们聊的都是什么st,扩散模型,什么多模态任务,我就觉得太可惜了,要是早一年知道,我现在这时候应该已经写了三四篇论文了,而不是和现在一样,刚刚投完一篇第二篇刚开始写。
当然,如果你的目标只是毕业找个工作,对论文的要求只要能毕业,研二研三准备找实习的,我觉得依旧不用看,研一好好玩一玩,享受一下剩下不多的学生时光,多认识一些异性谈谈恋爱就好了,毕竟毕业工作之后,一个计算机的程序员,可没什么空闲时间,也没什么机会接触学校这么多异性了
foxfly 发表于 2023-10-4 20:04:57|来自:北京 | 显示全部楼层
pytorch是框架,但你应该知道一些基本的机器学习知识。
~修改线~
第一步,看吴恩达机器学习课程,b站就有,注意要写课后作业,但是有一些需要用到TensorFlow1.x版本,要是安装不了就算了(其实很多导师都会推荐这门课程,毕竟省心)。补充:其实吴恩达老师每一节课程讲的都很少,要是有同学有这种感觉,建议这里第一步和第二步一起进行,也就是看完课程,去看西瓜书对应的部分。另外,刚刚开始的梯度下降,svm,pca等一定要手动推导。如果看不惯英语,听说李宏毅老师的课程也不错,不过我没有听过,所以说大家按喜好选择就好。
第二步,看西瓜书(机器学习,清华出版社),了解一些基本的数学原理,可以配合b站的白板推导系列。补充:这步是为了进一步了解数学推导,如果各位觉得时间很长,那么可以不必要长时间停在这部分,直接下部分就行。
第三步,看李沐的动手学深度学习,这里教你如何使用pytorch搭建经典论文模型。pytorch一定要直接上手,写十来个小模型就基本上熟了,你要是像c++,Python一样,学完语法再一个个写,直接劝退了。补充:有朋友觉得这个课程很难,也有朋友觉得这个适合自己,所以说,看自己能不能接受,其他的pytorch课程也很好,但是我还是建议直接啃代码,一步步调试自己才能理解。
第四步,按照研究方向,看对应的综述文章。这主要是为了了解这个方向有哪些方法,需要一个个都看论文,代码就看三个左右就可以了。注意:这里说代码尽量找时间点比较近的,因为太久远的代码容易有环境问题。
第五步,看完综述,直接就找最新的顶会文章,开始复现。选择能复现的,性能最好的模型作为你的baseline,最后直接在上面改就行了。(复现结果就行,要是无代码复现,那么太难了,建议作为进阶玩法。)
第六步,看大量的论文,无论什么方向。你先看文章的摘要,你觉得论文提出的创新能看得懂,那就继续看下去,不然直接pass。反复,直到找到你看起来很猛的文章,然后把该篇文章的方法尝试放到baseline里面,观察性能变化,可视化结果,看看能不能放到这个模型中,并且随时进行调整。
第七步,要是性能有提升,那就将他确立为你的创新点。没有提升就直接pass。
第八步,等你攒够两个创新点,直接找老师,看看能不能发一篇中文期刊。
第九步,要是同意,那就直接走一遍论文从写作到终稿到修改到拒稿到修改到中稿的过程...
不同意,那就再找创新点,重复以上步骤。
新生,一定要先把步骤走一遍,别说发顶会顶刊,一篇北大核心,老师同意就发。哪怕这个文章写完自己看了恶心两个月,精神萎靡,食欲不振,怀疑人生,胡言乱语,无欲无求...那也无妨。
对于一个新手小白而言,知道怎么找idea,做实验,水论文(×),写论文(✓),才是最重要的,文章投那里不重要,因为只要你以最快速度做一遍,之后你发paper的速度会越来越快,等你熟了,一个月水一篇(×)。
只要能发,什么问题都不是问题 。

~分割线~
评论区也有朋友指出我得这个学习路线不大好,那么我也统一说一下。这个是我没有太多指导下,自己走的一条路径,结果证明,研一下基本上能出一篇普通文章,要是你的老师足够厉害,那么更好的期刊也能发,毕竟好期刊基本上和老师关系比较大,和学生的关系不是特别特别大(大佬别喷,我个人认为,没有老师指导很难投好期刊,但并不是所有人哦!)。
对大家合不合适我不好说,但是你要是没人指导,想先学的啥东西垫着,这算是一个参考,如果不合适,那就换另外一个方法就是了。
如果能帮到大家,这篇回答就算有价值了(手动狗头)。
macroblue 发表于 2023-10-4 20:05:06|来自:北京 | 显示全部楼层
建议直接上手线性回归,逻辑回归,然后多层神经网络,搞懂这三个的理论,用pytorch实现一遍,基本上你能完成我说的这几个,就可以勉强开始你的研究生学习了。
起步阶段不建议你看各种书,如果非要看,就看李沐的动手深度学习吧。至于理论可以在看我说的上面三个章节的部分结合西瓜书和南瓜书来了看理论。其他的都不太推荐,主要是一般的书太厚,内容太多,短时间你根本看不了,让人望而止步。完成了入门三板斧,你在去拓展理论和复现经典的论文,慢慢就能入门了。
鉴于收藏的人这么多,我在补充一下,为啥只建议看线性回归,逻辑回归,和多层神经络。因为他们三个是连续递进的关系,线性回归会让你明白神经元之间的的权重和连接是怎么回事,逻辑回归让你知道激活函数是如何把线性结果进行非线性变换的,多层神经网络的目的就是让你知道怎么利用链式法则去做反向传播来实现对线性层的权重进行更新的。所以如果这三个你学会了,后面大多数的的神经网络基本上都按照这样的方式来实现优化过程的,在大多数情况下你你只需要设计前向传播就可以了,因为反向传播的计算过程,pytorch等这些框架都帮你自动实现了。对于学习深度学习来说,反向传播的计算是非常繁杂的,不利于人的脑子去理解和计算,但是前向传播是非常符合我们的直觉思维的。所以你只需要学会我说的前面的三个章节的内容,基本上就可以支持你去理解大多数网络的前向计算了,至于反向计算,多数情况下如果你只是设计或者使用网络,你是不需要太深究的。除非你是要做底层的算法效率优化,提高运算速度和减少内存消耗这些,才会去研究反向传播的公式怎么设计或者推导能使计算效率更高。对于刚开始入门的我们来说,看懂一种方法,最重要的是理解他的前向传播过程,每一层和整体架构的逻辑。而不是去深究它的具体公式的计算过程。因为在论文里看起来非常复杂的公式,如果理解了其实就是一句简单的话就能说清楚的,转换为pytorch的代码或许就只有两三行。最重要的其实还是理解网络的架构。
这三部分对于数学的要求是比较低的,基本上就是只要求你明白什么是偏导数就可以了,只要你学过多元函数微积分就能看懂全部的计算过程,主要就是要用到多元函数求偏导数,实现梯度下降,这些都不难因为其实在初中或者高中的时候我们就学过了,只是那个时候的知识太片面,加上老师根本没跟你讲学的数学用来干啥,就比如初高中的时候,天天二次函数求极大值,极小值,其实这就是梯度下降的核心知识,只不过以前老师根本没告诉过你,它能干啥,所以推广一下就可以成为这里要用的东西了。当然因为通常写程序的时候,都是用矩阵的思维,所以最好你能懂点矩阵的计算。对上完大一的所有理工类的学生来说,基本上就具备看懂这三个内容的数学基础了。
整本整本的看书是完全不推荐的,看书基本上来不及出论文,因为书上的内容太多了,很多写书的人为了系统性所以给书堆了很多内容,但是为了简洁性,只告诉了你开头和结尾,没有中间的细节,比如只告诉了你前向计算过程,然后就给你最优化后的参数求解结果公式,对于初入门的我们看起来就云里雾里的,像看天书一样,因为心里都不知道中间的过程就直接到结果了,因为从小到大我们学习数学都是老师在黑板上一步一步的给我们演算计算的过程,教会我们怎么计算,但是并没有先教我们,数学的逻辑,而是只教了计算,所以我们看到机器学习的公式时多半想的都是它是怎么计算出来的。而不是去想他的整体逻辑,它解决的是什么问题。所以看书的时候很费劲。
所以为了能出一个自己的论文,最好的方法就是理解了深度学习的整体实现逻辑,之后里针对自己的研究方向去学习基线模型了,所谓基线模型就是你要研究的方向里的那几个经典方法,因为如果后面你有新想法,你就需要跟这几个方法做对比嘛,一般来说你看完2,3个基线模型你就会有新想法了,然后就是去实现你的想法与基线模型做对比嘛,如果有点点提高就能发论文了嘛。通常基线模型都是顶会上别人论文也会经常用来做对比的那几个方法,所以很好找,也会有各种框架下实现的源码,可以先大概看看基础模型的前向计算过程和整体架构,如果从论文直接看看不懂,就直接看源码吧,看看它的数据是怎么流动的就明白是怎么回事了,在回来结合论文就能大概懂了,然后在看看想关的博客上的一些解读,就能弄得比较明白啦。
虽然我很赞成 不谋全局者,不足以谋一域。但是我们为了快速出成果可以反过来,由点到面这样才能赶在毕业前发出来论文。等你学会了解决一个问题的几个方法后再拓展知识面,你能很快的就能看完以前你看不懂的书了。
我曾经花了半年都没有看完李沐的那本书,但是博二的时候,我写开题可能需要综述一些方法,我大概只用了3,4天就看完了,是基本上理解了每个方法的那种看懂,不是翻一翻目录那种看懂。
由面到点适合教学,不适合我们学习,因为需要补充的知识太多了,由点到面目标明确,哪里不懂补哪里就好了,等你会了一些东西之后再去全面的看看,建立比较完整的知识体系。
经验之谈,希望能对曾经和我一样的人儿们有所启发,如果有什么不妥之处,望大家去其糟粕。
marg 发表于 2023-10-4 20:05:34|来自:北京 | 显示全部楼层
个人经历:
第一阶段:机器学习搞本书看看,深度学习搞本书看看,入门阶段,不求甚解,只求在理论上有个整体概念和感觉。入门书籍推荐:ML《西瓜书》和《统计学习方法》选一本儿,当然最好都看;DL《动手学深度学习》是个不错的选择,《花书》可以看看前九章。大概时间:2~3周
第二阶段:搞点代码跑起来,找点实践感觉。比如咱们前面看了逻辑回归,这时候就可以找点逻辑回归的代码瞅一瞅,看看这鬼东西到底在干啥。同样的,不求甚解。大概时间:1~2天。
第三阶段:
学习pytorch或者tensorflow,要系统。但是同样的,不求甚解,不要纠结于细节之中。大概时间:1~2周。
第四阶段:
根据个人兴趣或者实验室方向选择一两个小方向,实践起来!可以先去github上找找相关方向的项目,跑起来,调起来,改起来。这一阶段,不要广,要精,一通百通。搞得了小方向里的经典项目后,再学其他新东西就会容易很多。理论上搞不懂的就回顾和夯实第一阶段,实践中搞不懂的就多调试,多Google。大概时间:两周。
第五阶段:
全面了解领域内的经典、SOTA,尝试魔改,运气好的话搞点paper是极好的。大概时间:运气+努力,看命。
第六阶段:
相关方向都了解一下,没事儿回顾一下第一阶段,追追前沿。大概时间:唉,没完没了。
第七阶段:
卷不动了,放弃治疗。大概时间:要不是贫穷,我可以一直躺。
纯个人经历,请谨慎参考。另外,一和三可以换,关键是不求甚解,前三个阶段主要是为了有个整体感觉,怎么爽怎么来。后面实践时再慢慢深化即可。
如有疑问,欢迎咨询~
推荐阅读:
我们最近开源了一个文本分类项目,用来入门NLP和pytorch都很不错,欢迎关注和共建!
<a data-draft-node="block" data-draft-type="link-card" href="http://zhuanlan.zhihu.com/p/617133715" data-size="normal" class="internal">【OpenNLP/OpenTextClassification】文本分类系列03:OpenTextClassification项目正式开源了!这可能是目前网上最全面的文本分类开源项目!

快速回帖

您需要登录后才可以回帖 登录 | 立即注册

本版积分规则