無監督的數據增強或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產品。