Apa itu autoencoder?
Saya seorang pelajar dan saya sedang mempelajari pembelajaran mesin. Saya berfokus pada model generatif yang dalam , dan khususnya untuk autoencoder dan autoencoders variasional (VAE) .
Saya mencoba memahami konsepnya, tetapi saya mengalami beberapa masalah.
Sejauh ini, saya telah memahami bahwa autoencoder mengambil input, misalnya gambar, dan ingin mengurangi gambar ini menjadi ruang laten , yang seharusnya berisi fitur yang mendasari dataset, dengan operasi encoding , kemudian, dengan operasi dari decoding , itu reconstrunct gambar yang telah kehilangan beberapa informasi karena bagian encoding.
Setelah ini, dengan fungsi kerugian, ia merekonstruksi ruang laten dan mendapatkan fitur laten.

tentang VAE, ia menggunakan pendekatan probabilistik, jadi kita harus mempelajari kovariansi me dan anv dari sebuah gaussian.
Sejauh ini, inilah yang saya mengerti.
Apa yang saya benar-benar tidak jelas adalah apa yang kita coba pelajari dengan autoencoders dan VAE?
Saya telah melihat contoh di mana sebuah gambar berubah menjadi wajah yang tidak tersenyum, atau gambar hitam putih menjadi gambar berwarna.
Tapi saya tidak mengerti konsep utamanya, yaitu: apa yang dilakukan autoencoder?
Saya menambahkan di sini beberapa sumber tempat saya belajar sehingga siapa yang membutuhkan dapat melihatnya:
- https://hackernoon.com/autoencoders-deep-learning-bits-1-11731e200694
- https://www.youtube.com/watch?v=yFBFl1cLYx8
- https://www.youtube.com/watch?v=9zKuYvjFFS8
Jawaban
apa yang dilakukan pembuat enkode otomatis?
Auto-encoder paling sederhana mengambil gambar dimensi tinggi (katakanlah, 100K piksel) ke representasi dimensi rendah (katakanlah, vektor dengan panjang 10) dan kemudian hanya menggunakan 10 fitur tersebut untuk mencoba merekonstruksi gambar asli. Anda bisa membayangkan analogi dengan manusia: Saya melihat seseorang, mendeskripsikan mereka ("tinggi, berambut gelap, ...") kemudian setelah saya lupa seperti apa mereka, saya mencoba membuat sketsa mereka hanya dengan catatan saya.
apa yang kita coba pelajari?
Dengan kata lain, mengapa repot-repot? Beberapa alasan:
- pengurangan dimensi: 10 fitur jauh lebih nyaman daripada 100K piksel. Misalnya, saya dapat melakukan klasifikasi dengan mengelompokkan di ruang 10 dimensi (sementara pengelompokan di ruang dimensi 100K akan sulit dilakukan).
- arti semantik: jika semua berjalan dengan baik, masing-masing dari 10 fitur akan memiliki beberapa "penjelasan" yang jelas - misalnya, mengubah satu nilai akan membuat subjek terlihat lebih tua (meskipun biasanya tidak sesederhana itu). Berbeda dengan nilai piksel, yang dipengaruhi oleh terjemahan, rotasi, dll.
- Pengenalan pengecualian: jika saya melatih pembuat enkode otomatis pada anjing, biasanya ia melakukan pengkodean dan pengodean gambar anjing dengan baik. Tetapi jika saya memasukkan kucing, itu mungkin akan melakukan pekerjaan yang buruk - yang dapat saya ketahui karena hasilnya tidak terlihat seperti input. Jadi, mencari tempat di mana pembuat enkode otomatis bekerja dengan buruk adalah cara umum untuk mencari anomali.
Saya telah melihat contoh di mana sebuah gambar berubah dari tidak tersenyum menjadi wajah tersenyum, atau menjadi gambar hitam putih menjadi gambar berwarna.
Ada banyak jenis pembuat enkode otomatis. Apa yang saya jelaskan di atas adalah jenis yang paling sederhana. Jenis umum lainnya adalah encoder otomatis "denoising" - alih-alih merekonstruksi gambar asli, tujuannya adalah untuk membuat gambar yang terkait dengan gambar asli, tetapi berbeda.
Contoh klasik dari ini adalah denoising (karena itu namanya): Anda dapat mengambil gambar yang bersih, menambahkan banyak noise, menjalankannya melalui encoder otomatis, dan kemudian memberi penghargaan pada encoder otomatis karena menghasilkan gambar yang bersih . Jadi, input (gambar berisik) sebenarnya berbeda dengan output yang diinginkan (gambar bersih). Contoh yang Anda berikan serupa.
Tantangan dalam mendesain jenis pembuat enkode otomatis ini biasanya adalah kerugian - Anda memerlukan beberapa mekanisme untuk memberi tahu pembuat enkode otomatis apakah ia melakukan hal yang benar atau tidak.
tentang VAE, ia menggunakan pendekatan probabilistik, jadi kita harus mempelajari mean dan kovarians dari sebuah gaussian.
VAE adalah jenis encoder otomatis ketiga. Ini agak istimewa karena berakar kuat secara matematis; tidak perlu metrik ad-hoc . Perhitungannya terlalu rumit untuk dilakukan di sini, tetapi ide utamanya adalah:
- Kami ingin ruang laten berkelanjutan. Daripada menugaskan setiap kelas ke sudutnya sendiri dari ruang laten, kita ingin ruang laten memiliki bentuk kontinu yang terdefinisi dengan baik (yaitu, Gaussian). Ini bagus karena memaksa ruang laten menjadi bermakna secara semantik.
- Pemetaan antara gambar dan ruang laten harus bersifat probabilistik daripada deterministik. Ini karena subjek yang sama bisa menghasilkan banyak gambar.
Jadi, alur kerjanya adalah ini:
- Anda mulai dengan gambar Anda seperti sebelumnya
- Seperti sebelumnya, pembuat enkode Anda menentukan vektor (misalnya, panjang 200).
- Namun vektor itu bukanlah ruang laten. Sebaliknya, Anda menggunakan vektor itu sebagai parameter untuk menentukan ruang laten. Misalnya, mungkin Anda memilih ruang laten Anda menjadi Gaussian 100 dimensi. Gaussian 100 dimensi akan membutuhkan mean dan deviasi standar di setiap dimensi - untuk itulah Anda menggunakan vektor panjang-200 Anda.
- Sekarang Anda memiliki distribusi probabilitas. Anda mengambil sampel satu titik dari distribusi ini. Ini adalah representasi gambar Anda di ruang laten.
- Seperti sebelumnya, dekoder Anda akan mengubah vektor ini menjadi "keluaran" baru (misalnya, vektor dengan panjang 200K).
- Tapi, "keluaran" ini bukanlah gambar keluaran Anda. Sebagai gantinya, Anda menggunakan parameter 200K ini untuk menentukan Gaussian berdimensi 100K. Kemudian Anda mengambil sampel satu titik dari distribusi ini - itu gambar keluaran Anda.
Tentu saja, tidak ada yang istimewa tentang Gaussian, Anda dapat dengan mudah menggunakan beberapa distribusi parametrik lainnya. Dalam praktiknya, orang biasanya menggunakan bahasa Gaussi.
Ini terkadang memberikan hasil yang lebih baik daripada pembuat enkode otomatis lainnya. Lebih lanjut, terkadang Anda mendapatkan hasil yang menarik saat melihat di antara kelas-kelas di ruang laten Anda. Jarak gambar di ruang laten dari pusat cluster terkadang terkait dengan ketidakpastian.
Selain itu, ada sifat bagus bahwa Gaussi berdimensi tinggi ini adalah distribusi probabilitas dalam pengertian matematika yang ketat. Mereka memperkirakan probabilitas bahwa gambar tertentu termasuk dalam kelas tertentu. Jadi, ada beberapa pemikiran bahwa VAE akan mampu mengatasi "pengibaran tangan" dari pembelajaran mendalam dan mengembalikan semuanya ke landasan probabilistik Bayesian yang kokoh. Tapi tentu saja, ini hanya perkiraan, dan pendekatan tersebut melibatkan banyak jaringan saraf yang dalam, jadi masih banyak tangan yang melambai saat ini.
Ngomong-ngomong, saya suka menggunakan pertanyaan ini selama wawancara - banyak sekali orang yang mengaku memiliki pengalaman dengan VAE, tetapi kenyataannya tidak menyadari bahwa VAE berbeda dengan AE "biasa".
Cara mudah untuk berpikir tentang autoencoders adalah: seberapa baik bagian prticlar infrmaton dapat direkonstruksi dari representasi yang dikurangi atau cara lain. Jika sudah sampai sejauh ini, berarti Anda berhasil menyusun ulang kalimat sebelumnya dengan hanya menggunakan 92 dari 103 karakter aslinya.
Lebih khusus lagi, autoencoder adalah jaringan saraf yang dilatih untuk mempelajari pengkodean data yang efisien dengan cara yang tidak diawasi. Tujuannya adalah untuk mempelajari representasi kumpulan data tertentu, dengan melatih jaringan untuk mengabaikan sinyal "tidak penting" seperti noise. Biasanya AE dipertimbangkan untuk reduksi dimensionalitas.
Praktis, AE
- awalnya memampatkan data masukan menjadi representasi ruang laten
- merekonstruksi keluaran dari representasi ruang laten ini
- menghitung perbedaan antara masukan dan keluaran yang didefinisikan sebagai kerugian rekonstruksi.
Dalam loop pelatihan ini, AE meminimalkan kerugian rekonstruksi ini sehingga keluarannya semirip mungkin dengan masukan.
Salah satu pendekatan yang menurut saya berguna ketika mempertimbangkan autoencoder adalah hasil sebagai berikut: sedangkan metode seperti PCA mengidentifikasi sumbu variasi maksimal dalam ruang input, pengenalan fungsi aktivasi non-linier di autoencoder memungkinkan untuk identifikasi sumbu maksimal variasi yang tertanam dalam transformasi ruang non-linier (berpotensi).
Sebagai contoh, anggap data di
Perhatikan bahwa tidak adanya fungsi aktivasi non-linier, autoencoder pada dasarnya menjadi setara dengan PCA - hingga perubahan basis. Latihan yang berguna mungkin untuk mempertimbangkan mengapa ini terjadi.