MNIS Dataset - Convolutional Neural Network Solution - Part 1

Pendahuluan

Convolutional neural network (CNN) dikembangkan berdasarkan penelitian biologi yaitu penelitain yang dilakukan Hubel dan Wiesel mempelajari visual cortex dari mamalia.

Penelitian ini sangat fundamental dalam kita memahami cara penglihatan bekerja. Penelitian ini menghasilkan bahwa neuron pada visual cortex memiliki local receptive yang kecil. Jadi neuron ini hanya melihat bagian kecil dari sebuah image.

Dan bagian bagian kecil ini kemudian dapat di overlap untuk membentuk sebuah image yang lebih besar dan menyeluruh. Neuron ini bekerja dengan caranya masing masing. Ada neuron yang aktif bila mendeteksi garis horizontal atau lingkaran hitam atau lainnya.

Ide cara bekerja neuron pada mamalia ini menjadi inspirasi Artificial Neural Network, yang kemudian menjadi CNN. Yang diimplementasikan pada tahun 1998 pada whitepaper Yann LeCunn. Pada saat itu dinamakan LeNet architecture dan digunakan untuk melakukan klasifikasi MNIST data set.

Teori CNN



Jika kita lakukan googling tentang CNN, maka diagram seperti diatas akan muncul. Gambar diatas adalah arsitektur dari CNN.

Ide baru yang dari CNN yang perlu kita pahami adalah convolution dan subsampling. Untuk memahaminya pembahasan kita akan bagi menjadi

  • Tensors
  • DNN vs CNN
  • Convolutions and Filters
  • Padding
  • Pooling Layers
  • Review Dropout


Tensor adalah N-Dimensional arrays. contoh:
Scalar : 3
Vector: [3,4,5]
Matrix: [[3,4], [5,6], [7,8]]
Tensor: [ [[1,2], [3,4]],
              [[5,6], [7,8]] ]

Oleh karena itu tensor mudah digunakan sebagai images data feed pada model yang kita buat. Contoh: Kita memiliki dataset images sebanyak 50000 MNIST data training. Dengan format (I, H, W, C) dimana

  • I : Data Images
  • H: Tinggi images (pixels)
  • W: Lebar images (pixels)
  • C: Color Channel : 1- grayscale, 3-RGB


Perbedaan DNN dan CNN, contoh DNN adalah penggunaan tensorflow.estimator API.
Pada DNN setiap neuron pada layer pertama, terhubung dengan semua neuron pada layer kedua.

Sementara pada CNN, neuron tidak langsung terhubung dengan neuron di layer berikutnya, tetapi terhubung dengan unit-unit yang lebih kecil terlebih dahulu.

Yang menjadi pertanyaan kenapa harus menggunakan CNN. Bila sudah menganilisis data image yang besar, menggunakan DNN akan menjadi terlalu rumit. Parameter yang terlalu kompleks.

Sebagai bayangan, data MNIST ukuran file masih kecil, hanya 28x28 pixels, ukuran images jaman now minimum 256x256 pixels ini pun tergolong kecil, umumnya lebih besar.

Convolutional memiliki kelebihan yaitu, pixel yang berdekatan memiliki kolerasi diantara mereka dimana sangat bermanfaat untuk melakukan image detection atau recognition.

Jadi CNN bekerja dengan 'melihat' porsi kecil dari bagian image yang kemudian menjadi masukan untuk unit dilayer berikutnya.


Padding, bila sudah mencapai pinggiran image, ada kemungkinan kita tidak memiliki input untuk neuron. Disini padding dilakukan. Nilai padding adalah angka 0.


Convolution dan Filter, dapat dijelaskan dengan contoh diagram berikut CNN dengan Filter: 1, Filter size: 2, Stride:2



 Contoh CNN dengan Filter: 1, Filter size: 2, Stride: 1


Dari dua contoh diatas dapat kita pahami,
Filter ada 1, karena neuron biru (pada layer atau kolom kedua) hanya ada 1.
Filter size ada 2 karena kita memiliki 2 weight (w1, w2).
Stride adalah pergerakan weight bergerak setiap 2 neuron pada gambar pertama, sedangkan gambar kedua bergerak 1 neuron.

Untuk contoh dibawah, jika kita memiliki Filter 2 atau dalam arti kita memiliki beberapa 2 set weight, maka diagramnya seperti berikut.


Filter dapat dikembangkan sesuai kebutuhan, ditentukan oleh feature yang akan kita deteksi. Umumnya CNN diagram akan digambarkan dalam bentuk blok seperti berikut



Agar lebih jelas, CNN biasanya di visualisasikan dengan cara grid. Contoh kita memiliki gambar angka 0,  grid berisi nilai 1 untuk menunjukan warna hitam, nilai -1 untuk menunjukan warna putih, data sudah kita padding dengan angka 0 disekelilingnya.


Filter 3x3 akan melakukan deteksi dari pojok kiri atas seperti gambar diatas sebagai data INPUT, lalu dikalikan nilai nya dikalikan WEIGHT, lalu nilainya dijumlahkan, hingga menghasilkan nilai yang menjadi OUTPUT untuk CNN.

Stride distance dapat dilihat disini, pada gambar pertama adalah 1, sedangkan gambar berikutnya 2 (lihat panah merah dan kotak merah). Stride distance mempengaruhi seberapa cepat kita bergerak melakukan filtering.



Subsampling atau Pooling Layer, adalah subset dari image, tujuannya adalah meminimalkan penggunaan memory komputer. Contoh kita memiliki 6x6 image.

Lalu kita lakukan pooling per 2x2 yang sering disebut kernel, (2x2 adalah size yang paling sering digunakan). Lalu diambili MAX value dari kernel tersebut.  Pada contoh adalah 0.4. lalu disimpan pada layer pooling.

Lalu bergerak berdasarkan stride, dalam hal ini stride adalah 2 (lihat kotak biru), lalu akan dilakukan hal yang sama yaitu mengambil nilai max lalu disimpan pada layer pooling

Dropout adalah cara CNN agar tidak overfitting. Dalam proses training, units akan di dropout secara random oleh sistem.

Aristektur CNN yang terkenal

  • LeNet-5 by Yann LeCun
  • AlexNet by Alex Krizchevsky
  • GoogleNet by Szegedy 
  • ResNet by Kaiming He

silakan search di internet jika tertarik untuk mengetahui lebih dalam mengenai arsitektur CNN diatas.
MNIS Dataset - Convolutional Neural Network Solution - Part 1 MNIS Dataset - Convolutional Neural Network Solution - Part 1 Reviewed by noname needed on May 21, 2018 Rating: 5

No comments:

Powered by Blogger.