### 13.2 Recurrent Neural Network

Ide dasar _recurrent neural network_ (RNN) adalah membuat topologi jaringan
yang mampu merepresentasikan data _sequential_ (sekuensial) atau _time series_ [77],
misalkan data ramalan cuaca. Cuaca hari ini bergantung kurang
lebih pada cuaca hari sebelumnya. Sebagai contoh apabila hari sebelumnya

(^4) mathworks.com


```
13.2 Recurrent Neural Network 187
```
mendung, ada kemungkinan hari ini hujan.^5 Walau ada yang menganggap
sifat data sekuensial dan _time series_ berbeda, RNN berfokus sifat data dimana _instance_ waktu
sebelumnya (t−1) mempengaruhi _instance_ pada waktu
berikutnya (t). Intinya, mampu mengingat _history_.
Secara lebih umum, diberikan sebuah sekuens _input x_ = (x 1 ,···,xT).
Dataxt(e.g., vektor, gambar, teks, suara) dipengaruhi oleh data sebelumsebelumnya
( _history_ ), ditulis sebagaiP(xt | {x 1 ,···,xt− 1 }). Kami harap
kamu ingat kembali materi _markov assumption_ yang diberikan pada bab 8.
Pada _markov assumption_, diasumsikan bahwa dataxt( _data point_ ) hanya
dipengaruhi olehbeberapa data sebelumnya saja(analogi: _windowing_ ).
Setidaknya, asumsi ini memiliki dua masalah:

1. Menentukan _window_ terbaik. Bagaimana cara menentukan banyaknya
    data sebelumnya (secara optimal) yang mempengaruhi data sekarang.
2. Apabila kita menggunakan _markov assumption_, artinya kita mengganggap
    informasi yang dimuat oleh data lama dapat direpresentasikan oleh data
    lebih baru, i.e.,xtjuga memuat informasixt−J,...,xt− 1 ;Jadalah ukuran
    window. Penyederhanaan ini tidak jarang mengakibatkan informasi yang
    hilang.
RNN adalah salah satu bentuk arsitektur ANN untuk mengatasi masalah
yang ada pada _markov assumption_. Ide utamanya adalah memorisasi,^6 kita
ingin mengingatkeseluruhansekuens (dibanding _markov assumption_ yang
mengingat sekuens secara terbatas), implikasinya adalah RNN yang mampu
mengenali dependensi yang panjang (misalxtternyata dependen terhadap
x 1 ). RNN paling sederhana diilustrasikan pada Gambar. 13.9. Ide utamanya
adalah terdapat _pointer_ ke dirinya sendiri.

Gambar 13.9: Bentuk konseptual paling sederhana Recurrent Neural Network.

Ilustrasi Gambar. 13.9 mungkin sedikit susah dipahami karena berbentuk
sangat konseptual. Bentuk lebih matematis diilustrasikan pada Gam-

(^5) Mohon bertanya pada ahli meteorologi untuk kebenaran contoh ini. Contoh ini
semata-mata pengalaman pribadi penulis.
(^6) Tidak merujuk hal yang sama dengan _dynamic programming_.


188 13 Arsitektur Neural Network

bar. 13.10 [77]. Perhitungan _hidden state_ pada waktu ke-tbergantung pada
_input_ pada waktu ke-t(xt) dan _hidden state_ pada waktu sebelumnya (ht− 1 ).

```
Gambar 13.10: Konsep Recurrent Neural Network.
```
Konsep ini sesuai dengan prinsip _recurrent_ yaitumengingat(memorisasi)
kejadian sebelumnya. Kita dapat tulis kembali RNN sebagai persamaan 13.1.

```
ht=f(xt,ht− 1 ,b) (13.1)
```
dimanafadalah fungsi aktivasi (non-linear, dapat diturunkan). Demi menyederhanakan
penjelasan, penulis tidak mengikutsertakan _bias_ (b) pada fungsifungsi
berikutnya. Kami berharap pembaca selalu mengingat bahwa bias
adalah parameter yang diikutsertakan pada fungsi _artificial neural network_.
Fungsifdapat diganti dengan variasi _neural network_,^7 misal menggunakan
_long short-term memory network_ (LSTM) [78]. Buku ini hanya akan menjelaskan
konsep paling penting, silahkan eksplorasi sendiri variasi RNN.
Secara konseptual, persamaan 13.1 memiliki analogi denganfull markov
chain. Artinya, _hidden state_ pada saat ke-tbergantung pada semua _hidden_
_state_ dan _inputs_ ebelumnya.

```
ht=f(xt,ht− 1 )
=f(xt,f(xt− 1 ,ht− 2 ))
=f(xt,f(xt− 1 ,f({x 1 ,···,xt− 2 },{h 1 ,···,ht− 3 })))
```
#### (13.2)

_Training_ pada _recurrent neural network_ dapat menggunakan metode _backpropagation_.
Akan tetapi, metode tersebut kurang intuitif karena tidak mampu
mengakomodasi _training_ yang bersifat sekuensial _time series_. Untuk itu, terdapat
metode lain bernama _backpropagation through time_ [79].

