Deep Learning Studio 2 | AutoML (Automated Machine Learning) untuk dataset CIFAR-10
Hi, semuanya. Setelah sebelumnya kita belajar menggunakan Deep Learning Studio untuk membuat model pengenalan handwritten digits dataset MNIST menggunakan Deep Learning Studio disini,
Sekarang kita akan bahas dan praktekan salah satu feature power full pada Deep Learning Studio, yaitu AutoML. AutoML atau Automated Machine Learning merujuk pada proses otomatisasi pada machine learning work-load. [1]
AutoML mampu melakukan otomatisasi pada berbagai tingkatan, diantaranya :
- Data preparation
- Feature engineering (feature selection, feature extraction, meta learning dan transfer learning)
- Model selection
- Hyperparameter optimization
- Pipeline selection (time, memory, dll)
- Evaluation metrics & validation procedures selection
- Problem checking
- Analysis of results
Prerequisites
Untuk mengikuti tutorial ini, pertama terlebih dahulu ikuti tutorial untuk install DLS pada local machine (laptop/komputer) yang dapat diikuti disini,
AutoML pada Deep Learning Studio (DLS)
- AutoML pada Deep Learning Studio hanya menyediakan proses automation desain model neural network (Model Selection). Sehingga bagian seperti tunning hyperparameter dan training tetap dilakukan secara manual.
- Buat Project baru pada DLS dengan nama Test AutoML seperti berikut, lalu klik save (icon check)
- Selanjutnya klik pada project Test AutoML, dan pada tab Data, kemudian set sebagai berikut,
Dataset : cifar-10-public
Train / Validation/Test Split : 70%-15%-15%
Load Dataset in Memory : Full Dataset
- Dataset yang digunakan seperti dilihat diatas menggunakan CIFAR-10, yang merupakan dataset 10 categorical data citra digital dengan dimensi 32x32 pixel sebanyak 60000 sample. Dataset ini banyak digunakan untuk training model object detection.
Percobaan 1
- Klik tab Model, lalu klik icon AutoML,
- Lalu akan muncul popup setup AutoML, kemudian atur parameter pada popup tersebut sebagai berikut, setelah itu klik tombol Design,
Input Content Type : image
Output Content Type : category
- Pada visual editor DLS, kita dapat melihat generated model yang dibuat otomatis oleh AutoML,
- Jika dilihat , arsitektur model-nya sebagai berikut,
Input Layer()Conv2D Layer (filter : 64, kernel :(2,2), activation :(relu))
Conv2D Layer (filter : 64, kernel :(2,2), activation :(linear))
MaxPool2D (Pool size : (2,2), stride :(2,2))Conv2D Layer (filter : 32, kernel :(2,2), activation :(relu))
Conv2D Layer (filter : 32, kernel :(2,2), activation :(linear))
Batch Normalization (Axis : 3)
MaxPool2D (Pool size : (2,2), stride :(2,2))Conv2D Layer (filter : 32, kernel :(2,2), activation :(relu))
Conv2D Layer (filter : 32, kernel :(2,2), activation :(linear))
Conv2D Layer (filter : 32, kernel :(2,2), activation :(relu))
Conv2D Layer (filter : 32, kernel :(2,2), activation :(linear))
MaxPool2D (Pool size : (2,2), stride :(2,2))Conv2D Layer (filter : 64, kernel :(2,2), activation :(relu))
Conv2D Layer (filter : 64, kernel :(2,2), activation :(linear))
Conv2D Layer (filter : 64, kernel :(2,2), activation :(relu))
Conv2D Layer (filter : 64, kernel :(2,2), activation :(linear))
MaxPool2D (Pool size : (2,2), stride :(2,2))Flatten Layer ()
Dense Layer (unit : 2048, activation :(linear))
Activation Layer (relu)
Dense Layer (unit : 1024, activation :(linear))
Batch Normalization (Axis : 1)
Activation Layer (relu)
Dropout Layer (0.4)
Dense Layer (unit : 1024, activation :(linear))
Activation Layer (relu)
Dense Layer (unit : 10, activation :(softmax))Output Layer ()
- Kemudian, buka tab HyperParameters, setup parameter sebagai berikut,
epoch : 10
batch size : 32
loss funtion : categorical_crossentropy
optimizer : Adadelta
learing rate : 1
- Lalu buka tab Training, lalu pilih device (GPU, CPU, GPU + CPU) untuk digunakan pada proses training, setelahnya klik tombol start training untuk memulai training model cifar-10,
- Setelah proses training selesai, kita dapat melihat kurfa loss dan accuracy vs epoch pada tab Results sebagai berikut,
- Bisa dilihat dengan setup hyperparameter seperti sebelumnya menghasilkan model yang jelek (accuracy ~0.32) dengan loss minimal ~ 1.8.
Percobaan 2
- Sekarang kita akan coba konfigurasi hyper parameter lain sebagai berikut,
epoch : 5
batch size : 128
loss funtion : categorical_crossentropy
optimizer : Adam
learing rate : 0.01
- Jalankan Training dengan menggunakan model yang sama pada Percobaan 1 (Model hasil AutoML).
- Setelah proses training dengan hyper parameter diatas, didapatkan hasil seperti berikut,
- Terlihat bahwa pada epoch ke-5 validation loss jauh lebih besar dari training loss dan juga accuracy pada training dataset lebih tinggi dari pada validation dataset.
- Hal ini terjadi salah satunya akibat model yang dibuat terlalu kompleks, sehingga membuat model me-memorize dataset training terlalu dalam, yang mengakibatkan akurasi tinggi pada training dataset, namun rendah pada dataset yang belum pernah dia lihat (unseen data) seperti validation dataset. Masalah seperti ini disebut sebagai overfitting.
Solving Permasalahan Overfitting
- Untuk mengatasi permasalahan overfitting, ada beberapa hal yang dapat dilakukan, diantaranya :
- simplify model
- early stopping
- add more data
- implement regularization (dropout, L1 & L2 regularizarion, etc.)
Percobaan 3
- Untuk sekarang kita akan coba turunkan kompleksitas model dengan menghilangkan beberapa convolution layer dan max pooling layer beserta batch normalization layer dan menambahkan dropout layer untuk meningkatkan generalisasi pada model.
- Berikut adalah model yang sudah diturunkan kompleksitasnya :
Input Layer()Conv2D Layer (filter : 64, kernel :(2,2), activation :(relu))
Dropout Layer (0.25)
Conv2D Layer (filter : 64, kernel :(2,2), activation :(linear))
MaxPool2D (Pool size : (2,2), stride :(2,2))Conv2D Layer (filter : 32, kernel :(2,2), activation :(relu))
Dropout Layer (0.25)
Conv2D Layer (filter : 32, kernel :(2,2), activation :(linear))
MaxPool2D (Pool size : (2,2), stride :(2,2))Flatten Layer ()
Dense Layer (unit : 2048, activation :(relu))
Dropout Layer (0.25)
Dense Layer (unit : 2048, activation :(relu))
Dense Layer (unit : 1024, activation :(relu))
Dense Layer (unit : 10, activation :(softmax))Output Layer ()
- dan mengatur hyper parameter sebagai berikut,
epoch : 5
batch size : 64
loss funtion : categorical_crossentropy
optimizer : Adam
learing rate : 0.01
- Setelah itu jalankan training dengan setup hyper parameter seperti diatas,
- Dihasilkan hasil training sebagai berikut
- Setelah kompleksitas model diturunkan accuracy model meningkat dikisaran ~0.7 dan loss nya berada pada kisaran ~0.6 untuk traing set dan ~1.25 untuk validation set.
- Dengan hasil seperti ini sebenarnya model masih overfitting terlihat dari validation loss yang masih jauh lebih besar dibandingkan training loss.
Percobaan 4
- Selanjutnya kita buat lebih sederhana lagi dan menambahkan dropout layer setelah max pooling ke-2, arsitektur model-nya sebagai berikut :
Input Layer()Conv2D Layer (filter : 64, kernel :(2,2), activation :(relu))
Dropout Layer (0.25)
Conv2D Layer (filter : 64, kernel :(2,2), activation :(linear))
MaxPool2D (Pool size : (2,2), stride :(2,2))Conv2D Layer (filter : 32, kernel :(2,2), activation :(relu))
Dropout Layer (0.25)
Conv2D Layer (filter : 32, kernel :(2,2), activation :(linear))
MaxPool2D (Pool size : (2,2), stride :(2,2))
Dropout Layer (0.25)Flatten Layer ()
Dense Layer (unit : 1024, activation :(relu))
Dropout Layer (0.25)
Dense Layer (unit : 512, activation :(relu))
Dense Layer (unit : 10, activation :(softmax))Output Layer ()
- Dan mengatur ulang hyper parameter menjadi seperti berikut,
epoch : 5
batch size : 128
loss funtion : categorical_crossentropy
optimizer : Adam
learing rate : 0.01
- Didapatkan hasil training model sebagai berikut,
- Setelah kompleksitas model diturunkan lagi dan menambahkan lebih banyak dropout layer, accuracy model menjadi menurun dikisaran ~0.65 dan loss nya berada pada kisaran ~0.8 untuk traing set dan ~1.2 untuk validation set.
Percobaan 5
- Setelah kita terhidar dari overfitting, kita akan coba naikan kompleksitas model sedikit, dengan harapan dapat menghasilkan accuracy lebih tinggi.
- Tambahkan unit pada Dense Layer, sehingga model menjadi seperti berikut,
Input Layer()Conv2D Layer (filter : 64, kernel :(2,2), activation :(relu))
Dropout Layer (0.25)
Conv2D Layer (filter : 64, kernel :(2,2), activation :(linear))
MaxPool2D (Pool size : (2,2), stride :(2,2))Conv2D Layer (filter : 32, kernel :(2,2), activation :(relu))
Dropout Layer (0.25)
Conv2D Layer (filter : 32, kernel :(2,2), activation :(linear))
MaxPool2D (Pool size : (2,2), stride :(2,2))
Dropout Layer (0.25)Flatten Layer ()
Dense Layer (unit : 2048, activation :(relu))
Dropout Layer (0.25)
Dense Layer (unit : 1024, activation :(relu))
Dense Layer (unit : 10, activation :(softmax))Output Layer ()
- Gunakan setup hyperparameter yang sama dengan percobaan 4 sebelumnya,
- Lakukan proses training sehingga didapatkan hasil training sebgai berikut,
- Setelah kompleksitas model ditambahkan sedikit , accuracy model meningkat pada dikisaran ~0.68 dan loss nya berada pada kisaran ~0.7 untuk traing set dan ~0.8 untuk validation set.
Simpulan
- AutoML pada DLS hanya mensupport automation design network.
- Desain network hasil AutoML pada DLS terlalu kompleks untuk dataset CIFAR-10, sehingga menghasilkan overfitting. Perlu di lakukan test lebih lanjut dengan jenis dataset lainya.
- Pengaruh dari penggunaan teknik regularisasi dropout adalah menurunkan akurasi training dan meningkatkan loss training.
- Menurunkan kompleksitas model efektif untuk mengurangi overfitting.
- Memilih batch size terlalu kecil akan mengakibatkan plot accuracy & loss fluktuatif. Tambahkan batch size lebih besar, namun jangan terlalu besar karena akan memakan banyak resource memory pada mesin.
- Mengambil batch size dengan ukuran optimal dapat meningkatkan generalisasi pada model (kemampuan memprediksi unseen data dengan baik).
Sekian untuk tutorial kali ini,
Semoga bermanfaat.
Terima kasih.