Buat Data dari Random Noise dengan Generative Adversarial Networks
Diterbitkan: 2022-03-11Sejak saya mengetahui tentang jaringan permusuhan generatif (GAN), saya terpesona oleh mereka. GAN adalah jenis jaringan saraf yang mampu menghasilkan data baru dari awal. Anda dapat memberinya sedikit noise acak sebagai input, dan ini dapat menghasilkan gambar realistis dari kamar tidur, atau burung, atau apa pun yang dilatih untuk dihasilkan.
Satu hal yang dapat disepakati oleh semua ilmuwan adalah bahwa kita membutuhkan lebih banyak data.
GAN, yang dapat digunakan untuk menghasilkan data baru dalam situasi terbatas data, terbukti sangat berguna. Data terkadang sulit dan mahal serta memakan waktu untuk dihasilkan. Namun, agar berguna, data baru harus cukup realistis sehingga wawasan apa pun yang kami peroleh dari data yang dihasilkan masih berlaku untuk data nyata. Jika Anda melatih kucing untuk berburu tikus, dan Anda menggunakan tikus palsu, sebaiknya pastikan bahwa tikus palsu itu benar-benar terlihat seperti tikus.
Cara lain untuk memikirkannya adalah GAN menemukan struktur dalam data yang memungkinkan mereka membuat data yang realistis. Ini dapat berguna jika kita tidak dapat melihat struktur itu sendiri atau tidak dapat menariknya dengan metode lain.
Dalam artikel ini, Anda akan mempelajari bagaimana GAN dapat digunakan untuk menghasilkan data baru. Agar tutorial ini tetap realistis, kami akan menggunakan dataset deteksi penipuan kartu kredit dari Kaggle.
Dalam eksperimen saya, saya mencoba menggunakan kumpulan data ini untuk melihat apakah saya bisa mendapatkan GAN untuk membuat data yang cukup realistis untuk membantu kami mendeteksi kasus penipuan. Kumpulan data ini menyoroti masalah data yang terbatas: Dari 285.000 transaksi, hanya 492 yang merupakan penipuan. 492 kasus penipuan bukanlah kumpulan data besar untuk dilatih, terutama dalam hal tugas pembelajaran mesin di mana orang ingin memiliki kumpulan data beberapa kali lipat lebih besar. Meskipun hasil eksperimen saya tidak luar biasa, saya belajar banyak tentang GAN di sepanjang jalan yang dengan senang hati saya bagikan.
Sebelum kamu memulai
Sebelum kita mempelajari ranah GAN ini, jika Anda ingin cepat memoles pembelajaran mesin atau keterampilan pembelajaran mendalam Anda, Anda dapat melihat dua posting blog terkait ini:
- Pengantar Teori Pembelajaran Mesin dan Penerapannya: Tutorial Visual dengan Contoh
- Tutorial Pembelajaran Mendalam: Dari Perceptrons ke Deep Networks
Kenapa GAN?
Jaringan permusuhan generatif (GAN) adalah arsitektur jaringan saraf yang telah menunjukkan peningkatan yang mengesankan dibandingkan metode generatif sebelumnya, seperti enkoder otomatis variasi atau mesin boltzman terbatas. GAN telah mampu menghasilkan gambar yang lebih realistis (misalnya, DCGAN), memungkinkan transfer gaya antar gambar (lihat di sini dan di sini), menghasilkan gambar dari deskripsi teks (StackGAN), dan belajar dari kumpulan data yang lebih kecil melalui pembelajaran semi-diawasi. Karena prestasi ini, mereka menghasilkan banyak minat baik di sektor akademik dan komersial.
Direktur Penelitian AI di Facebook, Yann LeCunn, bahkan menyebut mereka sebagai pengembangan paling menarik dalam pembelajaran mesin dalam dekade terakhir.
Dasar
Pikirkan tentang bagaimana Anda belajar. Anda mencoba sesuatu, Anda mendapatkan umpan balik. Anda menyesuaikan strategi Anda dan mencoba lagi.
Umpan balik dapat datang dalam bentuk kritik, atau rasa sakit, atau keuntungan. Itu mungkin datang dari penilaian Anda sendiri tentang seberapa baik Anda melakukannya. Seringkali, umpan balik yang paling berguna adalah umpan balik yang datang dari orang lain, karena itu bukan hanya angka atau sensasi, tetapi penilaian cerdas tentang seberapa baik Anda melakukan tugas.
Ketika komputer dilatih untuk suatu tugas, manusia biasanya memberikan umpan balik dalam bentuk parameter atau algoritma yang disesuaikan. Ini bekerja dengan baik ketika tugas didefinisikan dengan baik, seperti belajar mengalikan dua angka. Anda dapat dengan mudah dan tepat memberi tahu komputer bagaimana kesalahannya.
Dengan tugas yang lebih rumit, seperti membuat gambar anjing, menjadi lebih sulit untuk memberikan umpan balik. Apakah gambarnya buram, apakah lebih mirip kucing, atau terlihat seperti apa pun? Statistik kompleks dapat diterapkan, tetapi akan sulit untuk menangkap semua detail yang membuat gambar tampak nyata.
Seorang manusia dapat memberikan beberapa perkiraan, karena kami memiliki banyak pengalaman mengevaluasi input visual, tetapi kami relatif lambat dan evaluasi kami bisa sangat subjektif. Sebagai gantinya, kami dapat melatih jaringan saraf untuk mempelajari tugas membedakan antara gambar nyata dan gambar yang dihasilkan.
Kemudian, dengan membiarkan generator gambar (juga jaringan saraf) dan diskriminator bergiliran belajar dari satu sama lain, mereka dapat meningkat seiring waktu. Kedua jaringan ini, yang memainkan permainan ini, adalah jaringan permusuhan generatif.
Anda dapat mendengar penemu GAN, Ian Goodfellow, berbicara tentang bagaimana argumen di sebuah bar tentang topik ini menyebabkan malam pengkodean yang panas yang menghasilkan GAN pertama. Dan ya, dia mengakui bar di korannya. Anda dapat mempelajari lebih lanjut tentang GAN dari blog Ian Goodfellow tentang topik ini.
Ada sejumlah tantangan saat bekerja dengan GAN. Pelatihan jaringan saraf tunggal bisa jadi sulit karena banyaknya pilihan yang terlibat: Arsitektur, fungsi aktivasi, metode pengoptimalan, tingkat pembelajaran, dan tingkat putus sekolah, untuk menyebutkan beberapa saja.
GAN menggandakan semua pilihan itu dan menambah kerumitan baru. Baik generator dan diskriminator mungkin melupakan trik yang mereka gunakan sebelumnya dalam pelatihan mereka. Hal ini dapat menyebabkan kedua jaringan terjebak dalam siklus solusi yang stabil yang tidak membaik seiring waktu. Satu jaringan mungkin mengalahkan jaringan lain, sehingga tidak ada yang bisa belajar lagi. Atau, generator mungkin tidak mengeksplorasi banyak ruang solusi yang mungkin, hanya cukup untuk menemukan solusi realistis. Situasi terakhir ini dikenal sebagai mode collapse.
Mode collapse adalah ketika generator hanya mempelajari sebagian kecil dari kemungkinan mode realistis. Misalnya, jika tugasnya adalah membuat gambar anjing, generator hanya dapat belajar membuat gambar anjing kecil berwarna cokelat. Generator akan melewatkan semua mode lain yang terdiri dari anjing dengan ukuran atau warna lain.
Banyak strategi telah diterapkan untuk mengatasi hal ini, termasuk normalisasi batch, menambahkan label dalam data pelatihan, atau dengan mengubah cara diskriminator menilai data yang dihasilkan.
Orang-orang telah mencatat bahwa menambahkan label ke data—yaitu, memecahnya menjadi beberapa kategori, hampir selalu meningkatkan kinerja GAN. Daripada belajar menghasilkan gambar hewan peliharaan secara umum, seharusnya lebih mudah untuk menghasilkan gambar kucing, anjing, ikan, dan musang, misalnya.
Mungkin terobosan paling signifikan dalam pengembangan GAN datang dalam hal mengubah cara diskriminator mengevaluasi data, jadi mari kita lihat lebih dekat.
Dalam formulasi asli GAN pada tahun 2014 oleh Goodfellow et al., diskriminator menghasilkan perkiraan probabilitas bahwa gambar yang diberikan adalah nyata atau dihasilkan. Diskriminator akan diberikan satu set gambar yang terdiri dari gambar nyata dan gambar yang dihasilkan dan itu akan menghasilkan perkiraan untuk masing-masing input ini. Kesalahan antara keluaran diskriminator dan label aktual kemudian akan diukur dengan kehilangan entropi silang. Kehilangan lintas-entropi dapat disamakan dengan metrik jarak Jensen-Shannon, dan itu ditunjukkan pada awal 2017 oleh Arjovsky et al. bahwa metrik ini akan gagal dalam beberapa kasus dan tidak mengarah ke arah yang benar dalam kasus lain. Kelompok ini menunjukkan bahwa metrik jarak Wasserstein (juga dikenal sebagai penggerak bumi atau jarak EM) bekerja dan bekerja lebih baik dalam banyak kasus.
Cross-entropy loss adalah ukuran seberapa akurat diskriminator mengidentifikasi gambar nyata dan gambar yang dihasilkan. Metrik Wasserstein malah melihat distribusi masing-masing variabel (yaitu, setiap warna setiap piksel) dalam gambar nyata dan yang dihasilkan, dan menentukan seberapa jauh distribusi untuk data nyata dan yang dihasilkan. Metrik Wasserstein melihat seberapa banyak upaya, dalam hal jarak kali massa, yang diperlukan untuk mendorong distribusi yang dihasilkan ke dalam bentuk distribusi nyata, maka nama alternatifnya "jarak penggerak bumi." Karena metrik Wasserstein tidak lagi mengevaluasi apakah suatu gambar itu nyata atau tidak, melainkan memberikan kritik tentang seberapa jauh gambar yang dihasilkan dari gambar asli, jaringan “diskriminator” disebut sebagai jaringan “kritikus” di Wasserstein. Arsitektur.
Untuk eksplorasi GAN yang sedikit lebih komprehensif, dalam artikel ini, kita akan menjelajahi empat arsitektur berbeda:
- GAN: GAN (“vanila”) asli
- CGAN: Versi bersyarat dari GAN asli yang menggunakan label kelas
- WGAN: GAN Wasserstein (dengan penalti gradien)
- WCGAN: Versi bersyarat dari Wasserstein GAN
Tapi mari kita lihat dataset kita dulu.
Sekilas Data Penipuan Kartu Kredit
Kami akan bekerja dengan dataset deteksi penipuan kartu kredit dari Kaggle.
Dataset terdiri dari ~285.000 transaksi, dimana hanya 492 yang merupakan penipuan. Data terdiri dari 31 fitur: “waktu”, “jumlah”, “kelas”, dan 28 fitur tambahan yang dianonimkan. Fitur kelas adalah label yang menunjukkan apakah suatu transaksi curang atau tidak, dengan 0 menunjukkan normal dan 1 menunjukkan penipuan. Semua data numerik dan kontinu (kecuali label). Kumpulan data tidak memiliki nilai yang hilang. Dataset sudah dalam kondisi yang cukup baik untuk memulai, tetapi saya akan melakukan sedikit pembersihan lagi, sebagian besar hanya menyesuaikan rata-rata semua fitur ke nol dan standar deviasi ke satu. Saya telah menjelaskan proses pembersihan saya lebih lanjut di buku catatan di sini. Untuk saat ini saya hanya akan menunjukkan hasil akhirnya:
Seseorang dapat dengan mudah melihat perbedaan antara data normal dan data penipuan dalam distribusi ini, tetapi ada juga banyak tumpang tindih. Kami dapat menerapkan salah satu algoritme pembelajaran mesin yang lebih cepat dan kuat untuk mengidentifikasi fitur yang paling berguna untuk mengidentifikasi penipuan. Algoritma ini, xgboost, adalah algoritma pohon keputusan yang didorong oleh gradien. Kami akan melatihnya pada 70% dataset, dan mengujinya pada 30% sisanya. Kami dapat menyiapkan algoritme untuk melanjutkan hingga tidak meningkatkan ingatan (fraksi sampel penipuan yang terdeteksi) pada kumpulan data pengujian. Ini mencapai 76% recall pada set tes, yang jelas meninggalkan ruang untuk perbaikan. Itu memang mencapai presisi 94%, artinya hanya 6% dari kasus penipuan yang diprediksi sebenarnya adalah transaksi normal. Dari analisis ini, kami juga mendapatkan daftar fitur yang diurutkan berdasarkan kegunaannya dalam mendeteksi penipuan. Kami dapat menggunakan fitur yang paling penting untuk membantu memvisualisasikan hasil kami nanti.