(^7) https://en.wikipedia.org/wiki/Recurrent_ _neural_ _ _network_


```
13.2 Recurrent Neural Network 189
```
Gambar 13.11: Konsep _feed forward_ pada Recurrent Neural Network (RNN).
Karena RNN menerima _input_ berupa sekuens, kita memvisualisasikan proses
feed fowarddengan _unfolding_ (atauunrolling) RNN pada keseluruhan sekuens
_input_.

Sebagai contoh kita diberikan sebuah sekuensxdengan panjangTsebagai
_input_, dimanaxtmelambangkan input ke-i( _data point_ ), dapat berupa
_vektor_, gambar, teks, atau apapun. Kita melakukan _feed forward_ data tersebut
ke RNN, diilustrasikan pada Gambar. 13.11. Perlu diingat, RNN mengadopsi
prinsip _parameter sharing_ (serupa dengan _weight sharing_ pada CNN)
dimana neuron yang sama diulang-ulang saat process _feed forward_. Setelah
selesai proses _feed forward_, kita memperbaharui parameter ( _synapse weights_ )
berdasarkan propagasi _error_ ( _backpropagation_ ). Pada _backpropagation_ biasa,
kita perbaharui parameter sambil mempropagasi _error_ dari _hidden state_ ke
_hidden state_  sebelumnya. Teknik melatih RNN adalah _backpropagation_
through timeyang melakukan _unfolding_ pada _neural network_. Kita meng _update_
parameter saat kita sudah mencapai _hidden state_ paling awal. Hal
ini diilustrasikan pada Gambar. 13.12.^8 Gambar. 13.12 dapat disederhanakan
menjadi bentuk lebih abstrak (konseptual) pada Gambar. 13.13.
Kita mempropagasi _error_ dengan adanya efek darinext states of hidden
_layer_. _Synapse weights_ diperbaharui secara _large update_. _Synapse weight_
tidak diperbaharui per _layer_. Hal ini untuk merepresentasikan _neural network_ yang
mampu mengingat beberapa kejadian masa lampau dan keputusan
saat ini dipengaruhi oleh keputusan pada masa lampau juga (ingatan).
Untuk mengerti proses ini secara praktikal (dapat menuliskannya sebagai program),
penulis sa _rank_ an pembaca untuk melihat materi tentangcomputation
graph^9 dan disertasi PhD oleh Mikolov [47].
Walaupun secara konseptual RNN dapat mengingat seluruh kejadian sebelumnya,
hal tersebut sulit untuk dilakukan secara praktikal untuk sekuens
yang panjang. Hal ini lebih dikenal dengan _vanishing_ atau _exploding_ gradient
problem[63, 80, 81]. Seperti yang sudah dijelaskan, ANN dan variasi arsitekturnya
dilatih menggunakan teknik _stochastic gradient descent_ ( _gradient_ -based
optimization). Artinya, kita mengandalkan propagasi _error_ berdasarkan tu-

(^8) Prinsip ini mirip dengan _weight sharing_.
(^9) https://www.coursera.org/learn/ _neural_ - _network_ s- _deep_ - _learning_ /
lecture/4WdOY/computation-graph


190 13 Arsitektur Neural Network

```
Gambar 13.12: Konsep _backpropagation through time_ [47].
```
Gambar 13.13: Konsep _backpropagation through time_ [1]. Persegi berwarna
merah umumnya melambangkan _multi-layer perceptron_.

runan. Untuk sekuens _input_ yang panjang, tidak jarang nilai _gradient_ menjadi
sangat kecil dekat dengan 0 ( _vanishing_ ) atau sangat besar ( _exploding_ ). Ketika
pada satu _hidden state_ tertentu, gradient pada saat itu mendekati 0, maka
nilai tersebut yang dipropagasikan pada langkah berikutnya menjadi semakin
kecil. Hal serupa terjadi untuk nilai gradient yang besar.
Berdasarkan pemaparan ini, RNN adalah teknik untuk merubah suatu
sekuens _input_, dimana xt merepresentasikan data ke-t(e.g., vektor, gambar,
teks) menjadi sebuah _output_ vektory. Vektorydapat digunakan un-


```
13.3 Part-of-speech Tagging Revisited 191
```
tuk permasalahan lebih lanjut (buku ini memberikan contoh _sequence to sequence_ pada
subbab 13.4). Bentuk konseptual ini dapat dituangkan pada persamaan
13.3. Biasanya, nilaiydilewatkan kembali ke sebuah _multi-layer perceptron_ (MLP)
dan fungsi softmax untuk melakukan klasifikasi akhir (final
_output_ ) dalam bentuk probabilitas, seperti pada persamaan 13.4.

```
y= RNN(x 1 ,···,xN) (13.3)
```
_final output_  = softmax(MLP(y)) (13.4)
Perhatikan, arsitektur yang penulis deskripsikan pada subbab ini adalah
arsitektur paling dasar. Untuk arsitektur _state-of-the-art_, kamu dapat membaca _paper_ yang
berkaitan.

