Pengenalan Recurrent Neural Network – Bagian 1

Pengenalan Recurrent Neural Network – Bagian 1

Artikel kali ini kita akan membahas tentang salah satu tipe neural network yaitu Recurrent Neural Network. Artikel-artikel Neural Network sebelumnya membahas neural network dimana input yang digunakan bersifat independen terhadap input lainnya. Berbeda dengan Recurrent Neural Network, input yang digunakan akan disusun sedemikian rupa sehingga input satu dengan yang lainnya saling terhubung.

Recurrent Neural Network (RNN) memiliki layer yang dapat memberikan feedback dari neuron saat input pertama masuk ke neuron saat input berikutnya masuk. Kedua neuron bisa neuron yang sama atau neuron yang berbeda. Layer dengan kemampuan ini disebut dengan recurrent layer. Recurrent Neural Network banyak digunakan untuk data yang berbentuk urutan atau sekuensial. kasus-kasus yang memiliki bentuk tersebut seperti data historikal dari saham, forex, dan cuaca. RNN juga biasa digunakan untuk prediksi kata yang akan muncul berikutnya berdasarkan beberapa kata sebelumnya yang menjadi input atau masukan. contoh kasus-kasus lainnya yaitu.

  • Image Captioning,
  • Speech Synthesis,
  • Music Generation,
  • Language Modeling,
  • Video Analysis,
  • Music Information Retrieval,
  • Chatbot,
  • Natural Language Translation.

RNN dapat menerima input dengan bentuk sekuensial ataupun non-sekuensial. berikut pembagian proses RNN berdasarkan bentuk dari data inputnya.

  • One-To-Many, dimana network menerima data non-seekuensial kemudian menghasilkan output sekuensial, cth : Image Captioning.
  • Many-To-One, network menerima input dengan bentuk sekuensial dan menghasilkan output non-sekuensial, cth : Sentiment Analysis.
  • Many-To-Many, dengan data sekuensial sebagai input, network dapat menghasilkan output sekuensial, cth : Natural Language Translation, Video Classification.

Untuk feedforward neural network memiliki kinerja yang bagus untuk tipe data diskrit dimana data yang digunakan bersifat independen dengan data lainnya. Misalnya, dengan menggunakan data bulanan harga sebuah saham dan melakukan prediksi harga saham tersebut untuk bulan berikutnya, feedforward neural network akan menggunakan data dari 3 bulan sebelumnya dan mengganggap data-data tersebut bersifat independen satu sama lain. Recurrent Neural Network (RNN) menggunakan metode interval untuk melakukan prediksi. RNN melakukan prediksi tidak hanya menggunakan input pada satu waktu tapi juga menggunakan input sebelumnya dan menggunakan koneksi tersebut untuk mengirim informasi ke seluruh hidden layer yang ada dalam RNN. Gambar di bawah ini memperlihatkan perbedaan struktur Feedforward Neural Network dan Recurrent Neural Network.

RNN dengan Satu Hidden Layer

Recurrent Neural Network (RNN) memiliki 3 parameter atau bobot.

  • W_{xh} , bobot ini mengubah input x_t ke state h_t
  • W_{hh}, bobot ini mengubah state sebelumnya (h_{t-1}) ke state yang berjalan (h_t),

h_t = f( (h_{t-1}W_hh) + (h_{t}W_xh))

  • Who, bobot ini memetakan state st yang telah dihitung menjadi output o_t

o_t = f(h_{t}W_{ho} )

Dimana f adalah fungsi aktifasi  seperti tanH, Sigmoid, atau ReLU.

Untuk kasus language translation atau prediksi kata yang akan muncul, input x berupa urutan kata yang di-encode menjadi input vektor (x_1…x_t…) dan state h berupa urutan state vector (h_1…h_t…). Untuk output ot, hasil komputasi akan berupa urutan nilai probabilitas dalam bentuk vektor (o_1…o_t…) dari urutan kata yang akan muncul berikutnya. Recurrent Neural Network (RNN) di atas memiliki kesamaan struktur dengan feedforward neural network satu hidden layer. RNN juga dapat memiliki beberapa hidden layer seperti feedforward neural network, yaitu dengan menyusun RNN yang telah kita bahas di atas menjadi beberapa layer. RNN tersebut dapat di-ilustrasikan seperti di bawah ini.

Proses belajar atau latih untuk Recurrent Network terbagi menjadi tiga yaitu forward propagation yang melibatkan proses perhitungan hidden state dan fungsi aktifasi, backward propagation untuk mencari nilai gradient berdasarkan nilai loss function dari proses forward propagation, proses terakhir yaitu Weight Update adalah mengubah nilai bobot W_xh, W_hh, dan W_ho menggunakan learning rate dan nilai gradient dari hasil backward propagation.

Backpropagation Through Time (BTT)

Sama seperti Multi-Layer Perceptron atau Feedforward Neural Network, Recurrent Neural Network (RNN) menggunakan Backpropagation untuk mendapatkan gradient pada tiap layernya. Metode Backpropagation yang digunakan disebut dengan Backpropagation Through Time (BPTT) Perbedaan BPTT dengan backpropagation ada pada perhitungan gradient, dimana BPTT menghitung nilai gradien pada tiap-tiap time step pada recurrent neural network yang kemudian ditotalkan untuk mengubah nilai bobot-bobot pada RNN. Proses BPTT dapat dilihat pada penjelasan berikut.

Seteleh mendapatkan nilai o_t, tahap berikutnya adalah menghitung nilai loss pada time step t yang didefinisikan sebagai l(o_t,y_t). Dengan begitu nilai loss function L pada time step T dapat didefinisikan sebagai berikut.

Backpropagation Through Time (BPTT) dimulai dari layer akhir dan time step akhir. Tahap awalnya adalah menghitung nilai gradient untuk perubahan nilai L dari output o_t dengan menghitung,

Tahap berikutnya adalah menghitung nilai gradient untuk parameter W_ho dengan menggunakan rumus.

Gradient untuk perubahan nilai L dari hidden state h_t pada step terakhir atau step T rumus yang digunakan adalah

Untuk time step t < T, L bergantung pada h_t ke h_{t+1} dan o_t. Dengan menggunakan chain rule seperti diatas, nilai gradient untuk perubahan nilai L dari hidden state pada time step t < T dapat menggunakan rumus di bawah ini.

Rumus di atas dapat dikembangkan ke dalam bentuk yang lebih umum sehingga bisa digunakan untuk menghitung nilai gradient untuk time step 1 \le t \le T.

Tahap berikutnya adalah menghitung nilai gradient L dari hidden layer dan input layer dengan menggunakan rumus berikut.

Pada bagian 1 ini kita telah membahas mengenai Recurrent Neural Network dan metode BPTT yang digunakan untuk proses latihnya. Untuk lebih mengerti mengenai cara kerja RNN, pada artikel bagian 2 kita akan merancang Recurrent Neural Network dengan menggunakan Python dan Numpy.

jika ada yang ingin ditanyakan, silahkan tuliskan pertanyaannya pada bagian komentar.