Attention and Transformer

Created onDibuat pada
Last updated onTerakhir diperbarui
15 min read15 menit baca
IDattentiontransformerRNNdeep-learningdata-science
ContributorsKontributor
Razi Rachman Widyadhana - @zirachw

Attention adalah mekanisme yang membuat model dapat memilih bagian input yang paling relevan ketika menghasilkan output. Dalam model sekuens, attention muncul sebagai jawaban atas kelemahan encoder-decoder RNN yang memadatkan seluruh input ke satu context vector tetap.

#Link to this headingIntuisi Attention

Pada encoder-decoder tanpa attention, seluruh informasi input disimpan dalam satu vektor konteks. Untuk sekuens panjang, satu vektor ini menjadi bottleneck. Decoder harus menghasilkan seluruh output hanya dari ringkasan tunggal tersebut.

Bahdanau, Cho, dan Bengio mengusulkan agar decoder tidak membuang semua hidden state encoder. Semua hidden state digunakan kembali, lalu decoder belajar memberi bobot lebih besar pada state yang relevan untuk output saat ini. Figure 1 pada paper Bahdanau menggambarkan decoder yang menghasilkan target word yty_t dengan memperhatikan semua anotasi encoder h1,h2,…,hTh_1, h_2, \ldots, h_T.

Figure 1 Bahdanau attention, decoder menghasilkan target word yt dengan attention terhadap h1 sampai hT dari source sentence x1 sampai xT
Figure 1 Bahdanau attention, decoder menghasilkan target word yt dengan attention terhadap h1 sampai hT dari source sentence x1 sampai xT

Secara intuitif, attention melakukan tiga hal.

  1. Menilai relevansi setiap hidden state encoder terhadap kebutuhan decoder.
  2. Mengubah skor relevansi menjadi bobot attention.
  3. Membentuk context vector sebagai kombinasi berbobot dari semua hidden state encoder.

Jika sebuah kata target bergantung kuat pada kata input tertentu, bobot attention pada posisi input tersebut akan lebih besar.

#Link to this headingMany-to-One dengan Attention

Pada RNN many-to-one biasa, output sering hanya bergantung pada hidden state terakhir. Attention mengubah hal ini dengan memberi akses ke semua hidden state masa lalu. Model tidak hanya memakai h(T)h^{(T)}, tetapi membentuk konteks dari h(1),h(2),…,h(T)h^{(1)}, h^{(2)}, \ldots, h^{(T)}.

Slide many to one with attention, bobot alpha memberi perhatian pada hidden state masa lalu untuk membentuk context vector
Slide many to one with attention, bobot alpha memberi perhatian pada hidden state masa lalu untuk membentuk context vector

Misalkan terdapat TT timestep. Nilai attention untuk timestep jj dilambangkan dengan αj\alpha_j. Context vector dibentuk sebagai berikut.

c=∑j=1Tαjh(j)c = \sum_{j=1}^{T} \alpha_j h^{(j)}

Bobot attention biasanya dinormalisasi sehingga jumlahnya sama dengan 1.

∑j=1Tαj=1\sum_{j=1}^{T} \alpha_j = 1

Dengan begitu, cc dapat dibaca sebagai ringkasan adaptif dari seluruh sekuens. Kata adaptif penting karena ringkasan ini dipelajari dari data, bukan ditentukan manual.

#Link to this headingJumlah Parameter

Contoh pada slide menggunakan RNN many-to-one dengan 2 hidden unit, 1 unit dense, dan 20 timestep.

Tanpa attention, jumlah parameternya adalah sebagai berikut.

parameter=(ninput+nhidden+1)nhidden+(nhidden+1)noutput\text{parameter} = (n_{\text{input}} + n_{\text{hidden}} + 1)n_{\text{hidden}} + (n_{\text{hidden}} + 1)n_{\text{output}}

Dengan ninput=1n_{\text{input}} = 1, nhidden=2n_{\text{hidden}} = 2, dan noutput=1n_{\text{output}} = 1, diperoleh nilai berikut.

(1+2+1)2+(2+1)1=8+3=11(1 + 2 + 1)2 + (2 + 1)1 = 8 + 3 = 11

Dengan attention sederhana pada implementasi tertentu, terdapat parameter tambahan berupa bobot attention untuk setiap timestep dan bias attention. Pada contoh slide, tambahan parameternya adalah 20 bobot attention dan 2 bias.

#Link to this headingForward Propagation dengan Attention

