L'augmentation des données non supervisées ou UDA est une méthode d'apprentissage semi-supervisée qui obtient des résultats de pointe sur une grande variété de tâches de langue et de vision.
Avec seulement 20 exemples étiquetés, UDA surpasse l'état de l'état précédent sur IMDB formé sur 25 000 exemples étiquetés.
| Modèle | Nombre d'exemples étiquetés | Taux d'erreur |
|---|---|---|
| TVA mixte (Précédent Sota) | 25 000 | 4.32 |
| Bert | 25 000 | 4.51 |
| Uda | 20 | 4.20 |
Il réduit plus de 30% du taux d'erreur des méthodes de pointe sur CIFAR-10 avec 4 000 exemples étiquetés et SVHN avec 1 000 exemples étiquetés:
| Modèle | Cifar-10 | SVHN |
|---|---|---|
| TIC (Précédent Sota) | 7,66 ± 0,17 | 3,53 ± 0,07 |
| Uda | 4,31 ± 0,08 | 2,28 ± .10 |
Cela conduit à des améliorations significatives sur ImageNet avec 10% de données étiquetées.
| Modèle | Précision top-1 | Top 5 de la précision |
|---|---|---|
| Resnet-50 | 55.09 | 77.26 |
| Uda | 68.78 | 88.80 |
L'UDA est une méthode d' apprentissage semi-supervisé , ce qui réduit le besoin d'exemples étiquetés et utilise mieux ceux non étiquetés.
Nous publions ce qui suit:
Tout le code de ce référentiel fonctionne à l'extérieur de la boîte avec GPU et Google Cloud TPU.
Le code est testé sur Python 2.7 et TensorFlow 1.13. Après avoir installé TensorFlow, exécutez la commande suivante pour installer les dépendances:
pip install --user absl-pyNous générons 100 exemples augmentés pour chaque exemple original. Pour télécharger toutes les données augmentées, accédez au répertoire d'image et exécutez
AUG_COPY=100
bash scripts/download_cifar10.sh ${AUG_COPY}Notez que vous avez besoin d'espace disque 120 g pour toutes les données augmentées. Pour économiser de l'espace, vous pouvez définir Aug_copy à un nombre plus petit tel que 30.
Alternativement, vous pouvez générer vous-même les exemples augmentés en courant
AUG_COPY=100
bash scripts/preprocess.sh --aug_copy= ${AUG_COPY}Commande GPU:
# UDA accuracy:
# 4000: 95.68 +- 0.08
# 2000: 95.27 +- 0.14
# 1000: 95.25 +- 0.10
# 500: 95.20 +- 0.09
# 250: 94.57 +- 0.96
bash scripts/run_cifar10_gpu.sh --aug_copy= ${AUG_COPY} # UDA accuracy:
# 4000: 97.72 +- 0.10
# 2000: 97.80 +- 0.06
# 1000: 97.77 +- 0.07
# 500: 97.73 +- 0.09
# 250: 97.28 +- 0.40
bash scripts/run_svhn_gpu.sh --aug_copy= ${AUG_COPY} Les textes de critique de film dans IMDB sont plus longs que de nombreuses tâches de classification, donc l'utilisation d'une longueur de séquence plus longue conduit à de meilleures performances. Les longueurs de séquence sont limitées par la mémoire TPU / GPU lors de l'utilisation de Bert (voir les problèmes hors mémoire de Bert). En tant que tels, nous fournissons des scripts pour fonctionner avec des longueurs de séquence plus courtes et des tailles de lots plus petites.
Si vous souhaitez exécuter UDA avec Bert Base sur un GPU avec 11 Go de mémoire, accédez au répertoire de texte et exécutez les commandes suivantes:
# Set a larger max_seq_length if your GPU has a memory larger than 11GB
MAX_SEQ_LENGTH=128
# Download data and pretrained BERT checkpoints
bash scripts/download.sh
# Preprocessing
bash scripts/prepro.sh --max_seq_length= ${MAX_SEQ_LENGTH}
# Baseline accuracy: around 68%
bash scripts/run_base.sh --max_seq_length= ${MAX_SEQ_LENGTH}
# UDA accuracy: around 90%
# Set a larger train_batch_size to achieve better performance if your GPU has a larger memory.
bash scripts/run_base_uda.sh --train_batch_size=8 --max_seq_length= ${MAX_SEQ_LENGTH}
Les meilleures performances dans l'article sont obtenues en utilisant un max_seq_length de 512 et en initialisant avec Bert grand finetuné sur des données non supervisées dans le domaine. Si vous avez accès à Google Cloud TPU V3-32 POD, essayez:
MAX_SEQ_LENGTH=512
# Download data and pretrained BERT checkpoints
bash scripts/download.sh
# Preprocessing
bash scripts/prepro.sh --max_seq_length= ${MAX_SEQ_LENGTH}
# UDA accuracy: 95.3% - 95.9%
bash train_large_ft_uda_tpu.shTout d'abord, installez les dépendances suivantes:
pip install --user nltk
python -c " import nltk; nltk.download('punkt') "
pip install --user tensor2tensor==1.13.4La commande suivante traduit l'exemple fourni. Il divise automatiquement les paragraphes en phrases, traduit des phrases anglaises en français, puis les traduit en anglais. Enfin, il compose les phrases paraphrasées en paragraphes. Accédez au répertoire Back_Translate et exécutez:
bash download.sh
bash run.shIl existe une variable Sampling_Temp dans le fichier bash. Il est utilisé pour contrôler la diversité et la qualité des paraphrases. L'augmentation de Sampling_temp produira une diversité accrue mais une bonne qualité. Étonnamment, la diversité est plus importante que la qualité pour de nombreuses tâches que nous avons essayées.
Nous vous suggérons d'essayer de définir Sampling_Temp à 0,7, 0,8 et 0,9. Si votre tâche est très robuste au bruit, Sampling_Temp = 0,9 ou 0,8 devrait entraîner des performances améliorées. Si votre tâche n'est pas robuste au bruit, la définition de la température d'échantillonnage à 0,7 ou 0,6 devrait être meilleure.
Si vous souhaitez réaliser une traduction dans un grand fichier, vous pouvez modifier les répliques et les arguments Worker_id dans run.sh. Par exemple, lorsque les répliques = 3, nous divisons les données en trois parties, et chaque run.sh ne traitera qu'une partie selon le Worker_ID.
L'UDA travaille hors de la boîte et ne nécessite pas de réglage hyperparamètre étendu, mais pour vraiment pousser les performances, voici des suggestions sur les hyperparamtres:
Une grande partie du code est tirée de Bert et Randaugment. Merci!
Veuillez citer ce document si vous utilisez UDA.
@article{xie2019unsupervised,
title={Unsupervised Data Augmentation for Consistency Training},
author={Xie, Qizhe and Dai, Zihang and Hovy, Eduard and Luong, Minh-Thang and Le, Quoc V},
journal={arXiv preprint arXiv:1904.12848},
year={2019}
}
Veuillez également citer cet article si vous utilisez UDA pour les images.
@article{cubuk2019randaugment,
title={RandAugment: Practical data augmentation with no separate search},
author={Cubuk, Ekin D and Zoph, Barret and Shlens, Jonathon and Le, Quoc V},
journal={arXiv preprint arXiv:1909.13719},
year={2019}
}
Ce n'est pas un produit Google officiellement pris en charge.