Questo progetto implementa un sistema di Intrusion Detection System (IDS) basato su tecniche di Continual Learning utilizzando la libreria Avalanche. Il sistema è progettato per adattarsi a nuovi tipi di attacchi nel tempo senza dimenticare le conoscenze apprese in precedenza (prevenzione del Catastrophic Forgetting).
- Dataset Supportati:
- UNSW-NB15: Dataset per la rilevazione di intrusioni di rete.
- CICIDS-2017: Dataset completo per attacchi moderni (DDoS, Brute Force, ecc.).
- Strategie di Continual Learning:
- DER (Dark Experience Replay)
- MER (Meta-Experience Replay)
- ICaRL (Incremental Classifier and Representation Learning)
- Modalità di Benchmark:
- Fixed: Apprendimento su task fissi.
- Incremental: Apprendimento incrementale (Class-Incremental o Domain-Incremental).
- Half: Apprendimento diviso (metà classi nel primo step, metà nel secondo).
- Ottimizzazione Automatica: Integrazione con Optuna per la ricerca degli iperparametri ottimali.
- Preprocessing Avanzato: Pipeline automatizzate per pulizia dati, feature engineering e bilanciamento delle classi.
.
├── checkpoints/ # Modelli addestrati (.pth)
├── datasets/ # File CSV dei dataset (UNSW_NB15, CICIDS_2017)
├── models/ # Architetture delle reti neurali
├── preprocessing/ # Script per caricamento e trasformazione dati
├── utils/ # Moduli di utilità (benchmark, plotting, training)
│ ├── optuna/ # Risultati dell'ottimizzazione
│ └── strategy.py # Implementazione strategie (DER, MER, ICaRL)
├── config.yaml # File di configurazione principale
├── main.py # Script principale per il training
├── optimization.py # Script per l'ottimizzazione degli iperparametri
├── predict.py # Script per l'inferenza sui dati di test
└── requirements.txt # Dipendenze Python
Assicurati di avere Python installato (versione consigliata >= 3.10). Installa le dipendenze necessarie:
pip install -r requirements.txtNota: Il progetto richiede PyTorch con supporto CUDA se si desidera utilizzare l'accelerazione GPU.
Tutta la logica di esecuzione è centralizzata nel file config.yaml. Di seguito viene spiegato come configurare le sezioni critiche per ottenere i migliori risultati.
Questa sezione definisce come verrà eseguito il training principale (main.py) e quale scenario di Continual Learning simulare.
strategy: La strategia di apprendimento continuo da utilizzare.- Opzioni:
DER,MER,ICaRL.
- Opzioni:
mode: La modalità di suddivisione del dataset e dei task.fixed: Training standard su un set fisso di dati.incremental: I dati vengono forniti in più step sequenziali (esperienze).half: Il dataset viene diviso in due parti uguali (metà delle classi nel primo step, l'altra metà nel secondo).
param: Parametro numerico legato alla modalità scelta.- In modalità
fixed: impostare a1. - In modalità
incremental: Rappresenta il numero di esperienze (step) in cui dividere il training. - In modalità
half: Questo valore viene ignorato.
- In modalità
best_params_path: Percorso assoluto o relativo al file JSON contenente gli iperparametri ottimizzati (generato da Optuna). Esempio:"utils/optuna/optuna_best_params2.json".
Questa sezione controlla lo script di ottimizzazione (optimization.py). È fondamentale comprendere il parametro all per decidere su cosa iterare.
n_trials: Numero di tentativi di ottimizzazione per ogni configurazione (es. 20 per test rapidi, 100+ per risultati robusti).pruner: Algoritmo per interrompere i trial non promettenti (es."HyperbandPruner"o"MedianPruner").all(IMPORTANTE): Determina l'ambito della ricerca.true: Optuna ignora le impostazioni singole della sezionebenchmarked esegue un ciclo nidificato su TUTTE le liste definite sottooptuna.- Esempio: Se
modes: ["fixed", "incremental"]estrategies: ["DER", "MER"], Optuna cercherà i migliori parametri per:(fixed+DER),(fixed+MER),(incremental+DER), ecc.
- Esempio: Se
false: Optuna ottimizzerà solamente la specifica configurazione (mode/strategy/param) attualmente attiva nella sezionebenchmark.
- Liste di iterazione (usate solo se
all: true):modes: Lista delle modalità da testare (es.["half", "incremental"]).strategies: Lista delle strategie (es.["ICaRL", "MER"]).params: Lista dei parametri numerici (es.[1, 2, 5]).
Se vuoi ottimizzare e poi addestrare un modello ICaRL in modalità Incremental con 5 step:
- Imposta
optuna.all: false. - Imposta
benchmark.strategy: "ICaRL". - Imposta
benchmark.mode: "incremental". - Imposta
benchmark.param: 5. - Esegui
python optimization.py. - Aggiorna
benchmark.best_params_pathcon il file JSON appena creato. - Esegui
python main.py.
Il flusso di lavoro tipico prevede tre fasi: Ottimizzazione, Addestramento e Predizione.
Prima di addestrare il modello finale, è consigliabile cercare i migliori iperparametri (learning rate, batch size, ecc.).
python optimization.py [output_path.json]Esegui il training utilizzando la configurazione specificata in config.yaml. Lo script caricherà automaticamente i migliori parametri trovati nel JSON puntato da best_params_path.
python main.py- Il modello addestrato verrà salvato nella cartella
checkpoints/. - I grafici delle metriche (accuracy, forgetting) verranno salvati in
utils/plot_NOMEDATASET/.
Per effettuare predizioni su un set di dati di test e generare la matrice di confusione:
python predict.py- Assicurati che in
config.yamlsiano impostati correttamentestrategy,modeeparamcorrispondenti al checkpoint che vuoi caricare. - I risultati verranno salvati in
datasets/predictions.csv.
- Modelli: Salvati come
model_checkpoint_{strategy}_{mode}_{param}.pth. - Preprocessing: Gli oggetti
preprocessorelabel_encodervengono salvati come.pklper garantire la coerenza tra training e inferenza. - Grafici: Vengono generate matrici di confusione e grafici dell'andamento dell'accuratezza durante le fasi incrementali.
Le principali librerie utilizzate sono:
torch>= 2.1.0avalanche-lib>= 0.6optuna>= 3.0.0pandas,numpy,scikit-learn