RNN tetap menghitung hidden state seperti biasa.

h(j)=fh(Wxhx(j)+Whhh(j−1)+bxh)h^{(j)} = f_h(W_{xh}x^{(j)} + W_{hh}h^{(j-1)} + b_{xh})

Perbedaannya muncul pada output. Tanpa attention, model many-to-one biasanya memakai hidden state terakhir.

y=fy(Whyh(T)+bhy)y = f_y(W_{hy}h^{(T)} + b_{hy})

Dengan attention, model memakai context vector.

y=fy(Whyc+bhy)y = f_y(W_{hy}c + b_{hy})

Karena cc adalah kombinasi dari semua hidden state, output dapat memanfaatkan informasi yang muncul jauh sebelum timestep terakhir.

Slide many to one attention forward propagation dengan Wxh Whh Why dan context vector
Slide many to one attention forward propagation dengan Wxh Whh Why dan context vector

#Link to this headingMany-to-Many dengan Attention

Pada encoder-decoder many-to-many, attention biasanya dihitung ulang pada setiap timestep decoder. Artinya, decoder dapat melihat bagian input yang berbeda ketika menghasilkan token output yang berbeda.

Jika encoder menghasilkan NN hidden state dan decoder menghasilkan TT token, bobot attention dapat ditulis sebagai αtj\alpha_{tj}, yaitu bobot attention dari decoder pada waktu tt terhadap encoder pada posisi jj.

ct=∑j=1Nαtjhjc_t = \sum_{j=1}^{N} \alpha_{tj} h_j

Subskrip tt pada ctc_t menunjukkan bahwa konteks berubah untuk setiap langkah decoder. Ini menjadi perbedaan penting dengan encoder-decoder lama yang hanya memiliki satu konteks tetap.

Slide attention many to one versus many to many, jumlah parameter attention dan context vector per timestep decoder
Slide attention many to one versus many to many, jumlah parameter attention dan context vector per timestep decoder

#Link to this headingBahdanau dan Luong Attention

Attention pada RNN umumnya memiliki tiga tahap. Pertama, model menghitung skor kecocokan antara decoder dan setiap hidden state encoder. Kedua, skor tersebut dinormalisasi menjadi bobot attention. Ketiga, bobot tersebut dipakai untuk membentuk context vector.

#Link to this headingNotasi

Catatan ini memakai konvensi yang sesuai dengan gambar kuliah sebagai berikut.

SimbolArtiDipakai untuk
hjh_jHidden state encoder pada posisi input ke-jjSumber informasi yang akan diperhatikan decoder
sts_tHidden state decoder pada timestep ke-ttMemori internal decoder
s~t\tilde{s}_tAttentional decoder state pada LuongGabungan antara ctc_t dan sts_t sebelum output
yt−1y_{t-1}Token output sebelumnya, dipakai sebagai input decoderBiasanya y0=⟨s⟩y_0 = \langle s \rangle sebagai start token
yty_tOutput yang diprediksi pada timestep ke-ttToken atau kelas yang keluar dari decoder
etje_{tj}Skor attention antara decoder timestep tt dan encoder posisi jjNilai mentah sebelum softmax
αtj\alpha_{tj}Bobot attention terhadap encoder posisi jj pada timestep ttMenentukan seberapa besar hjh_j dipakai
ctc_tContext vector pada timestep decoder ttRingkasan encoder yang berubah untuk setiap output
ffFungsi aktivasi atau update state decoderMenghasilkan state decoder berikutnya
ggFungsi output, misalnya softmax atau linearMenghasilkan prediksi yty_t
p(yt∣y<t,x)p(y_t \mid y_{<t}, x)Probabilitas output saat iniDipakai untuk memprediksi token berikutnya

Simbol bobot seperti WaW_a, UaU_a, dan vav_a adalah parameter yang dipelajari model.

ParameterArtiBentuk peran
WaW_aBobot attention untuk sisi decoderMengubah informasi decoder ke ruang skor attention
UaU_aBobot attention untuk sisi encoderMengubah hidden state encoder ke ruang skor attention
vav_aVektor proyeksi attentionMengubah hasil tanh⁡\tanh menjadi satu skor skalar
WyW_yBobot dari token input decoder yt−1y_{t-1}Menghubungkan token input decoder ke state decoder
WhW_hBobot recurrent decoderMenghubungkan hidden state decoder sebelumnya ke state berikutnya
WcW_cBobot contextMenghubungkan context vector ke state atau output decoder
WoW_oBobot outputMengubah state decoder menjadi prediksi output

