Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

Python人工智能学习路线(长篇干货) #22

Open
aialgorithm opened this issue Oct 5, 2021 · 1 comment
Open

Python人工智能学习路线(长篇干货) #22

aialgorithm opened this issue Oct 5, 2021 · 1 comment

Comments

@aialgorithm
Copy link
Owner

aialgorithm commented Oct 5, 2021

前言

谈到人工智能(AI)算法,常见不外乎有两方面信息:铺天盖地各种媒体提到的高薪就业【贩卖课程】、知乎上热门的算法岗“水深火热 灰飞烟灭”的梗【贩卖焦虑】。

其实,这两方面都是存在的,但都很片面,这里不加赘述。客观地说,数字化、智能化是人类社会发展的趋势,而当下人工智能无疑是一大热门,那是蓝海还是火海?我们回到老道理—水的深度,只有你自己去试试水才知道。

当你对上面情况有了初步的了解并想试试水,需要面对的问题是:AI入门容易吗?

答案其实是否定的,难!AI领域需要钻研算法原理、大量复杂的公式及符号、无所适从的项目都是劝退一时热度初学者的原因。但这些原因对于一个初学者,根本上是面对这样困难的学科却缺乏合适方法导致的。反问一个玩笑,程序员怎么会没有方法呢?随手就定义一个Python方法(funtion)

def funtion():
       
    return 'haha,往下继续看'

回到笔者,一名普普通通的程序员,当初也是误打误撞学习Python入门到机器学习、深度学习,至今有4个年头,踩了很多坑,下文说到的学习方法、路径也就填坑试错的经验罢了。

本文适用于AI领域了解不深、有些(高中+)基础知识且有自学兴趣的同学。对于已上岸的同学有兴趣就跳着看吧。

以下为正文:

一、学习方法

说到学习方法,其实我们谈到的人工智能之所以智能,核心在于有学习能力。而人工智能学习过程有两个要素:

1、学习目标是什么(--什么目标函数)?

2、如何达到目标(--什么算法)?

人工智能领域很多思路和人类学习是很共恰的!可以发现这两个问题也是我们学习这门学科需要回答的。

  • 学习目标是什么?

我们的学习目标比较清楚,就是入门人工智能领域,能完成一个AI相关的任务,或者找到相关的工作。

  • 如何达到目标?

1、入门人工智能是个宽泛的目标,因此还得 将目标拆分成阶段性目标才易于执行,可以对应到下面--学习路线及建议资源的各个节点。

2、学习人工智能这门学科,需要提醒的是这本来就是件难事,所以实在搞不懂的知识可以放在后面补下,不要奢求一步到位(当然天赋了得另说),不要想一下子成为专家,可以从:懂得调用现成的算法模块(scikit-learn、tensorflow)做项目 -进阶-》懂得算法原理进一步精用、调优算法 -进阶-》领域专家。保持学习,循序渐进才是啃硬骨头的姿势。

3、啃硬骨头过程无疑是艰难的,所以慢慢地培养兴趣和及时的结果反馈是很重要的。这方面上,边学边敲代码是必须的,结合代码实践学习效率会比较高,还可以及时看到学习成果,就算是啃硬骨头看到牙印越来越深,不也是成果,也比较不容易放弃!

二、学习路线及建议资源

对应到学习路线,简单来说如下几方面:

--》宽泛了解领域,建立一定兴趣

--》基础知识、工具准备

--》机器学习|深度学习的入门课程、书籍及项目实践

--》(面试准备)

--》自行扩展:工作中实战学习 或 学术界特定领域钻研,经典算法原理、项目实践

2.1 了解领域,建立一定兴趣

首先对人工智能领域有个宽泛的了解,有自己的全局性的认识,产生一些判断,才不会人云亦云地因为“薪资高、压力大等” 去做出选择或者放弃。你做的准备调研越多,确认方向后越不容易放弃。

人工智能(Artificial Intelligence,AI)之研究目的是通过探索智慧的实质,扩展人类智能——促使智能主体会听(语音识别、机器翻译等)、会看(图像识别、文字识别等)、会说(语音合成、人机对话等)、会思考(人机对弈、专家系统等)、会学习(知识表示,机器学习等)、会行动(机器人、自动驾驶汽车等)。一个经典的AI定义是:“ 智能主体可以理解数据及从中学习,并利用知识实现特定目标和任务的能力。

