Membuat Model GPT Menggunakan Tensorflow — (My Machine Learning Notes) — Part 1
Akhir-akhir ini ChatGPT menjadi sangat populer karena kemampuannya dalam menjawab berbagai pertanyaan, men-generate kode, puisi, dll. Dengan berbagai kemampuan tersebut ada baiknya kita dapat memahami bagaimana ChatGPT bekerja decngan membuat model GPT kita sendiri.
Apa itu ChatGPT ?
Berdasarkan artikel resmi dari OpenAI, ChatGPT merupakan sebuah language model yang di latih kembali (Fine-tuning) dari model GPT3.5 untuk dapat mengikuti perintah yang dimasukan.
Proses fine-tuning pada ChatGPT ini menggunakan metode yang disebut dengan “Reinforcement Learning From Human Feedback (RLHF)” dimana pada tahap awal language model akan di “fine-tuning” secara supervised, Lalu pada tahap berikutnya dibuatlah model yang dapat menilai seberapa “realistis” output dari model utama atau yang biasa disebut “Reward Model”. Dan pada tahap terakhir dilakukan optimasi berdasarkan reward model tersebut menggunakan Algoritma PPO Reinforcement learning.
Untuk lebih jelasnya kalian dapat mengunjungi artikel tentang ChatGPT ini pada website resmi nya.
Attention Is All You Need!
GPT ini pada dasarnya merupakan blok “Decoder only” dari arsitektur Transformer yang pertama kali diperkenalkan pada tahun 2017 pada paper yang berjudul “Attention Is All You Need” — Vishwani et al. 2017. yang pada awalnya model ini dibuat untuk melakukan tugas penerjemahan yang kemudian menjadi awal mula dari ChatGPT dan juga model-model lainnya.
Pada beberapa kasus, transformer ini dapat menggantikan Convolutional Neural Network(CNN) dan Reccurent Neural Network (RNNs) yang mana keduanya merupakan arsitektur Neural network yang sangat populer dalam 5 tahun terakhir.
Pada paper ini juga diperkenalkan beberapa metode seperti “Sinusoidal Positional Encoding”, dan “Scalled Dot Product Attention”.
Arsitektur Transformer
Arsitektur transformer ini secara umum dapat dibagi menjadi 2 blok, yaitu blok Encoder yang tugasnya untuk “memperkaya pemahaman konteks”, dan juga blok Decoder yang tugasnya untuk “menggenerate” output.
Pada block encoder terdapat 2 sub-layer, yang pertama adalah multi head self-attention dan yang kedua position-wise fully connected feed-forward network. dan juga mengimplementasikan layer normalization dan juga residual connection.
Pada block decoder ada sedikit perbedaan yaitu menggunakan “Masked multi head self-attention” dan juga “encoder-decoder multi head self-attention” untuk menghitung attention score dari block encoder.
Pada artikel kali ini, kita akan membuat model GPT berdasarkan block decoder, sekaligus mencoba untuk memahami komponen-komponen yang ada pada Transformer seperti positional encoding, self-attention, dll.
Untuk membuatnya, kita akan menggunakan bahasa pemrograman Python dengan library Tensorflow.
Membuat Model GPT
Input Encoding
Komputer sangat baik dalam memproses data numerik, oleh karena itu kita harus terlebih dahulu merepresentasikan data yang kita miliki ke dalam numerik agar dapat diproses oleh model. kita dapat melakukannya dengan cara meng-“encode” nya.
Ada banyak cara untuk dapat meng-encode kata-kata dalam vocabulary kita agar dapat direpresentasikan ke dalam angka, seperti:
1-hot encoding dimana setiap kata yang kita miliki akan di konversi menjadi 1-hot vector
Atau juga Binary encoding dimana data kita akan di konversi kedalam bentuk binary
Atau juga Label encoding dimana setiap kata dapat kita konversi kedalam integer seperti ini
Pada artikel kali ini kita akan mengkonversi kata yang kita miliki ke dalam bentuk integer (Label encoding), dalam hal ini kita akan menggunakan salah satu fungsi dalam library tensorflow yaitu fungsi TextVectorization (tf.data.TextVectorization).
Word Embedding
Setelah kita berhasil merubah data-data kita yang awalnya string menjadi vector, sekarang kita sudah bisa memasukan data tersebut ke dalam model neural network, namun hasil encoding tadi masih belum bisa merepresentasikan setiap kata tersebut secara semantik, misalnya kita memiliki encoding untuk setiap kata seperti ini :
Ayam = [43]
Raja = [44]
Ratu = [51]
Dalam hal ini hasil encoding untuk kata Raja lebih dekat dengan kata Ayam dibandingkan dengan kata Ratu, yang pada kenyataan nya seharusnya kata Raja secara semantik akan lebih dekat dengan kata Ratu dibandingkan kata Ayam.
Oleh karena itu kita memerlukan Word embedding untuk dapat merepresentasikan setiap kata yang ada pada vocabulary kita kedalam vector yang lebih memiliki arti secara semantik, bahkan dengan word embedding yang bagus kita dapat melakukan operasi matematika pada sebuah vektor kata untuk mendapatkan vektor kata yang lain, misalnya vektor dari kata “Ratu” jika dikurangi dengan vektor dari kata “Perempuan” dan ditambah vektor kata “Pria” maka akan menghasilkan vektor kata “Raja”.
Saat ini sudah ada banyak pre-trained model word embedding yang populer seperti : Word2Vec, GloVe, ELMO, BERT, dll. namun pada artikel ini kita tidak akan terlalu banyak membahas model-model ini.
Berdasarkan source code resmi nya, pada model GPT-2 dan juga BERT tidak menggunakan pre-trained model pada word embedding nya, melainkan menggunakan word embedding yang akan “belajar” pada setiap iterasi nya. dalam hal ini kita bisa menggunakan salah satu fungsi yang ada pada library Tensorflow yaitu fungsi Layer Embedding (tf.keras.layers.Embedding).
Pada fungsi layer embedding ini akan dibuat semacam lookup table sebanyak (dalam kasus ini vocab_size), dengan dimensi vektor pada tiap” item nya sebesar n_embd yang diinisiasi dengan nilai random, kemudian vektor-vektor ini akan di optimasi pada setiap iterasi nya sehingga menjadi vektor-vektor yang memiliki makna.
Pada part selanjutnya kita akan mencoba membahas mengenai positional encoding dan perbedaan positional encoding pada paper Attention Is All You Need! dan positional encoding pada model” seperti GPT dan Bert.
Terimakasih…
Referensi
Full source code : github.com/ariabishma/JIPITI
https://openai.com/blog/chatgpt
Attention Is All You Need — Viswani et al. 2017
Let’s build GPT: from scratch, in code, spelled out — Andrej Karpathy
MIT 6.S191: Recurrent Neural Networks, Transformers, and Attention