Perlu dibedakan antara memprediksi output dan melangkah ke timestep berikutnya. Prediksi output berarti menghitung yty_t dari state decoder saat ini. Melangkah ke timestep berikutnya berarti output sebelumnya, misalnya yty_t, menjadi masukan untuk menghitung state berikutnya.

Secara umum, alur satu timestep decoder adalah sebagai berikut.

  1. Pakai informasi decoder saat ini atau sebelumnya untuk menghitung skor attention terhadap setiap hjh_j.
  2. Ubah skor menjadi bobot αtj\alpha_{tj} dengan softmax.
  3. Bentuk context vector ctc_t.
  4. Hitung state decoder dan output.
  5. Gunakan output tersebut sebagai masukan timestep berikutnya.

#Link to this headingBahdanau Attention

Bahdanau attention disebut additive attention karena skor attention dihitung dengan menjumlahkan transformasi decoder dan encoder sebelum dilewatkan ke tanh⁡\tanh.

Skor dihitung dengan fungsi align.

etj=align(st−1,hj)e_{tj} = \text{align}(s_{t-1}, h_j)

Salah satu bentuk yang umum dipakai adalah sebagai berikut.

etj=vaTtanh⁡(Wast−1+Uahj)e_{tj} = v_a^T \tanh(W_a s_{t-1} + U_a h_j)

Bagian yang membuatnya disebut additive adalah penjumlahan berikut.

Wast−1+UahjW_a s_{t-1} + U_a h_j

Bobot attention diperoleh dengan softmax terhadap semua skor encoder.

αtj=exp⁡(etj)∑k=1Nexp⁡(etk)\alpha_{tj} = \frac{\exp(e_{tj})} {\sum_{k=1}^{N}\exp(e_{tk})}

Kemudian konteks dibentuk dari semua hidden state encoder.

ct=∑j=1Nαtjhjc_t = \sum_{j=1}^{N} \alpha_{tj}h_j

Setelah context vector tersedia, state decoder diperbarui dengan memasukkan ctc_t secara langsung ke dalam pembaruan state. Ini menjadi ciri khas Bahdanau karena skor attention dihitung menggunakan state sebelumnya st−1s_{t-1}, sehingga konteks dapat ikut membentuk state terbaru.

st=f(Wyyt−1+Whst−1+Wcct+bs)s_t = f(W_y y_{t-1} + W_h s_{t-1} + W_c c_t + b_s)

Output diprediksi dari state decoder yang sudah mengandung konteks.

yt=g(Wost+bo)y_t = g(W_o s_t + b_o)

Jadi pada Bahdanau, urutannya adalah: hitung skor memakai st−1s_{t-1}, bentuk ctc_t, update sts_t, lalu prediksi yty_t. Setelah itu, yty_t dipakai sebagai input decoder pada timestep berikutnya.

#Link to this headingLuong Attention

Luong attention memakai ide yang mirip, tetapi state decoder sts_t biasanya dihitung terlebih dahulu tanpa context vector. Setelah itu, attention dihitung menggunakan sts_t.

st=f(Wyyt−1+Whst−1+bs)s_t = f(W_y y_{t-1} + W_h s_{t-1} + b_s)

Fungsi skornya sering ditulis sebagai score(st,hj)\text{score}(s_t, h_j).

αtj=exp⁡(score(st,hj))∑k=1Nexp⁡(score(st,hk))\alpha_{tj} = \frac{\exp(\text{score}(s_t,h_j))} {\sum_{k=1}^{N}\exp(\text{score}(s_t,h_k))}

Beberapa varian skor Luong yang umum adalah dot, general, dan concat.

