Skip to content

Louisym/EE510-alignment-project

Folders and files

NameName
Last commit message
Last commit date

Latest commit

 

History

2 Commits
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 

Repository files navigation

EE510 概率论智能问答系统

基于 RAG + GRPO 的概率论学习辅助系统 | English

📋 项目简介

本项目是一个针对概率论、测度论和随机过程的智能问答系统,结合了检索增强生成(RAG)和分组相对策略优化(GRPO)技术,实现了高质量的数学问答能力。

核心特点

  • 🎯 渐进式训练策略:Base Model → SFT → SVD-LoRA → GRPO,系统性提升模型性能
  • 📊 显著性能提升:相比基础模型实现 55.5% 的性能提升
  • 🔍 RAG 增强检索:基于 ChromaDB 的向量数据库,提供准确的知识检索
  • 💡 SVD 初始化优化:相比随机初始化LoRA提升 19.5% 的测试性能
  • 🎨 友好的 Web 界面:支持模型对比、实时问答和性能可视化

性能指标

模型 平均奖励 相对提升
基础模型 0.231 -
SFT Random-init 0.253 +9.5%
SFT SVD-init 0.302 +30.8%
GRPO (最终) 0.359 +55.5%

🏗️ 系统架构

┌─────────────────────────────────────────────────────────────┐
│                     Gradio Web Interface                     │
│  (问答界面 | 模型对比 | 性能统计 | 系统信息)                  │
└────────────────────┬────────────────────────────────────────┘
                     │
        ┌────────────┴──────────────┐
        │                           │
   ┌────▼─────┐              ┌─────▼────┐
   │  GRPO    │              │   RAG    │
   │  Model   │              │  Engine  │
   └────┬─────┘              └─────┬────┘
        │                           │
        │                    ┌──────▼──────┐
        │                    │  ChromaDB   │
        │                    │ (BGE embed) │
        │                    └─────────────┘
        │
   ┌────▼─────────────────────────────┐
   │ Qwen2.5-Math-7B-Instruct (4-bit) │
   │     + LoRA (rank 16)              │
   └──────────────────────────────────┘

训练流程

1. [SFT - 监督微调]
   ├── Random-init LoRA → 训练损失: 0.7743
   └── SVD-init LoRA    → 训练损失: 0.7718 (↓0.32%)
                          测试性能: +19.5% vs Random

2. [GRPO - 强化学习对齐]
   ├── 训练: 2 epochs, 162 steps, 3.5 hours
   ├── 奖励模型: 4维启发式 (长度/公式/概念/结构)
   └── 最终性能: 0.359 reward (↑55.5% vs Base)

3. [RAG - 检索增强]
   ├── 向量化: 8个概率论文档章节
   ├── 检索: Top-3相关片段
   └── 生成: 基于检索上下文的准确回答

🚀 快速开始

环境要求

  • Python: 3.8+
  • GPU: CUDA兼容GPU,至少 8GB 显存
  • 内存: 至少 16GB RAM
  • 存储: 至少 20GB 可用空间

安装依赖

# 克隆仓库
git clone https://github.com/Louisym/EE510_alignment_project.git
cd EE510_alignment_project

# 创建虚拟环境(推荐)
python -m venv .venv
source .venv/bin/activate  # Windows: .venv\Scripts\activate

# 安装依赖
pip install -r requirements.txt

启动 Web 应用

# 方法1:使用启动脚本
./start_app.sh

# 方法2:直接运行
python app.py

访问 http://127.0.0.1:7860 打开界面。

首次使用:点击 "🚀 Load System" 按钮加载模型(需要1-2分钟)。

📂 项目结构

.
├── app.py                      # Gradio Web 应用主文件
├── app_cn.py                   # 中文版界面(备份)
├── app_en.py                   # 英文版界面
├── requirements.txt            # Python 依赖
├── start_app.sh               # 启动脚本
│
├── src/                       # 核心源代码
│   ├── vector_database.py    # ChromaDB 向量数据库
│   ├── rag_pipeline.py        # RAG 检索管道
│   ├── document_processor.py  # 文档处理器
│   ├── model_loader.py        # 模型加载器
│   └── evaluation.py          # 评估工具
│
├── training/                  # 训练框架
│   ├── sft/                  # 监督微调 (SFT)
│   │   ├── train_sft.py      # SFT 训练脚本
│   │   ├── trainer.py        # SFT 训练器
│   │   ├── data_loader.py    # 数据加载器
│   │   └── config.py         # 配置文件
│   │
│   └── grpo/                 # GRPO 强化学习
│       ├── train_grpo.py     # GRPO 训练脚本
│       ├── trainer.py        # GRPO 训练器
│       ├── reward_model.py   # 奖励模型
│       ├── data_loader.py    # 数据加载器
│       └── config.py         # 配置文件
│
├── experiments/              # 实验代码
│   └── svd_lora/            # SVD-LoRA 对比实验
│       ├── train_lora_svd_vs_rand.py  # 对比训练
│       ├── extract_svd_from_lora.py   # SVD 提取
│       └── training_results/          # 结果
│
├── data/                     # 数据目录
│   ├── chroma_db/           # 向量数据库
│   ├── docs/                # 原始文档
│   └── training_data/       # 训练数据 (81 QA对)
│
└── outputs/                  # 训练输出
    └── grpo/                # GRPO 训练结果
        ├── final_model/     # 最终模型
        ├── plots/           # 训练曲线
        └── metrics/         # 性能指标

