### 13.4 Sequence to Sequence

Pertama-tama, kami ingin mendeskripsikan kerangka _conditioned generation_.
Pada kerangka ini, kita ingin memprediksi sebuah kelasyiberdasarkan
kelas yang sudah di-hasilkan sebelumnya ( _history_ yaituy 1 ,···,yi− 1 ) dan sebuahconditioning
contextc(berupa vektor).
Arsitektur yang dibahas pada subbab ini adalah variasi RNN untuk permasalahansequence
_generation_.^11 Diberikan sekuens _input_ x= (x 1 ,···,xT).
Kita ingin mencari sekuens _output_ y= (y 1 ,···,yM). Pada subbab sebelumnya,xiberkorespondensi
langsung denganyi, e.g.,yiadalah kelas kata (kategori)
untukxi. Tetapi, pada permasalahan saat ini,xitidak langsung berkorespondensi
denganyi. Setiapyidikondisikan olehseluruhsekuens _input_ x;
i.e., _conditioning context_ dan _history_ {y 1 ,···,yi− 1 }. Panjang sekuens _output_
Mtidak mesti sama dengan panjang sekuens _input_ T. Permasalahan ini masuk
ke dalam kerangka _conditioned generation_ dimana keseluruhan _input_ x
dapat direpresentasikan menjadi sebuah vektorc( _coding_ ). Vektorcini menjadi
variabel pengkondisi untuk menghasilkan _output_ y.
Pasangan _input-output_ dapat melambangkan teks bahasa X–teks bahasa Y
(translasi), teks-ringkasan, kalimat- _paraphrase_, dsb. Artinya ada sebuah _input_
dan kita ingin menghasilkan ( _generate/produce_ ) sebuah _output_ yang cocok
untuk _input_ tersebut. Hal ini dapat dicapai dengan mo _model_ kan pasangan
_input-output_  p(y|x). Umumnya, kita mengasumsikan ada kumpulan parameterθyang
mengontrol _conditional probability_, sehingga kita transformasi
_conditional probability_ menjadip(y|x,θ). _Conditional probability_ p(y|x,θ)
dapat difaktorkan sebagai persamaan 13.10. Kami harap kamu mampu membedakan
persamaan 13.10 dan persamaan 13.5 (dan 13.8) dengan jeli. Sedikit

(^11) Umumnya untuk bidang pemrosesan bahasa alami.


```
13.4 Sequence to Sequence 195
```
perbedaan pada formula menyebabkan makna yang berbeda. Objektif _training_ adalah
untuk meminimalkan _loss function_, sebagai contoh berbentuklog
_likelihood_ function diberikan pada persamaan 13.11, dimanaDmelambangkan
_training data_.^12

```
p(y|x,θ) =
```
#### ∏M

```
t=1
```
```
p(yt|{y 1 ,...,yt− 1 },x,θ), (13.10)
```
```
L(θ) =−
```
#### ∑

```
{x,y}∈D
```
```
logp(y|x,θ) (13.11)
```
Persamaan 13.10 dapat di _model_ kan dengan _encoder-decoder_ model yang
terdiri dari dua buah RNN dimana satu RNN sebagai _encoder_, satu lagi sebagai _decoder_.Neural
Network, pada kasus ini, bertindak sebagaicontrolling
parameter θ. Ilustrasi encoder- _decoder_ dapat dilihat pada Gambar. 13.18.
Gabungan RNN _encoder_ dan RNN _decoder_ ini disebut sebagai bentuksequence
to sequence. Warna biru merepresentasikan _encoder_ dan warna
merah merepresentasikan _decoder_. “<EOS>” adalah suatu simbol spesial (untuk
praktikalitas) yang menandakan bahwa sekuens _input_ telah selesai dan
saatnya berpindah ke _decoder_.

Gambar 13.18: Konsep _encoder-decoder_ [81]. “<EOS>” adalah suatu simbol
spesial ( _untuk praktikalitas_ ) yang menandakan bahwa sekuens _input_ telah
selesai dan saatnya berpindah ke _decoder_.

