Back to IF3270 Pembelajaran Mesin

Practical Implementation of Feed‑Forward Neural Networks with Keras and Parameter Accounting

Questions/Cues

  • Bagaimana cara mendefinisikan arsitektur FFNN di Keras?
  • Apa peran fungsi loss dan optimizer dalam model.compile?
  • Bagaimana menghitung total parameter secara manual?
  • Kapan harus menggunakan batch size kecil vs besar?
  • Apa manfaat callback EarlyStopping pada pelatihan?
  • Bagaimana menyimpan dan memuat model terlatih?
  • Bagaimana melakukan pencarian hiperparameter dengan Keras‑Tuner?

Reference Points

  • Lecture_Keras_Implementation.pdf (Slides 24‑25)
  • Goodfellow et al., Deep Learning (Chapter 6, contoh kode Keras)
  • Raschka, Machine Learning with PyTorch and Scikit‑Learn (Chapter 11, penjelasan parameter)

Definisi Model Feed‑Forward dengan API Sequential

Keras menyediakan dua antarmuka utama untuk membangun jaringan saraf: Sequential dan Functional. Pada catatan ini kami fokus pada Sequential, yang paling cocok untuk jaringan berlapis lurus (feed‑forward) tanpa cabang. Sebuah objek Sequential berfungsi sebagai wadah berurutan untuk lapisan‑lapisan (Dense, Dropout, dll.). Setiap lapisan menerima output dari lapisan sebelumnya, sehingga alur data mengalir satu arah dari input ke output, sesuai sifat graf berarah tanpa siklus (DAG). Contoh kode dasar:

 
from keras.models import Sequential
 
from keras.layers import Dense
 
model = Sequential()
 
model.add(Dense(12, input_dim=8, activation='relu'))   # lapisan tersembunyi pertama
 
model.add(Dense(8, activation='relu'))                # lapisan tersembunyi kedua
 
model.add(Dense(1, activation='sigmoid'))            # lapisan output
 

Baris pertama model.add(Dense(12, input_dim=8, activation='relu')) menetapkan jumlah neuron (12) dan dimensi input (8). Parameter activation='relu' menentukan fungsi aktivasi yang akan diterapkan pada output linear tiap neuron; Keras secara internal menambahkan bias (bias term) untuk setiap neuron kecuali dinonaktifkan secara eksplisit. Karena semua lapisan Dense terhubung penuh, setiap neuron pada lapisan i memiliki bobot yang menghubungkannya ke semua neuron pada lapisan i‑1. Struktur ini mencerminkan arsitektur Multi‑Layer Perceptron (MLP) yang umum dipakai untuk klasifikasi biner atau regresi sederhana.

Kompilasi Model: Memilih Loss, Optimizer, dan Metode Evaluasi

Setelah arsitektur selesai, langkah selanjutnya adalah kompilasi model dengan model.compile. Pada tahap ini kita menentukan tiga komponen penting:

  1. Loss function – mengukur selisih antara prediksi model (y_pred) dan nilai target (y_true). Untuk masalah klasifikasi biner, binary_crossentropy adalah pilihan standar karena mengasumsikan output berupa probabilitas (nilai antara 0‑1).
  2. Optimizer – algoritma yang memperbarui bobot berdasarkan gradien loss. adam (Adaptive Moment Estimation) adalah optimizer default yang menggabungkan kelebihan AdaGrad dan RMSProp, sehingga cocok untuk kebanyakan dataset tanpa perlu penyesuaian manual learning rate yang rumit.
  3. Metrics – metrik tambahan yang tidak memengaruhi proses pelatihan tetapi memberikan informasi kinerja selama training dan evaluasi. accuracy menghitung persentase prediksi yang tepat pada data pelatihan/validasi.

Contoh kompilasi:

 
model.compile(loss='binary_crossentropy',
 
optimizer='adam',
 
metrics=['accuracy'])
 

Keras secara otomatis menginisialisasi semua bobot (bias termasuk) dengan distribusi Glorot Uniform (juga dikenal sebagai Xavier initialization). Inisialisasi ini dirancang untuk menjaga varians sinyal tetap stabil ketika melewati banyak lapisan, sehingga mengurangi risiko vanishing atau exploding gradient pada tahap back‑propagation.

Pelatihan dengan model.fit: Epoch, Batch Size, dan Callback