score(st,hj)={stThjdotstTWahjgeneralvaTtanh⁡(Wa concat(st,hj))concat\text{score}(s_t,h_j) = \begin{cases} s_t^T h_j & \text{dot} \\ s_t^T W_a h_j & \text{general} \\ v_a^T \tanh(W_a\,\text{concat}(s_t,h_j)) & \text{concat} \end{cases}

Varian dot dan general disebut multiplicative karena skor dihitung lewat perkalian vektor atau matriks.

ct=∑j=1Nαtjhjc_t = \sum_{j=1}^{N} \alpha_{tj}h_j

Setelah ctc_t terbentuk, Luong menggabungkan context vector dan state decoder menjadi attentional state s~t\tilde{s}_t.

s~t=tanh⁡(Wcconcat⁡(ct,st))\tilde{s}_t = \tanh(W_c \operatorname{concat}(c_t, s_t))

Output diprediksi dari attentional state.

yt=g(Wos~t+bo)y_t = g(W_o \tilde{s}_t + b_o)

Jadi pada Luong, urutannya adalah: update sts_t dahulu, hitung skor memakai sts_t, bentuk ctc_t, gabungkan ctc_t dan sts_t, lalu prediksi yty_t. Setelah itu, yty_t dipakai sebagai input decoder pada timestep berikutnya.

#Link to this headingPerbandingan Alur

Tabel berikut merangkum alur satu timestep secara end-to-end. Perhatikan bahwa yt−1y_{t-1} adalah token input decoder, sedangkan sts_t adalah hidden state decoder.

UrutanBahdanauLuong
1. Input decoderMenerima yt−1y_{t-1} dan state lama st−1s_{t-1}Menerima yt−1y_{t-1} dan state lama st−1s_{t-1}
2. State untuk skorSkor attention memakai state lama st−1s_{t-1}State baru dihitung dulu dengan st=f(Wyyt−1+Whst−1+bs)s_t = f(W_y y_{t-1} + W_h s_{t-1} + b_s)
3. Bentuk skoretj=vaTtanh⁡(Wast−1+Uahj)e_{tj} = v_a^T \tanh(W_a s_{t-1} + U_a h_j)etj=stThje_{tj} = s_t^T h_j atau etj=stTWahje_{tj} = s_t^T W_a h_j
4. Jenis skorAdditive karena ada Wast−1+UahjW_a s_{t-1} + U_a h_j sebelum tanh⁡\tanhMultiplicative untuk dot dan general karena memakai perkalian sts_t dengan hjh_j
5. Bobot attentionαtj=softmax(etj)\alpha_{tj} = \text{softmax}(e_{tj})αtj=softmax(etj)\alpha_{tj} = \text{softmax}(e_{tj})
6. Context vectorct=∑jαtjhjc_t = \sum_j \alpha_{tj}h_jct=∑jαtjhjc_t = \sum_j \alpha_{tj}h_j
7. State yang dipakai outputContext masuk saat update state, yaitu st=f(Wyyt−1+Whst−1+Wcct+bs)s_t = f(W_y y_{t-1} + W_h s_{t-1} + W_c c_t + b_s)Context digabung setelah sts_t terbentuk, yaitu s~t=tanh⁡(Wcconcat⁡(ct,st))\tilde{s}_t = \tanh(W_c \operatorname{concat}(c_t, s_t))
8. Prediksi outputyt=g(Wost+bo)y_t = g(W_o s_t + b_o)yt=g(Wos~t+bo)y_t = g(W_o \tilde{s}_t + b_o)
9. Lanjut timestepyty_t dipakai sebagai input yt−1y_{t-1} pada timestep berikutnyayty_t dipakai sebagai input yt−1y_{t-1} pada timestep berikutnya

Jika αtj\alpha_{tj} sudah tersedia, bagian skor sudah tidak perlu dihitung. Namun perbedaan cara memasukkan context ke decoder dan penentuan yty_t masih berlaku: Bahdanau menghitung yty_t dari sts_t, sedangkan Luong menghitung yty_t dari s~t\tilde{s}_t.

#Link to this headingOutput dan Timestep

Prediksi output dan perpindahan timestep sering tertukar, padahal keduanya berbeda.

ProsesMaknaContoh
Prediksi outputMenghasilkan token pada timestep sekarangyt=g(Wost+bo)y_t = g(W_o s_t + b_o)
Menaikkan timestepMemakai output sekarang sebagai input langkah berikutnyayty_t dipakai sebagai yt−1y_{t-1} pada timestep berikutnya
AttentionMemilih bagian encoder yang relevan untuk output saat inict=∑jαtjhjc_t = \sum_j \alpha_{tj}h_j

Contoh pada bentuk seperti soal Bagian 3 adalah sebagai berikut.

TimestepInput decoderContext attentionState decoderOutput
AwalBelum ada output sebelumnyaContext tetap dari encoder dapat menjadi s0=cs_0 = cs0=cs_0 = cBelum ada yy
t=1t=1y0=⟨s⟩y_0 = \langle s \rangleJika ada attention, c1att=α1,1e1+α1,2e2+α1,3e3c_1^{att} = \alpha_{1,1}e_1 + \alpha_{1,2}e_2 + \alpha_{1,3}e_3s1=f(Wyy0+Whs0+Wcc1att+bs)s_1 = f(W_y y_0 + W_h s_0 + W_c c_1^{att} + b_s)y1=g(Wos1+bo)y_1 = g(W_o s_1 + b_o)
t=2t=2y1y_1Jika ada attention, c2att=α2,1e1+α2,2e2+α2,3e3c_2^{att} = \alpha_{2,1}e_1 + \alpha_{2,2}e_2 + \alpha_{2,3}e_3s2=f(Wyy1+Whs1+Wcc2att+bs)s_2 = f(W_y y_1 + W_h s_1 + W_c c_2^{att} + b_s)y2=g(Wos2+bo)y_2 = g(W_o s_2 + b_o)

Dengan kata lain, attention membantu decoder menentukan informasi input mana yang penting untuk memprediksi yty_t. Setelah yty_t diprediksi, decoder bergerak ke timestep berikutnya dan memakai output sebelumnya sebagai salah satu masukan.

Slide rumus Bahdanau attention, Luong attention, dan transisi menuju self attention Transformer
Slide rumus Bahdanau attention, Luong attention, dan transisi menuju self attention Transformer

#Link to this headingDari Attention ke Transformer

Attention awalnya dipakai sebagai komponen tambahan pada RNN encoder-decoder. Transformer mengambil langkah yang lebih radikal. Arsitektur ini menghapus unit rekuren dan konvolusi, lalu menggantinya dengan self-attention dan jaringan feed-forward sederhana.

Perubahan ini penting karena pemrosesan paralel membuat pelatihan pada korpus yang sangat besar menjadi jauh lebih efisien. Selain itu, self-attention memberi jalur langsung antarposisi token sehingga dependensi panjang lebih mudah dimodelkan dibandingkan RNN biasa.

Slide vanilla RNN encoder decoder with attention versus Transformer, pemrosesan sekuensial dibanding paralel
Slide vanilla RNN encoder decoder with attention versus Transformer, pemrosesan sekuensial dibanding paralel

#Link to this headingDot Product Self-Attention

Pada attention RNN, query biasanya berasal dari decoder dan key serta value berasal dari encoder. Pada self-attention, query, key, dan value berasal dari input yang sama, tetapi melalui transformasi linear yang berbeda.

Untuk setiap token input xmx_m, model membentuk tiga vektor berikut.

qm=WQxmq_m = W_Q x_mkm=WKxmk_m = W_K x_mvm=WVxmv_m = W_V x_m

Query digunakan untuk bertanya, key digunakan untuk mengukur kecocokan, dan value adalah informasi yang akan digabungkan.

Skor attention antara token nn dan token mm dihitung dengan dot product.

score(xm,xn)=kmTqn\text{score}(x_m,x_n) = k_m^Tq_n

Skor tersebut dinormalisasi dengan softmax.

a(xm,xn)=exp⁡(kmTqn)∑m′=1Nexp⁡(km′Tqn)a(x_m,x_n) = \frac{\exp(k_m^Tq_n)} {\sum_{m'=1}^{N}\exp(k_{m'}^Tq_n)}

