Traffine I/O

Bahasa Indonesia

2023-01-20

Transformer

Apa itu Transformer

Transformer adalah model pembelajaran mendalam yang pertama kali muncul dalam makalah tentang NLP yang berjudul Attention Is All You Need yang diterbitkan oleh Google pada tahun 2017. Transformer adalah model Encoder-Decoder yang hanya menggunakan Attention, tidak seperti model Encoder-Decoder yang menggunakan RNN yang telah menjadi arus utama di dunia NLP hingga saat itu.

Transformer adalah model dasar yang penting yang digunakan dalam model NLP mutakhir saat ini. Baru-baru ini, Transformer juga mulai digunakan di bidang pengenalan gambar.

Fitur-fitur Transformer

Transformer memiliki fitur-fitur berikut ini:

  • Dibangun hanya dengan lapisan Attention tanpa RNN
    • Ini mencapai komputasi paralel, yang tidak mungkin dilakukan apabila RNN digunakan bersama-sama, dan mempercepat komputasi.
  • Adopsi lapisan Positional Encoding (Pengkodean Posisi)
    • Data kata masukan dapat mempertahankan informasi kontekstual dengan menyematkan informasi posisi kata dalam keseluruhan kalimat.
  • Penerapan model Query-Key-Value di lapisan Attention
    • Ini meningkatkan akurasi dengan merefleksikan korespondensi kata per kata secara lebih akurat

Sejarah perkembangan Transformer

Secara historis, Transformer lahir dari alur pengembangan model berikut ini.

  1. RNN
  2. Seq2seq
  3. Seq2seq dengan Attention
  4. Transformer

RNN

Model bahasa membutuhkan pemrosesan kontekstual. Sebagai contoh, misalkan kita memiliki kalimat berikut ini.

Bob gets an apple. He eats it.

Di sini, mustahil untuk mengetahui siapa "he" dan apa "it" tanpa memahami konteksnya.

Di sinilah model rekursif yang dapat menyimpan informasi ketergantungan untuk seluruh kalimat, seperti RNN, muncul. Idenya adalah ketika data input diubah menjadi vektor dengan panjang tetap, informasi dari kata-kata sebelumnya juga diperhitungkan; dalam RNN, fungsi yang sama digunakan secara rekursif untuk menghasilkan output secara berurutan, dan output sebelumnya disertakan sebagai bagian dari data yang digunakan untuk input berikutnya.

RNN sekarang dapat merefleksikan konteks, tetapi RNN dihitung secara berurutan dan tidak dapat memparalelkan komputasi, yang menyisakan masalah bahwa sulit untuk mempercepat komputasi.

Seq2seq

Model Seq2seq (RNN dengan Encoder-Decoder) dirancang untuk memanfaatkan data deret waktu yang berbeda, seperti penerjemahan mesin.

Dalam Seq2seq, data input dikonversi menjadi vektor panjang tetap tunggal dalam Encoder-Decoder dan digunakan dengan cara yang sama seperti dalam RNN. Meskipun Seq2seq telah mencapai hasil yang baik dalam hal mengkonversi data deret waktu yang berbeda, beberapa masalah berikut menjadi jelas:

  • Kompresi ke dalam vektor dengan panjang tetap mencegah informasi untuk sepenuhnya terkandung dalam kalimat yang panjang.
  • Penggunaan kolokasi antara kata dan kalimat tidak memungkinkan.

Penggunaan korelasi sangat penting terutama ketika berurusan dengan data deret waktu yang berbeda, seperti dalam tugas penerjemahan. Sebagai contoh, terjemahan yang lebih akurat akan lebih mungkin dilakukan jika Anda menggunakan korespondensi antara "air" dan "eau (air dalam bahasa Prancis)" daripada hanya mencari secara samar-samar apa arti "air".

Seq2seq dengan Attention

Seq2seq dengan Attention memecahkan masalah Seq2seq dengan menggunakan vektor dengan panjang tetap yang dibuat dari bagian Encoder pada Seq2seq, tetapi hanya bagian terakhir dari vektor yang digunakan. Dengan menggunakan semua vektor panjang tetap yang dikeluarkan ketika setiap kata dimasukkan, maka hal berikut ini mungkin terjadi

  • Jumlah vektor konteks dengan panjang tetap yang sama dengan jumlah kata dapat diperoleh (jumlah informasi yang sesuai dengan panjang kalimat dapat diperoleh).
  • Attention memungkinkan perolehan korespondensi antar kata.

Transformer

