一、斯坦福大学
斯坦福大学想必大家耳熟能详,他是美国铁路大王老利兰·斯坦福与1891年创立,纪念自己早市的儿子小利兰·斯坦福,并以此命名。有关斯坦福大学的更多信息可以自行搜索。
二、硅谷
斯坦福大学临近硅谷(旧金山湾区),可以说硅谷是依托斯坦福诞生的。二战后斯坦福大学为了解决财务危机,决定将自己空闲的数千英亩的土地改作工业园区,出租给企业。这里诞生了Fairchild(仙童半导体,肖克利),八叛逆,Intel,apple,sun,Adobe,Facebook,Google,oracle,Cisco等伟大企业。更多的可以读读吴军博士的浪潮之巅和硅谷之谜。
三、本文重点
了解下这些伟大企业诞生,比如Google,Facebook,斯坦福大学是如何培养学生的,为啥都这么厉害。举一个斯坦福《人工智能课程》的例子。
四、计算机与人工智能课程
最近,一位在行业内工作了几年的斯坦福人工智能“师兄”就根据自己的工作和学习经验,为入学的师弟师妹们送出了一份大礼:人工智能的本科4年课程清单,希望想要了解人工智能的新生能够靠着这份指路图,少走弯路。
这位大方的学长名叫Mihail Eric,本人也是一位妥妥的“学霸”。在斯坦福大学的NLP研究组里,与Christopher Manning, Percy Liang, Christopher Potts(三位巨佬)一起做研究,度过了3年非常充实的研究时光,收获颇多。同时Eric向ACL\EMNLP\NLP for AI work投稿论文,均已发表,目前正在担任ACL的审稿人,也是业内人工智能公司Alexa AI的工程师。
作为已经毕业的学长,Eric离开学校已经有一段时间了,总结了一下自己的学习和工作经历,Eric为自己的人工智能和机器学习的职业生涯,设计一个完整的4年制人工智能本科学位基础课程。这些课程是为AI和CS领域的萌新提供的,虽然是萌新定位,但Eric觉得这些课程直到今天都还在用,是基础必会的技能。
第1年,打基础
假设你没有CS的经验,这一年的大部分时间应该用在CS和机器学习的核心概念和算法上,推荐的课程有:
1.编程基础,这是AI从业人员必需具备的软件工程学的基本技能。课程为CS106B:
http://web.stanford.edu/class/cs106b/
2.计算机系统,这门课的重点在于计算机的基础设计和构建,尤其是学习软件编译的时候,运行一个程序会发生什么,以及程序是如何在内存中运行的。课程为CS107:
http://web.stanford.edu/class/cs107/
3.算法概论,这门课包含了计算机算法背后的数学和理论基础,比如最优搜索算法和动态编程,以及如何分析这些算法的内存和优缺点。课程为CS161:
http://web.stanford.edu/class/cs161/
4.概率论,概率论和统计学是机器学习算法中的核心,尤其是分析数据在实战里很重要。课程为CS109:
http://web.stanford.edu/class/cs109/
5.线性代数,如何计算矩阵和向量,线性方程组,最小二乘法,这些都是机器学习需要用到的数学基础。课程为EE103:
http://web.stanford.edu/class/ee103/
6.多维微积分,调试函数的梯度,反向传播以及机器学习,这些都是经常用到的。课程为向量微积分(工程师):
https://www.coursera.org/learn/vector-calculus-engineers
第2年,从系统的基础知识中开始慢慢探索
AI本科的第二年,至少要明白人工智能的一些原理,应该用什么样的理论去解决问题,还需要加强对计算机系统运行的理解。
1.人工智能概论,这门课包括了人工智能领域所运用的研究,比如搜索,游戏,逻辑以及图像还有机器学习算法的应用。课程CS221:
https://stanford-cs221.github.io/spring2020/
2.编译器,主要是讲编译器背后的设计和理论,你学了之后,至少应该了解一个编译器是如何构建的,还有编译器的模块化组件,也需要了解。如果你对语义识别感兴趣,可以好好琢磨一下编译器的设计和传统的自然语言处理堆栈之间的相似之处,非常有趣。课程CS143:
http://web.stanford.edu/class/cs143/
3.数据库原理,主要讲数据库管理系统背后的原则,比如关系数据模型、索引、模式等主题,但凡你想成为数据专家或者机器学习工程师,就必须要懂得数据库的原理。课程CS145:
https://cs145-fa19.github.io/
4.并行计算,并行计算这门课会讲Apache Spark到GPU这些系统背后的原理,课程CS149:
http://cs149.stanford.edu/fall19/
5.操作系统,你如果想要擅长系统编程,就一定要上这门课,这门课是讲如何从头开始搭建一个操作系统,不仅需要设计系统,还需要明白如何调试和代码管理。如果你不明白,你手下的人敲完:sudo rm -rf /*就撤了,你该如何拯救你的代码?课程CS140:
http://web.stanford.edu/~ouster/cgi-bin/cs140
第3年,开启提升课程
这个时候应该开始学高级课程,开始NLP,BA,CV这些方向的研究,
1.机器学习,监督学习和模型训练的概念,比如偏差、方差,正则化以及模型选择,这些内容看上去简单,实际上每个AI从业者天天都在用的。课程CS229:
http://cs229.stanford.edu/
2.凸优化,这门课运用很广,比如统计学,机器学习,信号处理和其它使用凸优化的领域,虽然现在有不少问题都是非凸化的,但是你最好还是要懂背后的逻辑。课程EE364A:
http://web.stanford.edu/class/ee364a/
3.概率图模型,像CV和NLP就会经常用到,所以还是需要了解。课程CS228:
https://cs.stanford.edu/~ermon/cs228/index.html
4.数据挖掘,大数据与数据挖掘,这门课涵盖了处理大型数据集的技术方法,会运用到推荐算法、聚类以及大规模的数据集计算与分析,要知道每天产生的数量还是比较大的。课程CS246:
http://web.stanford.edu/class/cs246/
5.NLP,自然语言处理,让机器懂得文本数据的理论和时间,而且还会在这门课里学到传统自然语言处理,老师会教如何用深度学习技术来处理这些。课程CS224N:
http://web.stanford.edu/class/cs224n/
6.基于CV的卷积神经网络,基本包含了深度学习背后的理论,比如CV模型就经常运用,只要学过人工智能课程的人,没错,是来自李飞飞教授的CS231N吧。课程CS231N:
http://cs231n.stanford.edu/
第4年,同学你该开始打比赛了
经过前面3年课程的训练,你应该对计算机系统和人工智能概念、应用有了清楚的理解,找到你比较感兴趣的方向,拿起数据集,就要开始自己跑模型,做数据分析,调参还有解决Bug。想要成为一个真正的人工智能专家,不仅得学,还得上手练。
1.做研究项目,有的学校会提供这类课程,在这门课里,你需要深入研究整个项目的情况。课程CS341:
http://web.stanford.edu/class/cs341/
2.参加课题研究,主动去找研究生学长学姐,做他们的助理,将基础知识再过一遍,也可以选择自己开一个课题项目,进行研究,主要是让你有一个项目经验。
3.大厂实习,如果你要是时间管理的好,可以考虑在课余时间去AI公司实习,一般大厂都有这种3-6个月的实习机会,在实习里,不仅让你了解书本上的基础知识,还能使用基础知识进行落地的运用,这种应该算比较好的实战机会了。
以上就是作为一个人工智能从业者的斯坦福毕业生Eric,送给AI萌新的4年规划安排,如果你觉得上面的课程比较难,可以适当调整。AI之路任重且道远,不管是不是萌新,只要你还愿意学习,就一直在路上,加油!!!
五、后话
头一年的课程偏向理论基础,比如计算机系统、编程原理、算法、概率论等等,这一点值得我们重点关注。毕竟现在市场上的学习资料数不胜数,什么21天速成、攻克、毕业课等等,对基础有所忽略。所以有心学习的同学,可以适当多了解下这些基础知识。
参考素材:
1、A Complete 4-Year Course Plan for an Artificial Intelligence Undergraduate Degree原稿