Исследовательский проект по курсу «Теория устойчивости искусственных нейронных сетей», посвященный сравнению различных методов сжатия нейронных сетей и анализу их влияния на качество классификации и устойчивость к состязательным атакам.
Современные нейронные сети зачастую слишком велики для использования на устройствах с ограниченными вычислительными ресурсами. Наиболее распространенными методами уменьшения размера моделей являются квантование (Quantization) и отбрасывание связей (Pruning).
Цель проекта - экспериментально исследовать влияние различных методов сжатия на:
- точность классификации;
- устойчивость к состязательным атакам;
- уверенность модели;
- эффективность использования памяти.
В качестве исследуемой модели используется полносвязная нейронная сеть (MLP), обученная на датасете MNIST.
Исследуются следующие параметры квантования:
- разрядность:
- 8 бит;
- 4 бита;
- 2 бита;
- 1 бит (scaled sign quantization);
- область применения:
- только веса;
- веса и активации;
- режим выполнения:
- Post-Training Quantization (PTQ);
- Quantization-Aware Training (QAT).
Исследуются:
- уровень разреженности:
- 30%;
- 50%;
- 70%;
- 90%;
- критерий удаления весов:
- Magnitude Pruning;
- Gradient Pruning;
- Hessian Pruning.
Также рассматриваются комбинированные сценарии, объединяющие квантование и прунинг.
Для проверки устойчивости моделей используются состязательные атаки белого ящика:
- FGSM (Fast Gradient Sign Method)
- PGD (Projected Gradient Descent)
Для каждой конфигурации автоматически вычисляются:
- Accuracy;
- Adversarial Accuracy;
- Logit Margin;
- Margin Sparsity Index (MSI);
- Worst-Class Drop;
- Bit Saving Efficiency (BSE);
- коэффициент сжатия;
- размер модели.
.
├── nn_compression_experiment.ipynb # основной Jupyter Notebook
├── requirements.txt # зависимости проекта
└── report/
└── experiment_report.html # автоматически сформированный отчет
git clone <repository-url>
cd <repository>python -m venv .venvLinux / macOS
source .venv/bin/activateWindows
.venv\Scripts\activatepip install -r requirements.txtjupyter notebookили
jupyter labПосле запуска откройте
nn_compression_experiment.ipynb
и выполните все ячейки последовательно.
Notebook автоматически:
- загружает и подготавливает датасет MNIST;
- обучает базовую FP32-модель;
- строит набор конфигураций квантования;
- строит набор конфигураций прунинга;
- исследует комбинированные методы сжатия;
- выполняет состязательные атаки;
- вычисляет все метрики;
- строит таблицы и графики;
- формирует итоговый HTML-отчет.
В результате выполнения экспериментов автоматически формируется отчет
report/experiment_report.html
содержащий:
- сравнительные таблицы;
- графики;
- анализ влияния квантования;
- анализ влияния прунинга;
- сравнение методов сжатия;
- итоговые выводы исследования.