Recurrent Neural Network (RNN)
RNN adalah arsitektur neural network yang dirancang untuk menangani data sekuensial, di mana urutan data sangat penting dan ukuran input bisa bervariasi.
Neural Network dan Ukuran Input yang Tetap
Konsep neural network bergantung pada backpropagation dari output ke input, dan input hanya bisa dipelajari jika ukuran inputnya tetap. Ini berarti bahwa dimensi dari data input kita harus tetap konsisten sepanjang proses pembelajaran, karena kita harus menghitung weight dan bias secara presisi untuk setiap input.
Ketika network kita dikonfigurasi dengan weight atau bias yang tetap, weight dan bias tersebut akan dibagi ke seluruh input, sehingga lebih mudah untuk melakukan generalisasi di berbagai input dan memberikan kemampuan bagi network untuk belajar dan beradaptasi dari data.
Masalah dengan Data Sekuensial
Masalahnya muncul jika kita ingin melakukan sesuatu yang sekuensial, contohnya data prediksi harga saham, perkiraan cuaca, atau keuangan bisnis. Konsep dari sesuatu yang sekuensial contohnya time step untuk data time series atau posisi kata di dalam sebuah kalimat di NLP tidak dapat dipahami dengan neural network tradisional karena tipe data ini memiliki ukuran input yang berbeda-beda dan urutan input sangat penting.
| Nomor Hari | Harga Saham |
|---|---|
| 1 | $15.23 |
| 2 | $15.45 |
| 3 | $15.60 |
| 4 | $16.00 |
| 5 | $15.75 |
| 6 | $16.10 |
| 7 | $16.00 |
Poin Penting: Bayangkan jika kita ingin memprediksi harga saham untuk hari berikutnya, kita perlu tahu semua harga saham sebelumnya. Ukuran input yang tetap dari neural network tidak bisa mengatasi masalah ini, karena data harga saham itu dinamis dalam ukuran inputnya.
Terlebih lagi, urutan dari inputnya sangat penting, karena untuk menghitung harga saham di hari ke-51 katakanlah, kita perlu tahu harga saham di hari ke-50, 49, 48, dan seterusnya. Dan kita tidak bisa memproses data secara acak, kita perlu memproses data mulai dari hari ke-1, hari ke-2, hari ke-3, dan seterusnya.
Kesimpulan: RNN muncul ketika: Ukuran inputnya dinamis dan urutan inputnya sangat penting.
Mendefinisikan Data Sekuensial
Data sekuensial adalah data yang:
- Punya ukuran input yang bervariasi
- Urutan inputnya penting
Yang BUKAN Data Sekuensial
- Gambar: Teknik yang paling umum untuk menangani data gambar adalah dengan meratakan gambar menjadi vektor menggunakan arsitektur seperti CNN. Meskipun RNN bisa dipakai untuk menangani data gambar kalau kita menanganinya seperti sebuah urutan piksel, tapi performanya tidak sebagus CNN.
- Teks dengan TF-IDF: Kalau kita pakai TF-IDF untuk mengubah teks jadi vektor, urutan kata tidak penting lagi. Jadi itu bukan data sekuensial.
- Data tanpa ketergantungan urutan: Misalnya, kalau kita ingin memprediksi harga rumah berdasarkan jumlah kamar tidur, jumlah kamar mandi, ukuran rumah, dan lokasi rumah, urutan fiturnya tidak masalah.
Catatan: Data sekuensial lebih dibutuhkan pas kita peduli sama urutan data, dan datanya bisa dalam panjang apa pun.
Intuisi dari RNN
Misalnya kita punya aturan rekursif berikut:
f(x - 1) / 2 jika x adalah bilangan prima
f(x - 1) + 2 jika x adalah bilangan genap
f(x - 1) * 2 jika x adalah bilangan ganjil
1 jika x <= 0
}
Jadi, nilai dari f(x) bergantung pada nilai dari f(x-1)
... dan nilai dari f(x-1) bergantung pada nilai dari f(x-2),
... dan seterusnya.
Jadi nilai dari f(x) bergantung pada nilai dari f(x-1), f(x-2), f(x-3), dan seterusnya.
Contoh Lain: Penyelesaian Teks
Katakanlah kita punya teks berikut:
Saya suka makanan pedas, saya suka makan Nasi
Kalau kita ingin memprediksi kata berikutnya, kita perlu mempertimbangkan kata-kata
sebelumnya. Kalau kita cuma mempertimbangkan kata Nasi, kita tidak bisa
memprediksi kata berikutnya. Tapi kalau kita mempertimbangkan kata-kata sebelumnya, kita
bisa memprediksi kata berikutnya adalah Goreng.
Urutan Fibonacci
Ide utama dari RNN adalah setiap input dipelajari satu langkah pada satu waktu, seperti:
Bisakah kamu menebak angka berikutnya dalam urutan tersebut?
Memetakan Intuisi ke RNN
Komponen RNN
- Input: Ini adalah input kita
- Time Step: Ini adalah nomor langkah saat ini, misalnya kalau kita sedang memproses data ke-3, maka time step-nya adalah 3
- RNN Cell: Di sinilah perhitungan terjadi, ini adalah RNN itu sendiri. Weight dan bias dari RNN cell ini dibagi ke seluruh time step.
- Hidden State: Ini adalah output dari RNN cell pada time step saat ini, dan akan dipakai sebagai input dari RNN cell pada time step berikutnya.
- Fully Connected Layer: Ini adalah layer yang akan dipakai untuk menghitung output dari seluruh RNN
Catatan Penting
Weight dan bias dari RNN cell dibagi ke seluruh time step, jadi pada dasarnya RNN cell-nya sama untuk setiap time step. Diagram di sebelah kiri adalah diagram yang tidak di-unfold, dan diagram di sebelah kanan adalah diagram yang di-unfold. Kedua diagram itu sama, tapi tujuan berbeda untuk memahami konsep RNN.
Berbagai Jenis Neural Network Berdasarkan Data Sekuensial
Ada beberapa jenis RNN yang berkaitan dengan variasi bagaimana input dan output diproses:
Sumber gambar: https://karpathy.github.io/2015/05/21/rnn-effectiveness/
Mendefinisikan Output
Kita sudah bisa memahami bahwa input bisa dalam panjang yang berbeda-beda, tapi kenyataannya input juga bisa berupa panjang tunggal, tapi RNN dipakai untuk memproses output yang bisa dalam panjang yang berbeda-beda.
Kesimpulan: RNN kebanyakan dipakai untuk menangani sebuah urutan: Entah itu urutan input, atau urutan output, atau keduanya.
One to One
Ini pada dasarnya adalah neural network tradisional, di mana input dan outputnya tetap dan tidak sekuensial. Ketika kita mengklasifikasikan neural network berdasarkan urutan input dan outputnya, salah satunya akan masuk ke dalam kategori ini: ketika tidak ada urutan sama sekali.
One to Many
Ini adalah jenis neural network di mana inputnya tetap, tapi outputnya sekuensial. Salah satu contohnya adalah image captioning, di mana inputnya adalah sebuah gambar, dan outputnya adalah caption dari gambar tersebut.
Contoh: Rekomendasi User
Contoh lain adalah ketika kita punya input tetap untuk rekomendasi user:
- Nama User: Imam
- Preferensi User: Coding
- Level User: Pemula
Maka rekomendasinya adalah:
- HTML, CSS, Javascript
- NodeJS
- ReactJS
- React Native
Kamu bisa lihat bahwa inputnya tetap, cuma 3 data, tapi outputnya sekuensial, kita perlu siswa untuk mengikuti roadmap dan tidak melewatkan langkah apa pun.
Many to One
Many to one adalah di mana inputnya adalah urutan data dari harga saham, dan outputnya adalah ringkasan dari data, entah itu "untung", "rugi", "untung besar", "rugi besar", atau "normal".
Contoh lain adalah dalam analisis sentimen, di mana inputnya adalah urutan kata, dan outputnya adalah sentimen dari teks, entah itu positif atau negatif.
Simulasi Interaktif RNN
Mari kita lihat berbagai arsitektur RNN beraksi dengan simulasi interaktif ini. Anda dapat memilih jenis arsitektur dan melihat bagaimana data mengalir melalui network.
Simulasi Interaktif Recurrent Neural Network
Skenario: {{ currentTitle }}
Rangkuman
Poin-Poin Penting:
- RNN dirancang untuk menangani data sekuensial dengan urutan yang penting
- Neural network tradisional membutuhkan ukuran input tetap, sedangkan RNN bisa menangani ukuran input yang bervariasi
- Hidden state memungkinkan RNN untuk "mengingat" informasi dari langkah sebelumnya
- Weight dan bias RNN cell dibagi ke seluruh time step
- Ada berbagai jenis arsitektur RNN: one-to-one, one-to-many, many-to-one, dan many-to-many
- RNN cocok untuk masalah seperti analisis sentimen, prediksi time series, dan pemrosesan bahasa alami
Selanjutnya
Pada materi berikutnya, kita akan mempelajari arsitektur lebih lanjut seperti Seq2Seq dan Attention Mechanism yang meningkatkan kemampuan RNN dalam menangani sequentials data yang lebih kompleks.