这个代码仓的内容是我公众号上的文章《如果真的学习人工智能》的整理,我将在这里提供一个人工智能专业的学习路径。
为了让内容整体更有体系,我将所有的内容分成四个阶段。每个阶段可以简单理解成对应大学的一个学年。也就是如果大家假想自己现在高中毕业的话,根据这篇文章提供的“学习地图”,使用四年的时间,就可以在人工智能的深度和广度上都有相当地理解和掌握了。
对,你没有看错,是四年的时间。相当于读一个本科的时间。
所以,这不是一份广告。因为所有培训广告只会告诉你四个月就够;但所有人都明白四个月是不够的。如果四个月就可以掌握人工智能,人工智能也太简单了,它也就不值钱了。
对于这份学习路径,大家也可以划分为两部分。前两年是第一部分;后两年是第二部分。
对于计算机科班的同学来说,可以直接学习后两年的内容,切入人工智能领域;
而如果把前两年的内容切实学扎实了,再辅以其他专业课学习,基本可以轻松转向计算机科学的任何方向。
当然,由于每个人基础不同,所以对于这份比较全面的学习路径,有些同学可能已经掌握了相当的内容,那么就可以跳过一些内容,加快速度了。
这份学习路径中的大部分资料,都使用开源的资源,或者是比较著名的图书推荐。
如果大家有其他好的资源推荐,欢迎随时提 issue:)
相关推荐:
我的另一个代码仓,包含大量开源资源分享: 是不是很酷开源分享
我的公众号是【是不是很酷】。
Python 语言 | Python Crash Course, 2nd Edition Amazon 京东 | 书籍 |
Automate the Boring Stuff with Python, 2nd Edition 第二版英文原版内容线上版本 Amazon 京东 |
书籍 | |
Introducing Python Amazon 京东 | 书籍 | |
Fluent Python Amazon 京东 | 书籍 | |
C++ | C++ Primer Amazon 京东 | 书籍 |
C++ Crash Course Amazon | 书籍 | |
程序运行底层 & C | CS107:Computer Organization & Systems | 斯坦福公开课 |
微积分 | 托马斯微积分 京东 | 书籍 |
普林斯顿微积分读本 京东 | 书籍 | |
线性代数 | Introduction to Linear Algebra Amazon 京东 | 书籍 |
Linear Algebra A 2020 Vision of Linear Algebra |
MIT 公开课 | |
Linear Algebra and Its Applications Amazon 京东 | 书籍 | |
Linear Algebra Done Right Springer官网 原版PDF下载 京东 |
书籍 | |
概率论 | CS109: Probability for Computer Scientists | 斯坦福公开课 |
算法与数据结构 | 算法4 Amazon 京东 | 书籍 |
算法设计手册(指南) Springer官网 原版PDF下载 京东 | 书籍 | |
操作系统基础 | Operating Systems: Three Easy Pieces 原版在线阅读 Amazon 京东 |
书籍 |
CS140:Operating Systems | 斯坦福公开课 | |
CSAPP Amazon 京东 | 书籍 | |
数据库基础 | SQL 必知必会 Amazon 京东 | 书籍 |
SQLZoo | 在线练习 | |
SQLBolt | 在线练习 | |
CS145:Data Management and Data Systems | 斯坦福公开课 | |
CS245:Principles of Data-Intensive Systems | 斯坦福公开课 | |
CS346:Database System Implementation | 斯坦福公开课 | |
数据库系统(上):模型与语言 | 中国大学MOOC | |
数据库系统(下):管理与技术 | 中国大学MOOC | |
并行计算基础 | CS149:PARALLEL COMPUTING | 斯坦福公开课 |
Designing Data-Intensive Applications Amazon 京东 | 书籍 | |
人工智能基础 | Artificial Intelligence: A Modern Approach Amazon 京东 | 书籍 |
CS221: Artificial Intelligence: Principles and Techniques | 斯坦福公开课 | |
EdX: Artificial Intelligence (AI) | EdX 课程 |
机器学习 | CS229: Machine Learning | 斯坦福公开课 |
Coursera: Machine Learning | Coursera 课程 | |
Coursera: Deep Learning Specialization | Coursera 课程 | |
TensorFlow in Practice Specialization | Coursera 课程 | |
Hands-On Machine Learning Amazon 京东 | 书籍 | |
机器学习(西瓜书) 京东 | 书籍 | |
机器学习导引 京东 | 书籍 | |
数据科学 | Python for Data Analysis Amazon 京东 | 书籍 |
凸优化 | EE364a: Convex Optimization I | 斯坦福公开课 |
概率图模型 | CS 228: Probabilistic Graphical Models | 斯坦福公开课 |
Coursera: Probabilistic Graphical Models Specialization | Coursera 课程 | |
数据挖掘 | CS246: Mining Massive Data Sets | 斯坦福公开课 |
计算机视觉 | CS231n: Convolutional Neural Networks for Visual Recognition | 斯坦福公开课 |
自然语言处理 | CS224n: Natural Language Processing with Deep Learning | 斯坦福公开课 |
Coursera: Natural Language Processing Specialization | Coursera 课程 | |
金融领域 | Advances in Financial Machine Learning Amazon | 书籍 |
生物医学医药 | AI for Medicine Specialization | Coursera 课程 |
Rosalind | 在线编程 |
首先,人工智能作为计算机科学的一个分支,是需要编程的。想要编程,大家必须学习计算机语言基础。
对于计算机语言的选择,毋庸置疑,人工智能方向毋庸置疑是需要学习 Python 语言的。关于 Python 语言语法基础的学习,我就不具体推荐资源了。网上收费的免费的各种资源太多了。但如果一定要推荐的话,仅凭个人偏好,入门推荐这本书:
这本书有中文版。但我目测还是第一版。相较而言,国外最新版已经是第二版了。
国外亚马逊链接在这里。
中文版京东购买点击这里。
另外,在掌握了 Python 基础语法以后,对于 Python 的应用,有一本经典的书籍,近乎是必看的。我在我的公众号《开源分享第三期》中分享过,就是这本:
但是这本书的英文原版也已经有第二版了,国内引进的还是第一版。如果英文好的同学,可以直接看第二版。关键是,第二版的内容,官方现在可以直接在网上免费浏览!
中文版京东购买点击这里。
Orelly 的一本 Python 书也值得推荐:Introducing Python。我的读者在我的公众号下留言:这本书进度更快,并且覆盖decorator(装饰器)、property等python中等水平特性。
亚马逊链接在这里。
中文版京东购买点击这里。
关于 Python 语言进阶,最著名的应该就是这本了:Fluent Python
亚马逊链接在这里。
中文版京东购买点击这里。
当然,Python 深入下去还有很多好的资源推荐。由于这篇文章重点不是 Python,所以点到为止。
除了 Python,我还推荐学习一门编译型语言。对于这个语言的选择,于人工智能方向而言,我个人推荐 C++。因为真正的人工智能工程师,深入到底层,是需要大量使用 C/C++ 的。而 Python 更多的是一种“前端”工具,提供接口调用而已。
对于 C++ 的学习,去看 《C++ Primer》就好了。如果有 Python 基础,看这本书应该没有什么难度。当然,C++ 深入进去可以很复杂。但是在这个阶段,一本《C++ Primer》足以。
亚马逊链接在这里。
中文版京东购买点击这里。
如果有些同学觉得 C++ Primer 太“古董”,可以看这本 C++ Crash Course。这本书是 2019 年出的,出版社 No Starch 也名声在外。同时兼顾了 C++17 的最新特性。
亚马逊链接在这里。
下面,我要推荐一门斯坦福大学的基础课,CS107:Computer Organization & Systems。如果翻译过来的话,就是计算机的组织和系统。
这门课程听起来很深奥,但其实是一个不折不扣的基础课程。这门课程使用的语言是 C 语言。但是学习的关键完全不是 C 语言的语法知识。事实上,如果大家已经学习了 C++,掌握 C 语言的语法是很容易的。
这门课程的核心是借助 C 语言,了解计算机程序运行的一些低层级制。比如位运算;比如指针;比如内存管理;比如内存中的栈和堆之间的区别;比如类型机制乃至泛型的底层实现;包括一些底层优化等等内容。另外,这门课程也会包含一些汇编基础。
传送门:https://web.stanford.edu/class/archive/cs/cs107/cs107.1206/index.html
除了语言基础,另外一个学习人工智能需要打好的基础,就是数学。
整体,人工智能需要学习的数学基础,和一般工科需要学习的数学没有什么太大的区别:微积分,线性代数和概率论。(还有一些高级的数学内容,后续会提及)
对于微积分,最流行的课本应该就是《托马斯微积分》。
中文版京东购买点击这里。
另外一本经典是普林斯顿微积分读本:
中文版京东购买点击这里。
对于线性代数,市面上的好教材太多。我在我的公众号文章 学习乘法不能帮助我们理解质能方程 和 开源分享第九期 两篇文章中总共分享了三个线性代数课本。
一本叫《Introduction to Linear Algebra》,最新版是第五版。
这本教材的作者是 MIT 大名鼎鼎的 Gilbert Strang。去年被炒得沸沸扬扬的清华大学把线数教材换成了英文版,用得就是这本教材;前一阵子沸沸扬扬的 86 岁老爷子还录网课,说得就是这个作者。
如果你对这两条新闻不是特别熟悉,可以搜一下。关键词:“清华把线性代数教材换成英文版”;“86岁还在录网课”。
这本书的亚马逊链接在这里。
京东购买点击这里。
Gilbert Strang 老爷子在 MIT 的线数公开课很有名,相信很多同学都看过。如果没看过的话,推荐看一下。
MIT 的官方地址在这里。
2020 年更新的视频内容在这里。
另一本叫《Linear Algebra and Its Applications》,最新版是第五版。有中文版,叫《线性代数及其应用》。听名字,这本书似乎更强调应用,但其实 Gilbert 老爷子的书也有专门一章讲应用。
这本书的亚马逊链接在这里。
京东购买点击这里。
最后一本,是我的一个同学,现在在硅谷 Google 总部工作的大神推荐的。据说非常非常适合入门,叫《Linear Algebra Done Right》。
现在疫情期间,Springer 出版社很多书籍都免费下载,包括这本书。对此感兴趣的同学不要错过。官网链接在这里。
因为可以免费下载,所以我直接把这本书的 PDF 放在这个代码仓下了。大家可以在这里直接下载。
京东购买点击这里
对于概率论,我推荐斯坦福的 CS109:Probability for Computer Scientists。
这门课程翻译过来就叫《为计算机科学家准备的概率论》,所以对于计算机专业来说,学起来更有针对性。
另外,学习这门课程的过程中,也就会接触一些机器学习方面的基本概念了
传送门:http://web.stanford.edu/class/cs109/
如果想成为一名人工智能工程师,计算机领域的基础必须打好。但与此同时,我认为专注于人工智能方向,一些特别低层的内容,比如组成原理,或者数字逻辑,甚至是编译原理等等,并不需要专门学习。所以下面的推荐,并不包含这些内容。
下面是我认为人工智能方向应该重视的计算机基础知识,应该在第二年掌握。
算法和数据结构的重要性不想多说了。就算你不理解他们实际上有什么用,只要明白,想当工程师,面试必考算法和数据结构就好了。
当然,如果你认真学习这篇文章推荐的后续课程内容,近乎一定会体会到算法和数据结构的巨大意义。
关于资源,推荐两个,都是书籍。
首先,就是大名鼎鼎的《算法4》。
亚马逊链接在这里。
中文版京东购买点击这里。
《算法4》其实也有不少缺点,找时间我专门写文章聊一聊。但是在这篇文章,大家可以注意两点。
第一点,《算法4》的代码是基于 Java 语言的。所以,大家可以再借此接触一下 Java 语言,没坏处的。而且如果大家已经有了 C++ 基础,上手 Java 是很快的。
第二点,就是《算法4》偏经典的算法和数据结构的底层实现,而在算法设计方面介绍得很少。所以,就有了我推荐的第二个资源:《算法设计手册》。
这本书更偏向算法设计,我认为和《算法4》能形成一个很好的互补。
依然是,由于疫情原因,这本书的英文原版正版现在在国外是免费下载的。传送门:
传送门:https://link.springer.com/book/10.1007/978-1-84800-070-4
因为可以免费下载,所以我直接把这本书的 PDF 放在这个代码仓下了。大家可以在这里直接下载。
感谢 @kunlk 的提醒。这本书引进了中文版,中文版叫《算法设计指南》。京东购买点击这里
操作系统也属于计算机专业的必修课程。这不仅仅是因为我们需要了解操作系统的很多底层机制,更重要的是,我们可以借此学习很多系统设计(System Design)方面的理念。
要知道,一个人工智能应用,也是一个系统。在系统设计开发层面,很多东西是共通的。
操作系统方面也有很多经典教材。如果推荐书的话,我推荐这本《Operating Systems: Three Easy Pieces》
这本书的英文版是可以免费在线浏览的。传送门:http://pages.cs.wisc.edu/~remzi/OSTEP/
感谢 @zozospider 的提醒。这本书引进了中文版,中文版叫《操作系统导论》。京东购买点击这里。
关于视频课程,我推荐斯坦福的课程 CS140:Operating Systems。
传送门:http://web.stanford.edu/~ouster/cgi-bin/cs140-spring20/index.php
关于操作系统,进一步引申至计算机原理层面,比如组成原理等相关内容,虽然上面我说,个人认为专门学习人工智能并不需要专门掌握,但是如果感兴趣的同学,还是有一门很经典的书推荐一读的,就是大名鼎鼎的 CSAPP:Computer Systems: A Programmer's Perspective
亚马逊链接在这里。
中文版京东购买点击这里。
做人工智能需要处理大量的数据,这就需要使用数据库,了解数据库的基础。同时,这本质也是在学习“数据模型”这个概念,了解数据存储的设计方案。
数据库方面的经典教材也很多。如果只是简单学习 SQL 语言的话,我认为《SQL必知必会》最实用。我曾经推荐这本书给某个同学,这名同学两周的时间,不但刷完了这本书,还把 Leetcode 上所有数据库相关的问题都给做了。
亚马逊链接在这里。
中文版京东购买点击这里。
另外,有两个在线学习 SQL 的网站,挺有名的。有兴趣的同学可以尝试。
一个叫 SQLZoo。
另一个叫 SQLBolt:
当然了,关于数据库,如果追求的并不仅仅是使用 SQL 的话,我推荐学习斯坦福大学的课程 CS145:Data Management and Data Systems。
传送门:https://cs145-fa19.github.io/
这门课程有一个后续课程,即斯坦福大学的课程 CS245:Principles of Data-Intensive Systems。
传送门:http://web.stanford.edu/class/cs245/
如果想接触数据库的实践,强烈推荐斯坦福大学的 CS346: Database System Implementation。翻译过来就是【数据库系统实现】。这门课程带你从底层实现一个数据库!
传送门:https://web.stanford.edu/class/cs346/2015/
同时,中国大学MOOC平台的两门课程,也值得推荐。分别是“数据库系统(上):模型与语言”和“数据库系统(下):管理与技术”。
传送门:
https://www.icourse163.org/course/HIT-1001516002
https://www.icourse163.org/course/HIT-1001578001
我上学的年代,并行计算还不是计算机专业必学的内容。但现在,并行计算已经无处不在了。时代发展太快了,计算机专业的同学已经必学并行计算了。
关于在线课程,我推荐斯坦福大学的课程 CS149:PARALLEL COMPUTING
传送门:http://cs149.stanford.edu/fall19/
分布式系统相关的书籍,有一本非常著名。也有中文版,叫《数据密集型应用系统设计》
亚马逊链接在这里。
中文版京东购买点击这里。
作为一个人工智能专业的学习路径,终于出现人工智能啦!
在这里,我首先推荐大家整体性地了解人工智能这个领域。
什么叫整体地了解?因为现在说到人工智能,很多同学就会直接想到机器学习或者深度学习。但其实,机器学习和深度学习只是人工智能的一个子领域而已。
与此同时,有很多同学都问过我,想了解诸如 A* 算法,遗传算法,模拟退火,蚁群算法等等这类的算法,应该看什么?其实,这类算法都是人工智能算法,只不过在现阶段,相比机器学习的算法,这些算法的成绩不够“耀眼”。
但是,如果深入了解人工智能,我认为这些算法也是需要学习的。要知道,神经网络其实在十几年前,也是人工智能领域不够“耀眼”的思想之一,静静地躺在角落里,直到最近有了巨大的突破,风靡于世。谁知道再过十年,哪种思想会突然有所突破,爆发起来呢?
关于整体性地了解人工智能,最经典的教材,就是这本了:
亚马逊链接在这里。
中文版京东购买点击这里。
但是,这本书是一个大部头,细细啃一遍太花时间了。我建议配合一个视频课程看。比如,斯坦福大学的 CS221: Artificial Intelligence: Principles and Techniques
传送门:https://stanford-cs221.github.io/spring2020/
或者,EdX 上有一门课程,我学过,是以这本书为纲的,我觉得挺不错的。可以免费试听。
传送门:https://www.edx.org/course/artificial-intelligence-ai
现在,是时候深入学习当下人工智能领域最主流的方法:机器学习和深度学习了。
机器学习领域最著名的课程,就是斯坦福大学的 CS229 了。Andrew Ng 在 Coursera 上大名鼎鼎的《机器学习》课程,就是这门 CS 229 的简化。
斯坦福大学的 CS 229,比 Coursera 上的课程更加深入,内容也更丰富。不过现在,已经不是 Andrew Ng 讲了。
传送门:http://cs229.stanford.edu/
当然,说到了 Andrew Ng,就要说说他在 Coursera 上的一系列课程,在这个阶段都可以看一看。
最著名的当属 Machine Learning。这名课程的 logo 使用的这个小机器人,都快成机器学习领域的吉祥物了。
传送门:https://www.coursera.org/learn/machine-learning?
Andrew Ng 后来创办了 deeplearning.ai 后,在 Coursera 上开设了一个深度学习的系列课程,也值得学习。 (虽然使用的 tf 版本有点儿老。)
传送门:https://www.coursera.org/specializations/deep-learning
对于书籍,我推荐 Hands-On Machine Learning with Scikit-Learn, Keras, and TensorFlow: Concepts, Tools, and Techniques to Build Intelligent Systems。
亚马逊链接在这里。
中文版京东购买点击这里。
这本书国内有引进,但是国内引进的是第一版,现在国外最新版本已经是第二版了。
不过这本书偏实战。如果对偏理论感兴趣的同学,当然就推荐西瓜书啦。
京东购买链接点击这里。
最近,周志华老师还出了一本书,叫《机器学习理论导引》,豆瓣评分也颇高,相信也不错。
京东购买链接点击这里。
其实,数据科学和基础的机器学习算法的应用有很多重合的地方。在这里,想强调一点,对于使用 Python 做机器学习,有一些基础的库需要大家熟练了解,主要就是 numpy,pandas,包括大家如果做可视化的话,需要使用 matplotlib。对于这些内容的学习,推荐一本书:Python for Data Analysis
亚马逊链接在这里。
中文版京东购买点击这里。
学习了机器学习,大家就会知道,大多数机器学习方法都是要求解一个最优函数。其中就需要的一个相对比较专门的数学基础:凸优化。
关于凸优化,斯坦福大学的 CS364a 是这方面的入门课程。另外,课程中也推荐了一本教材。
传送门:http://web.stanford.edu/class/ee364a/
概率图模型也是深入理解很多人工智能方法的利器,在图像识别,自然语言处理领域都有非常多的应用。我研究生时期的毕业课题,是做虚拟动作识别,也需要使用概率图模型。
关于概率图模型,斯坦福大学有一门非常经典的课程 CS 228: Probabilistic Graphical Models
传送门:https://cs.stanford.edu/~ermon/cs228/index.html
在 Coursera 上也有一个概率图模型的系列课程,是斯坦福的这门课程的简化版本。
传送门:https://www.coursera.org/specializations/probabilistic-graphical-models
数据挖掘主要是对大规模数据进行处理的。在数据的聚类分析,大规模的监督学习,包括推荐系统等领域,都有广泛应用。
对于数据挖掘,推荐斯坦福大学的 CS246: Mining Massive Data Sets。
传送门:http://web.stanford.edu/class/cs246/
机器学习方法是领域相关的。在不同的领域,有很多专有的方法,包括专门的研究对象,需要进一步学习。
学到这里,相信大家已经有了相当的基础,可以挑选自己喜欢的方向,去做专门的学习了。
计算机视觉近乎是现在人工智能被应用最广泛的领域了,从人脸识别到 OCR,从无人驾驶到各种工业机器人的智能系统。
对于人工智能在视觉领域的应用,最著名的课程,应该就是华人科学家李飞飞在斯坦福大学的课程了。CS231n Convolutional Neural Networks for Visual Recognition。
传送门:http://cs231n.stanford.edu/
当下人工智能另外一个应用非常广泛的应用领域,就是自然语言处理了。
这方面的经典课程,我推荐斯坦福大学的 CS224n: Natural Language Processing with Deep Learning。
传送门:http://web.stanford.edu/class/cs224n/
最近,Andrew Ng 的 deeplearning.ai 在 Coursera 上新开设了一个系列课程,叫 Natural Language Processing Specialization,有兴趣的同学也可以参考。
传送门:https://www.coursera.org/specializations/natural-language-processing
人工智能在金融领域的应用也是一个重要的趋势。但是通常,在计算机专业中,不是被特别强调。毕竟大多数计算机专业的学生还是要去 IT 大厂,而不是华尔街。
但是因为有很多同学对人工智能在金融领域的应用感兴趣,在这里也提一句。我在我的《开源分享第一期》,就分享了一本书,是公认的机器学习在金融领域应用的宝典。感兴趣的同学可以参考:
亚马逊链接在这里。
同样,机器学习在医学医药领域也有了越来越多的应用。只不过通常计算机专业的同学不很了解这方面。而是相反的,很多医学医药领域的人,会来学习人工智能的知识,进而应用在自己的领域,这种情况更多一些。
关于生物医学医药领域,整体我还是很看好的。虽然不知道爆炸的时间是什么时候,但我相信有着光明的未来。
而且,这个领域和计算机专业有着越来越多的交集,我之前在公众号还写过一篇文章:《算法不好的工程师不是优秀的生物学家》。
在这方面,Andrew Ng 的 deeplearning.ai 在 Coursera 上也开设了一个系列课程,叫 Ai for Medicine,感兴趣的同学可以去了解一下。
传送门:https://www.coursera.org/specializations/ai-for-medicine
当然了,学习到这里,大家已经可以(其实早就可以了)去参加 Kaggle 的竞赛了。在 Kaggle 上,会有大量真实的数据供大家实验,让大家尝试解决“真实的问题”。虽然在这类平台上竞技,其实和解决真实的问题还是有差距,但也比使用虚拟的数据,或者仅仅是学习原理,强太多。
同时,Kaggle 也绝不仅仅只是一个竞赛平台,更是一个非常好的学习平台,或者说是机器学习相关的垂直交流平台。Kaggle 上大部分任务都有相当多的公开的 notebook,供大家交流学习。仔细研究的话,相信每个人都能从中受到很多启发。
当然了,如果此时,大家有机会,能到真正的业界去参与真实的项目,那就更赞了。
如果你真的想认真学习人工智能,相信这篇文章,为你提供了一个很好的路线。
所有的资源都在这里了,就差投入时间精力好好学习了:)
大家加油!
如果大家还有好的资源补充,欢迎大家来给我提 issue 哇!:)