DevLog 0x0
2025年7月29日
DevLog 0x0
AdventureX 2025 刚结束,我们的项目 Rhythmist Lab 获得飞书多维表格赛道「先进 AI 生产力奖」。(感谢队友 @HedgehogsGX @yuki1037,以及赛道评委、观众等所有人)
虽然但是,多维表格这块是最后 5h 临时起意加上去的(
对 AI 生成音游谱面有兴趣的同学可以加入 Rhythmist Lab 用户群。
Rhythmist Lab 是我探索「AI + 音游」落地的一次尝试。事实上,我三个月前就想开始做这个项目,但由于中考等原因一直往后推,总算在 AdventureX 2025 正式迈出了第一步。
这次我们是纯提示词工程,目前发现主要有以下问题:
- 生成的谱面时长总比音乐时长少一半以上
- 难度无法控制
- 会生成无理段
- 总出现星星语法错误
- 有概率把示例谱面直接抄下来作为生成结果!!
我们赛时想了一些方法,都未付诸实践:
- 微调
- 从头训练一个模型
- 放弃 LLM,探索其他技术方案
- 分析 BPM 嵌入提示词
- 多喂几张谱作示例
- 校验重试
- 多阶段生成
- 你不许写星星
最后发现还是我太菜了,0 ML 基础还想 dive into 几乎无人涉足的领域……
让 ChatGPT 生成了一个学习路径,接下来就跟一遍,希望能取得进展:
Day | 学习主题 | 目标 | 推荐资源 | 实操任务 | 备注 |
---|---|---|---|---|---|
1 | 数学基础:线性代数概念 | 掌握向量、矩阵及其运算(加法、乘法、点积等),为神经网络的线性变换打好基础 | 《动手学深度学习》2.3 线性代数章节;线性代数入门视频或教程(免费资源) | 使用 NumPy 创建并操作向量/矩阵,实现加法、点积和矩阵乘法,理解计算原理 | 理解线性代数运算如何对应神经网络中的权重矩阵运算 |
2 | 数学基础:微积分与概率 | 理解导数、梯度、链式法则等微积分概念,以及概率分布和随机变量的基础,为梯度下降和损失函数(如交叉熵)做好准备 | 《动手学深度学习》2.4 微积分和 2.6 概率章节(免费教材) | 用 NumPy 实现简单函数导数计算(例如数值微分);实现 Softmax 函数和交叉熵损失计算 | Softmax 和交叉熵是语言模型常用的概率与损失概念,需要理解其数学含义 |
3 | 使用 NumPy 实现简单神经网络 | 掌握手动构建前馈神经网络(含单隐层)、ReLU 激活和反向传播的计算过程,加深对神经网络原理的理解 | PyTorch 教程示例(60 分钟速成)及李理博客《PyTorch 简明教程》中“使用 Numpy 实现三层神经网络” | 用 NumPy 实现一个全连接三层网络(输入层→隐藏层→输出层),完成前向计算,手动推导反向传播更新权重 | 完全用 NumPy 手动实现前向和反向计算,加深对网络训练过程的理解 |
4 | PyTorch 基础:张量与自动微分 | 学习 PyTorch 的张量操作和自动微分机制,了解如何使用框架自动计算梯度,加速模型开发 | PyTorch 官方 60 分钟入门教程;李理博客 PyTorch 简明教程;PyTorch 文档 | 将 Day3 的 NumPy 网络改用 PyTorch 实现,尝试在 CPU/GPU 上运行,调用.backward() 自动计算梯度 | PyTorch 类似 NumPy 但可用 GPU 加速,并提供自动求导功能 |
5 | PyTorch 神经网络训练 | 使用 PyTorch 的nn 模块构建神经网络,掌握训练流程(前向传播、计算损失、反向传播、优化器更新) | PyTorch 官方教程《Neural Networks》和《Training a Classifier》(CIFAR/MNIST 示例) | 用 PyTorch 构建一个多层感知机(MLP)或简单卷积网络,在 MNIST 等数据集上完成一次训练过程并测试准确率 | 熟悉torch.nn 、torch.optim 等模块,完成端到端的训练和评估流程 |
6 | 注意力机制 (Attention) | 理解 Attention 的基本思想,掌握 Scaled Dot-Product Attention 的计算流程,为 Transformer 架构奠定基础 | 《Transformers 快速入门》第三章(Attention 机制);其他注意力机制教程博客 | 手动实现 Scaled Dot-Product Attention:计算 Query-Key 点积、Softmax 权重,加权生成输出 | 注意力机制允许模型为输入序列的不同位置分配权重,从而捕获全局信息 |
7 | 多头注意力与位置编码 | 掌握多头注意力(Multi-Head Attention)的原理,理解位置编码(Positional Encoding)如何为 Transformer 添加序列位置信息 | 《Transformers 快速入门》“Multi-Head Attention”和“Positional Embeddings”章节 | 使用 PyTorch(可借助现有实现)组合多个注意力头进行实验;为输入序列添加自定义位置编码并观察效果 | 多头注意力通过多个注意力头学习不同特征;位置编码补充了注意力无法表达的位置信息 |
8 | Transformer 编码器结构 | 学习完整的 Transformer 编码器层结构:多头自注意力、前馈网络、残差连接和层归一化 | Transformers 教程;原始论文“Attention Is All You Need”(概念理解) | 在 PyTorch 中搭建一个 Transformer Encoder 模块(或使用torch.nn.TransformerEncoderLayer ),实现 Multi-Head Attention + FFN + Skip+LayerNorm | Transformer 每层通过残差连接和 LayerNorm 来稳定训练 |
9 | 阅读 LLM 论文(上) | 阅读并理解主流大语言模型(如 GPT-3/GPT-4、LLaMA)的技术报告和论文,掌握其核心架构和创新点 | LLaMA 系列论文及解读博客;GPT 相关论文或博客(可查阅 OpenAI 博客)等 | 制作主流模型(如 LLaMA 2/3、GPT-3/4)的对比表,总结各模型参数规模、训练数据量和性能指标等 | 例如,LLaMA 3 使用了更大规模训练数据(15T tokens)并观察到性能呈对数线性提升 |
10 | 阅读 LLM 论文(下) | 继续阅读其他开源 LLM(如 Mistral/Mixtral、Phi-3、OpenELM)的技术报告,关注参数配置和数据策略的差异 | Mistral 博客、Phi-3 技术报告、OpenELM 论文等 | 总结各模型设计要点,如 Phi-3 强调严格过滤的数据、Mistral 使用专家混合模型;对比模型基准评测结果 | 例如,Phi-3 在参数量远小于 LLaMA 3 的情况下,通过高质量数据实现性能领先;OpenELM 发布了开源模型和训练日志 |
11 | Hugging Face Transformers 使用 | 掌握 Hugging Face Transformers 库的基本用法,使用预训练模型进行推理,熟悉 pipeline 等便利接口 | Hugging Face 官方文档(Transformers 教程);Hugging Face LLM 课程 | 使用transformers 库加载一个开源语言模型(如 GPT-2 或小型 LLaMA),通过 pipeline 进行文本生成或完形填空 | Hugging Face 的 pipeline API 可快速调用模型,一行代码即可生成文本 |
12 | 示例项目实践:模型 Demo | 运行并改动 Hugging Face 上公开的 LLM 示例项目(例如 Demo 应用或 Space),了解工程结构并尝试简单定制 | Hugging Face Model Hub 示例项目;官方教程(如 Spaces 指南) | 克隆并运行一个在线演示(如 Gradio/Streamlit 空间),修改输入提示或模型参数,观察输出变化 | 通过实践掌握如何在 Hugging Face 平台部署和展示 LLM 应用 |
13 | 模型输出评估与分析 | 学习使用开源工具(如 Hugging Face Evaluate 库)计算模型输出的评估指标(准确率、BLEU、困惑度等),进行定量分析 | Hugging Face Evaluate 库文档;指标教程(如 NLP 指标简介) | 编写代码使用 Evaluate 计算模型在测试集上的准确率、BLEU 或困惑度,与其他模型结果进行对比分析 | Evaluate 库集成了数十种评估指标,一行代码即可计算常见评估结果 |
14 | 开源工具与总结 | 综合使用所学知识和工具(如 transformers、evaluate、OpenELM 等)对模型输出进行分析,总结学习成果并展望后续 | OpenELM 论文或文档;Transformers/Evaluate 官方文档;其它开源评估工具资料 | 针对特定生成任务,使用不同开源模型(如 OpenELM、LLaMA、GPT-2)生成文本,分析输出差异并计算评估指标 | OpenELM 开源了其模型和训练框架,可与其他模型进行对比;最后回顾两周学习内容并规划深入方向 |
学习 Project AIRI 开了这个 DevLog 系列,记录学习研究经历。