Back to Pembelajaran Mesin Lanjut

RNN Architectural Variations and Implementation

Questions/Cues

  • Apa perbedaan arsitektur n-to-n dan many-to-many?
  • Bagaimana implementasi many-to-one di Keras?
  • Mengapa diperlukan Bidirectional RNN?
  • Bagaimana menghitung parameter di RNN multilayer?
  • Apa aplikasi praktis arsitektur one-to-many?

Reference Points

  • Lecture_01_DFS.pptx (Slides 27-39)
  • Advanced_Algorithms.pdf (Pages 142-150)

Klasifikasi Arsitektur RNN

Recurrent Neural Networks memiliki tiga pola arsitektur utama berdasarkan hubungan input-output: 1. One-to-Many: Satu input menghasilkan sekuens output. Contoh: Image Captioning dimana satu gambar (input tunggal) menghasilkan kalimat deskriptif (output sekuensial). Arsitektur ini menggunakan encoder CNN untuk ekstraksi fitur gambar dan decoder RNN untuk pembuatan teks. 2. Many-to-One: Sekuens input menghasilkan satu output. Contoh: Analisis sentimen teks dimana sekuens kata-kata (input) diklasifikasikan menjadi sentimen positif/negatif (output tunggal). Implementasi di Keras menggunakan lapisan SimpleRNN dengan return_sequences=False. 3. Many-to-Many: Terbagi menjadi dua subtipe:

  • Sinkron: Setiap timestep input memiliki output terkait (e.g., POS Tagging)
  • Asinkron: Output mulai dihasilkan setelah seluruh input diproses (e.g., Machine Translation)

Implementasi Many-to-One di Keras

Contoh implementasi analisis sentimen:

from keras.models import Sequential
from keras.layers import SimpleRNN, Dense
model = Sequential()
model.add(SimpleRNN(64, input_shape=(100, 300)))  # 64 neuron, input 100 timestep
model.add(Dense(1, activation='sigmoid'))  # Output klasifikasi biner

Penjelasan parameter:

  • input_shape=(100, 300): 100 timestep dengan vektor fitur 300 dimensi
  • Lapisan SimpleRNN secara otomatis mengembalikan hanya output terakhir

Arsitektur Many-to-Many

Dua pendekatan implementasi: 1. Sinkron (Sequence Tagging):

model.add(SimpleRNN(32, return_sequences=True))
model.add(TimeDistributed(Dense(10)))  # Output untuk setiap timestep

Digunakan untuk tugas seperti penandaan POS dimana setiap kata mendapatkan label. 2. Asinkron (Encoder-Decoder):

  • Encoder: Memproses seluruh input sequence menjadi context vector
  • Decoder: Menggunakan context vector untuk menghasilkan output sequence

Bidirectional RNN

Mengkombinasikan dua RNN:

  • Forward Layer: Memproses data secara kronologis
  • Backward Layer: Memproses data secara terbalik Keunggulan:
  • Mencapture dependensi maju-mundur (e.g., dalam NLP: konteks kata dipengaruhi kata sebelum & sesudah)
  • Implementasi di Keras:
from keras.layers import Bidirectional
model.add(Bidirectional(SimpleRNN(32)))

Summary

RNN memiliki variasi arsitektur utama: one-to-many (generasi sekuens), many-to-one (klasifikasi sekuens), dan many-to-many (translasi/penandaan). Implementasi praktis menggunakan return_sequences untuk kontrol output, sementara Bidirectional RNN meningkatkan kinerja dengan konteks dua arah. Perhitungan parameter bergantung pada jumlah neuron dan dimensi input-output.