Pengantar semi-supervised learning dan adversarial training
Semi-supervised Learning adalah tipe learning di mana kita mempunyai data masukan (input data) dalam jumlah besar dan hanya beberapa dari data tersebut yang dilabeli.
Sumber: medium |
Apa semi-supervised learning?
Setiap algoritma machine learning membutuhkan data untuk dipelajari. Tetapi bahkan dengan berton-ton data di dunia, termasuk teks, gambar, rangkaian waktu, dan banyak lagi, hanya sebagian kecil saja yang diberi label, baik secara algoritma atau dengan tangan.
Sebagian besar waktu, kita membutuhkan data berlabel untuk melakukan supervised machine learning. Saya khususnya, kami menggunakannya untuk memprediksi label setiap titik data dengan model. Karena data memberi tahu kita apa seharusnya label, kita dapat menghitung perbedaan antara prediksi dan label, dan kemudian meminimalkan perbedaan itu.
Seperti yang Anda ketahui, kategori algoritma lain yang disebut algoritma unsupervised tidak memerlukan label tetapi dapat belajar dari data yang tidak berlabel. PUnsupervised learning sering bekerja dengan baik untuk menemukan pola-pola baru dalam dataset dan untuk mengelompokkan data ke dalam beberapa kategori berdasarkan beberapa fitur. Contoh populer adalah algoritma K-Means dan Latent Dirichlet Allocation (LDA).
Sekarang bayangkan Anda ingin melatih model untuk mengklasifikasikan dokumen teks tetapi Anda ingin memberikan algoritma tentang cara membuat kategori. Anda hanya ingin menggunakan sebagian kecil dari dokumen teks berlabel karena setiap dokumen tidak berlabel dan pada saat yang sama Anda ingin model Anda mengklasifikasikan dokumen yang tidak berlabel seakurat mungkin berdasarkan pada dokumen yang sudah diberi label.
Untungnya, ada algoritma semi-supervised , yang dapat belajar dari set data yang diberi label sebagian.
Teks-dokumen adalah bentuk data berlimpah yang tidak berlabel, termasuk volume dan volume skrip, buku, blog, dll., Yang sebagian besar tidak berlabel. Kita tahu bahwa memberi label pada banyak data itu mahal. (Misalnya, bayangkan waktu yang diperlukan seseorang untuk membaca sepuluh ribu artikel hanya untuk menghubungkan satu kelas khusus dengan dokumen teks itu.)
Apa itu adversarial training?
Pada bulan April 2017, Miyato dkk mempresentasikan metode baru yang memungkinkan semi-supervised learning, yaitu: Pelatihan Virtual Adversarial: Metode Regularisasi untuk Pembelajaran yang Supervisi dan Semi-Supervisi. Pekerjaan mereka terkait erat dengan pekerjaan yang disajikan oleh Goodfellow et al dalam makalah mereka Menjelaskan dan Memanfaatkan Contoh Adversarial.
Dalam artikel berikut, saya akan memperkenalkan metode adversarial training menggunakan contoh gambar dan teks. Jika Anda tertarik untuk mempelajari lebih lanjut, lihat makalah penelitian yang ditautkan di atas.
Paper Goodfellow mencatat bahwa kita dapat dengan mengelompokan gambar dengan menambahkan beberapa noise ke gambar input. 'noise' ini bisa sangat kecil sehingga kita tidak bisa mendeteksinya dengan mata telanjang, meskipun neural classifier bisa. Faktanya, kita dapat dengan sengaja mencoba memperkenalkan noise yang akan memaksimalkan 'kegagalan' dari pengklasifikasi, mendorongnya untuk mengidentifikasi secara salah gambar yang diberikan.
Pengenalan noise yang tampaknya tidak signifikan ini mengubah klasifikasi gambar untuk mengidentifikasi panda sebagai siamang dengan kepercayaan lebih dari 99%.
Jadi bagaimana kita bisa memperbaiki modelnya?
Salah satu pendekatan adalah terus melatih model pada set gambar, tetapi selama pelatihan akan menghasilkan noise adversarial yang ditambahkan ke gambar. Karena melatih model, kita masih tahu semua label gambar dan kita dapat melatih model untuk mengklasifikasikan gambar berdasarkan label tertentu bahkan ketika gambar tersebut mengandung noise tertentu.
Metode 'adversarial training' ini membantu menggeneralisasi model dan membuatnya lebih kuat terhadap noise yang mungkin dimasukkan oleh gambar. Oleh karena itu membuat model lebih kecil kemungkinannya untuk membuat prediksi yang salah ketika gambar di luar set pelatihan mengandung noise.
Miyato dan timnya menerapkan ide-ide ini untuk melakukan 'virtual adversarial training' untuk semi-supervised learning, yang sangat cocok untuk model yang harus bersaing dengan data sedikit berlabel. Dengan 'virtual adversarial training', kita tidak menggunakan label set pelatihan, melainkan probabilitas bersyarat bahwa suatu gambar akan memiliki label X. Dengan kata lain, ketika memasukkan gambar panda dan model memperkirakan bahwa memiliki 40% panda, 20% burung, 1% mobil, dan sebagainya, distribusi itu sendiri menjadi label selama adversarial training. Ini berarti bahwa menambahkan noise ke gambar dengan metode adversarial tetapi masih memberi tahu classifier bahwa label yang benar adalah: 40% panda, 20% burung, 1% mobil, dan sebagainya.
Ini memungkinkan untuk melakukan semi-supervised learning. Untuk gambar dengan label, kita dapat mengikuti contoh adversarial sebelumnya dan memberi tahu model bahwa kita tahu labelnya. Dan untuk gambar yang tidak berlabel, kita membiarkan model memprediksi label (40% panda, 20% burung, 1% mobil, dan sebagainya) dan kemudian menggunakannya untuk noise gambar. Seperti dijelaskan di atas, metode adversarial mencoba membuat model paling gagal dan dalam kasus ini model mencoba membuat noise pada gambar yang memaksimalkan perbedaan antara label yang diprediksi dan distribusi label yang benar.
Mari pahami matematika sebentar.
kita memperkirakan P (Label | Fitur) untuk gambar yang tidak berlabel dan mencoba menemukan noise yang memaksimalkan perbedaan antara distribusi itu dan distribusi prediksi dengan noise. Dalam contoh ini, kita menggunakan divergensi Kullback – Leibler, dilambangkan sebagai KL:
Dengan adanya noise terbaik ini kita mencoba meminimalkan loss function yang didefinisikan oleh:
last function ini adalah virtual adversarial loss function yang dapat kita tambahkan ke loss function biasa untuk berfungsi sebagai regularisasi.
Contoh Aplikasi untuk Klasifikasi Teks Semi-supervised
Dengan fungsi itu, kita dapat bekerja pada classifier dokumen semi-diawasi.
Persiapan:
Mari kita mulai dengan datakita. Kita akan bekerja dengan teks dan harus mewakili teks secara numerik. Teks dapat direpresentasikan dalam berbagai cara tetapi yang paling umum adalah mengambil setiap kata sebagai fitur tersendiri dari teks.
Pertimbangkan dua dokumen teks. Yang satu mengatakan: "I am hungry" dan yang lain mengatakan "I am sick". Untuk mewakili ini sebagai fitur, kita tahu bahwa dalam kedua teks kita memiliki 4 kata yang berbeda, yaitu: I, am, hungry, dan sick. Kata-kata itu sekarang akan menjadi fitur. Kita dapat mewakili setiap kata sebagai 1 atau 0 tergantung pada apakah ada atau tidak dalam dokumen.
Ini akan memberi kami representasi terkodekan berikut untuk kedua dokumen:
‘I am hungry’: (1,1,0,1)
‘I am sick’: (1,1,1,0)
Seperti yang dapat dibayangkan, semakin banyak kata yang dimiliki dalam dokumen, semakin banyak fitur yang akan dimiliki untuk teks yang diwakili secara numerik! Ini bisa menjadi sangat buruk.
Untungnya, sebagai alternatif, kita bisa merepresentasikan dokumen-dokumen itu dengan kata embedding. Penyisipan kata pada dasarnya adalah representasi vektor n-dimensi yang padat, berlawanan dengan representasi yang jarang. Untuk tujuan ini, kita mewakili kata-kata dalam ruang 300 dimensi. Selain representasi numerik, kata yang disematkan juga "learns" untuk menyusun kembali kata-kata yang secara semantik ditutup di dalam ruang itu. Ini berarti bahwa kata-kata dengan makna yang sama, sering kali dikelompokkan kembali dalam ruang 300 dimensi yang berbeda dengan metode pengkodean yang lebih 'primitif'. Untuk detail lebih lanjut tentang embeddings kata dan cara menghasilkannya, lihat artikel hebat ini.
Model:
Mari lihat model yang disajikan oleh Miyato dkk dalam Metode Pelatihan Adversarial untuk Klasifikasi Teks semi-supervised, yang bergantung pada virtual adversarial training yang disebutkan sebelumnya. Sebagai bantuan, penulis juga mengunggah model ke repositori GitHub.
Model yang disajikan dari makalah ini memiliki struktur sebagai berikut:
Struktur ini menunjukkan perlunya embedding kata sebelumnya. Tidak masuk akal untuk mengganggu kata-kata dengan noise, dan tidak jelas bagaimana Anda akan melakukannya. Ganti kata-kata? Ganti karakter?
Alih-alih, kita mengganggu vektor 300-dimensi dengan vektor perturbasi r dengan ukuran yang sama. Kami menggunakan prinsip yang sama di sini seperti yang kami lakukan pada panda. Secara khusus, kami mencoba untuk mengganggu kata embedding sehingga model kami memungkinkan prediksi terburuk. Karena kita memiliki vektor yang padat, kita dapat mengganggu setiap fitur dari vektor tersebut hingga tingkat yang kecil sehingga menyebabkan model kita gagal pada tugas klasifikasi.
Untuk model klasifikasi, kami menggunakan LSTM sederhana yang mengambil sebagai input kata-kata yang telah tertanam. Ini menghasilkan kelas kami Y. Pada Gambar 2., Veos mewakili akhir dari token kalimat, yang menandai akhir dari kalimat dan membantu meningkatkan klasifikasi.
Training:
Seperti sebelumnya, Kita melatih model menggunakan virtual adversarial training, yang berarti bahwa telah memberi label dan tidak berlabel dokumen teks. Berdasarkan dokumen-dokumen itu, model kami mencoba untuk menemukan r gangguan terbaik, yang akan membuat model kami gagal, dan itu belajar dari itu. Prosesnya identik dengan yang dimiliki untuk pengelompokan gambar, kecuali bahwa kita mengganggu penyisipan kata alih-alih piksel dari suatu gambar.
Secara efektif, penggunaan data yang tidak berlabel memungkinkan kita untuk membuat model lebih umum daripada apa yang akan terjadi tanpa data tambahan ini.
Untuk mengintegrasikan ini ke dalam model, kita menambahkan istilah tambahan untuk loss function. Saya menjelaskan additional losssebelumnya, sehingga dapat menggunakan kembali ini:
Cara praktis untuk menjelaskan ini: model ingin meminimalkan loss function dengan mengklasifikasikan data yang diberi label sebaik mungkin menggunakan cross-entropy kategoris. Namun, dengan additional virtual loss, model akan dihukum jika semakin yakin tentang (atau overfits) keputusan yang dibuatnya. Virtual loss akan menunjukkan model bahwa setelah kami memperkenalkan contoh dengan noise tertentu, model tersebut dapat gagal dan model tersebut harus memperhitungkannya juga. Hal ini membuat model belajar dari data yang diberi label agar setepat mungkin tetapi juga belajar bahwa titik data yang serupa dengan perturbations kecil (adversarial perturbations) harus diklasifikasikan dengan benar. Ingat contoh gambar panda? Otak kita tidak mempertimbangkan noise dan bagi kita ini masih jelas panda. Itulah tepatnya yang kita inginkan untuk dicapai oleh model untuk contoh pelatihan.
Beberapa hasil:
Dalam perjalanan pekerjaan ini, saya bermain-main dengan DBpedia Data-Set (14 kelas dengan sekitar 560.000 file pelatihan dan 70.000 file tes).
Saya tidak membandingkan model ini dengan classifier biasa tanpa supervised learning karena ini secara khusus merupakan proyek eksplorasi, tetapi pasti akan sangat membantu untuk membandingkan ini dengan classifier yang belum menggunakan semua data. Kemudian lagi, hasilnya mungkin berubah secara drastis tergantung pada data apa yang kita ambil sebagai data berlabel.
Namun, saya ingin menunjukkan bahwa dengan hanya menggunakan sebagian kecil dari data berlabel, adalah mungkin untuk mendapatkan hasil yang dapat diterima dengan regularisasi ini. Plus, model lebih siap untuk adversarial attacks - meskipun diakui sedang dipersiapkan dengan cara itu mungkin tidak berguna untuk pengklasifikasi teks seperti untuk model lain.
Terakhir
Metode ini sangat kuat ketika melakukan semi-supervised learning. Ini memungkinkan untuk meningkatkan data yang tidak berlabel, yang sangat penting dalam sebagian besar kasus bisnis karena dalam banyak kasus tidak memiliki cukup data berlabel. Saat memiliki beberapa data berlabel, mungkin masih memiliki banyak data dengan label yang hilang, yang ingin manfaatkan untuk meningkatkan model.