監視されていないデータ増強またはUDAは、さまざまな言語およびビジョンタスクで最先端の結果を達成する半監視学習方法です。
ラベルが20の例で、UDAは25,000のラベル付き例でトレーニングされたIMDBの以前の最先端の例を上回ります。
| モデル | ラベル付き例の数 | エラー率 |
|---|---|---|
| 混合vat(prev。sota) | 25,000 | 4.32 |
| バート | 25,000 | 4.51 |
| uda | 20 | 4.20 |
CIFAR-10の最先端の方法のエラー率の30%以上を4,000のラベル付き例と、1,000のラベル付き例でSVHNで削減します。
| モデル | CIFAR-10 | svhn |
|---|---|---|
| ICT(Prev。Sota) | 7.66±.17 | 3.53±.07 |
| uda | 4.31±.08 | 2.28±.10 |
10%のラベル付きデータでImagenetの大幅な改善につながります。
| モデル | 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}すべての拡張データに120gのディスクスペースが必要であることに注意してください。スペースを節約するには、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ベースで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を使用し、監視されていないデータでdomain内のfinetunedで初期化することで達成されます。 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の場合、データを3つの部分に分割し、各run.shはworker_idに従って1部のみを処理します。
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製品ではありません。