Sebuah _encoder_ merepresentasikan sekuens _input_ xmenjadi satu vektor
c.^13 Kemudian, _decoder_ men- _decoder_ epresentasicuntuk menghasilkan ( _generate_ )
sebuah sekuens _output_ y. Perhatikan, arsitektur kali ini berbeda dengan
arsitektur pada subbab 13.3. _Encoder-decoder_ ( _neural network_ ) bertindak
sebagai kumpulan parameterθyang mengatur _conditional probability_.
_Encoder-decoder_ juga dilatih menggunakan prinsip _gradient-based optimization_ untuk _tuning_ parameter
yang mengkondisikan _conditional probability_ [81].
Dengan ini, persamaan 13.10 sudah didefinisikan sebagai _neural network_ sebagai
persamaan 13.12. “enc” dan “dec” adalah fungsi _encoder_ dan _decoder_,
yaitu sekumpulan transformasi non-linear.

(^12) Ingat kembali materi _cross entropy_ !
(^13) Ingat kembali bab 12 untuk mengerti kenapa hal ini sangat diperlukan.


196 13 Arsitektur Neural Network

```
yt= dec({y 1 ,···,yt− 1 },enc(x),θ) (13.12)
```
Begitu model dilatih, _encoder-decoder_ akan mencari _output_ ˆyterbaik untuk
suatu inputx, dillustrasikan pada persamaan 13.13. Masing-masing komponen
_encoder-decoder_ dibahas pada subbab-subbab berikutnya. Untuk abstraksi
yang baik, penulis akan menggunakan notasi aljabar linear. Kami harap pembaca
sudah familiar dengan representasi _neural network_ menggunakan notasi
aljabar linear seperti yang dibahas pada bab 11.

```
yˆ= arg max
y
```
```
p(y|x,θ) (13.13)
```
13.4.1 Encoder

Seperti yang sudah dijelaskan, _encoder_ mengubah sekuens _input x_ menjadi
satu vektorc. Suatu data point pada sekuens _input_ xt(e.g., kata, gambar,
suara, dsb) umumnya direpresentasikan sebagai _feature vector_ et. Dengan
demikian, _encoder_ dapat direpresentasikan dengan persamaan 13.14, dimana
fadalah fungsi aktivasi non-linear;UdanWadalah matriks bobot ( _weight_
matrices–merepresentasikan _synapse weights_ ).

```
ht=f(ht− 1 ,et)
=f(ht− 1 U+etW)
```
#### (13.14)

Representasi _input_ cdihitung dengan persamaan 13.15, yaitu sebagai
_weighted sum_ dari _hidden states_ [57], dimanaqadalah fungsi aktivasi nonlinear.
Secara lebih sederhana, kita boleh langsung menggunakanhTsebagai
konteksc[81] karena kita mengasumsikanhTmengandung seluruh informasi
yang ada di _input_.

c=q({h 1 ,···,hT}) (13.15)
Walaupun disebut sebagai representasi keseluruhan sekuens _input_, informasi
awal pada _input_ yang panjang dapat hilang. Artinyacbisa saja memuat
lebih banyak informasi _input_ ujung-ujung akhir. Salah satu st _rate_ gi yang dapat
digunakan adalah dengan membalik ( _reversing_ ) sekuens _input_. Sebagai
contoh, _input_ x= (x 1 ,···,xT) dibalik menjadi (xT,···,x 1 ) agar bagian awal
(···,x 2 ,x 1 ) lebih dekat dengan _decoder_ [81]. Informasi yang berada dekat dengan _decoder_ cenderung
lebih diingat. Kami ingin pembaca mengingat bahwa
teknik ini pun tidaklah sempurna.

13.4.2 Decoder

Seperti yang sudah dijelaskan sebelumnya, encoder memproduksi sebuah
_vektor_ cyang merepresentasikan sekuens _input_. _Decoder_ menggunakan representasi
ini untuk memproduksi ( _generate_ ) sebuah sekuens output y =


```
13.4 Sequence to Sequence 197
```
(y 1 ,···,yM), disebut sebagai proses _decoding_. Mirip dengan _encoder_, kita
menggunakan RNN untuk menghasilkan _output_ seperti diilustrasikan pada
persamaan 13.16, dimanafmerepresentasikan fungsi aktivasi non-linear;H,
E, danCmerepresentasikan _weight matrices_. _Hidden state_ h′tmelambangkan
distribusi probabilitas suatu objek (e.g., POS tag, kelas kata yangberasal
dari suatu himpunan) untuk menjadi _output_ yt. Umumnya,ytadalah dalam
bentuk _feature-vector_ e′t.

```
h′t=f(h′t− 1 ,e′t− 1 ,c)
=f(h′t− 1 H+e′t− 1 E+cC)
```
#### (13.16)

