Skip to main content
Overview

Tecniche di addestramento aggiuntive

August 30, 2021
1 min read

AMP

Si tratta dell’amp che NVIDIA ha integrato in PyTorch. Permette di calcolare in FP16, quindi ho pensato di usarlo.

https://pytorch.org/docs/stable/notes/amp_examples.html

Ho usato il primo metodo, quello in cui autocast gestisce tutto automaticamente. Detto questo, i miglioramenti di prestazioni non sono eclatanti. Anche nei benchmark NVIDIA, i guadagni erano nell’ordine delle unità.

Label Smoothing (Loss)

Finora si è sempre applicato softmax all’output del modello per ottenere il risultato. L’idea qui è di usare l’output grezzo del modello rappresentando le label come numeri reali.

Per esempio:

[0,1,0,0]

Questo output del modello diventa:

[0.025, 0.925, 0.025, 0.025]

La loss viene calcolata con queste label trasformate. Il metodo esatto per la conversione in valori reali può variare, ma per quanto ne so si tratta essenzialmente di un calcolo di rapporti.

ArcFaceLoss

Concetto: https://aimaster.tistory.com/93 Implementazione: https://www.kaggle.com/underwearfitting/pytorch-densenet-arcface-validation-training

Devo approfondire ancora..

Regolazione del pivot di classe

La feature age delle classi attuali forma 3 gruppi con soglie a 30 e 60 anni. Osservando la distribuzione delle classi, ci sono pochissime persone intorno ai 30 anni e sopra i 60. A causa di questo sbilanciamento, ho provato a manipolare i confini delle classi durante l’addestramento, ottenendo prestazioni migliori.

Analisi

Rispetto a feature come il genere o l’uso della mascherina, che sono discretamente e chiaramente distinguibili, l’età è ambigua sotto molti aspetti. Anche persone con molta esperienza spesso non riuscirebbero a distinguere tra un 29enne e un 30enne.

Ho quindi pensato che modificare i pivot point delle classi non si sarebbe allontanato troppo dall’intento di apprendere correttamente l’età.

Risultati

Spostando le soglie da 30 e 60 a 29 e 59 si è ottenuto un miglioramento costante del f1 score di circa 0.05. Tuttavia, cambiando le soglie a 29 e 58 le prestazioni sono peggiorate.

Wandb

Ho modificato il trainer per aggiornare le seguenti metriche ad ogni step:

acc, loss, val_acc, val_loss, f1_score, val_f1_score, learning_rate

Ho organizzato i workspace con tag multipli per facilitare il filtraggio successivo. Ho deciso di aggiungere tag per le tecniche di augmentation principali e per gli altri metodi distintivi usati durante l’addestramento.

Loading comments...