Pengenalan Autoencoder : neural network untuk kompresi data

Autoencoder

Autoencoder adalah salah satu varian dari jaringan saraf tiruan (JST) yang secara umum digunakan untuk meng-“encode” suatu data. Berbeda dengan arsitektur JST pada umumnya yang dilatih untuk mengklasifikasi atau menghitung nilai regresi dari masukan, autoencoder dilatih untuk dapat menghasilkan output yang sama dengan inputnya. Autoencoder termasuk pada kategori Unsupervised Learning karena dilatih dengan menerima data tanpa label.

Traditional Neural Network vs Autoencoder

Pada ilustrasi tersebut, arsitektur di bagian atas adalah arsiktektur JST yang digunakan untuk mengklasifikasi citra bahan makanan di supermarket. Pada bagian bawah merupakan arsitektur autoencoder.

Lalu apa tujuannya sebuah model dilatih untuk menghasilkan citra yang sama?

Jika diperhatikan pada ilustrasi di atas, bagian yang menarik adalah bagian tengah autoencoder yang berupa sebuah vektor kumpulan neuron (ditandai dengan kotak warna kuning). Bagian tengah ini biasanya memiliki jumlah neuron yang lebih kecil dibanding layer di kanan atau kirinya (termasuk layer input dan outputnya). Sehingga jika model dapat dilatih dengan baik, bisa dikatakan bagian tengah ini merupakan representasi sederhana dari citra yang menjadi input. Apa maksud representasi sederhana? Karena vektor ini diperoleh dari citra input melalui arsitektur jaringan saraf tiruan (Encode), lalu dari vektor yang kecil ini bisa dibuat kembali citra yang serupa dengan inputnya (Decode).

Arsitektur

Linear Autoencoder

Pada ilustrasi di atas tampak arsitektur Auto encoder sebenarnya cukup sederhana. Kita bisa membagi arsitektur keseluruhan menjadi dua bagian, Encoder dan Decoder. JST pada bagian kiri mengubah dari citra menjadi feature vector, JST ini disebut dengan Encoder. Sedangkan JST pada bagian kanan mengubah dari Feature Vector kembali ke Citra, sehingga disebut dengan Decoder.

Alur pelatihan pun sama seperti proses pelatihan JST pada umumnya. Forward Propagation dilakukan hingga citra berhasil di rekonstruksi oleh decoder, lalu eror dihitung dengan menghitung selisih (menggunakan Mean Square Error) perbedaan nilai antara citra yang dihasilkan dengan citra aslinya. Perbaikan bobot menggunakan algoritma optimasi semisal Stochastic Gradient Descent.

Mungkin yang perlu diperhatikan dalam pembuatan Autoencoder adalah pada bagian fungsi aktivasi. Karena fungsi aktivasi menentukan nilai akhir dari masing-masing model. Misalnya pada Decoder, sebaiknya kita menggunakan fungsi aktivasi Sigmoid atau Tanh pada layer terakhirnya. Kenapa? karena kedua fungsi tersebut memetakan output ke suatu rentang nilai yang pasti (misalnya antara 0..1 untuk Sigmoid), sehingga dari rentangna tersebut kita bisa merekonstruksi citra (misalnya 0 menjadi hitam 1 menjadi putih untuk sigmoid)

Convolutional Autoencoder

Convolutional Autoencoder

Pada Jenis Convolutional Autoencoder, Model JST Encoder dan Decodernya menggunakan jenis Convolutional Neural Network (CNN). Secara umum, alur yang terjadi sama seperti Autoencoder biasa. Misalnya pada bagian encoder proses pembentukan feature vector sama seperti model CNN biasa. Bagian akhir layer konvolusi nantinya tinggal di flatten untuk menghasilkan feature vector.

Namun, pada bagian decoder ada sedikit yang berbeda. Setelah feature vector disusun ulang menjadi 2D, kita tidak bisa langsung melakukan proses konvolusi untuk mendapatkan nilai di layer selanjutnya. Hal ini karena CNN tidak secara alami digunakan untuk menghasilkan citra yang berukuran lebih besar (Deconvolution). Untuk itu terdapat beberapa trik atau teknik untuk melakukannya.

1. Menggunakan upsampling. Salah satu metode yan dapat digunakan adalah interpolasi, yakni dengan cara menduplikat nilai-nilai pada suatu pixel.

Hasil dari upsampling adalah matrix yang lebih besar ukurannya. Setelah memperoleh hasil matrix yang lebih besar barulah dikalikan menggunakan kernel yang menghasilkan matrix dengan ukuran sama (misal menggunakan kernel 3×3, padding 1 dan stride 1).

2. Cara kedua adalah menggunakan Transpose Convolution. Metode ini menggunakan sebuah kernel konvolusi tanpa menjumlah nilai hasil perkalian dengan kernelnya. Biasanya ukuran kernel ini disesuaikan dengan akhir yang diinginkan. Misal untuk memperoleh ukuran matriks dua kali lipatnya, biasanya menggunakan kernel ukuran 2×2 dengan stride 2.

Sekian penjelasan singkat tentang Autoencoder sederhana yang banyak dimanfaatkan untuk denoising citra, kompresi citra, meningkatkan resolusi dan banyak lagi. Sebenarnya model ini juga telah memiliki banyak pengembangan yang beragam, salah satunya adalah Variational Autoencoder (VAE) yang memungkinkan untuk meng-generate suatu citra.

Semoga bermanfaat.

About the author

Rian Adam

Lecturer at Universitas Islam Indonesia; Machine Learning Enthusiast

View all posts

Leave a Reply