Fungsi model.fit mengontrol proses training. Parameter utama meliputi:

  • epochs: jumlah iterasi penuh melalui seluruh dataset. Nilai yang terlalu tinggi dapat menyebabkan overfitting, sedangkan nilai terlalu rendah menghasilkan model yang underfit.
  • batch_size: jumlah sampel yang diproses sekaligus sebelum bobot diperbarui. Batch kecil (mis. 10‑32) memberikan estimasi gradien yang lebih “berisik” tetapi dapat membantu model keluar dari minima lokal; batch besar (mis. 128‑256) menghasilkan gradien yang lebih stabil tetapi memerlukan memori GPU lebih banyak.
  • validation_split atau validation_data: menyediakan data terpisah untuk memantau loss/metric pada setiap epoch, membantu mendeteksi overfitting secara dini.

Callback paling umum adalah EarlyStopping, yang menghentikan training secara otomatis ketika loss pada data validasi tidak membaik selama sejumlah epoch (patience). Ini menghemat waktu komputasi dan mencegah overfitting.

Contoh penggunaan:

 
from keras.callbacks import EarlyStopping
 
early_stop = EarlyStopping(monitor='val_loss',
 
patience=5,
 
restore_best_weights=True)
 
history = model.fit(X_train, y_train,
 
epochs=150,
 
batch_size=10,
 
validation_split=0.2,
 
callbacks=[early_stop])
 

history menyimpan nilai loss dan metric per epoch, yang dapat dipetakan menjadi grafik untuk analisis visual.

Menghitung Total Parameter: Analisis Manual vs model.summary()

Setiap lapisan Dense memiliki parameter bobot (weights) dan bias. Jika sebuah lapisan memiliki units = U dan menerima input_dim = I, maka jumlah total parameter pada lapisan tersebut adalah:

(satu tambahan untuk bias). Pada contoh kode di atas:

  • Lapisan 1:
  • Lapisan 2:
  • Lapisan 3 (output):

Total = 108 + 104 + 9 = 221 parameter.

Keras menyediakan fungsi model.summary() yang menampilkan tabel terperinci berisi nama lapisan, output shape, dan jumlah parameter per lapisan, serta total parameter yang dapat diverifikasi dengan perhitungan manual di atas. Memahami cara menghitung parameter penting untuk memperkirakan kapasitas model dan kebutuhan memori pada GPU/CPU.

 
model.summary()
 

Praktik Terbaik dalam Implementasi Keras

  1. Reproduksibilitas – Tetapkan seed untuk NumPy, TensorFlow, dan Python random agar hasil pelatihan dapat direproduksi.
  2. Normalisasi Input – Skala fitur ke rentang [0, 1] atau standar deviasi 1.0; ini mempercepat konvergensi optimizer.
  3. Regularisasi – Tambahkan Dropout atau kernel_regularizer=l2(0.001) pada lapisan Dense untuk mengurangi overfitting pada dataset kecil.
  4. Pemantauan – Simpan history dan gunakan library seperti Matplotlib atau Seaborn untuk memvisualisasikan loss/accuracy vs epoch.
  5. Penggunaan GPU – Pastikan TensorFlow terinstal dengan dukungan CUDA; set tf.config.experimental.set_memory_growth untuk menghindari alokasi memori penuh pada GPU.

Dengan mengikuti langkah‑langkah di atas, mahasiswa dapat membangun, melatih, dan mengevaluasi model feed‑forward yang dapat di‑deploy pada aplikasi nyata, sekaligus memahami cara menghitung dan mengontrol kompleksitas model melalui parameter accounting.

Summary

Feed‑Forward Neural Network dapat diimplementasikan secara cepat dengan Keras Sequential API, di mana setiap lapisan Dense menambah bobot dan bias yang dihitung dengan rumus . Proses kompilasi menentukan fungsi loss, optimizer, dan metrik yang memandu pembaruan bobot selama model.fit, sementara epoch, batch size, dan callback seperti EarlyStopping mengontrol dinamika pelatihan. Menggunakan model.summary() atau perhitungan manual memungkinkan parameter accounting yang penting untuk memperkirakan kapasitas model dan kebutuhan memori. Praktik terbaik meliputi penetapan seed, normalisasi data, regularisasi, visualisasi training curve, serta pemanfaatan GPU untuk percepatan komputasi.