说明

出处: A Complete 4-Year Course Plan for an Artificial Intelligence Undergraduate Degree

翻译者: 雷锋字幕组(明明知道、jiazhenbin、娄门人家)

离开学校已经有一段时间了,我现在有许多时间可以去反思下某些课程对我在人工智能和机器学习领域的发展有多大益处。我决定将我的想法在这篇文章中发表,为四年制人工智能本科学位的学习给出一个完整的课程规划。
这些课程旨在为人工智能和计算机科学领域的新人们提供广度与深度并重的知识。这个课程体系的构建深受我所学过课程的启发,并且反映了那些我认为在人工智能生涯中必备的技能。
你也许通过Coursera在线课程就能获得某些人工智能领域的知识,但我的侧重点是在实际应用中培养对这些概念的深层理解。彻底理解某个领域确实花费时间,但我认为所谓的“捷径”并不可行,因此,这个课程规划是为那些想从基础理论开始系统学习的人们配备的。
介绍结束了,就让我们开始吧。

在人工智能学位学习的第1年,你应该聚焦于学习那些构成计算机科学和现代机器学习基础的核心概念。此处,我假设你完全没有计算机科学先修经历,所以,这一年的主要精力应该花在学习软件和算法基础上,在你的整个学位学习阶段和职业生涯中都将会需要这些基础知识。你应该聚焦的课程包括:

第1学年:构建你的学业基础Stanford: CS 106B 2018 Winter Programming Abstractions

程序设计基础(Programming Fundamentals):

  • 介绍面向对象程序设计及数据结构(集合、图等)。人工智能从业者需要有扎实的软件工程技能。

    Stanford: CS 107 Programming Paradigms 编程范式\Computer Organization & Systems

    计算机系统导论(Introduction to Computer Systems):

  • 讲授从低层来角度来看计算机科学系统是如何设计和构成的。其中,重点在于学习软件编译过程,当你运行程序时会发生什么,在内存中程序是如何组织的等。

    Stanford: CS 161 Algorithms by Tim Roughgarden

    算法(Algorithms):

  • 涵盖广泛使用的计算机科学算法后面的数学和理论,比如广度优先遍历、动态规划,以及如何分析那些算法的内存和运行时特点


    Stanford: CS 109 2016 FA Probability for Computer Scientists

    概率论(Probability Theory):

  • 概率统计是许多机器学习算法的核心, 学习如何解释和分析数据对于任何机器学习或大数据科学的领域来说 ,都是至关重要的。

    Stanford: EE103/CME103/ENGR108 Introduction to Matrix Methods

    线性代数(Linear Algebra):

  • 涵盖如何运用矩阵和向量,解线性方程,应用最小二乘法。这些数学基础知识在机器学习领域都被广泛使用。

    香港科技大学: Vector Calculus for Engineers by Jeffrey R. Chasnov

    多维微积分(Multi-dimensional Calculus):

  • 你应该能轻松地解得函数梯度,因为这是诸如反向传播算法之类的现代深度学习主力算法的核心技术。

    第2学年:探索领域,开发系统知识

    人工智能本科二年级学生的重点应该是让自己了解人工智能的一般原理,已经解决的问题是什么以及是如何解决的。此外,你应该继续理解与模型构建相关的计算机系统,并实践软件工程和设计原则。为此,建议学习以下课程:

    [2019 FA] Stanford: CS 221 Artificial Intelligence Principles and Techniques

    人工智能导论(Introduction to Artificial Intelligence):

  • 涵盖了不同的人工智能领域的广泛概述,如搜索、游戏、逻辑、图形模型、机器学习和这些算法的应用。这样的课程应该为从符号逻辑到统计技术等方法的思想演变提供历史背景。


    Stanford: CS 143 Compilers and interpreters by Alex Aiken

    编译器(Compilers):

  • 涵盖编译器背后的设计和理论,理想情况下强调从头构建一个完整的编译器。编译器是你编写的每一个程序的核心,即使对人工智能从业者来说,理解它们的工作原理也是很重要的,这样你才能成为有能力的工程师。这样的课程将让你很好地接触到如何构建一个复杂的软件系统,着重于模块化的、经过文档化和测试的、架构良好的组件。除此之外,如果你对追求应用于语言理解的人工智能感兴趣,编译器的设计和传统自然语言处理堆栈之间的相似之处是不可思议的。


    [2014] Standford: CS 145 Introduction to Databases

    数据库导论(Introduction to Databases):

  • 涵盖数据库管理系统背后的原理,重点诸如关系数据模型、索引、模式和事务等部分。任何现代数据科学家或机器学习工程师都必须在某种程度上与数据库交互,因此了解它们的组织架构方式至关重要。


    Standford: CS 149 Parallel Computing

    并行计算(Parallel Computing):

  • 并行计算平台构成了当今许多平台和技术的核心,从 Apache Spark 到 GPU 等硬件。有关并行计算的课程应该介绍这些系统背后的思想,以便你更熟练地有效地使用它们。


    Standford: CS 149 Operating Systems

    操作系统(Operating Systems):

  • 如果你想真正擅长系统编程,成为一个更熟练的工程师,那就去上一门操作系统课程,在这门课程中,你必须从头开始构建一个操作系统。您不仅将学习如何设计操作系统,还将学习如何成为一名精通Debug代码的程序员。在未来的人工智能职业中,这些基本技能将是无价的。

    第3学年:进阶课程深度挖掘

    在第三年,你应该专注于深入学习机器学习以及统计原理的特定领域应用,包括自然语言处理、大数据分析和计算机视觉。以下是一些推荐的课程:

    [2018 FA] Stanford: CS 229 Machine Learning by Andrew Ng\吴恩达

    机器学习(Machine Learning):

  • 涵盖机器学习的原则,包括监督和非监督学习和模型训练概念,如偏方差权衡、正则化和模型选择。一定要学习这些理论并把它们学好,因为人工智能从业者每天都在使用它们。

    Stanford: EE364A: Convex Optimization I \EE 364B Convex Optimization II\CVX101 Convex Optimization I

    凸优化(Convex Optimization):涵盖解决凸优化问题背后的思想与应用到统计、机器学习、信号处理和其他领域。虽然现在许多模型使用非凸目标,但这有助于理解可处理优化问题背后的形式。相关课程:EE 364A。


    [Coursera] Stanford: CS 228 Probabilistic Graphical Models

    概率图形模型(Probabilistic Graphical Models):涵盖图形模型范式,它允许对随机变量的大量集合进行概率建模。计算机视觉和自然语言处理等各种应用中的许多问题都可以用图形模型来表达,因此了解这些思想是有帮助的。


    [2019 WI] Stanford: CS 246 Mining Massive Data Sets

    数据挖掘(Data Mining):涵盖如何处理大数据集的技术和方法,尤其侧重于推荐系统、聚类和大规模监督机器学习等应用领域。鉴于每天都会产生大量新数据,人工智能从业者必须适应大规模操作和分析数据,特别是通过使用 Spark 这样的现代工具包。

    [2019 WI] Stanford: CS 224N Natural Language Processing with Deep Learning

    自然语言处理(Natural Language Processing):介绍让机器理解文本数据背后的理论和实践。这样的课程应该概述诸如解析和命名实体识别之类的传统自然语言处理中的任务,并讲授如何使用诸如深度学习之类的技术来解决这些任务。

    [2017 SP] Stanford: CS 231N Convolutional Neural Networks for Visual Recognition

    用于计算机视觉的卷积神经网络(Convolutional Neural Networks for Computer Vision):涵盖了现代深度学习体系结构背后的理论,尤其是与构建计算机视觉模型有关的理论。在当今的人工智能领域中,想要获得成功,拥有扎实的神经网络基础至关重要。

