在大二下学期,学校通知我们可以报名参加科研训练项目。据说就是在模仿研究生一样的制度,在一个导师的带领下,一个课题小组完成一篇论文或者研发一款产品,体验科研的魅力。抱着想发几篇论文玩一玩的想法,偶然在大学生科研训练项目中,看到一位老师关于自然语言处理(Natural Language Process,NLP)因果推理项目的一个研究,于是就把自己的简历投了上去,报名了该科研训练项目。
说起来也有趣,其实在报名这个项目之前我对人工智能只有一些肤浅的基础了解。我有一位好朋友在我们学校人工智能实验班学习,我自己平时也会看一点科技新闻,大致知道现代的人工智能是通过大量的数据,让计算机算法在里面进行训练,纠正自己的错误,然后达到预测或者生成或者识别目标数据的目的(后来我才知道这种说法只是片面的,这种专业叫法应该叫监督学习,即数据本身自带表示自身属性的标签。但是也有不带标签的无监督学习算法,比如聚类算法:K-MEANS和CBSCAN)。后来平时也会自己看一些与人工智能有关的公众号,再加上向我那位有经验的同学学习,然后自己也从Tensorflow官网上学习如何用Anaconda安装Tensorflow的安装包,当import tensorflow as tf命令成功后,我的人工智能学习之路算是正式开始了。
然后看了几篇tensorflow API文档之后,发现自己并不是很能看得懂。首先是高数不过关,关于梯度下降的算法不是很能理解。虽然说梯度下降是机器学习算法中hello world级别的东西了,但是第一次理解起来还是有些难度。然后我又conda install了一下PyTorch,在GitHub上找到了别人翻译英文官网的PyTorch入门文档,讲完张量该如何生成之后就是直接梯度下降了。我毕竟是文科生,高数上都只学了一半,偏微分方程我都没学都不知道什么是梯度,更别说梯度下降了。于是发现:自己学习流程错了。
总的来看,人工智能的学习是需要基础的。首先是数学基础,线性代数、高等数学、概率论三个一个都跑不掉,Python那铁定也是要掌握的。但是吧我们大学用的Python教材老师在给我们进行讲解的时候,根本没有讲解到Python面向对象编程,“类”更是闻所未闻。第一次看别人的示例代码的时候,我心里的反应是“Python居然还有这玩意?”
我自己刚好有一些电子书软件的会员,然后迅速找了几本python教科书,我发现很多Python的入门书是没有讲到OPP(面向对象编程)的,也就是说我被老师坑惨了。当学校考试还在拘泥于用选择题考察Python时,我果断选择去学习真正的Python。
高数、线代、概率论国内的教材讲的其实都不是很好。这些教材最大的问题是他们的目标是为了讲清楚数学本身,但是如果你想学习这些知识目的是做应用的话,其实你应该看一些别的种类的书。比如说我的线性代数就是在一本叫做《深入浅出神经网络》的书中学习到的,这本书用非常短的篇幅简单讲解了线性代数在神经网络中的一些应用,虽然作者写这些知识是为了给神经网络做铺垫,但是发现这些知识对我理解线性代数有了非常好的作用:因为我理解了数学在应用当中发挥了怎么样的一个角色。这才是理解数学的核心,如果只是单纯理解数学本身的话是没法学好数学的。数学在我们自然科学当中的地位是一个工具,要理解一把锤子,最好的方法就是用它去敲一敲钉子,而不是把锤子放在手中反复把玩。
Python的话,学好它最重要的方法就是用它去实践。我自己的学习方法是先看看书上的示例代码,然后在不看书的情况下在电脑上自己把程序敲出来。然后反复这样练习。过个几天再自己敲一敲,看看能不能把代码回忆出来,能不能自己构思出来,长此以往代码语法就内化到了自己的心中,不需要去主动记忆。但是还有一点是我觉得有必要提的,就是大学课堂上教的程序语言的应用都是教你怎么去算三角形面积、怎么去给数组排序、怎么用Turtle库画一个五角星等等。这样的话学生理解不到Python的乐趣。Python其实有非常非常多的功能,比如说科学计算、数据可视化、网站开发、统计学分析、人工智能、网络爬虫等等。其实完全可以找到一个自己想了解的场景,用Python去应用即可。比如说数据可视化,你收集到的一些Excel表格里的数据可以用Python来绘图,而不仅仅是用Excel自带的图表构建器去绘图。学着怎么用python导入csv文件,怎么用列表索引+递归循环和判断语句来绘制折线图、雷达图、直方图等等。学习很重要的就是兴趣,你要知道Python它是一个工具,它存在的目的是为了你用它去实现某一个功能,不要太过拘泥于这种语言本身。
人工智能理论的话,业内有两本书比较有名,一本是南京大学计算机学院周志华老师的《机器学习》我们也一般俗称为“西瓜书”,另一本是由三位国外学者所写的《深度学习》,我们一般俗称为“花书”。看懂这两本书,其实都是需要数学基础的。不过在第二本书中会给你做一些基础知识的铺垫,但是有些细节则会一笔带过,如果想了解的话还是需要额外找数学教材。
最后是学习人工智能需不需要报一些付费的网课,我看到清华大学主办的“学堂在线”网站居然也在做这种付费的网络教学班,而且价格还不低,有些要八九千甚至一万二才能报上。我个人对这种班的观点是:首先是要明确自己有没有时间学习,如果是在校大学生的话,要衡量一下自己有没有时间去看这些网课,自己学习的内容会不会跟自己在学校的课业有冲突。如果是在职人员想提升自己的话,我觉得首先要做好长期学习的准备,人工智能不是某种可以一蹴而就的技能,它是一个非常繁杂的交叉学科体系,并且需要保证好自己每天有一定的学习时间,并且有长期实践的能力。
以上就是一些学习经验的分享,希望对你有用。本人也是一个小菜鸡,不是知乎上那些985硕博大佬,学习的内容也很浅,如果有写错的地方,欢迎大家在评论区指正。
那我们下次再见啦~