การเพิ่มข้อมูลที่ไม่ได้รับการดูแลหรือ UDA เป็นวิธีการเรียนรู้แบบกึ่งผู้ดูแลซึ่งได้รับผลลัพธ์ที่ทันสมัยในงานภาษาและการมองเห็นที่หลากหลาย
ด้วยตัวอย่างที่มีป้ายกำกับเพียง 20 ตัวอย่าง UDA มีประสิทธิภาพสูงกว่าสถานะก่อนหน้านี้ใน IMDB ที่ผ่านการฝึกอบรมจากตัวอย่างที่มีป้ายกำกับ 25,000 ตัวอย่าง
| แบบอย่าง | จำนวนตัวอย่างที่มีป้ายกำกับ | อัตราความผิดพลาด |
|---|---|---|
| VAT ผสม (ก่อนหน้า SOTA) | 25,000 | 4.32 |
| เบิร์ต | 25,000 | 4.51 |
| UDA | 20 | 4.20 |
มันลดลงมากกว่า 30% ของอัตราความผิดพลาดของวิธีการที่ทันสมัยใน CIFAR-10 ด้วยตัวอย่างที่มีป้ายกำกับ 4,000 ตัวอย่างและ SVHN พร้อมตัวอย่าง 1,000 ตัวอย่าง:
| แบบอย่าง | CIFAR-10 | svhn |
|---|---|---|
| ICT (Prev. Sota) | 7.66 ± .17 | 3.53 ± .07 |
| UDA | 4.31 ± .08 | 2.28 ± .10 |
มันนำไปสู่การปรับปรุงที่สำคัญเกี่ยวกับ ImageNet ด้วยข้อมูลที่มีป้ายกำกับ 10%
| แบบอย่าง | ความแม่นยำสูงสุด -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 นั้นยาวกว่างานการจำแนกประเภทจำนวนมากดังนั้นการใช้ความยาวลำดับที่ยาวขึ้นนำไปสู่การแสดงที่ดีขึ้น ความยาวลำดับถูก จำกัด โดยหน่วยความจำ TPU/GPU เมื่อใช้ BERT (ดูปัญหานอกหน่วยความจำของ BERT) ดังนั้นเราจึงให้สคริปต์เพื่อทำงานด้วยความยาวลำดับที่สั้นกว่าและขนาดแบทช์ที่เล็กกว่า
หากคุณต้องการเรียกใช้ UDA ด้วยฐาน Bert บน GPU ที่มีหน่วยความจำ 11 GB ให้ไปที่ไดเรกทอรี ข้อความ และเรียกใช้คำสั่งต่อไปนี้:
# 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_LENGTH ของ 512 และเริ่มต้นด้วย BERT ขนาดใหญ่ 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.shมีตัวแปร Sampling_TEMP ในไฟล์ bash มันถูกใช้เพื่อควบคุมความหลากหลายและคุณภาพของการถอดความ การเพิ่ม Sampling_TEMP จะนำไปสู่ความหลากหลายที่เพิ่มขึ้น แต่คุณภาพที่แย่ลง น่าแปลกที่ความหลากหลายมีความสำคัญมากกว่าคุณภาพสำหรับงานหลายอย่างที่เราลอง
เราขอแนะนำให้พยายามตั้งค่า sampling_temp เป็น 0.7, 0.8 และ 0.9 หากงานของคุณแข็งแกร่งมากต่อเสียงรบกวน Sampling_TEMP = 0.9 หรือ 0.8 ควรนำไปสู่ประสิทธิภาพที่ดีขึ้น หากงานของคุณไม่แข็งแกร่งต่อเสียงรบกวนการตั้งค่าการสุ่มตัวอย่างอุณหภูมิเป็น 0.7 หรือ 0.6 น่าจะดีกว่า
หากคุณต้องการทำการแปลกลับไปยังไฟล์ขนาดใหญ่คุณสามารถเปลี่ยนอาร์กิวเมนต์แบบจำลองและ Worker_id ใน Run.sh ตัวอย่างเช่นเมื่อแบบจำลอง = 3 เราแบ่งข้อมูลออกเป็นสามส่วนและแต่ละ run.sh จะดำเนินการเพียงส่วนเดียวตาม worker_id
UDA ทำงานนอกกรอบและไม่จำเป็นต้องมีการปรับแต่งพารามิเตอร์ไฮเปอร์พารามิเตอร์อย่างกว้างขวาง แต่เพื่อผลักดันประสิทธิภาพจริง ๆ นี่คือคำแนะนำเกี่ยวกับพารามิเตอร์ hyperparamters:
ส่วนใหญ่ของรหัสถูกนำมาจาก 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 ที่ได้รับการสนับสนุนอย่างเป็นทางการ