0_Leanring and Resource
1. 入门介绍
本资料介绍机器学习领域学习的基本路线,从统计学习一直到强化学习,但是不一定需要全部学完,例如如果重点放在数据分析上,只需要学习到统计学习部分即可。强化学习在当今机器学习研究中占比没有那么大,主要是因为其学习成本高,并且现实落地比较少,目前比较有名的强化学习应用有 Alpha Go,击败人类围棋世界冠军柯洁,还有 Alpha Star,这是应用在星际争霸中的游戏 AI。但也正是因为强化学习的研究相对较少,代价是要学习更多东西。
本文档提供从入门学习路线开始详细介绍各个预备知识的学习方法、路线和资料,最后会提供强化学习的学习资料,但并不详细介绍每一种强化学习算法,该内容可以在其他小节阅读。
2. 基础编程
2.1. 格式规范
一定要保证良好的编程习惯,包括代码的规范,如双目运算符号前后都要有空格,列表、元组中逗号后面要加空格,写注释之前要空两格等,通常称为 pep8 规范,其官方文档 PEP 8 给出了详细说明,但刚开始无需关注太多,只需要从最基本的开始注意即可,这些规范在各种 python 教学中也都是遵守的,可以留意观察和模仿。也可以关注那些写的比较好的代码的格式和涉及思路,学习其编程的风格和习惯,比如 OpenAI 的代码风格。
Python 非常重视代码规范问题,力求写规范代码,保证代码易读和优雅。
2.2. 查阅文档解决问题
在编程中可能遇到很多报错,要尝试理解报错提示,看看能不能自己直接解决,也可以在网络上搜索该报错,看看别人是不是已经遇到过了,并且是怎么解决的。实际上大部分报错都已经有人遇到过了;但是,推荐先查阅官方文档,例如 pytorch 的官方文档是 PyTorch documentation,也有 PyTorch 中文文档 但时效性较差。比如想知道 Pytorch 包中 torch.nn.Dropout()
的用法时,可以在官方文档中搜索其说明,但也可以在百度或者谷歌中搜索从而找到第三方资料,很多学习者会通过在线博客的形式对该函数作解释说明。
网络上有很多技术交流讨论群,切忌不作任何说明就把报错信息以文本或者截图甚至照片的形式发到群里,学会提问很重要。
2.3. 面向对象编程的思路
python 代码是可以写单行脚本去运行的,但一定要在学习基础时重视学习函数编程,在后面还会遇到甚至经常涉及类封装编程,面向对象的设计思路在简单的学习任务中没有太大必要,但是在实际应用中很重要。
2.4. 解释器
对于学习路线是数据科学方向,或者说与开发无关的,推荐先使用 Python 自带的 idle 学习最基本的编程,或者也可以先安装 anaconda 集成环境,使用其中的 jupyter notebook,然后可以尝试类似但功能更多的 jupyter lab;此外,anaconda 中还有 spyder,可以体验一下;如果已经对 python 编程比较熟悉,并且对 jupyter 等工具也比较熟悉,可以使用 VSCode 作为最终工具,支持几乎所有编程语言。此处提到的解释器都是免费开源使用。对于有经验并且动手能力比较强的学习者来说,可以直接上手 VSCode。
PyCharm 适合学习路线为开发的学习者使用,否则一概不推荐。PyCharm 有免费版和付费版,区别很大。
2.5. 撰写笔记
推荐使用 obsidian 或者 Typora 等软件整理学习笔记,采用 Markdown 语法编写文档,可以方便地控制标题级别、编写代码片段、插入图片、编写公式等,写起来更方便并且适合在线阅读。目前几乎所有 IT 领域在线资料都是用 Markdown 格式编写,包括本文档。
一旦有一些自己的理解或者想法,建议多做记录。
2.6. 学习资料
仅推荐中国大学 MOOC 中北理工嵩天视频课程,B 站也有相关相同课程。
- Python 语言程序设计_北京理工大学_中国大学 MOOC(慕课)
- Python数据分析与展示_北京理工大学_中国大学MOOC(慕课)
- Python网络爬虫与信息提取_北京理工大学_中国大学MOOC(慕课)
- Python科学计算三维可视化_北京理工大学_中国大学MOOC(慕课)
- 北理工嵩天其他课程...
2.7. 开源学习
Python 大部分资料都是开源的,这意味着不仅是免费的,而且公开该项目的全部信息,包括代码实现等,尤其在人工智能领域,非常注重技术开源。因此我们可以在网上轻松免费获得大部分资料,足够支撑一个普通学习者走到技术前沿,这样的开源环境依赖所有学习者的贡献精神,因此也建议学习者将自己比较好的经验和学习资料在有条件的情况下进行开源,方便后来者学习。
3. 传统机器学习(统计学习)
如果找工作要找数据分析相关的,重点学好统计学习就行了。
-
推荐资料
- 《机器学习实战:基于 sklearn、keras 和 tensorflow》,可能要出第三版
-
传统机器学习基础包
- 基础包在这里是指 Python 中的一些包,这里只推荐sklearn。
- sklearn,经典中的经典,容易实现容易学习。
-
线性模型
- 前期选学,方便入门传统机器学习。
-
支持向量机(SVM)
- 前期选学,在强化学习中几乎不会用到,但在集成学习中可能包含。
-
随机树(RT)
- 前期选学,便于理解随机森林。
-
随机森林(RF)
- 前期选学,便于理解集成学习。
-
集成学习
- 前期选学,强化学习中存在集成学习的概念。
4. 深度学习
研究人工智能就必须要研究深度学习。
-
推荐资料
- 《机器学习实战:基于 sklearn、keras 和 tensorflow》,缺点是 tensorflow 已经不是主流,但是里面关于 sklearn 和 keras 还是不错的。
- 《动手学深度学习》pytorch 版,李沐,中文深度学习权威教学书。
- 《机器学习》西瓜书和其他机器学习“圣经”,数学功底不足者谨慎阅读,否则可能浪费很多时间。
-
深度学习基础包
- 深度学习包具有大量现成函数和方法用于实现神经网络中的组成部分,例如无需手写单个神经元的线性运算和激活函数,直接调用一个函数即可,也通常具有自动微分器,可以方便地进行梯度微分。
- keras:通过高级封装,实现更简单轻松,非常适合中小任务,写法类似 sklearn 因此方便上手。
- tensorflow:不建议深入学习,但 tensorflow 中集成了 keras,可以只学习其中的 keras 实现,与单独的 keras 基本一致。
- pytorch:高级封装少,自定义程度更高,书写更复杂,bug 比较少,适合中后期使用。
-
多层感知机(MLP,Multilayer Perception )
- 基础必学,也就是最基础的神经网络技术,有多种名字,包括全连接神经网络(FCNN)、线性层(Linear layer)等,在更先进的框架,如基于注意力机制的 transformer 框架的描述中,全连接层(FCNN)被称为 Linear layer(线性层),在很多地方也会被称为 MLP(多层感知机),其中线性层的含义是仅有连接没有激活函数,参考详细神经网络资料。
- 全路径神经网络的优点在于可以轻松实现特征提取,或者说维度修改,比如输入 10 个数据,可以输出 1 个或者 5 个数据,按照任务需要随时改变,因此大部分现代模型都会在最后部分加入线性层。
-
卷积神经网络(CNN)
- 中后期必学,建议学完全连接神经网络之后接着学习。
- 处理图像的基本模型。
- 在基本全连接神经网络中上引入卷积和池化的操作,类似对图片进行特征采样,观感上类似打马赛克,降低图像复杂程度,最后仍然交给全连接神经网络处理。
-
递归神经网络(RNN)
- 中后期必学,建议学完 CNN 之后直接继续学 RNN。
- 处理时间序列数据和类似数据的基本模型。
- 还包括 LSTM 和 GRU,需要一并掌握用法和基本思想。
-
生成对抗神经网络(GAN)
- 中后期选学,可以在学完 RNN 之后继续学习 GAN。
- GAN 提出两个模型可以相互对抗,其中一个模型扮演判别器,需要先训练,训练好它可以判断一个输入的类型(比如判断图片是猫还是非猫);另一个模型是生成器,它生成一些样本(例如猫的图片),生成器刚开始会随机生成一些图片,很容易被判别器认为是假(非猫),依据判别器给出的结果计算一个损失,并且以此调整生成器的参数,目的是训练生成器生成猫的图片并且骗过判别器,让其认为图片是真(猫)。
- 生成对抗的思想在现代强化学习如逆强化学习中有所应用,但此方面研究暂时不多。
-
图网络(GNN)
- 中后期选学,在一些具有拓扑结构的环境中可能有作用。
- 包括融合其他设计的如图卷积(GCN),图注意力(GAT)等模型。
-
注意力机制(attention)
- 后期选学,前期中期简单了解即可。
- 原本用来处理时序数据,后来也被拓展到图像领域。
- 当今最先进模型(GPT)的基本机制,越来越多模型在蹭注意力机制的热度。但是对于中小型任务来说并没有太大作用,有时候效果甚至不如 LSTM。
-
扩散模型(diffusion)
- 后期选学。最前沿的生成模型之一,多用于文生图,研究起来对数学要求比较高。
4.1. 深度学习前沿论文解读
- 如何读论文 李沐带你读论文系列,解读了近年几十篇最前沿论文,包含大部分现代深度学习技术。
5. 强化学习资料
- 算法入门
- 《强化学习导论》——Sutton(英文),缺少现代深度强化学习知识。
- 《Easy RL》蘑菇书,重点看理论和公式推导。
- 《动手学强化学习》,代码较好。
- OpenAI 的 spinning up 是一个还不错的资料,但内容比较杂,并且也并没有经常维护,里面包括基本算法教学和重要论文、视频等资料汇总,需要自己在网站中查找一下,但无实体书和官方中文。
- 强化学习入门环境
- Gymnasium,OpenAI 提供的简单环境,简称 Gym,包含几十个小游戏,有简单的也有困难的,方便测试强化学习算法,目前网上大部分资料都是 0.26 之前版本(调用时写 Gym),但最新版本已经到 0.28 以上(调用时写 Gymnasium,但口头上也简称 Gym),修改了少数接口输出,但也导致大部分已有资料中的代码无法直接复用,需要进行一些修改。
- 高级强化学习封装包
- OpenAI 的 stable-baselines ,无需手写具体算法,提供了高级封装,方便在简单情况下进行快速测试和实验,但建议先学具体算法实现后再学习这个,因为并不能快速 0 门槛上手,需要有一些基础。
- 也有其他民间组织开源在github的强化学习高级封装框架,可以在github自行查找。
- 自定义环境
- 可以模仿 Gym 的环境直接写一个类封装,适合本地测试,并且在绝大部分适合也可以迁移使用,比较容易。
- Using Custom Environments — Stable Baselines ,stable-basline 提供的自定义环境的教学,基本也是按照 Gym 的设计流程和模式,提供了一个编写自己环境的 dome 可以在在线笔记本中运行,以此学习如何建立一个定制环境。
- Make your own custom environment ,Gymnasium 关于自定义环境的官方教程,即完全按照 Gym 的设计模式进行编写,需要打包操作,涉及 Python 高级方法,比较麻烦但是非常严谨。