第4学年:实践经验至关重要

第四年的课程名称应该是实践、实践、再实践!在你完成你的头三年课程的时候,你对低级计算机科学和软件工程原理以及人工智能概念及其应用背后的理论已经有了深入的了解。在这一点上,你需要多花时间动动手。
找到您感兴趣的研究领域,获取现有数据集(或开发自己的数据集),然后开始构建模型。学习数据处理、假设检验和错误分析的细微差别。学习如何对模型进行故障排除。
想要成为一名人工智能领域的专家,那需要将你所学到的所有原则付诸实践。下面是一些如何尽可能多实践的方法:

参加项目课程

参加项目课程:一些大学会开设一些课程,在这些课程中,你可以在整个课程期间严格地处理一类问题中的单个项目。这些类很好,因为您有时间真正深入研究项目的所有复杂性。我想到的一个例子是 CS 341

参与研究

参与研究:参与研究是获得人工智能工作中所有错综复杂的实践经验的一种十分有效的方式。主动帮助研究生完成你感兴趣的课题,或者请求老师资助你自己的课题!通过这样做,你会很好地了解从事人工智能课题时的日常工作情况。

进行行业实习

进行行业实习:如果你的时间安排允许,可以考虑从学校请假到一家人工智能公司实习。许多公司都提供 3-6 个月的实习机会,让你接触到所学原理的实际应用。如果你打算毕业后马上就进入工业界,那么没有更好的方式来体验数据科学家或机器学习工程师的工作。

至此,你已经完成了一个完整的四年课程规划,为你未来成功的机器学习或数据科学的职业生涯准做好了准备!值得一提的是,并非必须参加上述所有课程。
另一种方法是浏览上述列表,并选修有关课程来填补自己的概念或技能空白。虽然有很多东西要学习,但但现在正是参与人工智能的激动人心的时刻,机遇无穷,研究领域广阔,未来大有可为。好运!