Meskipun akurasi ditingkatkan dengan menggunakan Attention, ia memiliki masalah karena tidak dapat memparalelkan dan mempercepat komputasi, yang disebabkan oleh penggunaan RNN dalam kombinasi.

Oleh karena itu, Transformer, yang hanya menggunakan lapisan Attention tanpa RNN, lahir, memecahkan masalah RNN dan Seq2seq dengan Attention, seperti kurangnya paralelisasi dan ketidakmampuan untuk membangun model ketergantungan yang akurat. Transformer telah berhasil memecahkan masalah RNN dan Seq2seq dengan Attention.

Transformer mencapai hal-hal berikut dalam tugas penerjemahan bahasa Inggris-Jerman (EN-DE) dan Inggris-Prancis (EN-FR) WMT 2014

  • Menetapkan skor BLEU tertinggi pada saat itu
  • dan menjaga biaya pelatihan tetap rendah dibandingkan model pesaing

BLEU
Attention Is All You Need

Arsitektur Transformer

Berikut ini adalah arsitektur Transformer selama melakukan tugas penerjemahan.

Architecture
Attention Is All You Need

Transformer didasarkan pada model Encoder-Decoder.

Encoder and  Decoder in Transformer

Encoder-Decoder model
The Illustrated Transformer

Sebuah Encoder terdiri dari setumpuk Encoder. Dalam makalah ini, enam Encoder ditumpuk. (Jumlah lain dapat dicoba.) Sebuah Decoder juga terdiri dari tumpukan 6 Decoder.

Encoder-Decoder model stack
The Illustrated Transformer

Encoder dan Decoder terdiri dari Multi-Head Attention dan Feed Forward (lapisan affine).

Encoder and  Decoder inside

Masukan ke Encoder pertama-tama melewati Self-Attention dan kemudian melalui lapisan Feed Forward.

Decoder berisi lapisan Self-Attention dan Feed Forward, tetapi di antaranya terdapat Attention, yang membantu menentukan di mana dalam urutan input untuk memusatkan perhatian. (Attention Encoder-Decoder pada gambar di bawah ini memainkan peran yang sama dengan Attention pada model Seq2seq).

Transformer encoder decoder inside
The Illustrated Transformer

Di sini, setiap kata masukan diubah menjadi vektor penyisipan dengan ukuran 512 sebelum diteruskan ke Encoder atau Decoder. Berikut ini, vektor penyisipan diwakili oleh empat kotak sederhana.

Embedding
The Illustrated Transformer

Proses penyematan kata terjadi sebelum baris bawah Encoder. Secara umum, semua Encoder menerima daftar vektor, masing-masing berukuran 512. Ukuran daftar ini dapat dikonfigurasi sebagai hiperparameter dan pada dasarnya adalah panjang kalimat terpanjang dalam kumpulan data pelatihan.

Setiap vektor penyisipan kata melewati Encoder.

Encoder with tensors

Di sini, salah satu sifat penting dari Transformer adalah bahwa kata-kata di setiap posisi mengalir melalui jalurnya masing-masing di Encoder; di lapisan Self-Attention, ada ketergantungan antara jalur-jalur ini, sedangkan di lapisan Feed Forward tidak ada ketergantungan seperti itu. Oleh karena itu, berbagai jalur dapat dieksekusi secara paralel saat mengalir melalui Feed Forward Layer.

Encoder

Encoder mengambil masukan berupa daftar vektor penyisipan kata, yang diteruskan ke lapisan Self-Attention, lalu ke lapisan Feed Forward, dan kemudian ke Encoder berikutnya untuk keluaran.

Encoder with tensor
The Illustrated Transformer

Self-Attention

Tidak seperti lapisan Attention yang digunakan dalam Seq2seq (yang memperoleh korespondensi antara data yang berbeda), lapisan Self-Attention memperoleh informasi tentang korespondensi antara kata-kata dalam data input.

Korespondensi Attention
Attention Konvensional I am a student <=> Je suis un étudiant "I" memperoleh korespondensi antara "Je" dan "étudiant" khususnya
Self-Attention I am a student <=> I am a student "I" memperoleh korespondensi antara "I" dan "memiliki" khususnya

Sebagai contoh, misalkan Anda ingin menerjemahkan kalimat masukan berikut ini.

The animal didn't cross the street because it was too tired

Memahami apa yang dimaksud dengan "it" dalam kalimat di atas adalah hal yang mudah bagi manusia, tetapi sulit bagi mesin.

Self-Attention memungkinkan model untuk mengasosiasikan "it" dengan "animal" ketika memproses kata "it".

