Note

  • 本文内容适合想入门机器学习方向的新手,但本文仍有门槛,假设你已具备以下知识:
    1. 懂得如何科学上网,由于网络限制,部分资源的访问会变很慢,因此一个科学上网的工具可以省去过程中的绝大多数麻烦
    2. 有一定的 python 编程基础,明白浅拷贝、深拷贝区别,会面向对象编程,变量的作用域即可

快速入门

现有的人工智能主要分为两个技术路线:机器学习深度学习,两者的技术方向是完全不同的。

针对经典机器学习,我十分推荐两本书:周志华老师的“西瓜书”——《机器学习》(内容由浅入深,但理解难度大)和南瓜书(配合“西瓜书”看,重在公式的详细推导),最后结合 Python 中的 scikit-learn 包进行实战学习。需要说明的是,算法时间久并不代表算法的效果差。例如在流程挖掘的结果预测中,机器学习方法明显优于同等计算量的深度学习方法,同时拥有更短的训练时间,同时较好的可解释性也能帮助我们更好地理解模型预测的原因。

在深度学习领域,我只推荐李沐老师的课!其编写的 《动手学深度学习》(建议使用 pytorch 版)教程非常适合初学 AI 的新手,内容包括了现在最流行的 FNN、CNN、RNN 和 Transformer,尤其代码部分写的简洁易懂,非常值得深入学习。此外,李沐老师的读论文系列也非常适合刚接触学术论文的人观看。

此外,在完成深度学习基础课程的学习后,如果你想进一步探索前沿技术,我总结了一套通用流程:理论理解 → 技术选型(通常是 Python 库)→ 官方教程 → 应用适配。以图神经网络(GNN)为例,起初我参考了零基础多图详解图神经网络(GNN/GCN)【论文精读】斯坦福CS224W《图机器学习》等资料,帮助我初步理解了 GNN 的理论概念(理论理解)。接着,我调研了现有的 GNN 扩展库:PyGDGL,并在权衡之后选择 PyG 作为实验的主要框架(技术选型)。为了快速上手,我推荐阅读 PyG Tutorials(官方教程)。最后,结合实验需求,对官方教程中的代码进行修改,并根据 API 文档添加所需功能,进一步完善(应用适配)。大语言模型的学习流程亦是如此,不再赘述,Models - Hugging Face 里总能找到你想要的模型。

如何炼丹(调参)?

Attention

  • 调参只是锦上添花,而方法的性能主要取决于:模型的选择和数据的清洗、编码
  • 由于实现方式的区别,在 GPU 上模型训练报错往往看不到详细错误信息,可以先取小样本数据放到 cpu 上进行调试,调试完成后再放到 GPU 上训练

这里主要介绍一下深度学习的调参(机器学习调参可以考虑用超参数搜索的方式自动调参),推荐在知乎上找一找高赞回答:你有哪些deep learning(rnn、cnn)调参的经验?,应该会在你调参时有一些帮助。

在 Process Mining 领域,常见的调参手段主要包括:

  1. learning rate,cosine annealingOneCycle 是两种基本的学习率调度策略
  2. batch_size,如果考虑了时间步长,一般设置小于 64,过大的 batch_size 可能在小型事件日志上不利于收敛
  3. weight initialization,一般考虑 XavirKaiming Initialization,详细用法可以参考这篇文章数值稳定性

一些工程上建议(可选)

深度学习代码往往需要大量的 for 循环和 Metrics 对每个不同阶段进行训练和评估,甚至有些模型需要使用多卡集群进行训练。为了使代码简洁、可读、可扩展,我会使用一些框架减少代码量(根据个人习惯不同,不爱用就不用),仅作简单介绍并给出推荐等级(3 个⭐最推荐)

  1. PyTorch Lightning ⭐⭐⭐,通过提供的 hooks 可以大大减少训练和记录指标所需要的代码,同时可以自定义训练策略,支持 GPU 集群训练、api 服务部署
  2. TorchMetrics ⭐⭐,支持 GPU 计算各种实验指标,搭配 Lightning 可以避免为了计算指标将数据从 GPU 迁移到 CPU 的问题
  3. Optuna ⭐⭐,主要用于超参搜索,支持在 Lightning 中集成,可以直接根据贝叶斯概率生成各个超参数对精度的影响程度。