Pengenalan Deep Learning Part 6 : Deep Autoencoder

Kita sudah sampai pada Part-6, kali ini kita akan sama-sama belajar tentang Autoencoder.

Apa itu Autoencoder?

Autoencoder adalah model neural network yang memiliki input dan output yang sama. Autoencoder mempelajari data input dan berusaha untuk melakukan rekonstruksi terhadap data input tersebut.

Lalu apa gunanya Autoencoder? Autoencoder biasa digunakan untuk mengurangi dimensi dari features (Dimensionality Reduction). Jika kita mempunyai data yang mempunyai dimensi yang sangat tinggi (data dengan jumlah features yang sangat banyak) bisa jadi tiap features yang ada tersebar pada setiap dimensi dari data sehingga setiap data yang ada terlihat sangat berbeda. Untuk mengatasi masalah tersebut kita membutuhkan data yang sangat banyak atau mengurangi dimensi data tersebut. Kita bisa menggunakan PCA, t-SNE ataupun Autoencoder.

Autoencoder

Autoencoder terdiri dari dua bagian utama yaitu encoder dan decoder. Encoder. Diantara encoder dan decoder, terdapat code layer atau bisa juga dibilang target layer (istilah saya sendiri). Jumlah neuron pada code layer adalah jumlah dimensi yang kita harapkan untuk mengurangi dimensi dari data kita.

Let’s Code

Untuk contoh implementasi, kita akan melakukan dimensionality reduction terhadap MNIST data. MNIST adalah dataset yang terdiri dari angka 0 sampai 9 yang ditulis oleh tangan.

MNIST Dataset

MNIST data sudah sering digunakan sebagai benchmark apakah sebuah model dapat mengenali atau melakukan klasifikasi terhadap angka-angka tersebut. Tiap data adalah image berukuran 28x28 pixel sehingga total terdapat 784 dimensi dan kita akan mereduksinya menjadi 16 saja.


Dependency

Dependency yang dibutuhkan pada contoh autoencoder kali ini hampir sama dengan contoh pada part-part sebelumnya. Hanya saja kali ini kita akan load MNIST data dari package yang sudah disediakan oleh Keras. Kita juga mau coba optimizers baru yaitu ADAM.

ADAM adalah variant dari algoritma gradient descent yang lain, untuk lebih jelasnya mungkin bisa dibaca sendiri di paper https://arxiv.org/abs/1412.6980


Data Preparation

Data dari MNIST ini adalah grayscale image dengan range dari 0 hingga 255. Range data seperti ini “terlalu besar” untuk model kita, apalagi dengan learning rate yang cukup kecil, sehingga kita perlu melakukan scaling dengan membaginya dengan 255. Sehingga kita dapatkan range data baru antara 0 dan 1.

Setelah itu kita akan merubahnya menjadi 784 vector yang akan kita jadikan sebagai input.


Create the Autoencoder

Seperti yang sudah dijelaskan diatas, autoencoder terdiri dari encoder dan decoder. Jumlah neuron pada tiap layer dari encoder adalah 784–256–128–64–32–16 dan untuk decoder adalah 16–32–64–128–256–784.

Optimizer yang digunakan adalah ADAM dengan learning rate sebesar 0.001 dan Loss function yang akan digunakan adalah binary_crossentropy. Kenapa crossentropy?

Data yang kita miliki mempunyai rentang dari 0 sampai 1, activation function pada output layer juga sigmoid yang mempunyai rentang dari 0 sampai 1. Itu semua identik dengan probability distribution, sehingga kita bisa anggap ini adalah permasalahan klasifikasi dan kita bisa gunakan binary crossentropy.
Sebenarnya kita juga bisa anggap ini adalah sebuah regresi dengan menggunakan Linear activation pada output layer, tapi loss function yang kita gunakan harus MSE (Mean Squared Error). Nanti hasilnya akan dicompare di akhir part ini.

Perlu diingat juga kalau autoencoder berusaha melakukan rekonstruksi terhadap input data, jadi target yang kita gunakan adalah input itu sendiri (train_x dan test_x)

Sigmoid & Cross-entropy

Linear & Mean Squared Error

Reconstruction Result

Setelah training selesai, kita akan mencoba untuk melakukan rekonstuksi untuk digit 0 hingga 9 pada test data.

Kita juga bisa mengambil output dari encoder yang merupakan features yang dimensinya telah direduksi. Features ini nanti bisa digunakan untuk klasifikasi untuk melihat bagaimana kualitasnya. Tapi nanti silakan dicoba sendiri ya…:D

Untuk Linear — MSE. Setelah 100 epoch, kita mendapatkan loss sebesar 0.0140/0.0145 MSE loss.

Linear-MSE Reconstruction

Sedangkan Sigmod — Cross-Entropy, setelah 100 epoch, kita mendapatkan loss/validation loss sebesar 0.0923/0.0950 cross-entropy loss.

Sigmoid-CrossEntropy Reconstruction

Namun jika hasil prediksi dirubah menjadi image, kualitas rekonstruksi dari Sigmoid — Cross-Entropy mempunyai kualitas yang lebih bagus.

Complete Code


Pada part kali ini tidak banyak yang bisa dibahas karena autoencoder sendiri jarang sekali digunakan. Untuk part selanjutnya kita akan bahas tentang Convolutional Neural Network (CNN)…So Stay Tune Gaes…:D