Dengan penjelasan ini, mungkin pembaca berpikir Gambar. 13.18 tidak
lengkap. Kamu benar! Penulis sengaja memberikan gambar simplifikasi. Gambar
lebih lengkap (dan lebih nyata) diilustrasikan pada Gambar. 13.19.

```
Gambar 13.19: Konsep _encoder-decoder_ (full).
```
Kotak berwarna ungu dan hijau dapat disebut sebagai _lookup matrix_ atau
_lookup table_. Tugas mereka adalah mengubah _input_ xtmenjadi bentukfeature
vector-nya (e.g., _word embedding_ ) dan mengubahe′tmenjadiyt(e.g., _word_
_embedding_ menjadi kata). Komponen “ _Beam Search_ ” dijelaskan pada subbab
berikutnya.

13.4.3 Beam Search

Kita ingin mencari sekuens _output_ yang memaksimalkan nilai probabilitas
pada persamaan 13.13. Artinya, kita ingin mencari _output_ terbaik. Pada su-


198 13 Arsitektur Neural Network

atu tahapan _decoding_, kita memiliki beberapa macam kandidat objek untuk
dijadikan _output_. Kita ingin mencari sekuens objek sedemikian sehingga probabilitas
akhir sekuens objek tersebut bernilai terbesar sebagai _output_. Hal ini
dapat dilakukan dengan algoritma _Beam Search_.^14

```
beamSearch(problemSet, ruleSet, memorySize)
openMemory = new memory of size memorySize
_node_ List = problemSet.listOfNodes
_node_  = root or initial search node
add node to OpenMemory;
while( _node_ is not a goal node)
delete node from openMemory;
expand node and obtain its children, evaluate those children;
if a child node is pruned according to a rule in ruleSet, delete it;
place remaining, non-pruned children into openMemory;
if memory is full and has no room for new nodes, remove the worst
_node_, de _term_ ined by ruleSet, in openMemory;
_node_  = the least costly node in openMemory;
```
```
Gambar 13.20: _Beam Search_.^15
```
Secara sederhana, algoritma _Beam Search_ mirip dengan algoritma Viterbi
yang sudah dijelaskan pada bab 8, yaitu algoritma untuk mencari sekuens
dengan probabilitas tertinggi. Perbedaannya terletak padaheuristic. Untuk
menghemat memori komputer, algoritma _Beam Search_ melakukan ekspansi
terbatas. Artinya mencari hanya beberapa (B) kandidat objek sebagai sekuens
berikutnya, dimana beberapa kandidat objek tersebut memiliki probabilitas
P(yt|yt− 1 ) terbesar.Bdisebut sebagaibeam- _width_. Algoritma _Beam Search_
bekerja dengan prinsip yang mirip denganbest-first search(best-Bsearch)
yang sudah kamu pelajari di kuliah algoritma atau pengenalan kecerdasan
buatan.^16 Pseudo-code _Beam Search_ diberikan pada Gambar. 13.20 (direct
quotation).

13.4.4 Attention-based Mechanism

Seperti yang sudah dijelaskan sebelumnya, model _encoder-decoder_ memiliki
masalah saat diberikan sekuens yang panjang ( _vanishing_ atau _exploding_ gradient
problem). Kinerja model dibandingkan dengan panjang _input_ kurang
lebih dapat diilustrasikan pada Gambar. 13.21. Secara sederhana, kinerja
_model_  menurun seiring sekuens input bertambah panjang. Selain itu, representasicyang
dihasilkan _encoder_ harus memuat informasi keseluruhan _input_ walaupun
sulit dilakukan. Ditambah lagi, _decoder_ menggunakan representasinyacsaja
tanpa boleh melihat bagian-bagian khusus _inputs_ aat _decoding_.
Hal ini tidak sesuai dengan cara kerja manusia, misalnya pada kasus

(^14) https://en.wikipedia.org/wiki/Beam_search
(^15) https://en.wikibooks.org/wiki/Artificial_Intelligence/Search/
Heuristic_search/Beam_search
(^16) https://www.youtube.com/watch?v=j1H3jAAGlEA&t=2131s


```
13.4 Sequence to Sequence 199
```
translasi bahasa. Ketika mentranslasi bahasa, manusia melihat bolak-balik
bagian mana yang sudah ditranslasi dan bagian mana yang sekarang (difokuskan)
untuk ditranslasi. Artinya, manusia berfokus pada suatu bagian
_input_ untuk menghasilkan suatu translasi.

