Membuat Model GPT Menggunakan Tensorflow — (My Machine Learning Notes) — Part 1

Aria Bishma
5 min readJun 25, 2023

--

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.

ChatGPT Training Diagram (Source : openai.com)

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 (Source : Attention is All You Need)

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

One Hot Encoding

Atau juga Binary encoding dimana data kita akan di konversi kedalam bentuk binary

Binary Encoding

Atau juga Label encoding dimana setiap kata dapat kita konversi kedalam integer seperti ini

Label Encoding

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).

Text vectorization tensorflow

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”.

Vector Word Embedding

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).

Embedding Layer Tensorflow

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.

--

--