初学者常常以为他们可以通过几个实现最新算法的教程来学习人工智能/机器学习,因此我想与大家分享一些关于学习人工智能的笔记和建议。我还在GitHub上有一个存储库,其中包含了许多关于各种主题的人工智能/机器学习文章的笔记和链接。LearnAI。
背景
作为一名有25年以上软件工程经验的专业人工智能工程师,我设计和实现了各种各样的软件应用和技术。因此,我使用和实现了数百(也许数千)个软件库、框架和API。我还拥有数学硕士学位和人工智能硕士学位,因此我有足够的资格指导和教授本科数学和计算机科学课程,以及许多研究生数学/计算机科学课程。
人工智能的学习者应该确保学习人工智能的历史,这个历史充斥着对人工智能能做什么的夸大宣传和炼金术。因此,学习人工智能的学生也需要有一定的怀疑精神。
由于这是一个人工智能网站,我假设大多数读者的目标如下:
- 你对成为一名人工智能/机器学习工程师感兴趣。
- 你对学习软件工程最佳实践感兴趣。
如何成为一名人工智能工程师
先决条件
在学习人工智能/机器学习之前,以下是你应该了解的一些本科先决条件:
- 微积分
- 离散数学
- 高级线性代数
- 概率和统计
- 统计编程
计算机科学学位通常要求以下课程:
- 算法和数据结构
- 计算机组织
- 计算机网络
- 操作系统
- 分布式计算
在参加谷歌的机器学习或数据科学课程之前,谷歌建议你做以下准备工作
以下是我发现有用的一些数学资源:
- 科学家和工程师的数学复习手册
- 三角函数手册
- 统计学中的如何撒谎的课程
- 循环神经网络及其背后的数学介绍
- 免费学习数据科学
避免的常见错误
以下是学习机器学习时应避免的一些初学者错误:
- 问:“解决X问题的最佳算法是什么?”
- 试图从头开始编写机器学习算法。
- 在学习人工智能时使用自定义数据集和/或解决现实世界的问题。
- 试图从研究论文中学习人工智能。
- 仅在最后一种情况下使用神经网络。
避免从头开始编写算法
在应用数学中,重点是应用数学而不是公式的推导。同样,人工智能工程是将算法应用于解决问题。因此,重点是了解对于给定问题有哪些可用的算法、它们是如何工作的以及如何充分利用它们,而不是实现细节。
任何有能力的软件工程师都可以实现任何机器学习算法 —— 路易斯大学教授
为什么?有太多的机器学习算法需要软件开发人员从头开始编写,并且需要理解所有必要的细节。事实上,还在不断开发出更多的算法。仅仅专注于“更有趣”或最先进的算法是一个灾难性的初学者错误。事实上,还有许多其他比知道如何实现一个机器学习算法更重要的概念(参见核心人工智能概念)。
一旦你掌握了使用人工智能算法的技巧,以后你可以回过头来,如果需要的话,通过手动编码来理解它们的内部工作原理。
避免试图从研究论文中学习人工智能
研究论文不是学习一个主题的好资源。读者被假定已经掌握了教科书中涵盖的核心理论和概念。因此,学习人工智能的最佳方法是使用一本好的教科书。
请记住,大部分AI研究文章的结果基本上是无法重现的。事实上,目前AI研究存在着严重的诚信问题。离像IEEE这样的知名出版物越远,问题就越严重。
这个问题在Russell和Norivg [8]以及其他研究生教材中有更详细的讨论。
学习提示
以下是学习AI的一些建议:
- 在更复杂的算法之前更偏好使用简单的算法(奥卡姆剃刀原则)。因此,深度学习模型应该是你的最后选择。
- 没有所谓的最佳,只有足够好(无免费午餐定理)。
- 知道何时不使用AI。
- AI清单
核心AI概念
以下是一些关键的AI概念需要学习:
- 如何定义问题?
- 如何选择数据集?
- 如何进行数据准备?
- 如何进行特征工程?
- 如何选择算法?
- 如何选择性能指标?
- 如何训练模型?
- 如何呈现结果?
- 如何设计和部署解决方案?
- 如何调试模型?
在研究生阶段,我们被教导学习AI的正确技术是黑盒[7]视图的机器学习算法(自上而下的方法),因为当你刚开始时,最好不要浪费时间尝试手动编写算法(自下而上的方法)。
除非你正在开发商业AI软件库,否则你会发现关注算法的内部实现几乎没有什么可学的。更重要的是专注于学习如何使用和部署AI算法。
在软件工程中,有许多众所周知的原则,如DRY,KISS和奥卡姆剃刀。也许最重要的原则是“不要重复造轮子”(DRTW)。然而,似乎每个机器学习的初学者都会尝试从头开始实现一个神经网络。一个AI工程师需要知道所有软件库、API和算法在应用中的最佳使用方法,而不仅仅是AI库。
奥卡姆剃刀原则:最简单的适合数据的解决方案通常是最好的。
一位专业的AI工程师知道当前最佳实践是以数据为中心而不是以模型为中心的方法来进行AI/ML。因此,初学者应该专注于学习数据准备、特征工程、降维等关键概念和技术,而不是特定模型/算法的实现细节。此外,为了在AI方面取得有效的成果,需要从追求“最佳”模型/方法转变为“足够好”的思维方式。
如今,自动化完整的软件开发生命周期是AI软件开发(MLOps)的重要组成部分,因此如果有强大的库和框架可用,应该避免编写自定义代码。
简而言之,在深入了解实现细节之前,最好先了解AI工程过程的整体情况(自上而下的方法)。
如何选择模型
有时候我曾试图帮助初学者,只发现他们已经花费了数百小时从教程(或更糟糕的,从Tensorflow/PyTorch文档)中编写错误的模型和/或解决错误的问题。事实上,当告诉他们犯了一个错误时,他们通常不愿意听取意见,我称之为代码固执。
在学习AI时,你应该首先花时间寻找几个由有资质人士编写的解决类似问题的好教程/示例。
接下来,你需要花时间了解你的数据集,确保正确地对其进行建模。例如,仅仅因为你的数据是股票数据或包含时间特征,并不意味着最好将数据建模为时间序列和/或使用神经网络。
最后,使用AutoML工具(例如Orange)在你的数据集上(或数据集的子集,如果数据集非常大)上评估许多简单模型,以找到表现最好的模型作为比较的基准。请记住,你最终选择的模型应该比所有更简单的基准模型表现得更好。
一般来说,即使是最复杂的SOTA模型也只能实现小幅度的性能提升(比如3-5%),这还不足以证明它们在解决现实世界问题中的使用。
教程和书籍
选择一个机器学习学习资源主要是个人偏好的问题。一般来说,我建议在学习人工智能时除了文档之外,参考多个资源。我有一篇VoAGI文章,AI学习资源,列出了一些我认为有帮助的AI资源。由于AI工程是软件工程的延伸,你应该对SWEBOK中提到的关键概念有深入的理解。
我需要硕士学位吗?
如果你打算花时间学习人工智能,那么你应该考虑在线学位,这将大大增加你的职业机会(几乎所有AI工程职位都要求)。很多人似乎忘记了人工智能被认为是研究生级别的话题。事实上,AI工程是一门工程学科。大多数工程学科都需要专业学位,但出于某种原因,软件工程并不需要,这可能是为什么85%或更多的AI项目失败的原因之一[6]。
以下是一些可以帮助你做出决策的文章:
- 你需要数据科学硕士学位吗?
- 你是否具备作为数据科学家被聘用的学位?
- 为什么机器学习工程师正在取代数据科学家
- 机器学习工程师可能取代数据科学家:为什么?
- 人工智能硕士-前十名项目
- Lewis大学人工智能MSCS
结论
本文主要是为了帮助许多对自学方法感兴趣的Slack Discord论坛用户。然而,如果你打算花时间学习人工智能/机器学习,那么投资在线学位将是明智之举,这将大大增加你的职业机会。
参考文献
[1] P. Bourque和R. E. Fairley,Guide to the Software Engineering Body of Knowledge,v. 3,IEEE,2014。
[2] IEEE道德准则
[3] ACM道德准则
[4] J. Brownlee,“5个程序员在开始机器学习时犯的错误”,Machine Learning Mastery,2014年1月39日。
[5] J. Brownlee,“停止从头开始编写机器学习算法”,Machine Learning Mastery,2016年10月5日。
[6] T. Shin,“为什么你不应该使用机器学习的4个原因”,Towards Data Science,2021年10月5日。
[7] E. Gamma,R. Helm,R. Johnson和J. Vlissides,设计模式:可重用面向对象软件的元素,第一版,Addison-Wesley Professional,ISBN-10:0201633612,1994年。
[8] S. Russell和P. Norvig,人工智能:现代方法,第四版,Upper Saddle River,NJ:Prentice Hall,ISBN:978-0-13-604259-4,2021年。
[9] M. Hunter,“6个强大的学习技巧,帮助你掌握数据科学中最困难的主题”,Towards Data Science,2022年6月10日。
[10] A. Joury,“忘掉算法和模型-先学会解决问题”,Towards Data Science,2022年9月9日。