```
Gambar 13.21: Permasalahan _input_ yang panjang.
```
Sudah dijelaskan sebelumnya bahwa representasi sekuens _input_ cadalah
sebuah _weighted sum_.cyang sama digunakan sebagai _input_ bagi _decoder_ untuk
menentukan semua _output_. Akan tetapi, untuk suatu tahapan _decoding_
(untuk _hidden state_ h′ttertentu), kita mungkin ingin model lebih berfokus
pada bagian _input_ tertentu daripada _weighted sum_ yang sifatnya generik. Ide
ini adalah hal yang mendasari _attention mechanism_ [57, 58]. Ide ini sangat
berguna pada banyak aplikasi pemrosesan bahasa alami. _Attention mechanism_ dapat
dikatakan sebagai suatu _soft alignment_ antara _input_ dan _output_.
Mekanisme ini dapat membantu mengatasi permasalahan _input_ yang panjang,
seperti diilustrasikan pada Gambar. 13.22.
Dengan menggunakan _attention mechanism_, kita dapat mentransformasi
persamaan 13.16 pada _decoder_ menjadi persamaan 13.17, dimanaktmerepresentasikan
seberapa ( _how much_ ) _decoder_ harus memfokuskan diri ke _hidden_
_state_ tertentu pada _encoder_ untuk menghasilkan _output_ saat ke-t.ktdapat
dihitung pada persamaan 13.18, dimanaTmerepresentasikan panjang _input_,
hiadalah _hidden state_ pada _encoder_ pada saat ke-i,h′t− 1 adalah _hidden state_
pada _decoder_ saat ket−1.

```
h′t=f′(h′t− 1 ,e′t− 1 ,c,kt) (13.17)
```

200 13 Arsitektur Neural Network

```
Gambar 13.22: Menggunakan vs tidak menggunakan _attention_.
```
```
kt=
```
#### ∑T

```
i=1
```
```
αt,ihi
```
```
αt,i=
```
```
exp(hi·h′t− 1 )
∑T
z=1exp(hz·h
```
```
′
t− 1 )
```
#### (13.18)

Sejatinyaktadalah sebuah _weighted sum_. Berbeda dengancyang bernilai
sama untuk setiap tahapan _decoding_, _weight_ atau bobot (αt,i) masingmasing
_hidden state_  pada encoder berbeda-beda untuk tahapan _decoding_
yang berbeda. Perhatikan Gambar. 13.23 sebagai ilustrasi (lagi-lagi, bentuk
_encoder-decoder_ yang disederhanakan). Terdapat suatu bagian grafik yang
menunjukkan distribusi bobot pada bagian _input representation_ dan _attention_.
Distribusi bobot pada _weighted sum_ cadalah pembobotan yang bersifat
generik, yaitu berguna untuk keseluruhan (rata-rata) kasus. Masing-masing
_attention_ (semacam _layers_ emu) memiliki distribusi bobot yang berbeda pada
tiap tahapan _decoding_. Walaupun _attention mechanism_ sekalipun tidak sempurna,
ide ini adalah salah satu penemuan yang sangat penting.
Seperti yang dijelaskan pada bab 11 bahwa _neural network_ susah untuk
dimengerti. _Attention mechanism_ adalah salah satu cara untuk mengerti _neural_
_network_. Contoh yang mungkin lebih mudah dipahami diberikan pada
Gambar. 13.24 yang merupakan contoh kasus mesin translasi [57].Attention
mechanismmampu mengetahui _soft alignment_, yaitu kata mana yang harus
difokuskan saat melakukan translasi bahasa (bagian _input_ mana berbobot
lebih tinggi). Dengan kata lain, _attention mechanism_ memberi interpretasi
kata pada _output_ berkorespondensi dengan kata pada _input_ yang mana. Sebagai
informasi, menemukan cara untuk memahami (interpretasi) ANN adalah
salah satu tren riset masa kini [56].


```
13.4 Sequence to Sequence 201
```
```
𝑥!
```
```
...
```
```
𝑥"
```
```
_Input_  Representation 𝒄
⨁
```
```
Attention
```
```
⨁
Attention
```
```
⨁
Attention
```
```
⨁
```
```
<EOS>
```
```
𝑦!
```
```
𝒄
```
```
𝑦#
```
```
...
```
```
𝒄
```
```
𝑦$%! 𝑦$
```
```
Gambar 13.23: _Encoder-decoder_ with attention.
```
Gambar 13.24: _Attention mechanism_ pada translasi bahasa [57]. Warna lebih
gelap merepresentasikan bobot (fokus/ _attention_ ) lebih tinggi. Sebagai contoh,
kata “menendang” berkorespondensi paling erat dengan kata “kicks”.

