Неконтролируемое увеличение данных или UDA-это полупроверенный метод обучения, который достигает самых современных результатов по широкому разнообразию задач языка и зрения.
Только 20 маркированных примеров, UDA превосходит предыдущий современный акт на IMDB, обученном 25 000 помеченных примеров.
| Модель | Количество помеченных примеров | Частота ошибок |
|---|---|---|
| Смешанный НДС (PREP. SOTA) | 25 000 | 4.32 |
| БЕРТ | 25 000 | 4.51 |
| Уда | 20 | 4.20 |
Это уменьшает более 30% от частоты ошибок современных методов на CIFAR-10 с 4000 меченых примеров и SVHN с 1000 меченых примеров:
| Модель | CIFAR-10 | Svhn |
|---|---|---|
| ИКТ (предварительная. SOTA) | 7,66 ± .17 | 3,53 ± 0,07 |
| Уда | 4,31 ± 0,08 | 2,28 ± .10 |
Это приводит к значительным улучшениям в ImageNet с 10% помеченными данными.
| Модель | Топ-1 точность | Топ-5 Точность |
|---|---|---|
| Resnet-50 | 55,09 | 77.26 |
| Уда | 68,78 | 88,80 |
UDA-это метод полупрофильного обучения , который снижает необходимость в меченых примерах и лучше использует немеченые.
Мы выпускаем следующее:
Весь код в этом репозитории работает из-за графического процессора и 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}Команда графического процессора:
# 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 длиннее многих задач классификации, поэтому использование более длительной длины последовательности приводит к лучшим выступлениям. Длина последовательностей ограничена памятью TPU/GPU при использовании BERT (см. Проблемы BERT вне памяти). Таким образом, мы предоставляем сценарии для работы с более короткой длиной последовательности и меньшими размерами партии.
Если вы хотите запустить UDA с базой Bert на графическом процессоре с памятью 11 ГБ, перейдите в текстовый каталог и запустите следующие команды:
# 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}
Лучшая производительность в статье достигается с использованием MAX_SEQ_LENGHT 512 и инициализации с BERT LAGICENETUNED на введенных без контрольных данных. Если у вас есть доступ к 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.shВ файле Bash есть переменная hampling_temp . Он используется для контроля разнообразия и качества перефразов. Увеличение отбора проб приведет к увеличению разнообразия, но хуже качества. Удивительно, но разнообразие важнее качества для многих задач, которые мы пробовали.
Мы предлагаем попытаться установить выборку на 0,7, 0,8 и 0,9. Если ваша задача очень устойчива к шуму, shapeling_temp = 0,9 или 0,8 должна привести к улучшению производительности. Если ваша задача не является устойчивой к шуму, установка температуры отбора проб на 0,7 или 0,6 должна быть лучше.
Если вы хотите сделать обратный перевод в большой файл, вы можете изменить аргументы Replicas и worker_id в run.sh. Например, когда Replicas = 3, мы делим данные на три части, и каждый запуск. SH будет обрабатывать только одну часть в соответствии с рабочей_ид.
UDA работает вне коробки и не требует обширной настройки гиперпараметра, но для того, чтобы действительно продвигать производительность, здесь предложения о гиперпарамтере:
Большая часть кодекса взята из Берта и Рэндаугмента. Спасибо!
Пожалуйста, цитируйте эту статью, если вы используете 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.