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, 凭据扫描, 操作系统指纹识别, 混合量子经典神经网络, 网络流量分类, 请求拦截, 逆向工具, 量子机器学习