Sebagai contoh, Encoder#5 (Encoder teratas) menyandikan kata "it"; bagian dari Attention berfokus pada "animal" dan memasukkan beberapa representasinya ke dalam penyandian kata "it".

Self-Attention

Dengan demikian, Self-Attention memungkinkan kita untuk mendapatkan kesamaan dalam kalimat yang sama dan memahami dengan benar apa yang dimaksud, terutama dalam hal polisemi dan kata ganti.

Selain itu, Self-Attention membutuhkan lebih sedikit perhitungan. Di bawah ini adalah tabel yang digunakan dalam makalah ini. Di mana n adalah jumlah kata dalam sebuah kalimat dan d adalah jumlah dimensi dalam sebuah kata. Karena n < d, kita dapat melihat bahwa Self-Attention adalah yang paling murah secara komputasi.

Self-Attention calculation
Attention Is All You Need

Self-Attention diimplementasikan dengan urutan sebagai berikut.

  1. Buat vektor Query, vektor Key, dan vektor Value
  2. Hitung nilai dari vektor penyisipan kata masukan
  3. Bagi skor dengan akar kuadrat dari dimensi vektor Key
  4. Hitung skor Softmax
  5. Kalikan setiap vektor Value dengan skor Softmax
  6. Tambahkan vektor-vektor Value yang telah dibobotkan

Langkah pertama dalam mengimplementasikan Self-Attention adalah membuat tiga vektor berikut untuk setiap kata dari setiap vektor input Encoder (penyisipan setiap kata)

  • Vektor Query
  • Vektor Key
  • Vektor Value

Vektor-vektor ini dibuat dengan mengalikan matriks vektor penyisipan X dengan matriks bobot yang telah dipelajari (W^Q, W^K, W^V).

Self-Attention matrix calculation
The Illustrated Transformer

Vektor baru ini memiliki dimensi yang lebih kecil daripada vektor tertanam. Dimensi vektor tertanam dan vektor input/output Encoder adalah 512, sedangkan dimensi vektor yang baru dibuat adalah 64. Ini adalah arsitektur untuk menjaga komputasi Multi-Head Attention tetap konstan.

Pada gambar di bawah ini, dimensi vektor baru adalah 3.

Self-Attention vectors
The Illustrated Transformer

Mengalikan x_1 dengan matriks bobot W^Q menghasilkan vektor Query q_1 yang terkait dengan kata tersebut. Dengan cara ini, kita akan mendapatkan vektor Query, vektor Key, dan vektor Value untuk setiap kata dalam kalimat input.

Langkah kedua dalam mengimplementasikan Self-Attention adalah menghitung skor. Dalam contoh kita, kita ingin menghitung Self-Attention untuk kata pertama "Berpikir". Untuk kata ini, kita perlu memberi skor pada setiap kata dalam kalimat input. Skor menentukan seberapa besar fokus yang diberikan kepada bagian lain dari kalimat input ketika mengkodekan kata pada posisi tertentu.

Skor dihitung dengan mengambil hasil perkalian antara vektor Query dan vektor Key dari kata yang diinginkan. Artinya, jika kita memproses Self-Attention untuk kata pada posisi 1, skor pertama adalah hasil kali dalam dari q_1 dan k_1, dan skor kedua adalah hasil kali dalam dari q_1 dan k_2.

Self-Attention score
The Illustrated Transformer

Pada langkah ketiga dan keempat, skor dibagi dengan 8. Angka 8 berasal dari akar kuadrat dimensi vektor Key yang digunakan dalam kertas. Proses ini memungkinkan gradien yang lebih stabil untuk dipertahankan. Nilai lain dapat ditentukan, tetapi akar kuadrat dari dimensi vektor Key adalah nilai default. Hasilnya kemudian diteruskan ke Softmax, yang mengambil semua nilai positif dan menormalkan skor sehingga berjumlah 1.

Self-Attention softmax
The Illustrated Transformer

Skor Softmax ini menentukan seberapa baik setiap kata diwakili dalam posisi ini. Sering kali, kata pada posisi yang sedang diproses akan memiliki skor Softmax tertinggi, tetapi terkadang berguna untuk fokus pada kata lain yang terkait dengan kata yang sedang diproses.

Pada langkah kelima, setiap vektor Value dikalikan dengan skor Softmax. Proses ini membuat nilai dari kata yang menarik tetap utuh dan menenggelamkan kata-kata yang tidak relevan.