Output self-attention untuk posisi nn adalah kombinasi berbobot dari semua value.

san[x1,…,xN]=∑m=1Na(xm,xn)vm\text{sa}_n[x_1,\ldots,x_N] = \sum_{m=1}^{N} a(x_m,x_n)v_m
Slide Transformer dot product self attention, value query dan key dibentuk dari input yang sama
Slide Transformer dot product self attention, value query dan key dibentuk dari input yang sama

#Link to this headingScaled Dot Product Attention

Transformer memakai scaled dot product attention. Jika query, key, dan value dikemas dalam matriks QQ, KK, dan VV, attention dihitung dengan rumus berikut.

Attention(Q,K,V)=softmax(QKTdk)V\text{Attention}(Q,K,V) = \text{softmax}\left(\frac{QK^T}{\sqrt{d_k}}\right)V

Faktor dk\sqrt{d_k} digunakan agar nilai dot product tidak tumbuh terlalu besar ketika dimensi key besar. Tanpa skala ini, softmax dapat menjadi terlalu tajam sehingga gradien lebih sulit mengalir.

Pada beberapa konvensi slide, formula ditulis dengan susunan matriks KTQK^TQ karena token disimpan sebagai kolom. Intinya tetap sama. Query dibandingkan dengan key, hasilnya dinormalisasi, lalu bobot tersebut dipakai untuk menggabungkan value.