🎓 训练指南

1. SFT 训练

# 使用随机初始化 LoRA
python training/sft/train_sft.py \
  --config default \
  --train-data data/training_data/train.json \
  --output-dir outputs/sft/random \
  --epochs 3

2. SVD-LoRA 对比实验

python experiments/svd_lora/train_lora_svd_vs_rand.py \
  --base-model Qwen/Qwen2.5-Math-7B-Instruct \
  --train-data data/training_data/train.json \
  --lora-rank 16 \
  --epochs 3

3. GRPO 训练

python training/grpo/train_grpo.py \
  --config from_sft \
  --sft-model outputs/sft/final_model \
  --train-data data/training_data/train.json \
  --output-dir outputs/grpo \
  --epochs 2

🔧 核心技术

1. RAG (Retrieval-Augmented Generation)

  • 向量数据库: ChromaDB (持久化存储)
  • 嵌入模型: BAAI/bge-base-en-v1.5
  • 文档分块: 500字符/块,50字符重叠
  • 检索策略: Top-3 余弦相似度

2. SVD-LoRA 初始化

原理

  • 训练 teacher LoRA → 提取权重矩阵 ΔW
  • SVD分解:ΔW ≈ B·A
  • 使用 B、A 初始化 student LoRA

优势:相比随机初始化提升 19.5%

3. GRPO 奖励模型

4维启发式评分:

维度 权重 说明
长度适当性 20% 回答长度与参考答案比例
公式存在性 30% 数学符号和公式使用
概念覆盖度 30% 关键术语覆盖
结构完整性 20% 定义/公式/示例结构

4. 模型配置

  • 基础模型: Qwen/Qwen2.5-Math-7B-Instruct
  • 量化: 4-bit NF4 (BitsAndBytes)
  • LoRA Rank: 16 (trainable params: ~1.2%)
  • 显存占用: ~5GB

📊 实验结果

SVD-LoRA 对比

初始化方法 训练损失 测试性能 提升
Random 0.7743 0.253 -
SVD 0.7718 0.302 +19.5%

关键发现:训练损失相近(0.32%),但测试性能差异显著(19.5%)

GRPO 训练

Epoch Steps Mean Reward Max Reward
1 81 0.487 0.679
2 162 0.480 0.682
Best 135 0.599 -

Loss 方差分析

  • Loss 方差是 Reward 方差的 592倍
  • 这是正常现象(group-relative normalization)
  • 应关注 reward 指标而非 loss

⚠️ 注意事项

模型权重

大型模型文件(*.safetensors, *.bin, *.pth)因GitHub限制未包含在仓库中。

首次运行

  1. 自动从 HuggingFace 下载基础模型
  2. 或按训练指南训练自己的模型

常见问题

# 加载失败
ls outputs/grpo/final_model/  # 检查模型
nvidia-smi                     # 检查GPU

# RAG无结果
# 重建向量数据库
python -c "from src.vector_database import VectorDatabase; db = VectorDatabase(); db.initialize()"

📚 参考文献

  1. LoRA: Hu et al., "LoRA: Low-Rank Adaptation of Large Language Models", ICLR 2022
  2. GRPO: Shao et al., "DeepSeekMath: Pushing the Limits of Mathematical Reasoning", arXiv 2024
  3. RAG: Lewis et al., "Retrieval-Augmented Generation for Knowledge-Intensive NLP Tasks", NeurIPS 2020

📄 许可证

本项目仅用于学术研究和教育目的。

👥 作者信息

  • 课程: EE510 Probability Theory
  • 学期: Spring 2025
  • 技术栈: PyTorch, Transformers, PEFT, Gradio, ChromaDB

🎓 Generated with Claude Code

如有问题或建议,欢迎提交 Issue

About

A QA system for course review

Resources

Stars

Watchers

Forks

Releases

No releases published

Packages

 
 
 

Contributors