Pada langkah terakhir, vektor-vektor Value yang telah dibobotkan dijumlahkan. Proses ini menghasilkan output dari lapisan Self-Attention untuk posisi yang sedang diproses (untuk kata pertama pada contoh di bawah ini).

Self-Attention output
The Illustrated Transformer

Vektor-vektor yang dihasilkan Z_i ini dikirim ke lapisan Feed Forward.

Multi-Head Attention

Makalah ini lebih lanjut menyempurnakan lapisan Self-Attention dengan menambahkan mekanisme yang disebut Multi-Head Attention, yang merupakan bagian terpenting dari mekanisme Transformer. Mekanisme ini memecahkan dua masalah dari model konvensional: "tidak ada memori jangka panjang" dan "tidak ada paralelisasi.

Multi-Head Attention memperluas kemampuan untuk fokus pada lokasi yang berbeda dalam model. Pada contoh di atas, z_1 mengandung sedikit informasi pengkodean lain, meskipun dalam banyak kasus didominasi oleh kata yang sedang diproses itu sendiri.

Selain itu, Multi-Head Attention mempertahankan matriks bobot Query/Key/Value yang terpisah, sehingga menghasilkan matriks Query/Key/Value yang berbeda. Karena Transformer menggunakan delapan Attention, delapan set Query/Key/Value diperlukan untuk setiap Encoder dan Decoder.

transformer attention heads qkv
The Illustrated Transformer

Melakukan perhitungan Self-Attention sebanyak delapan kali dengan matriks bobot yang berbeda menghasilkan delapan matriks Z yang berbeda.

transformer attention heads z
The Illustrated Transformer

Lapisan Feed Forward mengharapkan satu matriks (vektor dari setiap kata), bukan 8 matriks. Oleh karena itu, gabungkan matriks-matriks tersebut dan kalikan dengan menambahkan matriks bobot W^O.

transformer attention heads weight matrix o
The Illustrated Transformer

Operasi matriks Multi-Head Attention dapat diringkas dalam satu visual sebagai berikut

transformer multi-headed self-attention recap
The Illustrated Transformer

Lihat di mana Self-Attention yang berbeda difokuskan ketika mengkodekan kata "it" dalam contoh kalimat sebelumnya.

Multi-Head Attention

Ketika mengkodekan kata "it," satu Self-Attention (Self-Attention berwarna merah) memberikan perhatian paling besar pada "binatang" dan Self-Attention lainnya (Self-Attention berwarna hijau) memberikan perhatian paling besar pada "tired". Dalam arti tertentu, representasi model dari kata "it" dapat diartikan sebagai penggabungan bagian dari representasi "animal" dan "tired".

Feed Forward

Lapisan Feed Forward adalah jaringan saraf tiruan dua lapis yang terdiri dari lapisan perantara 2048 dimensi dan lapisan keluaran 512 dimensi yang diaktifkan oleh ReLU. Persamaannya adalah sebagai berikut

FFN(x) = \max(0, xW_1 + b_1)W_2 + b_2

Positional Encoding

Karena Transformer tidak menggunakan RNN, maka Transformer tidak lagi dapat memperoleh "konteks" yang sebelumnya menjadi tanggung jawab RNN. Sebagai contoh, "Saya suka kucing" dan "kucing suka saya" menjadi hal yang sama.

Lapisan Positional Encoding adalah mekanisme yang diperkenalkan untuk memecahkan masalah di atas dan menambahkan informasi posisi ke setiap elemen dalam sebuah kalimat. Dengan menambahkan informasi posisi, meskipun setiap data elemen diproses secara paralel, dimungkinkan untuk mempertahankan informasi hubungan dengan elemen sebelumnya dan selanjutnya dalam kalimat yang dimiliki oleh data input.

Dalam praktiknya, Positional Encoding memberikan informasi posisi dengan menyematkan nilai fungsi sin dan cos, yang memiliki frekuensi yang berbeda, ke dalam sebuah vektor.

PE_{(pos,2i)} = \sin(\frac{pos}{10000^{\frac{2i}{d_{model}}}})
PE_{(pos,2i + 1)} = \cos(\frac{pos}{10000^{\frac{2i}{d_{model}}}})

transformer positional encoding vectors
The Illustrated Transformer

Dengan mengasumsikan bahwa jumlah dimensi penyematan adalah 4, nilai aktual vektor Pengkodean Posisi adalah sebagai berikut.

transformer positional encoding example
The Illustrated Transformer

Decoder