Sekali lagi, jika kami memiliki lebih banyak data penipuan, kami mungkin dapat mendeteksinya dengan lebih baik. Artinya, kita bisa mencapai recall yang lebih tinggi. Kami sekarang akan mencoba menghasilkan data penipuan baru yang realistis menggunakan GAN untuk membantu kami mendeteksi penipuan yang sebenarnya.
Menghasilkan Data Kartu Kredit Baru dengan GAN
Untuk menerapkan berbagai arsitektur GAN ke dataset ini, saya akan menggunakan GAN-Sandbox, yang memiliki sejumlah arsitektur GAN populer yang diimplementasikan dengan Python menggunakan library Keras dan back-end TensorFlow. Semua hasil saya tersedia sebagai notebook Jupyter di sini. Semua perpustakaan yang diperlukan disertakan dalam gambar Kaggle/Python Docker, jika Anda memerlukan pengaturan yang mudah.
Contoh di GAN-Sandbox diatur untuk pemrosesan gambar. Generator menghasilkan gambar 2D dengan 3 saluran warna untuk setiap piksel, dan diskriminator/kritikus dikonfigurasi untuk mengevaluasi data tersebut. Transformasi konvolusi digunakan antara lapisan jaringan untuk mengambil keuntungan dari struktur spasial data gambar. Setiap neuron dalam lapisan convolutional hanya bekerja dengan sekelompok kecil input dan output (misalnya, piksel yang berdekatan dalam gambar) untuk memungkinkan pembelajaran hubungan spasial. Dataset kartu kredit kami tidak memiliki struktur spasial di antara variabel, jadi saya telah mengonversi jaringan konvolusi ke jaringan dengan lapisan yang terhubung secara padat. Neuron di lapisan yang terhubung secara padat terhubung ke setiap input dan output dari lapisan, memungkinkan jaringan untuk mempelajari hubungannya sendiri di antara fitur-fiturnya. Saya akan menggunakan pengaturan ini untuk setiap arsitektur.
GAN pertama saya akan mengevaluasi lubang jaringan generator terhadap jaringan diskriminator, memanfaatkan kerugian lintas-entropi dari diskriminator untuk melatih jaringan. Ini adalah arsitektur GAN “vanila” asli. GAN kedua yang akan saya evaluasi menambahkan label kelas ke data dengan cara GAN bersyarat (CGAN). GAN ini memiliki satu variabel lagi dalam data, label kelas. GAN ketiga akan menggunakan metrik jarak Wasserstein untuk melatih jaringan (WGAN), dan yang terakhir akan menggunakan label kelas dan metrik jarak Wasserstein (WCGAN).
Kami akan melatih berbagai GAN menggunakan kumpulan data pelatihan yang terdiri dari 492 transaksi penipuan. Kita dapat menambahkan kelas ke dataset penipuan untuk memfasilitasi arsitektur GAN bersyarat. Saya telah menjelajahi beberapa metode pengelompokan yang berbeda di buku catatan dan menggunakan klasifikasi KMeans yang mengurutkan data penipuan menjadi 2 kelas.
Saya akan melatih setiap GAN selama 5000 putaran dan memeriksa hasilnya di sepanjang jalan. Pada Gambar 4, kita dapat melihat data penipuan aktual dan data penipuan yang dihasilkan dari arsitektur GAN yang berbeda saat pelatihan berlangsung. Kita dapat melihat data penipuan yang sebenarnya dibagi menjadi 2 kelas KMeans, diplot dengan 2 dimensi yang paling membedakan kedua kelas ini (fitur V10 dan V17 dari fitur yang diubah PCA). Dua GAN yang tidak menggunakan informasi kelas, GAN dan WGAN, memiliki output yang dihasilkan semuanya sebagai satu kelas. Arsitektur bersyarat, CGAN dan WCGAN, menunjukkan data yang dihasilkan berdasarkan kelas. Pada langkah 0, semua data yang dihasilkan menunjukkan distribusi normal dari input acak yang diumpankan ke generator.
Kita dapat melihat bahwa arsitektur GAN asli mulai mempelajari bentuk dan jangkauan data aktual, tetapi kemudian runtuh menuju distribusi kecil. Ini adalah mode keruntuhan yang dibahas sebelumnya. Generator telah mempelajari sejumlah kecil data yang sulit dideteksi oleh diskriminator sebagai data palsu. Arsitektur CGAN melakukan sedikit lebih baik, menyebar dan mendekati distribusi setiap kelas data penipuan, tetapi kemudian mode runtuh, seperti yang dapat dilihat pada langkah 5000.
WGAN tidak mengalami keruntuhan mode yang ditunjukkan oleh arsitektur GAN dan CGAN. Bahkan tanpa informasi kelas, ia mulai mengasumsikan distribusi non-normal dari data penipuan yang sebenarnya. Arsitektur WCGAN melakukan hal yang sama dan mampu menghasilkan kelas data yang terpisah.
Kami dapat mengevaluasi seberapa realistis tampilan data menggunakan algoritme xgboost yang sama yang digunakan sebelumnya untuk deteksi penipuan. Ini cepat dan kuat dan bekerja dengan baik tanpa banyak penyetelan. Kami akan melatih pengklasifikasi xgboost menggunakan setengah dari data penipuan aktual (246 sampel) dan jumlah yang sama dari contoh yang dihasilkan GAN. Kemudian kami akan menguji pengklasifikasi xgboost menggunakan separuh lainnya dari data penipuan aktual dan kumpulan berbeda dari 246 contoh yang dihasilkan GAN. Metode ortogonal ini (dalam arti eksperimental) akan memberi kita beberapa indikasi seberapa sukses generator dalam menghasilkan data yang realistis. Dengan data yang dihasilkan sangat realistis, algoritme xgboost harus mencapai akurasi 0,50 (50%)—dengan kata lain, ini tidak lebih baik daripada menebak.
Kita dapat melihat akurasi xgboost pada data yang dihasilkan GAN menurun pada awalnya, dan kemudian meningkat setelah langkah pelatihan 1000 saat mode runtuh. Arsitektur CGAN mencapai data yang agak lebih realistis setelah langkah 2000, tetapi kemudian mode runtuh untuk jaringan ini sebagai dengan baik. Arsitektur WGAN dan WCGAN mencapai data yang lebih realistis dengan lebih cepat, dan terus belajar seiring berjalannya pelatihan. WCGAN tampaknya tidak memiliki banyak keunggulan dibandingkan WGAN, menunjukkan bahwa kelas yang dibuat ini mungkin tidak berguna untuk arsitektur GAN Wasserstein.
Anda dapat mempelajari lebih lanjut tentang arsitektur WGAN dari sini dan di sini.
Jaringan kritikus dalam arsitektur WGAN dan WCGAN sedang belajar menghitung jarak Wasserstein (Earth-mover, EM) antara kumpulan data yang diberikan dan data penipuan yang sebenarnya. Idealnya, ini akan mengukur jarak mendekati nol untuk sampel data penipuan aktual. Kritikus, bagaimanapun, sedang dalam proses belajar bagaimana melakukan perhitungan ini. Selama mengukur jarak yang lebih besar untuk data yang dihasilkan daripada data nyata, jaringan dapat ditingkatkan. Kita dapat melihat bagaimana perbedaan antara jarak Wasserstein untuk data yang dihasilkan dan data nyata berubah selama pelatihan. Jika stabil, maka pelatihan lebih lanjut mungkin tidak membantu. Kita dapat melihat pada gambar 6 bahwa tampaknya ada peningkatan lebih lanjut untuk WGAN dan WCGAN pada dataset ini.
Apa yang Kita Pelajari?
Sekarang kami dapat menguji apakah kami mampu menghasilkan data penipuan baru yang cukup realistis untuk membantu kami mendeteksi data penipuan yang sebenarnya. Kami dapat mengambil generator terlatih yang mencapai skor akurasi terendah dan menggunakannya untuk menghasilkan data. Untuk set pelatihan dasar kami, kami akan menggunakan 70% dari data non-penipuan (199.020 kasus) dan 100 kasus data penipuan (~20% dari data penipuan). Kemudian kami akan mencoba menambahkan jumlah berbeda dari data penipuan nyata atau yang dihasilkan ke set pelatihan ini, hingga 344 kasus (70% dari data penipuan). Untuk set pengujian, kami akan menggunakan 30% kasus non-penipuan lainnya (85.295 kasus) dan kasus penipuan (148 kasus). Kita dapat mencoba menambahkan data yang dihasilkan dari GAN yang tidak terlatih dan dari GAN yang paling terlatih untuk menguji apakah data yang dihasilkan lebih baik daripada noise acak. Dari pengujian kami, tampaknya arsitektur terbaik kami adalah WCGAN pada langkah pelatihan 4800, di mana ia mencapai akurasi xgboost 70% (ingat, idealnya, akurasi adalah 50%). Jadi kami akan menggunakan arsitektur ini untuk menghasilkan data penipuan baru.
Kita dapat melihat pada gambar 7 bahwa penarikan kembali (fraksi sampel penipuan aktual yang diidentifikasi secara akurat dalam set pengujian) tidak meningkat karena kami menggunakan lebih banyak data penipuan yang dihasilkan untuk pelatihan. Pengklasifikasi xgboost mampu menyimpan semua informasi yang digunakan untuk mengidentifikasi penipuan dari 100 kasus nyata dan tidak bingung dengan data tambahan yang dihasilkan, bahkan ketika memilihnya dari ratusan ribu kasus normal. Data yang dihasilkan dari WCGAN yang tidak terlatih tidak membantu atau merugikan, tidak mengherankan. Tetapi data yang dihasilkan dari WCGAN terlatih juga tidak membantu. Tampaknya data tersebut tidak cukup realistis. Kita dapat melihat pada gambar 7 bahwa ketika data penipuan aktual digunakan untuk melengkapi set pelatihan, penarikan meningkat secara signifikan. Jika WCGAN baru saja belajar menduplikasi contoh pelatihan, tanpa menjadi kreatif sama sekali, itu bisa mencapai tingkat recall yang lebih tinggi seperti yang kita lihat dengan data nyata.
Menuju tak terbatas dan melampauinya
Meskipun kami tidak dapat menghasilkan data penipuan kartu kredit yang cukup realistis untuk membantu kami mendeteksi penipuan yang sebenarnya, kami hampir tidak menggores permukaan dengan metode ini. Kami dapat berlatih lebih lama, dengan jaringan yang lebih besar, dan menyetel parameter untuk arsitektur yang kami coba di artikel ini. Tren akurasi xgboost dan hilangnya diskriminator menyarankan lebih banyak pelatihan akan membantu arsitektur WGAN dan WCGAN. Pilihan lainnya adalah meninjau kembali pembersihan data yang kami lakukan, mungkin merekayasa beberapa variabel baru atau mengubah jika dan bagaimana kami mengatasi skewness dalam fitur. Mungkin skema klasifikasi yang berbeda dari data penipuan akan membantu.
Kita juga bisa mencoba arsitektur GAN lainnya. DRAGAN memiliki bukti teoretis dan eksperimental yang menunjukkan bahwa ia berlatih lebih cepat dan lebih stabil daripada GAN Wasserstein. Kami dapat mengintegrasikan metode yang memanfaatkan pembelajaran semi-diawasi, yang telah menunjukkan harapan dalam pembelajaran dari rangkaian pelatihan terbatas (lihat “Peningkatan Teknik untuk Pelatihan GAN”). Kita dapat mencoba arsitektur yang memberi kita model yang dapat dipahami manusia, sehingga kita mungkin dapat memahami struktur data dengan lebih baik (lihat InfoGAN).
Kita juga harus memperhatikan perkembangan baru di lapangan, dan yang terakhir, kita dapat bekerja untuk menciptakan inovasi kita sendiri di ruang yang berkembang pesat ini.
Anda dapat menemukan semua kode yang relevan untuk artikel ini di repositori GitHub ini.