A380-从零开始构建多模态大模型MLLMfromScratch
导出时间:2025/12/16 11:30:32
1、项目简介
一、项目目标
本项目旨在从零开始、纯手工实现一个多模态大模型(Multimodal Large Language Model, MLLM),不依赖
timm、transformers 等高度封装的深度学习框架组件,而是通过逐步实现底层模块,完整构建:
- Transformer 基础架构
- Vision Transformer(ViT)视觉模型
- GPT-style 自回归语言模型(LLM)
- 融合视觉与语言的多模态大模型(MLLM)
最终目标是实现一个能够理解图像并生成自然语言描述的“看图说话”模型,并通过实验与报告展示模型的训练与推理效果。
二、总体技术要求
- 从零实现核心模块
- 不允许直接调用
transformers、timm等库中封装好的 Transformer、ViT、GPT 等模型。 - 必须手工实现注意力机制、Transformer Block、位置编码等核心组件。
- 不允许直接调用
- 模块化设计
- Transformer、ViT、LLM、MLLM 各部分应逻辑清晰、模块解耦。
- 视觉模块、语言模块与多模态融合模块应具备清晰的接口。
- 端到端可运行
- 每个阶段(Transformer / ViT / LLM / MLLM)都应具备完整的训练与推理流程。
- 代码应能够在合理配置下复现实验结果。
三、功能性要求(按模块划分)
1. Transformer 基础模块(必做)
要求内容:
- 实现完整的 Transformer 架构组件,包括但不限于:
- Scaled Dot-Product Attention
- Multi-Head Attention
- Position-wise Feed Forward Network
- Positional Encoding(正弦/余弦或可学习)
- Layer Normalization
- Encoder Block 与 Decoder Block
- 能够正确堆叠形成 Transformer Encoder / Decoder。
验证方式:
- 提供单元测试(tests 文件夹)。
- 所有测试必须通过,并在报告中给出测试通过的截图。
2. Vision Transformer(ViT)模块
要求内容:
- 基于已实现的 Transformer Encoder,构建 Vision Transformer。
- 必须实现 Patch Embedding,将图像从
[B, C, H, W]转换为序列形式。 - 在 CIFAR-10 数据集上完成图像分类训练与测试。
实验要求:
- 展示训练过程中 Loss 的变化曲线。
- 报告 CIFAR-10 测试集上的最终分类准确率。
3. 语言模型(LLM)模块
要求内容:
- 构建一个 GPT-style 自回归语言模型。
- 使用因果掩码(Causal Mask)确保自回归生成。
- 实现简单的字符级分词器(Tokenizer)。
实验要求:
- 在 Tiny Shakespeare 数据集上完成训练。
- 展示训练过程中 Loss 的变化曲线。
- 提供至少 2 个文本生成样本,并与原始莎士比亚文本风格进行对比分析。
4. 多模态大模型(MLLM)模块
要求内容:
- 实现视觉与语言之间的连接器(Connector),用于对齐模态空间。
- 将 ViT、Connector 和 LLM 组合成完整的多模态模型。
- 支持输入图像 + 文本提示,输出自然语言描述。
实验要求:
- 在 Flickr8k 图文对数据集上完成训练或微调。
- 展示训练过程中 Loss 的变化曲线。
- 提供至少 2 个“看图说话”示例(测试图片 + 模型生成描述)。
四、实验与报告要求
提交时需提供一份完整的实验报告,报告至少应包含以下内容:
- 实验结果展示
- Transformer 单元测试通过截图
- ViT 和 LLM 的训练 Loss 曲线
- ViT 在 CIFAR-10 上的测试准确率
- LLM 文本生成样本
- MLLM 的训练 Loss 曲线
- 图像描述生成结果展示(图片 + 文本)
- 结果分析
- 对模型训练过程和生成效果进行简要分析
- 可讨论模型收敛情况、生成质量、失败案例等
- 问题与解决方案(Challenges and Solutions)
- 记录实现过程中遇到的主要问题,例如:
- Attention 维度错误
- Mask 实现问题
- 训练不收敛
- 多模态对齐困难
- 说明对应的解决思路与方法
- 记录实现过程中遇到的主要问题,例如:
五、代码与工程规范要求
- 代码结构
- 可参考给定的目录结构,但不强制要求完全一致。
- 不允许将所有代码集中在少数文件中。
- 代码质量
- 变量命名规范、逻辑清晰
- 关键实现部分应有必要注释
- 风格保持一致,避免随意拼凑
- 可复现性
- 提供
requirements.txt - 训练和推理脚本应可直接运行
- 配置文件(如 YAML)清晰明确
- 提供
六、评分标准(总分 20 分)
模块
| 分值
| 评分依据
|
Transformer
| 5 分
| 实现正确性 + 单元测试
|
Vision Transformer
| 5 分
| 代码正确性 + CIFAR-10 表现
|
Language Model
| 5 分
| 生成文本质量 + 训练过程
|
Multimodal Model
| 5 分
| 多模态融合正确性 + 看图说话效果
|
2、结果展示:
Transformer (5 points)
attention.py
blocks.py
test_transformer.py
Vision Transformer (5 points)
python main.py --config configs/vit_config.yaml --task train_vit
python main.py --config configs/vit_config.yaml --task predict_vit
Language Model (5 points)
python main.py --config configs/llm_config.yaml --task train_llm
python main.py --config configs/llm_config.yaml --task generate_text
--- Generated Text ---
You are all resolved to rash: they go, let him come
your good queen.
LEONTES:
Go on, go to;
You are all sensest no quarrel of.
PAULINA:
If at my just wonders than the extremes
That do sad the thee was no more behind
But such a day of Ireland told as man
As well as her dead as to make her queen:
I shall shear it so. But what say you to Catesby?
CATESBY:
My lord?
KING RICHARD III:
Send out a pursuivant at arms
To Stanley's regiment; bid him bring his power
Before sunrising, lest his son George fall
Into the blind
--- End of Generation ---
Multimodal Model (5 points)
python main.py --config configs/mllm_config.yaml --task train_mllm
示例:
--- Generating Sample Caption ---
Ground Truth: A rugby player defends the ball against a member of the other team attempting to tackle him .
Generated: The boy is sitting by a standing in front of a building .
--- End of Sample ---
--- Generating Sample Caption ---
Ground Truth: A rugby player defends the ball against a member of the other team attempting to tackle him .
Generated: A man in a white shirt plays with a camel .
--- End of Sample ---