从技术层面来看(如下图),现在所说的人工智能技术基本上就是机器学习方面的(其他方面的如专家系统、知识库等技术较为没落)。关于人工智能的发展历程,可以看看我之前一篇文章人工智能简史

机器学习是指非显式的计算机程序可以从数据中学习,以此提高处理任务的水平,机器学习常见的任务有分类任务(如通过逻辑回归模型判断邮件是否为垃圾邮件类)、回归预测任务(线性回归模型预测房价)等等。深度学习是机器学习的一个子方向,是当下的热门,它通过搭建深层的神经网络模型以处理任务。

从应用领域上看,人工智能在众多的应用领域上面都有一定的发展,有语言识别、自然语言处理、图像识别、数据挖掘、推荐系统、智能风控、机器人等方面。值得注意的的是,不同应用领域上,从技术层面是比较一致,但结合到实际应用场景,所需要的业务知识、算法、工程上面的要求,差别还是相当大的。回到应用领域的选择,可以结合技术现在的发展情况、自己的兴趣领域再做判断。

2.2 基础知识、工具准备

学习人工智能需要先掌握编程、数学方面的基本知识:AI算法工程师首先是一名程序员,掌握编程实现方法才不将容易论知识束之高阁。而数学是人工智能理论的奠基,是必不可少的。

编程语言方面

**编程语言之于程序员, 如宝剑之于侠士。**编程语言就是程序员改变、创造数字虚拟世界的交互工具。

先简单介绍信息技术(IT)行业的情况,IT领域广泛按职能可以分为前端、后端、人工智能、嵌入式开发、游戏开发、运维、测试、网络安全等方面。前端常用技术栈为js\css\html,后端常用技术栈有Java\go\C++\php\Python等。

在人工智能领域,Python使用是比较广泛的,当然其他的语言也是可行的,如Java、C++、R语言等。语言也就工具,选择个适合的就好。结合自己的历程及语言的特性,AI小白还是建议可以从Python学起,理由如下:
1、因为其简单的语法及灵活的使用方法,Python很适合零基础入门;
2、Python有丰富的机器学习库,极大方便机器学习的开发;
3、Python在机器学习领域有较高的使用率,意味着社区庞大,应用范围广,市场上(具体可到招聘软件了解下)有较多的工作机会;

  • 学习编程语言的两点建议:

1、多敲代码:只看书、视频而不敲代码是初学者的一个通病。要记住的是“纸上得来终觉浅”,程序员是一个工匠活,需要动手敲代码实践,熟能生巧。

2、 多谷歌: 互联网的信息无所不包的,学会利用互联网自己解决问题是一项基本功。不懂可以谷歌,业界一句有趣的话:程序员是面向谷歌/stackoverflow编程的;

  • 建议资源:

以下资源只是一些个人的一些偏好推荐,挑一两种适合自己的资源学习就可以,不用全部都学浪费精力。如果都觉得不合适,按照自己的学习方式即可。

