Augmentasi data yang tidak diawasi atau UDA adalah metode pembelajaran semi-diawasi yang mencapai hasil canggih pada berbagai tugas bahasa dan visi.
Dengan hanya 20 contoh berlabel, UDA mengungguli yang sebelumnya canggih di IMDB yang dilatih pada 25.000 contoh berlabel.
| Model | Jumlah contoh berlabel | Tingkat kesalahan |
|---|---|---|
| Campuran PPN (Prep. SOTA) | 25.000 | 4.32 |
| Bert | 25.000 | 4.51 |
| Uda | 20 | 4.20 |
Ini mengurangi lebih dari 30% dari tingkat kesalahan metode canggih pada CIFAR-10 dengan 4.000 contoh berlabel dan SVHN dengan 1.000 contoh berlabel:
| Model | CIFAR-10 | Svhn |
|---|---|---|
| TIK (Prev. Sota) | 7.66 ± .17 | 3.53 ± .07 |
| Uda | 4.31 ± .08 | 2.28 ± .10 |
Ini mengarah pada peningkatan yang signifikan pada ImageNet dengan data berlabel 10%.
| Model | Akurasi Top-1 | akurasi top-5 |
|---|---|---|
| ResNet-50 | 55.09 | 77.26 |
| Uda | 68.78 | 88.80 |
UDA adalah metode pembelajaran semi-diawasi , yang mengurangi kebutuhan untuk contoh berlabel dan lebih baik menggunakan yang tidak berlabel.
Kami merilis yang berikut:
Semua kode dalam repositori ini berfungsi di luar kotak dengan GPU dan Google Cloud TPU.
Kode diuji pada Python 2.7 dan TensorFlow 1.13. Setelah menginstal TensorFlow, jalankan perintah berikut untuk menginstal dependensi:
pip install --user absl-pyKami menghasilkan 100 contoh augmented untuk setiap contoh asli. Untuk mengunduh semua data augmented, buka direktori gambar dan jalankan
AUG_COPY=100
bash scripts/download_cifar10.sh ${AUG_COPY}Perhatikan bahwa Anda memerlukan ruang disk 120g untuk semua data augmented. Untuk menghemat ruang, Anda dapat mengatur aug_copy ke jumlah yang lebih kecil seperti 30.
Atau, Anda dapat menghasilkan contoh augmented sendiri dengan berlari
AUG_COPY=100
bash scripts/preprocess.sh --aug_copy= ${AUG_COPY}Perintah 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} Teks ulasan film di IMDB lebih panjang dari banyak tugas klasifikasi sehingga menggunakan panjang urutan yang lebih panjang mengarah pada kinerja yang lebih baik. Panjang urutan dibatasi oleh memori TPU/GPU saat menggunakan Bert (lihat masalah di luar memori Bert). Dengan demikian, kami menyediakan skrip untuk dijalankan dengan panjang urutan yang lebih pendek dan ukuran batch yang lebih kecil.
Jika Anda ingin menjalankan UDA dengan Base Bert pada GPU dengan memori 11 GB, buka direktori teks dan jalankan perintah berikut:
# 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}
Kinerja terbaik dalam makalah ini dicapai dengan menggunakan max_seq_length dari 512 dan diinisialisasi dengan Bert besar finetuned pada data yang tidak diawasi. Jika Anda memiliki akses ke Google Cloud TPU V3-32 POD, coba:
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.shPertama -tama, instal dependensi berikut:
pip install --user nltk
python -c " import nltk; nltk.download('punkt') "
pip install --user tensor2tensor==1.13.4Perintah berikut menerjemahkan file contoh yang disediakan. Secara otomatis membagi paragraf menjadi kalimat, menerjemahkan kalimat bahasa Inggris ke bahasa Prancis dan kemudian menerjemahkannya kembali ke dalam bahasa Inggris. Akhirnya, ia menyusun kalimat yang diparafrasekan menjadi paragraf. Pergi ke direktori back_translate dan jalankan:
bash download.sh
bash run.shAda variabel sampling_temp dalam file bash. Ini digunakan untuk mengendalikan keragaman dan kualitas parafrase. Meningkatkan sampling_temp akan menyebabkan peningkatan keragaman tetapi kualitas yang lebih buruk. Anehnya, keragaman lebih penting daripada kualitas untuk banyak tugas yang kami coba.
Kami menyarankan mencoba mengatur sampling_temp ke 0,7, 0,8 dan 0,9. Jika tugas Anda sangat kuat untuk noise, sampling_temp = 0,9 atau 0,8 harus menyebabkan peningkatan kinerja. Jika tugas Anda tidak kuat ke noise, pengaturan suhu pengambilan sampel ke 0,7 atau 0,6 harus lebih baik.
Jika Anda ingin melakukan terjemahan kembali ke file besar, Anda dapat mengubah argumen replika dan pekerja di run.sh. Misalnya, ketika replika = 3, kami membagi data menjadi tiga bagian, dan masing -masing run.sh hanya akan memproses satu bagian sesuai dengan Worker_ID.
UDA bekerja di luar kotak dan tidak memerlukan penyetelan hiperparameter yang luas, tetapi untuk benar-benar mendorong kinerja, berikut adalah saran tentang hyperparamters:
Sebagian besar kode diambil dari Bert dan Randaugment. Terima kasih!
Harap kutip makalah ini jika Anda menggunakan 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}
}
Harap juga mengutip makalah ini jika Anda menggunakan UDA untuk gambar.
@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}
}
Ini bukan produk Google yang didukung secara resmi.