一直以来,虽然我自己一直在从事AI的学习,以及AI的工作,但是其实一直都和很多朋友唱衰AI,因为我自己的学校不好,不如那些好学校的学生靠学校就可以进各种面试,然后刷刷题就能获得一份算法的工作,为了能从事算法这个行业,需要付出多少只有自己清楚。
但是按不住还是很多朋友,不管是知乎上的,还是现实中的朋友,一直在问AI到底要怎么学,AI到底要如何入门,什么西瓜书,花书到底怎么看。我自认为自己不是一个聪明的人,当初走了不少弯路,浪费许多时间。今天准备小小的写一下自己的一些心得体会,帮一些刚上研究生,甚至可能不是AI专业但是不得不学的师弟师妹们,加速入门。如有错漏,欢迎指正。
这个系列计划是更新三到四节,从如何上手,到怎么看论文,再到如何写一篇论文。本节分别从两个小问题开始引入。
- 老师让我入门看花书西瓜书,有必要看么,看的话,要看多久?
- 我代码能力很差,应该怎么办?
算法入门
对于第一个问题,在我的定义里,这个应该被称作算法入门,西瓜书是传统机器学习算法入门,而花书属于深度学习算法入门。
传统机器学习算法入门
传统的机器学习算法,主要包括西瓜书中列举的,决策树,贝叶斯,bp,支持向量机等一系列的传统机器学习算法的内容。我个人对于西瓜书的看法在于:了解内容即可。
什么叫了解内容即可,简单来说,知道每一类机器学习算法,究竟是干嘛的,在做一个什么样子的事情,例如决策树就是一直在做条件筛选,支持向量机简单来说就是算距离分类。了解的它们究竟是在做什么,就够了,至于具体的每一步怎么算怎么实现的,对于一个刚入门的选手来说,并不重要。
为什么说这些具体的实现方式不重要呢?因为对于绝大部分同学来说,传统机器学习算法会被使用的最大可能性只有2个,一个是可能需要参加数模比赛,要凑方法,另一个是可能需要在写论文的时候,涉及到贝叶斯的公式,需要了解一下。当前传统机器学习的就业面很窄,性能一般般鲁棒性又很差,应用场景确实不多。
很多同学在学习西瓜书的时候,学的很痛苦。因为根据过去的经验,明白一个事儿需要看公式在干嘛,但是西瓜书公式,又是跳步,又很抽象,导致大家学习过程非常的痛苦,但是其实本身这些机器学习的方法的实现,都已经在sklearn中集成好了,甚至里面集成的内容远远超出了西瓜书中的机器学习知识,而这些都只需要一行代码就能直接实现。你既然未来基本或者很少会用到,何必花费大量宝贵的时间在这上面呢?
深度学习算法入门
深度学习算法,主要就是一些深度学习的基本概念,实现,以及一些简单应用,所以很多老师在一入学会让同学们再看个花书,有的同学一入学,一个西瓜书一个花书,一个学期就过去了,研三上找工作申博,能拿来用的时间总共4个学期,四分之一就没了,这显然是没啥必要的。
这里推荐一个我自己认为比较适合用来入门的东西。在b站李沐大神的课程《动手学深度学习》以及霹雳吧啦Wz的代码视频,当初我自己也是看这两个入的门。之所以推荐这两个,特备是动手学深度学习,是由于花书作为一本书,每天看几页没个清晰的认知不说,很多代码比较老了,跑不起来,在李沐大神的课程里,代码有自己的库,同时比较新,实验一下所见即所得,而且一个章节多少分钟很清晰,不容易磨洋工。而霹雳吧啦Wz的视频,则是具体的任务论文讲解和实现,属于进阶入门内容。接下来分别说一下这两个内容,怎么学以及学多久。
关于李沐大神《动手学深度学习》,我的建议是分成两个阶段,一个阶段是概念理解:所谓的概念理解,就是课程的前半部分,权重是啥,优化器是啥,学习率是啥等等,会教你这些,所有任务都会使用的内容。这些建议整体看+学,变看变跟着实验代码,属于必须会的东西。第二阶段是具体的任务,例如图像的分类分割检测,nlp的bert啥的,这些就需要询问自己实验室的师兄师姐们了,比如实验室都是做nlp,llm的,你在这儿学了半天检测分割,也没啥意义,你实验室是做cv的,没啥计算资源,那你就算天天看,把所有的llm教程和llm的论文都看了,也没用。根据前人做啥你看啥相关的理念,选择性学习。这个过程,自己兴趣大,学的快的,一个礼拜以内应该就结束了,就算再慢,两个礼拜也应该看完了。
在学习完《动手学深度学习》之后,那就开始上手读论文了,论文也是根据上面的经验,实验室的前辈做啥你看啥,nlp的大部分在李沐的频道都能找到,cv的入门的在霹雳吧啦Wz里也基本都能找到,自己看了之后,如果是cv,霹雳吧啦Wz也有网络代码实现详解,也可以仔细看看。把所在领域的这些入门教程论文都看了,也可以称得上是一句,入门了。
代码入门
很多同学其实一点代码能力没有,然后想着自己没有代码能力咋办,要我说,那除了菜就多练,还能咋办。我自己在那种接单群里接单赚过外快,太清楚每天那种帮忙搞代码的活,做都做不完,但是这种人就算真毕业了,工作里还能让别人做么?
当然,搞算法的对代码能力的需求其实没这么大,远不如搞开发的,接下来我会大概讲一下具体需要掌握的代码能力。
数据处理能力
这一部分指的是对于数据的调整,众所周知,深度学习最重要的东西,是数据,而数据处理就是重中之重。从最简单的如何构造一个数据集,构造dataload,把数据集塞到模型里去。我认识好多人真的做了3年深度学习,连怎么造数据集都不会,只会一件调用公开数据集,非常幽默。再难点,就是各种数据的处理了,包括但不限于,什么数据的裁剪,筛选之类的,单个数据的处理,例如什么快速傅里叶分离高低频啊,锐化,之类的,不过这些都属于慢慢学的内容了,入门嘛,把最简单的先学好。
模型搭建能力
这里的模型搭建能力其实也分两种,一个是pipeline搭建,一个是改模型。
其中pipeline搭建,在霹雳吧啦Wz的代码仓库,有一个简易的pipeline,我个人很建议大家把那个pipeline的每一行都理解并记下来,基本囊括了一个模型跑起来所需要的部分,以后看各种代码,其实都是在做匹配,这一坨代码是用来改学习率的,那一坨是读数据的,等等。大家在明白了最简单的一个流程之后,再看其他的,会相对简单一些。不然说实话,就现在深度学习很多研究者的代码就是在别人基础上改改,最后改的多了,一层包一层,正常人根本看不懂,说不准作者自己都不知道自己改的到底牵扯了多少地方,标准屎山,如果没有一个俯视的理解,那看的会相当痛苦。
而改模型,这个也可以看霹雳吧啦Wz的一些代码讲解视频,因为他是直接把pytorch官方模型库里的一些模型复现做的教程,都是一些经典模型,而且是传统那种一层层搭的,理解起来比较容易。后续很多任务库很多,yolo系列的用yaml文件搭模型,mmcv搭模型,这种很多很多,无一例外,非常抽象,想自己改改玩玩太麻烦了,对新手机器不友好,建议统统避开。
如果你能自己处理好数据,然后搭建整个模型的pipeline,还能在模型上换换改改,那代码能力也就入门能开始做点东西了。