1、【Python入门书】首推Python经典书《Python编程从入门到实践.pdf(https://github.com/aialgorithm/AiPy/》,知识点通俗易懂,而且结合了项目实践,很适合初学者。注:Python在爬虫、web开发、游戏开发等方向也有应用,推荐本书主要学习下Python语法,而书后面的项目实战像有游戏开发\web开发,和机器学习关系不大,可以略过\自行了解下就好。

2、【Python入门教程】廖雪峰的Python在线学习教程,一个很大的特色是可以直接在线运行Python代码。

3、【Python入门视频】如果看书过于枯燥,可以结合视频学习,Python入门学习报培训班学习有点浪费,可以直接网易云课堂、Bilibili搜索相关的Python学习视频。我之前是看小甲鱼零基础入门学习Python课程,边看边敲敲代码,觉得还不错。

4、【Python机器学习库】学习完Python语法,再学习了解下Python上现成的机器学习库(模块包),了解基本功能学会调用它们(熟练掌握它们,主要还是要结合后面项目边学边实践才比较有效的。),一个初级的算法工程师(调包侠)基本就练成了。重要的机器学习库有:

pandas 数据分析、numpy 数值计算库、matplotlib可视化工具,推荐《利用pandas数据分析》有涵盖了这几部分内容。

scikit-learn 包含机器学习建模工具及算法,可以了解下官方文档https://scikit-learn.org.cn。

用于搭建深度学习的神经网络模型的库有:keras、tensorflow、Pytorch等,其中keras更为简单易用,可以参考Keras官方文档https://keras.io/zh,以及Keras之父写的[《Python深度学习》](https://github.com/aialgorithm/AiPy/tree/master/深度学习)

5、【Python进阶书】《Python Cookbook》、《流畅的Python》 这两本内容难度有提升,适合Python语法的进阶。

数学方面

1、数学无疑是重要的,有良好的数学基础对于算法原理的理解及进阶至关重要。但这一点对于入门的初学者反而影响没那么大,对于初学者如果数学基础比较差,有个思路是先补点“数学的最小必要知识”:如线性代数的矩阵运算;高等数学的梯度求导;概率的条件、后验概率及贝叶斯定理等等。这样可以应付大部分算法的理解。

2、如果觉得数学有难度,数学公式、知识的理解建议不用硬啃,不懂时再反查,遇到再回来补效果会好很多。(如果你的数学没有问题,忽略这些,直接复习大学教材补下基础)

  • 建议资源

【数学基础知识】推荐黄博翻译整理的机器学习相关的数学基础知识,内容简要,还是挺不错的。

高等数学
线性代数
概率与数理统计

工具准备

对于程序员,好的工具就是生产力!
1、 搜索引擎:学习开发的过程,很经常搜索问题、解决bug。搜索引擎的内容质量 首推谷歌,其次bing,再者才是百度、知乎等。谷歌如果使用不了,试试谷歌助手、科学翻墙、谷歌镜像网站,网上有教程自行了解。

2、翻译:AI领域最新的研究成果、论文基本都是英文的,而如果英文阅读比较一般,可以备个有道词典、wps文档翻译。

3、Python编辑器:首推JupyterLab,JupyterLab很方便数据分析操作,可以单元格中逐步运行代码验证结果。建议直接下载安装个anaconda,里面都有。Anaconda是一个用于科学计算的Python发行版,支持 Linux, Mac, Windows系统,提供了包管理与环境管理的功能,可以很方便地解决多版本Python并存、切换以及各种第三方包安装问题。

下载地址:

https://www.anaconda.com/download/

推荐选Anaconda (python 3.7版本)

IDE:推荐使用pycharm,社区版免费

下载地址:https://www.jetbrains.com/

安装教程:

Anaconda+Jupyter notebook+Pycharm:

https://zhuanlan.zhihu.com/p/59027692

Ubuntu18.04深度学习环境配置(CUDA9+CUDNN7.4+TensorFlow1.8):

https://zhuanlan.zhihu.com/p/50302396

2.3 机器学习\深度学习入门

深度学习是机器学习的子分支,与传统机器学习有些差异的地方(如特征生成、模型定义方面), 因此两者可以分开学习。都学习的话,建议可以先学机器学习再学深度学习。

机器学习\深度学习的内容可以分为两部分,**一部分是算法原理的理解,如神经网络模型正向反向传播原理、SVM原理、GBDT原理等等,这部分内容的理解相对较难,学习周期较长。**另一部分是算法工程实现的知识,如现实问题的理解、如何清洗数据、生成特征、选择模型及评估,具体可以看我之前的文章《一文全览机器学习建模流程(Python代码)》,这部分是比较通用的一套操作流程,学习周期比较短且容易看到实际成果。

对于初学者的建议,可以“先知其然,再知其所以然”,跟着课程\书学习,明白大致的算法原理及工程上是如何做的。再用简单的算法整个流程走一遍,结合实践过程中不断的比较和尝试各种算法,更容易搞透算法原理,而且这样可以避免云里雾里地学习各种算法原理。

以下相关资源推荐,同样找一两种合适的资源学习即可。

  • 建议资源

1、【机器学习视频】《吴恩达的机器学习课程》github.com/aialgorithm/AiPy/,很经典的入门课程,附笔记解析及代码。

2、【机器学习书】[《machine learning yearning_吴恩达》 ] (https://github.com/aialgorithm/AiPy/tree/master/%E6%9C%BA%E5%99%A8%E5%AD%A6%E4%B9%A0) 是吴恩达历时两年,根据自己多年实践经验整理出来的一本机器学习、深度学习实践经验宝典。

3、【机器学习书】《统计学习方法》 李航老师经典的机器学习书,书中的算法原理讲解还是比较细的。链接的资源有附上书中算法的代码实现、课件及第一版的书。(现在已经有第二版的书,可以买一本慢慢看)

4、【机器学习书】《机器学习(西瓜书)_周志华》 机器学习经典教材,难度适合进阶,里面的一些概念公式还是要有一定基础的,不太适合入门自学。(可搭配datawhale的南瓜书本理解难点公式)

5、【深度学习视频】《吴恩达的深度学习课程》github.com/aialgorithm/AiPy/应该是国内大多数人的入门课程,附笔记解析及代码。

6、【深度学习书】《深度学习(花书)》 AI大佬Ian Goodfellow的深度学习领域经典著作,知识点很系统全面,但还是需要一定基础才好看懂,初学者可以结合视频、花书笔记辅助理解。

7、【深度学习书】《python深度学习》keras之父的经典著作,通俗易懂适合入门。

8、【深度学习书】《深度学习实战》 这本书的结果和《花书》有些相似之处,原理讲解比较通俗,还有详细的代码实践。不足的地方是代码是用Python2写的有些过时。

9、【深度学习书】《动手学深度学习》 李沐大佬合著的深度学习入门教程及代码实践。

10、【深度学习论文】深度学习综述 :2015年Nature上的论文,由深度学习界的三巨头所写,读这一篇论文就可以概览深度学习了。这篇论文有同名的中文翻译
注:要全面了解一个技术领域,找找这个领域的综述论文是一个超实用的技巧。

11、【实战项目】 推荐实战下国外的Kaggle、国内天池等竞赛项目。从头到尾地参加一两个机器学习项目,并取得不错的分数,基本上就差不多了。安利个Datawhale小队整理的国内外经典竞赛的项目方案及代码实现 https://github.com/datawhalechina/competition-baseline

2.4 工作面试准备

对于大部分入门的初学者,要真正算入门人工智能领域,找一份相关的工作是必不可少的,当你有(哪怕一点点)相关的工作经验后,这个领域工作面试就比较好混得开了。

很多初学者可能有个困惑,学习到什么样程度、多久才能找到相关的工作机会呢?这个不好回答,和学习准备的程度、市场招聘情况、运气等有关,只能说觉得学得差不多了就可以找面试机会试下水(以个人学习为例,学习了Python+吴恩达机器学习\深度学习视频+几个书本\数据竞赛项目+刷面试题,前前后后差不多用了半年。)

准备面试找工作,首先要了解下市场情况及招聘要求,通常无非要求有相关的论文著作、工作经历、项目经验、对算法的理解。撇开第一、二项的论文、工作经历不谈。对于初学者,面试的主要比重是项目经验及算法的理解。

项目经验就结合项目实战的做法和理解(这些最好有博客记录)。而算法原理除了平时的积累,刷下面试题是很关键的,毕竟面试内容与实际工作内容很多时候像是“造火箭与拧螺丝的关系”。

  • 推荐些经典的面试题库

1、 基础数据结构与算法,LeetCode算法题库:https://github.com/apachecn/Interview/tree/master/docs/Algorithm;

2、Python基础算法实现: https://github.com/TheAlgorithms/Python;

3、Python面试题 https://github.com/taizilongxu/interview_python

4、Datawhale小队整理的面试宝典,内容包括基础算法数据结构、机器学习,CV,NLP,推荐,开发等。https://github.com/datawhalechina/daily-interview

5、机器学习面试题,这仓库后面就没有更新了,有些内容可能有点过时https://github.com/DarLiner/Algorithm_Interview_Notes-Chinese

6、面试技巧:推荐阅读程序员面试完全指南

总结

学习到这里,可以说是踏入AI领域的门了。俗话说“师傅领进门,修行在个人”,本文仅能帮助有兴趣的同学简单入门这个领域,而要在这领域成为专家是很困难的,是需要长期的努力积累的。再者,IT行业技术更新迭代快,保持学习才是王道。

最后,希望这篇文章可以帮助到大家,共同学习进步吧。


码字不易,如觉得本文有帮助,您的关注点赞是最大的支持!
文章首发于算法进阶,公众号阅读原文可访问--学习资源推荐--

@aialgorithm aialgorithm pinned this issue Nov 29, 2021
@aialgorithm aialgorithm unpinned this issue Nov 30, 2021
@seabascuit
Copy link

3Q

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment
Labels
None yet
Projects
None yet
Development

No branches or pull requests

2 participants