JaeSK11/QNNOS
GitHub: JaeSK11/QNNOS
基于 PennyLane 和 PyTorch 构建的混合量子-经典神经网络,用于对网络数据包进行被动操作系统指纹识别分类。
Stars: 0 | Forks: 0
# QuantumNeuralNetworkOS
基于 PennyLane + PyTorch 的变分量子分类器,用于被动 OS 指纹识别,设计为通过 Docker 在 NVIDIA GPU(在 RTX 3090 上开发)上运行。
## 概述
本项目构建了一个混合量子-经典神经网络,用于从网络数据包特征(nPrint 格式)中对操作系统进行分类。它使用了一个具有 4 个可训练层和数据重新上传功能的 20-qubit 变分量子线路,在 2^20 维 Hilbert 空间(约 100 万维)中运行。每个 qubit 都在三个 Pauli 轴(Z, X, Y)上进行测量,产生 60 个期望值,这些期望值被输入到一个轻量级的经典处理头中。
### 架构
```
nPrint CSV (962 cols)
→ Column removal (IPv4 src/dst, TCP ports, seq/ack)
→ SelectKBest (k=20, mutual information, fit on training split only)
→ RY encoding (20 qubits) + ring CNOT (classical XOR on the basis state; not yet entangling)
→ 4 variational layers with data re-uploading (RY encode + RY/RZ + ring CNOT; entanglement begins here)
→ PauliZ + PauliX + PauliY measurements (60 expectation values)
→ Linear(60, 128) → ReLU → Dropout(0.3) → Linear(128, n_classes)
→ Classification
```
训练使用 Adam 优化器,结合线性 LR 预热、ReduceLROnPlateau 调度策略、梯度裁剪、用于处理不平衡类别的类别加权 focal loss,以及基于验证集 F1 的早停机制。有关线路和训练循环的逐步解析,请参阅 [docs/HowItWorks.txt](docs/HowItWorks.txt);有关设计原理,请参阅 [docs/TechStack_Plan.txt](docs/TechStack_Plan.txt);有关建模决策的按时间记录的日志,请参阅 [docs/DECISIONS.txt](docs/DECISIONS.txt)。
## 数据集
本仓库**不包含**数据集(原始 CSV 文件体积达数 GB,且包含来自数据包抓取的源 IP 地址)。
要进行训练,您需要将抓取的数据包转换为 [nPrint](https://nprint.github.io/) 格式:每个数据包一行,包含 961 个二元特征列以及最后一列标签(OS 类别),总计 962 列。请将您的 CSV 放置在 `data/nprint.csv`(或向脚本传入任意路径)。`data/labels.csv` 展示了开发期间使用的 pcap 到标签的映射。
## 快速开始
### Docker(推荐)
```
# 前提条件:NVIDIA driver + nvidia-container-toolkit
docker compose up quantum-train
```
### 本地
```
pip install -r requirements.txt
# 训练
python scripts/train.py data/nprint.csv model_out --backend lightning.gpu
# 评估
python scripts/test.py data/nprint.csv models/model_out --backend lightning.gpu
# 单元测试
pytest tests/ -v
```
### 后端
| Backend | 用例 |
|-------------------|-----------------------------|
| `default.qubit` | 快速原型设计 (CPU) |
| `lightning.qubit` | 快速 CPU 模拟 |
| `lightning.gpu` | GPU 生产环境 |
## 关键参数
默认配置位于 `config/defaults.py` 中;大多数可以通过 `scripts/train.py` 上的 CLI 标志进行覆盖。
| 参数 | 默认值 | 描述 |
|--------------|---------|----------------------------------------------|
| `n_qubits` | 20 | Qubit 数量(= 选定的特征) |
| `n_layers` | 4 | 变分层数量 |
| `batch_size` | 512 | 训练 batch size |
| `lr` | 0.005 | Adam 学习率(3-epoch 线性预热) |
| `patience` | 10 | 早停耐心值(验证集 F1) |
| focal gamma | 2.0 | Focal loss 聚焦参数 |
| grad clip | 0.75 | 最大梯度范数 |
## 与无梯度基线的比较
这项工作的早期迭代使用了通过 COBYLA 训练的 Qiskit 变分分类器。本项目的设计有所不同:
| | Qiskit + COBYLA 基线 | PennyLane(本项目) |
|------------------|--------------------------|-----------------------------------|
| 优化器 | COBYLA(无梯度) | Adam(基于梯度) |
| 批处理 | 完整数据集 | Mini-batches (DataLoader) |
| 梯度 | 无 | 伴随微分 (GPU) |
| 特征/Qubits | 4 | 20 |
| Hilbert 空间 | 16 维 | 约 100 万维 |
## 已知限制
- 预留的测试集也被用作验证集,用于早停、LR 调度和最佳检查点选择,因此报告的测试指标存在乐观偏差。实现三向 train/val/test 划分是未来的工作。
## 项目结构
```
QuantumNeuralNetworkOS/
├── config/ # Constants, hyperparams, backend registry
├── data/ # nPrint CSV pipeline
├── circuits/ # Custom QNode definition
├── training/ # Hybrid model + training loop
├── evaluation/ # Metrics (accuracy, F1, reports)
├── scripts/ # CLI entrypoints (train.py, test.py, monitor.py)
├── tests/ # Unit + integration tests
├── models/ # Saved checkpoints (.pt + .json)
└── docs/ # Design notes and circuit walkthrough
```
## 许可证
Apache 2.0 — 见 [LICENSE](LICENSE)。
标签:PennyLane, PyTorch, 凭据扫描, 操作系统指纹识别, 混合量子经典神经网络, 网络流量分类, 请求拦截, 逆向工具, 量子机器学习