Slide scaled dot product self attention dalam bentuk matriks Q K V
Slide scaled dot product self attention dalam bentuk matriks Q K V

#Link to this headingMulti-Head Attention

Satu attention head hanya belajar satu cara memandang hubungan antartoken. Transformer memakai beberapa head agar model dapat mempelajari beberapa pola relasi sekaligus.

Setiap head menghitung attention dengan proyeksi linear yang berbeda.

headi=Attention(QWiQ,KWiK,VWiV)\text{head}_i = \text{Attention}(QW_i^Q, KW_i^K, VW_i^V)

Hasil semua head digabungkan, lalu diproyeksikan kembali.

MultiHead(Q,K,V)=Concat(head1,…,headh)WO\text{MultiHead}(Q,K,V) = \text{Concat}(\text{head}_1,\ldots,\text{head}_h)W^O

Dalam kalimat "the animal did not cross the street because it was tired", satu head dapat fokus pada "the animal" ketika memaknai "it", sedangkan head lain dapat fokus pada "tired". Representasi akhir token memadukan informasi dari beberapa pola perhatian.

Slide interpretasi multi head attention, beberapa head fokus pada kata yang berbeda
Slide interpretasi multi head attention, beberapa head fokus pada kata yang berbeda

#Link to this headingPositional Encoding

Karena Transformer tidak memproses token secara rekuren, urutan token tidak otomatis masuk ke model. Posisi token harus ditambahkan melalui positional encoding.

Representasi input Transformer biasanya berupa penjumlahan antara token embedding dan positional encoding.

zi=ei+piz_i = e_i + p_i

Di sini eie_i adalah embedding token ke-ii, sedangkan pip_i adalah representasi posisi token ke-ii. Dengan cara ini, self-attention tetap mengetahui urutan token meskipun semua token diproses paralel.

Slide positional encoding pada Transformer
Slide positional encoding pada Transformer

#Link to this headingArsitektur Transformer

Arsitektur Transformer asli terdiri atas encoder stack dan decoder stack. Encoder menerima token input, sedangkan decoder menghasilkan token output secara autoregresif.

Slide arsitektur Transformer dari Vaswani, encoder stack decoder stack scaled dot product attention multi head attention dan feed forward
Slide arsitektur Transformer dari Vaswani, encoder stack decoder stack scaled dot product attention multi head attention dan feed forward

Encoder layer memiliki dua sublapisan utama.

  1. Multi-head self-attention.
  2. Feed-forward network posisi demi posisi.

Decoder layer memiliki tiga sublapisan utama.

  1. Masked multi-head self-attention agar decoder tidak melihat token masa depan.
  2. Multi-head attention terhadap output encoder.
  3. Feed-forward network posisi demi posisi.

Setiap sublapisan dilengkapi koneksi residual dan normalisasi, yang sering ditulis sebagai Add and Norm. Koneksi residual membantu gradien mengalir, sedangkan normalisasi membuat pelatihan lebih stabil.

#Link to this headingOutput Transformer

Output decoder stack masih berupa vektor representasi. Agar dapat menjadi kata, vektor ini diproyeksikan oleh linear layer ke ukuran kosakata. Hasil proyeksi disebut logits.

Jika kosakata berisi 10.000 kata, maka vektor logits memiliki 10.000 komponen. Softmax mengubah logits menjadi distribusi probabilitas. Kata dengan probabilitas tertinggi dipilih sebagai output pada timestep tersebut.

p(yt∣y<t,x)=softmax(Wozt+bo)p(y_t \mid y_{<t}, x) = \text{softmax}(W_o z_t + b_o)
Slide linear layer dan softmax mengubah output decoder Transformer menjadi probabilitas token kosakata
Slide linear layer dan softmax mengubah output decoder Transformer menjadi probabilitas token kosakata

#Link to this headingRingkasan

Attention menyelesaikan masalah bottleneck pada encoder-decoder dengan membuat konteks yang bergantung pada kebutuhan output. Bahdanau dan Luong attention masih berada dalam keluarga RNN encoder-decoder. Transformer mengembangkan ide attention lebih jauh dengan self-attention penuh, pemrosesan paralel, multi-head attention, dan positional encoding.

Perubahan besar dari RNN ke Transformer adalah sumber memorinya. RNN membawa informasi melalui state berurutan, sedangkan Transformer menghubungkan semua token melalui attention. Karena itu, Transformer menjadi dasar banyak model modern untuk bahasa, visi, dan data multimodal.