13.4.5 Variasi Arsitektur Sequence to Sequence

Selain RNN, kita juga dapat menggunakan _bidirectional_ RNN (BiRNN) untuk
mengikutsertakan pengaruh baik _hidden states_ ebelum (h 1 ,···,ht− 1 ) dan
setelah (ht+1,···,hT) untuk menghitung _hidden states_ ekarang (ht) [85, 86,
87]. BiRNN menganggaphtsebagai gabungan ( _concatenation_ ) _forward_ hidden
_state_ h→t dan _backward hidden state_ h←t , ditulis sebagaiht=h→t +h←t.^17
_Forward hidden state_ dihitung seperti RNN biasa yang sudah dijelaskan pada
subbab _encoder_, yaituh→t =f(h→t− 1 ,et). _Backward hidden state_ dihitung
dengan arah terbalikh←t =f(h←t+1,et). Ilustrasi _encoder-decoder_ yang menggunakan
BiRNN dapat dilihat pada Gambar. 13.25.
Selain variasi RNN menjadi BiRNN kita dapat menggunakan _stacked RNN_
seperti pada Gambar. 13.26 dimana _output_ pada RNN pertama bertindak
sebagai _input_ pada RNN kedua. _Hidden states_ yang digunakan untuk menghasilkan
representasi _encoding_ adalah RNN pada tumpukan paling atas. Kita

(^17) Perhatikan! + disini dapat diartikan sebagai penjumlahan atau konkatenasi


202 13 Arsitektur Neural Network

Gambar 13.25: _Encoder-decoder_ dengan Bidirectional Recurrent Neural Net-
work.

juga dapat menggunakan variasi _attention mechanism_ seperti _neural_ checklist
_model_ [88] atau _graph-based attention_ [89]. Selain yang disebutkan, masih
banyak variasi lain yang ada, silahkan eksplorasi lebih lanjut sendiri.

```
Gambar 13.26: _Encoder-decoder_ denganstackedRecurrent Neural Network.
```
13.4.6 Rangkuman

_Sequence to sequence_ adalah salah satu bentuk _conditioned generation_. Artinya,
menggunakan RNN untuk menghasilkan ( _generate_ ) suatu sekuens _output_ yang
dikondisikan oleh variabel tertentu. Diktat ini memberikan contoh bagaimana
menghasilkan suatu sekuens _output_ berdasarkan sekuens _input_ ( _conditioned_


```
13.6 Architecture Ablation 203
```
on a sequence of input). Selain _input_ berupa sekuens, konsep ini juga dapat
diaplikasikan pada bentuk lainnya. Misalnya, menghasilkan _caption_ saat input
yang diberikan adalah sebuah gambar [90]. Kita ubah _encoder_ menjadi sebuah
CNN (ingat kembali subbab 13.1) dan _decoder_ berupa RNN [90]. Gabungan
CNN-RNN tersebut dilatih bersama menggunakan metode _backpropagation_.
Perhatikan, walaupun memiliki kemiripan dengan _hidden markov model_,
_sequence to sequence_ bukanlah _generative model_. Pada _generative model_, kita
ingin me _model_ kan _joint probability_ p(x,y) =p(y|x)p(x) (walaupun secara
tidak langsung, misal menggunakan teori Bayes). _Sequence to sequence_ adalah
_discriminative model_ walaupun _output_ -nya berupa sekuens, ia tidak me _model_ kanp(x),
berbeda dengan _hidden markov model_. Kita ingin me _model_ kan
_conditional probability_ p(y|x) secara langsung, seperti _classifier_ lainnya (e.g.,
_logistic regression_ ). Jadi yang di _model_ kan antara _generative_ dandiscriminative
_model_ adalah dua hal yang berbeda.
Pada subbab ini, penulis memberikan contoh _attention mechanism_ yang
beroperasi antara _encoder_ dan _decoder_. Masih banyak variasi lainnya seperti
_self-attention_, _multi-head attention_ dan _hierarchical-attention_ [91, 92]. Walaupun
motivasi dan penggunaan variasi _attention mechanism_ berbeda-beda,
konsep dasarnya sama yaitu mengekstrak (atau mengambil) informasi dari
bagian _network_ lainnya.

