RG-Computational Science & Engineering (CSE) (Wiharto, 2021)
Deep Learning
Outline
Artificial Neural Network Multilayer Perceptron
BackPropagation Algorithm
Deep Introduction (TensorFlow & Keras) Learning Framework
Deep Autoencoder
Convolutional Neural Network (CNN)
Deep Introduction (TensorFlow &
Keras) Learning Framework
Konsep Backpropagation pada dasarnya untuk melakukan training pada neural network, kita melakukan proses pada diagram dibawah ini secara terus menerus hingga loss atau error yang didapatkan memiliki nilai yang relatif kecil.
Bagaimana mengimplementasikan algoritma tersebut dan membuat sebuah neural network dengan menggunakan semua bahasa pemrograman yang kita bisa.
Bagaimana jika masalah yang akan kita selesaikan itu
adalah permasalahan yang sangat kompleks? Atau mungkin kita membutuhkan arsitektur yang unik dan kompleks? Atau kita ingin menggunakan GPU untuk mempercepat training?
Permasalahan tersebut dapat diatasi dengan menggunakan sebuah framework.
Sama halnya seperti semua framework, deep learning framework ada untuk memudahkan kita untuk
menyelesaikan masalah menggunakan deep learning.
Sebenarnya ada banyak sekali framework untuk deep learningbisa dikatakan setiap tech company besar yang ada sekarang memiliki framework masing-masing.
Google mempunyai TensorFlow, Facebook dengan
Caffe2, Microsoft dengan CNTK dan masih banyak lagi
framework lain seperti Theano dan PyTorch. TensorFlow
Keras
TensorFlow sudah cukup jelas cara penggunaannya, tapi
kadang dalam riset kita sering sekali untuk mencoba arsitektur lain, mencari optimizer yang paling cepat dan bagus, tweaking hyperparameter.
Menggunakan Keras kita bisa melakukan semua itu dengan relatif lebih cepat dari pada ‘pure’ TensorFlow. Karena jika
dibandingkan dengan Keras, TensorFlow serasa lebih “low level”
meskipun sudah ada tf.layer yang baru.
Jadi Keras ini sebenarnya adalah wrapper dari TensorFlow untuk lebih memudahkan kita
Tidak hanya TensorFlow aja yang disupport, tapi kita bisa mengganti backend yang akan kita gunakan.
Saat ini kita bisa gunakan TensorFlow, Theano dan CNTK sebagai backend dari Keras.
Contoh
Latihan ini menggunakan google colab
Contoh kasus
Sebelumnya kita akan membuat data dengan menggunakan library numpy.
Input data nya dari rentang -20 sampai 20 dengan step 0.25.
Kita juga buat targetnya sesuai dengan persamaan diatas.
Generate_data.py
# Generate data from -20, -19.75, -19.5, .... , 20
import numpy as np
train_x = np.arange(-20, 20, 0.25)
# Calculate Target : sqrt(2x^2 + 1)
train_y = np.sqrt((2*train_x**2)+1)
Setelah data ada, kita bisa mulai membuat model Arsitekturnya.
Model arsitektur yang akan di bangun adalah
1 Input Node
8 node pada Hidden Layer 1 dengan ReLU activation
4 node pada Hidden Layer 2 dengan ReLU activation
1 Output node dengan Linear activation
Tentukan optimizer yang akan digunakan kita gunakan SGD dan Mean Squared Error (MSE) sebagai loss functionnya.
Sebelum kita bisa melakukan training, kita harus meng-”compile” model kita terlebih dahulu.
Create_network.py
# Create Network
inputs = Input(shape=(1,))
h_layer = Dense(8, activation='relu')(inputs)
h_layer = Dense(4, activation='relu')(h_layer)
outputs = Dense(1, activation='linear')(h_layer)
model = Model(inputs=inputs, outputs=outputs)
# Optimizer / Update Rule
sgd = SGD(lr=0.001)
# Compile the model with Mean Squared Error Loss
model.compile(optimizer=sgd, loss='mse')
Setelah model siap, kita bisa mulai melakukan training dengan data yang kita sudah buat diawal.
Untuk melakukan training, kita harus memanggil method fit.
Pada method ini ada param batch_size dengan nilai 20 yang artinya kita gunakan mini-batch SGD. Kalau kita mau gunakan Batch SGD kita bisa set batch_size nya sesuai dengan jumlah data kita.
Jumlah iterasi yang dilakukan10000 epochsemua parameter (weights dan bias) disimpan kedalam sebuah file.
Epoch, learning rate, batch_size, dll ini adalah hyperparameter yang bisa kita tentukan.
Train_network.py
# Train the network and save the weights after training
model.fit(train_x, train_y, batch_size=20, epochs=10000, verbose=1)
model.save_weights('weights.h5')
Setelah 10000 epoch akan mendapatkan MSE sebesar 0.0005 untuk training data.
Tahapan selanjutnya kita akan lakukan prediksi terhadap angka lain diluar training data yaitu 26 dan akan
membandingkan hasil prediksi seluruh training data dengan target.
Gunakan matplotlib untuk membuat dua grafik dan melihat perbandingannya.
Line merah untuk target dan line biru untuk hasil
prediksi.
Predict_plot.py
# Predict training data
predict = model.predict(np.array([26])) print('f(26) = ', predict)
predict_y = model.predict(train_x)
# Draw target vs prediction plt.plot(train_x, train_y, 'r') plt.plot(train_x, predict_y, 'b') plt.show()
Untuk hasil prediksi dari 26, saya dapatkan 36.755
Jika dihitung seharusnya 36.783.
Terdapat error tapi tidak terlalu jauh
Dan grafik prediction vs target untuk semua training
data sangat identik sekali.
Deep 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.
Metode untuk mengurangi dimensi dapat menggunakan :
PCA
t-SNE
LDA
Autoencoder
dll