无监督的数据增强或UDA是一种半监督的学习方法,可在各种语言和视觉任务上实现最新的结果。
UDA只有20个标记的示例,超过了以前的IMDB先前的最先进的IMDB培训,以25,000个标记的示例进行了培训。
| 模型 | 标记的示例数 | 错误率 |
|---|---|---|
| 混合增值税(PRAV。SOTA) | 25,000 | 4.32 |
| 伯特 | 25,000 | 4.51 |
| UDA | 20 | 4.20 |
它降低了CIFAR-10上最新方法错误率的30%以上,其中有4,000个标记的示例和SVHN,并带有1,000个标记的示例:
| 模型 | CIFAR-10 | SVHN |
|---|---|---|
| ICT(sota Press) | 7.66±.17 | 3.53±.07 |
| UDA | 4.31±.08 | 2.28±.10 |
它通过标记为10%的数据,可以显着改善成像网。
| 模型 | TOP-1准确性 | 前5个准确性 |
|---|---|---|
| Resnet-50 | 55.09 | 77.26 |
| UDA | 68.78 | 88.80 |
UDA是一种半监督学习的方法,它减少了对标记示例的需求,并更好地利用了未标记的示例。
我们发布以下内容:
该存储库中的所有代码都与GPU和Google Cloud TPU开箱即用。
该代码在Python 2.7和TensorFlow 1.13上进行了测试。安装TensorFlow后,运行以下命令以安装依赖项:
pip install --user absl-py我们为每个原始示例生成100个增强示例。要下载所有增强数据,请转到图像目录并运行
AUG_COPY=100
bash scripts/download_cifar10.sh ${AUG_COPY}请注意,所有增强数据需要120克磁盘空间。为了节省空间,您可以将Aug_copy设置为较小的数字,例如30。
另外,您可以通过运行来生成增强的示例
AUG_COPY=100
bash scripts/preprocess.sh --aug_copy= ${AUG_COPY}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} IMDB中的电影评论文本比许多分类任务更长,因此使用较长的序列长度导致表现更好。使用BERT时,序列长度受TPU/GPU存储器的限制(请参阅BERT的不可存储问题)。因此,我们提供脚本以较短的序列长度和较小的批量大小运行。
如果您想在带有11 GB内存的GPU上使用BERT BASE运行UDA,请转到文本目录并运行以下命令:
# 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}
本文中最好的性能是通过使用512的max_seq_length实现的,并用在无监督的内域中使用大量固定的BERT初始化。如果您可以访问Google Cloud TPU V3-32 POD,请尝试:
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.sh首先,安装以下依赖项:
pip install --user nltk
python -c " import nltk; nltk.download('punkt') "
pip install --user tensor2tensor==1.13.4以下命令翻译了提供的示例文件。它会自动将段落分为句子,将英语句子翻译成法语,然后将其翻译回英语。最后,它将解释句子撰写为段落。转到Back_translate目录并运行:
bash download.sh
bash run.shbash文件中有一个可变sampling_temp 。它用于控制释义的多样性和质量。 sampling_temp的增加将导致多样性增加,但质量较差。令人惊讶的是,对于我们尝试的许多任务,多样性比质量更重要。
我们建议尝试将Sampling_Temp设置为0.7、0.8和0.9。如果您的任务对噪声非常强大,则Sampling_Temp = 0.9或0.8应导致性能提高。如果您的任务对噪声不强大,则将采样温度设置为0.7或0.6应该更好。
如果您想将翻译转换为大文件,则可以更改run.sh中的副本和worker_id参数。例如,当replicas = 3时,我们将数据分为三个部分,每个部分运行。SH仅根据worker_id处理一个部分。
UDA开箱即用,不需要大量的超参数调整,但是要真正推动性能,这里有有关超参数的建议:
代码的很大一部分取自Bert和Randaugment。谢谢!
如果您使用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}
}
如果您使用UDA进行图像,请还请引用本文。
@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}
}
这不是官方支持的Google产品。