引言
《高级机器学习》课程作业体系分为两个部分。其中4次小作业占比40%,最终大作业占比60%。大作业建议各位同学根据科研兴趣和领域热点自行选题,2-3位同学为一组展开项目研究。4次小作业紧贴课程教学内容,希望围绕一个核心主题“构造AML课程的智能助教”展开,划分出4次递进的任务,让同学们能够最终构造出独特的助教Agent
主题背景
在教育领域,AI技术的应用正逐步改变传统的教学模式,为教育教学带来新的机遇和挑战。在推进信息技术与教育教学的深度融合上,已经存在非常多积极的探索。本主题希望人工智能赋能教学试点课程,利用人工智能辅助或深度介入课程,打造人工智能助教,持续创新教学场景,提升教与学效率与质量。
主题拆解
在AML2024中,唐杰老师依次为同学们介绍了DeepLearning、Transformer、Pretraining、Post-training、Self-learning、Chat Models、Visual Models、New LLMs 和 Applications等专题。四次小作业依次穿插在每两~三个专题后,包括LLM的基础代码复现、文本LLM的微调和RAG、视觉LLM的理解和生成、LLM的高级推理,技术栈可充分支撑完成AML助教Agent的设计和实现。
实现说明
建议同学在实现前先对自己的AI助教能够支持什么样的功能,也就是产品目标进行设计。这样可以将后续任务聚焦在想要实现的功能上。另一方面,建议同学各部分的设计尽可能保证算法的灵活性和与基座大模型的松耦合性,以便于后续将不同同学的助教Agent能力进行集成,形成一个高度完善、功能多元的AML课程助教Agent。
作业1:GLM4-9B的基础代码复现
1 作业背景
在课程中, 我们已经介绍了机器学习和深度学习的基础知识, 以及语言模型 (LLM, Large Language Models) 的基本概念。尽管业界已有各种框架对相关算法进行了封装, 但了解底层算法的实现对加强我 们对模型的全面理解至关重要。通过手动实现这些底层代码, 我们将更好地掌握 LLM 的工作原理, 提 高编程和调试技巧。
2 作业目标
1. 根据课上所讲内容以及相关的阅读材料了解当前大语言模型的基础结构, 包括但不仅限于 Multi- Group Attention、RMSNorm、SwiGLU、RoPE 等。
2. 基于给定的代码模板进行补全, 复现 GLM4 的基础代码, 支持推理用的 KV-Cache 等参数。 At- tention、RMSNorm 等主要的模块需要手动实现, 其余如 Softmax,Linear 等基础模块可以直接 调用 torch 自带的函数。
3. 加载 GLM4-9B 官方 hugging face 权重代码, 并通过改名的方式将其权重转换到自己的模型中。 保证模型在使用 hugging face 的 generation 接口后可以进行正常对话。(提示:作业用国内的 hugging face镜像)
4. 尝试将 attention 部分改为 flash attention,并测试模型在不同长度下的空间、时间加速比。
3 提交材料
1. 一份报告, 解释你的调研过程以及代码实现方式, 加速比测试的结果, 以及遇到的任何挑战或困 难。
2. 一份补全后可以成功运行的 run__glm4.py 代码,在报告中需要附上成功运行后对话的截图。
4 评分标准
1. 基础代码实现(40 分):如果实现的有问题,根据实现内容的多少可能会给一部分分。
2. 成功进行 checkpoint 转换并实现对话(20 分)
3. 实现 flash attention(20 分):flash attention 的代码需要提交一份,即提交一个正常实现 attention的代码以及基于 flash attention 的代码。
4. 报告(20 分):请将你的所有作业内容打包成一个 zip 压缩文件并提交。
5 参考文献
• GQA: Training Generalized Multi-Query Transformer Models from Multi-Head Checkpoints
• Root Mean Square Layer Normalization
• GLU Variants Improve Transformer
• ChatGLM: A Family of Large Language Models from GLM-130B to GLM-4 All Tools
• pip 环境参考 glm4 github
作业2: LLM 的微调和 RAG
1 作业背景
在大规模预训练语言模型基础上,进行微调和融合外部知识库的 RAG(Retrieval-Augmented Generation)技术是进一步提升模型性能和具备专用领域知识的有效方法。此外,将大模型封装为可对外服务的Agent也是当前大模型开发必不可少的环节。
本次作业将探索如何微调预训练文本 LLM,并结合 RAG 实现特定任务,最终封装为初具功能的Agent助教。
2 作业目标
考虑最终的产品形态是一个智能体助教,本次作业的目标是实现助教文本类的能力(即不一定包含多模态的能力,下一次作业可以在本次作业基础上进一步扩充多模态能力)。
具体的实现方式:
1. 确定目标:你希望你的智能体助教具有怎样的功能,可以是通用的QA能力,也可以是你具体定义的能力,比如,能够批改代码作业的Agent。
2. 目标测评用方法或数据集构建:如何测评Agent具有了你期望的功能,以及他的表现有多好。你可以选择构建一个测评用数据集,你也可以尝试提出一种规则并使用代码加以实现。(请注意:你的测评方法和数据集后续需要公开。比如你针对task1构建了一个测评用数据集,我们会之后采用你的测评方法测试全班所有的Agent,并以你的排名作为你的最终成绩的一部分)
3. 知识库构建:利用课程提供的知识库,如有必要搜集 ML 和 LLM 相关领域知识作为额外的知识库(最好具有一定的专业性,LLM 无法轻松回答),具体知识库的构成应该依赖于你想实现的目标。
4. 检索实现:可使用 BM25、TF-IDF、DPR 等算法根据问题从知识库检索相关内容,可使用开源库或训练好的模型实现。
5. 训练用数据构建:如果你认为普通的RAG不足以支持你的Agent完成目标功能。可以根据搜集到的知识库知识,利用现成 LLM API(如ChatGPT、ChatGLM)构建比如问答对作为训练数据。
- 问题要有一定的专业性,LLM 不能直接利用自身知识很好的回答
- 答案需要根据检索的 top-k 结果进行回答,答案要包含引用标记如 [1]、[2] 等。
6. 模型训练:可以选择利用上一次作业的代码,也可以采用其他方式加载 ChatGLM3-6B 权重(模型结构与 GLM4-9B 相同),并实现训练代码对模型进行微调。
- 可以参考或使用开源库如 Transformers 等实现训练代码。
7. 模型服务:最终训练好的模型应该封装为一个Agent,实现基本的对外服务能力。
3 提交材料
1. 一份详细的过程报告word,应尽可能完善描述(如有)
- 目标
- 如何评测目标的实现
- 知识库来源、数据构建方法
- 检索及微调、Agent等的实现方法
- 如果存在训练,具体的参数设置与过程记录
- 最终Agent在测评上的能力与使用裸LLM在测评上的能力比较
2. 完整的代码文件,在报告中需要附上成功运行后问答的截图。
4 评分标准
请在截止日期前将你的所有作业内容打包成一个 zip 压缩文件并提交网络学堂。
我们后续将考虑采用Arena的方式完成作业客观评估,我们会试图让整个课程所有同学的Agent进行打榜,具体说明待后续在“小作业讨论”群内通知。
如果上述方式不能有效工作,我们的基本评分规则将采用如下方式进行:
• 知识库构建(10 分)
• RAG 及训练代码实现(40 分):如果实现的有问题,根据实现内容的多少可能会给一部分分。
• 模型训练(20 分):成功运行训练、训练 Loss 曲线正常
• 基于检索结果的知识问答(10 分):LLM 能根据检索结果回答问题,并生成引用标记。
• 报告(20 分)
5 参考文献
• Hugging Face: Fine-tune a pretrained model
• Retrieval-Augmented Generation for Large Language Models: A Survey
• WebGLM: Towards An Efficient Web-Enhanced Question Answering System with Human Preferences
• ChatGLM: A Family of Large Language Models from GLM-130B to GLM-4 All Tools
作业3:视觉LLM的理解和生成
!该作业目前还没有完成最后的编辑
【作业背景】视觉语言模型结合了文本和视觉信息,能够理解和生成多模态内容。通过这次作业,学生将探索视觉LLM的基本原理、实现和应用。
【作业目标】
1. 掌握视觉语言模型的相关技术。
2. 实现一个简单的视觉语言理解或生成任务(如图像描述生成、图像问答、图像生成)。
【具体要求】
1. 数据准备
- 选择适当的多模态数据集。
- 进行数据预处理。
2. 模型实现
- 选择一个任务(如图像描述生成),定义适当的模型架构。
- 验证任务实现效果。
【提交材料】
1. 完整的代码文件,以及相应的数据文件。
2. 报告,描述实现过程、遇到的问题及解决方法、结果和分析。
【评分标准】代码实现 (50%)、性能评估 (30%)、报告质量 (20%)
作业4:LLM的高级推理
!该作业目前还没有完成最后的编辑
【作业背景】高级推理能力是语言模型应用中的重要方向,如多步推理、逻辑推理和复杂决策。本次作业将探索如何通过LLM实现高级推理任务。
【作业目标】
1. 理解和应用高级推理技术。
2. 实现一个具有更高级推理能力的语言模型系统。
【具体要求】
1. 任务定义
- 选择适当的推理任务,注意推理任务应该包含作业2和作业3中已经实现的能力。
- 准备适当的数据集。
2. 模型实现
- 选择并加载一个模型。
- 根据任务需求实现算法设计优化,实现进阶推理能力。
3. 性能评估
- 在验证集上评估模型的推理性能。
- 比较不同推理方法的效果,分析结果。
【提交材料】
1. 完整的代码文件。
报告,描述实现过程、实验设置、结果分析(评估结果和推理示例)和推理性能比较。
【评分标准】代码实现 (50%)、性能评估 (30%)、报告质量 (20%)