Di dalam Decoder, rangkaian input pertama kali diproses. Output dari Encoder paling atas kemudian diubah menjadi satu set vektor Key dan Value. Ini digunakan oleh setiap Decoder untuk Encoder-Decoder Attention dan membantu Decoder untuk fokus pada tempat yang tepat dalam rangkaian input.

transformer decoding 1
The Illustrated Transformer

Setelah penyandian selesai, penguraian kode dimulai. Setiap langkah pengodean menghasilkan satu elemen dari rangkaian output (dalam hal ini, terjemahan bahasa Inggris).

Pada langkah berikutnya, Dekoder Transformer mengulangi proses tersebut hingga mencapai simbol khusus yang menunjukkan bahwa output telah selesai. Output dari setiap langkah diumpankan ke Decoder bawah pada langkah waktu berikutnya, yang kemudian mengirimkan hasil yang diterjemahkan ke Decoder atas. Dengan demikian, ia menambahkan vektor pengkodean posisi ke input Decoder untuk menunjukkan posisi setiap kata, mirip dengan apa yang dilakukan dengan input Encoder.

transformer decoding 2

Masked Multi-Head Attention

Multi-Head Attention pertama dari Decoder adalah Masked Multi-Head Attention, yang menutupi informasi yang seharusnya tidak digunakan (misalnya, mengganti beberapa kata dalam kalimat masukan dengan tanda hubung).

Masukan ke Decoder selama pelatihan adalah urutan kata yang diterjemahkan, tetapi urutan kata yang diterjemahkan harus dibuat secara berurutan dari depan, dan ketika memprediksi kata yang diterjemahkan ke-i, hanya informasi hingga kata ke-i-1 yang harus digunakan.

Tanpa masking, hal ini akan menjadi curang, karena penebak harus melihat jawaban dari kata sebelumnya dan juga kata sebelum kata tersebut.

Linear dan Softmax

Sebuah vektor dikeluarkan oleh Decoder. Vektor ini diubah menjadi kata-kata oleh lapisan Linear dan Softmax.

Lapisan Linear adalah jaringan all-join sederhana yang mengubah keluaran vektor dari Decoder menjadi vektor yang disebut vektor logit. Sebagai contoh, dengan asumsi model telah mempelajari 10.000 kata bahasa Inggris dari dataset pelatihan, vektor logit akan memiliki lebar 10.000 sel.

Lapisan Softmax mengubah vektor logit menjadi probabilitas. Sel dengan probabilitas tertinggi dipilih dan kata yang terkait dihasilkan sebagai output untuk langkah waktu ini.

Transformer Decoder output Softmax

Kerangka kerja Transformator

Model transformer dapat dengan mudah diimplementasikan menggunakan kerangka kerja Transformers yang disediakan oleh Hugging Face.

Transformers` adalah modul Python untuk pustaka pembelajaran mendalam yang populer seperti PyTorch dan TensorFlow.

https://github.com/huggingface/transformers

Kemajuan Transformer

Terdapat dua model AI pemahaman bahasa utama berdasarkan Transformer.

  • BERT
  • Seri GPT

Notebook Colab untuk Transformer

Notebook Google Colab berikut ini memberikan pemahaman visual tentang kata-kata yang menjadi fokus perhatian Transformer.

Notebook yang disertakan dengan Tensorflow
https://colab.research.google.com/github/tensorflow/tensor2tensor/blob/master/tensor2tensor/notebooks/hello_t2t.ipynb

VizBERT
https://colab.research.google.com/drive/1PEHWRHrvxQvYr9NFRC-E_fr3xDq1htCj#scrollTo=fZAXH7hWyt58
https://github.com/jessevig/bertviz

Referensi

https://arxiv.org/abs/1706.03762
https://blog.knoldus.com/what-are-transformers-in-nlp-and-its-advantages
https://blogs.nvidia.com/blog/2022/03/25/what-is-a-transformer-model/
https://towardsdatascience.com/transformers-89034557de14
https://e2eml.school/transformers.html
http://jalammar.github.io/illustrated-transformer/
https://ai.googleblog.com/2017/08/transformer-novel-neural-network.html
http://nlp.seas.harvard.edu/2018/04/03/attention.html
https://github.com/tensorflow/tensor2tensor/blob/23bd23b9830059fbc349381b70d9429b5c40a139/tensor2tensor/layers/common_attention.py
https://www.youtube.com/watch?v=-QH8fRhqFHM&ab_channel=JayAlammar

Ryusei Kakujo

researchgatelinkedingithub

Focusing on data science for mobility

Bench Press 100kg!