<?xml version="1.0" encoding="utf-8" standalone="yes"?><rss version="2.0" xmlns:atom="http://www.w3.org/2005/Atom"><channel><title>Attention on kenji.blog</title><link>http://kenji.blog/id/tags/attention/</link><description>Recent content in Attention on kenji.blog</description><generator>Hugo -- gohugo.io</generator><language>id</language><copyright>kenjinote</copyright><lastBuildDate>Fri, 11 Sep 2026 22:00:00 +0900</lastBuildDate><atom:link href="http://kenji.blog/id/tags/attention/index.xml" rel="self" type="application/rss+xml"/><item><title>[Untuk Pemula] Menguraikan Struktur Matematis Model Transformer</title><link>http://kenji.blog/id/p/transformer-mathematical-structure/</link><pubDate>Fri, 11 Sep 2026 22:00:00 +0900</pubDate><guid>http://kenji.blog/id/p/transformer-mathematical-structure/</guid><description>&lt;img src="http://kenji.blog/p/transformer-mathematical-structure/img/eyecatch.jpg" alt="Featured image of post [Untuk Pemula] Menguraikan Struktur Matematis Model Transformer" />&lt;h1 id="pendahuluan-mengapa-belajar-matematika-transformer">Pendahuluan: Mengapa Belajar Matematika Transformer?
&lt;/h1>&lt;p>Arsitektur yang dapat dikatakan telah menulis ulang sejarah Pemrosesan Bahasa Alami (NLP) modern, dan bahkan seluruh AI, adalah &amp;ldquo;Transformer&amp;rdquo;. Diusulkan pertama kali dalam makalah &amp;ldquo;Attention Is All You Need&amp;rdquo; yang diterbitkan oleh para peneliti Google pada tahun 2017, model ini sekarang berfungsi sebagai jantung dari Model Bahasa Besar (LLM) yang menyapu dunia, seperti seri GPT OpenAI (teknologi dasar ChatGPT), BERT dari Google, dan Claude dari Anthropic.&lt;/p>
&lt;p>Namun, meskipun penjelasan kualitatif seperti &amp;ldquo;memahami konteks menggunakan Attention (mekanisme perhatian)&amp;rdquo; untuk cara kerja Transformer sering ditemukan, saat ini ternyata masih sedikit penjelasan mendalam tentang &lt;strong>struktur matematis&lt;/strong> di baliknya yang ditujukan untuk pemula. Untuk benar-benar memahami bagaimana AI memproses &amp;ldquo;kata-kata&amp;rdquo; sebagai &amp;ldquo;rumus matematika&amp;rdquo; dan menghasilkan teks yang sangat alami, sangat penting untuk menguraikan mekanisme matematisnya.&lt;/p>
&lt;p>Dalam artikel ini, bagi mereka yang memiliki pengetahuan dasar matematika dan pemrograman (mereka yang memahami konsep matriks dan turunan tingkat sekolah menengah), kami akan menguraikan secara menyeluruh dan dengan cara yang mudah dipahami tentang struktur matematis seperti &amp;ldquo;Mekanisme Self-Attention&amp;rdquo;, &amp;ldquo;Model Query, Key, Value (Q/K/V)&amp;rdquo;, &amp;ldquo;Normalisasi dengan Fungsi Softmax&amp;rdquo;, dan &amp;ldquo;Positional Encoding&amp;rdquo; yang merupakan inti dari Transformer.&lt;/p>
&lt;p>Anda mungkin akan kewalahan oleh deretan rumus matematika, tetapi setiap perhitungan memiliki &amp;ldquo;makna&amp;rdquo; yang jelas. Pada saat Anda selesai membaca artikel ini, Anda seharusnya dapat memahami bahwa Transformer bukanlah sekadar kotak hitam ajaib, melainkan kristalisasi dari matematika dan statistik yang dirancang secara presisi.&lt;/p>
&lt;hr>
&lt;h1 id="1-keterbatasan-metode-konvensional-dan-inovasi-transformer">1. Keterbatasan Metode Konvensional dan Inovasi Transformer
&lt;/h1>&lt;p>Sebelum munculnya Transformer, arus utama pemrosesan bahasa alami adalah Recurrent Neural Network (RNN) dan turunannya, LSTM (Long Short-Term Memory). RNN dirancang untuk memproses data deret waktu, dan membaca kalimat kata demi kata dari awal secara berurutan.&lt;/p>
&lt;p>Namun, RNN memiliki dua kelemahan fatal.&lt;/p>
&lt;ol>
&lt;li>&lt;strong>Kesulitan dalam mempelajari ketergantungan jangka panjang (Long-term dependencies)&lt;/strong>: Seiring bertambahnya panjang kalimat, informasi dari kata-kata yang dimasukkan di awal akan memudar pada saat mencapai akhir (masalah gradien menghilang atau vanishing gradient problem).&lt;/li>
&lt;li>&lt;strong>Komputasi paralel tidak mungkin dilakukan&lt;/strong>: Karena kata-kata harus diproses secara berurutan, komputasi paralel skala besar menggunakan GPU menjadi sulit, dan pelatihan memakan waktu yang sangat lama.&lt;/li>
&lt;/ol>
&lt;p>Transformer sepenuhnya membuang struktur RNN dan menyebabkan pergeseran paradigma dengan menangkap konteks menggunakan &amp;ldquo;Attention&amp;rdquo; saja. Hal ini memungkinkan tidak adanya kehilangan informasi terlepas dari seberapa panjang deretannya, sekaligus menyejajarkan (paralel) perhitungan untuk memaksimalkan kinerja GPU.&lt;/p>
&lt;hr>
&lt;h1 id="2-arsitektur-keseluruhan-transformer">2. Arsitektur Keseluruhan Transformer
&lt;/h1>&lt;p>Pertama-tama, mari kita lihat arsitektur Transformer secara keseluruhan. Transformer secara garis besar terdiri dari dua blok: &amp;ldquo;Encoder&amp;rdquo; dan &amp;ldquo;Decoder&amp;rdquo;. Mengambil tugas terjemahan sebagai contoh, Encoder mengubah bahasa input (misalnya: Bahasa Inggris) menjadi representasi vektor matematis, dan Decoder menghasilkan bahasa output (misalnya: Bahasa Indonesia) berdasarkan representasi vektor tersebut.&lt;/p>
&lt;p>Gambar berikut menyederhanakan struktur internal dari blok Encoder.&lt;/p>
&lt;div class="mermaid">graph TD
A["Token Input"] --> B["Input Embedding"]
B --> C["Positional Encoding"]
C --> D["Multi-Head Self-Attention"]
D --> E["Add &amp; Layer Normalization"]
E --> F["Feed Forward Network"]
F --> G["Add &amp; Layer Normalization"]
G --> H["Output ke Layer Berikutnya"]
C -.->|"Residual Connection"| E
E -.->|"Residual Connection"| G&lt;/div>
&lt;p>Mulai dari sini, mari kita ikuti operasi matematis yang dilakukan di setiap komponen langkah demi langkah.&lt;/p>
&lt;hr>
&lt;h1 id="3-vektorisasi-kata-dan-positional-encoding">3. Vektorisasi Kata dan Positional Encoding
&lt;/h1>&lt;p>Komputer tidak dapat memahami teks secara langsung. Teks yang dimasukkan pertama-tama dibagi menjadi unit yang disebut &amp;ldquo;Token&amp;rdquo;, dan masing-masing diubah menjadi vektor dengan panjang tetap. Inilah yang disebut &lt;strong>Input Embedding&lt;/strong>.&lt;/p>
&lt;h2 id="31-matematika-dari-input-embedding">3.1 Matematika dari Input Embedding
&lt;/h2>&lt;p>Misalkan ukuran kosa kata (vocabulary) adalah $V$, dan dimensi vektor embedding adalah $d_{model}$ (dalam makalah aslinya $d_{model} = 512$). Setiap kata $w_i$ diubah menjadi vektor $x_i \in \mathbb{R}^{d_{model}}$ menggunakan matriks embedding $W_E \in \mathbb{R}^{V \times d_{model}}$.&lt;/p>
$$ x_i = W_E \cdot \text{one\_hot}(w_i) $$
&lt;p>Dengan ini, seluruh kalimat direpresentasikan sebagai matriks $X \in \mathbb{R}^{N \times d_{model}}$ (di mana $N$ adalah panjang kalimat).&lt;/p>
&lt;h2 id="32-kebutuhan-dan-rumus-dari-positional-encoding">3.2 Kebutuhan dan Rumus dari Positional Encoding
&lt;/h2>&lt;p>Transformer tidak memproses kata-kata secara berurutan seperti RNN, melainkan memproses semua kata secara serentak secara paralel. Ini merupakan keuntungan besar dari segi kecepatan komputasi, tetapi pada saat yang sama menimbulkan masalah &lt;strong>hilangnya informasi penting tentang &amp;ldquo;urutan kata&amp;rdquo;&lt;/strong>. Misalnya, &amp;ldquo;Anjing menggigit orang&amp;rdquo; dan &amp;ldquo;Orang menggigit anjing&amp;rdquo; memiliki kumpulan kata input yang sama tetapi maknanya sama sekali berbeda.&lt;/p>
&lt;p>Untuk memberikan informasi urutan kata ini kepada model, &lt;strong>Positional Encoding&lt;/strong> dirancang.
Positional Encoding $PE$ untuk dimensi ke-$i$ dari kata yang berada di posisi $pos$ dihitung menggunakan fungsi trigonometri berikut.&lt;/p>
$$ PE_{(pos, 2i)} = \sin\left(\frac{pos}{10000^{2i/d_{model}}}\right) $$
$$ PE_{(pos, 2i+1)} = \cos\left(\frac{pos}{10000^{2i/d_{model}}}\right) $$
&lt;p>Di sini, $pos$ adalah posisi kata ($0, 1, 2, \dots, N-1$), dan $i$ adalah indeks dimensi vektor ($0, 1, \dots, d_{model}/2 - 1$).&lt;/p>
&lt;h3 id="mengapa-menggunakan-sinus-dan-kosinus">Mengapa menggunakan sinus dan kosinus?
&lt;/h3>&lt;p>Sekilas ini terlihat sebagai rumus yang sangat kompleks dan aneh, tetapi ada alasan matematis yang mendalam untuk hal ini. Dengan menggunakan fungsi trigonometri, model dapat dengan mudah mempelajari &lt;strong>bukan hanya &amp;ldquo;posisi absolut&amp;rdquo;, melainkan juga selisih &amp;ldquo;posisi relatif&amp;rdquo;&lt;/strong>.&lt;/p>
&lt;p>Ingat kembali teorema penjumlahan fungsi trigonometri yang dipelajari dalam matematika sekolah menengah.
&lt;/p>
$$ \sin(\alpha + \beta) = \sin\alpha \cos\beta + \cos\alpha \sin\beta $$
$$ \cos(\alpha + \beta) = \cos\alpha \cos\beta - \sin\alpha \sin\beta $$
&lt;p>Positional Encoding dari posisi $pos + k$ yang digeser sejauh offset $k$ dari suatu posisi $pos$ dapat diekspresikan sebagai kombinasi linier dari Positional Encoding posisi $pos$. Artinya, dapat ditulis sebagai berikut dengan menggunakan matriks $M_k$.&lt;/p>
$$ PE_{pos+k} = M_k \cdot PE_{pos} $$
&lt;p>Berkat ini, mekanisme Attention dapat dengan mudah mengenali jarak relatif &amp;ldquo;seberapa jauh&amp;rdquo; antar kata melalui perhitungan perkalian titik (dot product). Selain itu, dengan menggabungkan beberapa gelombang sinus dan kosinus dengan panjang gelombang yang berbeda, ada keuntungan bahwa vektor posisi unik dapat dihasilkan terlepas dari seberapa panjang kalimatnya.&lt;/p>
&lt;p>Matriks input akhir $X_{input}$ akan menjadi hasil penjumlahan dari vektor embedding kata dan Positional Encoding ini.&lt;/p>
$$ X_{input} = X + PE $$
&lt;hr>
&lt;h1 id="4-matematika-mendalam-dari-self-attention-mekanisme-perhatian-diri">4. Matematika Mendalam dari Self-Attention (Mekanisme Perhatian Diri)
&lt;/h1>&lt;p>Akhirnya, kita melangkah ke komponen terpenting dari Transformer, yaitu &lt;strong>Self-Attention&lt;/strong>. Tujuan dari Self-Attention adalah &amp;ldquo;untuk menghitung tingkat relevansi antara semua kata dalam kalimat, dan memperbarui vektor dari masing-masing kata menjadi representasi yang lebih kaya yang mempertimbangkan konteks&amp;rdquo;.&lt;/p>
&lt;p>Di sini, analogi &amp;ldquo;sistem pencarian&amp;rdquo; digunakan.&lt;/p>
&lt;ul>
&lt;li>&lt;strong>Query (Q)&lt;/strong>: Kueri (Kata pencarian). &amp;ldquo;Informasi apa yang sedang saya cari sekarang?&amp;rdquo;&lt;/li>
&lt;li>&lt;strong>Key (K)&lt;/strong>: Kunci (Label/Judul). &amp;ldquo;Informasi apa yang saya miliki?&amp;rdquo;&lt;/li>
&lt;li>&lt;strong>Value (V)&lt;/strong>: Nilai (Entitas). &amp;ldquo;Informasi apa yang sebenarnya saya berikan?&amp;rdquo;&lt;/li>
&lt;/ul>
&lt;h2 id="41-pembuatan-matriks-q-k-v">4.1 Pembuatan Matriks $Q, K, V$
&lt;/h2>&lt;p>Untuk matriks input $X \in \mathbb{R}^{N \times d_{model}}$ (untuk menyederhanakan, kita abaikan ukuran batch di sini), dengan mengalikannya dengan matriks bobot yang dapat dipelajari $W^Q, W^K, W^V \in \mathbb{R}^{d_{model} \times d_k}$, kita menghitung Query $Q$, Key $K$, dan Value $V$. (Biasanya $d_k = d_v = d_{model} / h$)&lt;/p>
$$ Q = X W^Q $$
$$ K = X W^K $$
$$ V = X W^V $$
&lt;p>Di sini, $Q, K, V$ semuanya menjadi matriks berukuran $\mathbb{R}^{N \times d_k}$.&lt;/p>
&lt;h2 id="42-perhitungan-skor-attention-perkalian-titikdot-product">4.2 Perhitungan Skor Attention (Perkalian Titik/Dot Product)
&lt;/h2>&lt;p>Untuk mengukur seberapa relevan Query dari setiap kata dengan Key dari semua kata lainnya, kita menghitung &lt;strong>perkalian titik (dot product)&lt;/strong> dari vektor. Jika ditulis dalam operasi matriks, akan menjadi seperti berikut.&lt;/p>
$$ \text{Scores} = Q K^T $$
&lt;p>Setiap elemen $s_{ij}$ dari matriks $\text{Scores} \in \mathbb{R}^{N \times N}$ yang diperoleh dari perhitungan ini merepresentasikan perkalian titik antara Query dari kata ke-$i$ dan Key dari kata ke-$j$, yang berarti &amp;ldquo;tingkat kekuatan relevansi&amp;rdquo;.&lt;/p>
&lt;h2 id="43-penskalaan-scaling">4.3 Penskalaan (Scaling)
&lt;/h2>&lt;p>Ada satu masalah dengan perhitungan skor menggunakan perkalian titik. Seiring membesarnya dimensi vektor $d_k$, nilai perkalian titik bisa menjadi sangat besar atau sangat kecil.&lt;/p>
&lt;p>Mari kita buktikan ini secara matematis.
Misalkan setiap elemen kueri $q \sim \mathcal{N}(0, 1)$ dan setiap elemen kunci $k \sim \mathcal{N}(0, 1)$ mengikuti distribusi normal standar yang independen.
Kita cari rata-rata dan varians dari perkalian titik $q \cdot k = \sum_{i=1}^{d_k} q_i k_i$.
Rata-rata: Karena $\mathbb{E}[q_i k_i] = \mathbb{E}[q_i] \mathbb{E}[k_i] = 0 \times 0 = 0$, rata-rata dari penjumlahan juga $0$.
Varians: Varians dari $q_i k_i$ adalah, berdasarkan independensi, $\text{Var}(q_i k_i) = \mathbb{E}[(q_i k_i)^2] - (\mathbb{E}[q_i k_i])^2 = 1 \times 1 - 0 = 1$.
Oleh karena itu, varians dari keseluruhan perkalian titik sama dengan jumlah dimensi $d_k$.&lt;/p>
$$ \text{Var}(q \cdot k) = d_k $$
&lt;p>Ketika varians menjadi besar, pada fungsi Softmax yang diterapkan setelah ini, gradien selain nilai maksimum akan menjadi sangat kecil sehingga terjadi &amp;ldquo;vanishing gradient&amp;rdquo; (gradien menghilang), dan pembelajaran tidak akan mengalami kemajuan.
Untuk mencegah hal ini, dengan membagi (menskalakan) skor dengan $\sqrt{d_k}$, kita menjaga agar varians selalu dipertahankan pada $1$.&lt;/p>
$$ \text{Scaled Scores} = \frac{Q K^T}{\sqrt{d_k}} $$
&lt;h2 id="44-probabilisasi-dengan-fungsi-softmax">4.4 Probabilisasi dengan Fungsi Softmax
&lt;/h2>&lt;p>Untuk mengubah skor yang diperoleh menjadi distribusi probabilitas (bobot) yang jumlah totalnya menjadi $1$, &lt;strong>fungsi Softmax&lt;/strong> diterapkan pada setiap baris.&lt;/p>
$$ a_{ij} = \text{softmax}(s_i)_j = \frac{\exp(s_{ij} / \sqrt{d_k})}{\sum_{m=1}^N \exp(s_{im} / \sqrt{d_k})} $$
&lt;p>Matriks $A \in \mathbb{R}^{N \times N}$ ini disebut matriks Attention Weight (Bobot Perhatian). Jika kita melihat setiap baris $i$ dari matriks ini, matriks tersebut mengekspresikan dengan nilai dari 0 hingga 1 tentang &amp;ldquo;seberapa banyak perhatian (Attention) yang harus diberikan pada kata lain $j$ dalam memahami kata $i$&amp;rdquo;.&lt;/p>
&lt;h2 id="45-penjumlahan-berbobot-dari-value">4.5 Penjumlahan Berbobot dari Value
&lt;/h2>&lt;p>Terakhir, dengan menggunakan matriks Attention Weight $A$ yang diperoleh, kita menghitung penjumlahan berbobot dari matriks Value $V$.&lt;/p>
$$ \text{Output} = A V = \text{softmax}\left(\frac{Q K^T}{\sqrt{d_k}}\right) V $$
&lt;p>Matriks $Z \in \mathbb{R}^{N \times d_v}$ yang dihasilkan oleh operasi ini menjadi sekumpulan &amp;ldquo;representasi vektor kata yang diperbarui dengan mempertimbangkan konteks&amp;rdquo;.
Inilah keseluruhan gambaran dari &lt;strong>Scaled Dot-Product Attention&lt;/strong> yang didefinisikan dalam makalah.&lt;/p>
&lt;hr>
&lt;h1 id="5-multi-head-attention-perhatian-multi-kepala">5. Multi-Head Attention (Perhatian Multi-Kepala)
&lt;/h1>&lt;p>Dengan hanya satu kali perhitungan Attention (Single-Head), ada kemungkinan kita hanya bisa menangkap konteks dari satu sudut pandang saja (misalnya &amp;ldquo;hubungan tata bahasa&amp;rdquo;). Oleh karena itu, untuk menangkap berbagai hubungan semantik dan sintaksis yang dimiliki bahasa (&amp;ldquo;subjek dan predikat&amp;rdquo;, &amp;ldquo;kata ganti dan rujukan panggilannya&amp;rdquo;, dll.) secara bersamaan, &lt;strong>Multi-Head Attention&lt;/strong> diperkenalkan.&lt;/p>
&lt;p>Pembentukan $Q, K, V$ dan perhitungan Attention seperti sebelumnya dilakukan sebanyak $h$ kali secara paralel (jumlah kepala. Dalam makalah aslinya $h=8$).&lt;/p>
$$ \text{head}_i = \text{Attention}(X W_i^Q, X W_i^K, X W_i^V) $$
&lt;p>Di sini, $W_i^Q, W_i^K, W_i^V \in \mathbb{R}^{d_{model} \times d_k}$ adalah matriks bobot yang dapat dipelajari khusus untuk kepala (head) ke-$i$.&lt;/p>
&lt;p>Hasil $\text{head}_i \in \mathbb{R}^{N \times d_v}$ yang dikeluarkan dari setiap kepala digabungkan (Concatenate) secara horizontal.&lt;/p>
$$ \text{Concat}(\text{head}_1, \dots, \text{head}_h) \in \mathbb{R}^{N \times (h \cdot d_v)} $$
&lt;p>Biasanya diatur agar $h \cdot d_v = d_{model}$, sehingga dimensi setelah digabungkan kembali menjadi $d_{model}$ yang sama seperti input. Terakhir, matriks ini dikalikan dengan matriks bobot $W^O \in \mathbb{R}^{d_{model} \times d_{model}}$ untuk mendapatkan output akhir.&lt;/p>
$$ \text{MultiHead}(Q, K, V) = \text{Concat}(\text{head}_1, \dots, \text{head}_h) W^O $$
&lt;div class="mermaid">graph TD
X["Input X"] --> Q1["Q1"]
X --> K1["K1"]
X --> V1["V1"]
Q1 &amp; K1 &amp; V1 --> H1["Head 1"]
X --> Q2["Q2"]
X --> K2["K2"]
X --> V2["V2"]
Q2 &amp; K2 &amp; V2 --> H2["Head 2"]
X --> QN["..."]
X --> KN["..."]
X --> VN["..."]
QN &amp; KN &amp; VN --> HN["Head h"]
H1 &amp; H2 &amp; HN --> C["Concatenate"]
C --> WO["Kalikan dengan WO"]
WO --> OUT["Output Multi-Head"]&lt;/div>
&lt;hr>
&lt;h1 id="6-feed-forward-neural-network-ffn">6. Feed-Forward Neural Network (FFN)
&lt;/h1>&lt;p>Output dari Multi-Head Attention selanjutnya dimasukkan ke dalam &lt;strong>Position-wise Feed-Forward Network (FFN)&lt;/strong>.
Ini adalah jaringan saraf terhubung penuh (fully connected neural network) 2 lapis yang diterapkan &amp;ldquo;secara independen untuk setiap posisi (kata)&amp;rdquo; dalam deretan.&lt;/p>
&lt;p>Jika diekspresikan dengan rumus matematika, bentuknya adalah sebagai berikut.&lt;/p>
$$ \text{FFN}(x) = \max(0, x W_1 + b_1) W_2 + b_2 $$
&lt;p>Di sini, $\max(0, z)$ mewakili fungsi aktivasi ReLU (Rectified Linear Unit) (dalam model-model terbaru, GELU atau SwiGLU sering digunakan).&lt;/p>
&lt;p>Peran dari jaringan ini sangatlah penting. Mekanisme Attention mempelajari &amp;ldquo;hubungan antarkata (hubungan spasial/sekuensial)&amp;rdquo;, sedangkan FFN bertanggung jawab atas &amp;ldquo;transformasi fitur non-linier dari setiap vektor kata itu sendiri&amp;rdquo;.
Biasanya, dimensi untuk sementara diperluas sangat besar oleh bobot $W_1$ di lapisan pertama (misalnya, diperbesar 4 kali dari $d_{model}=512$ menjadi $d_{ff}=2048$), melakukan perhitungan kompleks pada ruang fitur, dan kemudian dikembalikan ke dimensi aslinya di lapisan kedua dengan bobot $W_2$. Dengan &amp;ldquo;perluasan dan penyusutan dimensi&amp;rdquo; ini, daya ekspresi model meningkat secara dramatis.&lt;/p>
&lt;hr>
&lt;h1 id="7-residual-connection-dan-layer-normalization">7. Residual Connection dan Layer Normalization
&lt;/h1>&lt;p>Dalam deep learning, saat kita membuat lapisan jaringan semakin dalam, seringkali muncul masalah di mana gradien menghilang (vanishing) atau meledak (exploding) selama pembelajaran, sehingga model tidak dapat belajar dengan baik. Untuk mencegah hal ini, &lt;strong>Residual Connection (Koneksi Residu)&lt;/strong> dan &lt;strong>Layer Normalization (Normalisasi Lapisan)&lt;/strong> ditempatkan di sekitar setiap sub-lapisan (Attention dan FFN) dari Transformer.&lt;/p>
&lt;p>Jika ditulis dalam rumus, output dari sub-lapisan diproses sebagai berikut.&lt;/p>
$$ \text{Output} = \text{LayerNorm}(x + \text{Sublayer}(x)) $$
&lt;h2 id="71-residual-connection-x--textsublayerx">7.1 Residual Connection ($x + \text{Sublayer}(x)$)
&lt;/h2>&lt;p>Input $x$ ditambahkan langsung ke output sub-lapisan. Dengan ini, selama propagasi balik (backpropagation), gradien ditransmisikan langsung ke lapisan dangkal melalui jalan pintas, sehingga pembelajaran menjadi stabil meskipun lapisannya dalam.&lt;/p>
&lt;h2 id="72-matematika-layer-normalization">7.2 Matematika Layer Normalization
&lt;/h2>&lt;p>Layer Normalization adalah teknologi untuk menghitung rata-rata dan varians di sepanjang arah dimensi fitur dan menormalisasi data. Untuk input dengan ukuran batch $B$, panjang urutan $N$, dan jumlah dimensi $d_{model}$, normalisasi dilakukan untuk salah satu vektor kata $x \in \mathbb{R}^{d_{model}}$.&lt;/p>
&lt;p>Rata-rata $\mu$ dan varians $\sigma^2$ dihitung.
&lt;/p>
$$ \mu = \frac{1}{d_{model}} \sum_{i=1}^{d_{model}} x_i $$
$$ \sigma^2 = \frac{1}{d_{model}} \sum_{i=1}^{d_{model}} (x_i - \mu)^2 $$
&lt;p>Kemudian, output yang dinormalisasi $\hat{x}$ diperoleh.
&lt;/p>
$$ \text{LN}(x) = \frac{x - \mu}{\sqrt{\sigma^2 + \epsilon}} \odot \gamma + \beta $$
&lt;p>
($\epsilon$ adalah konstanta yang sangat kecil untuk mencegah pembagian dengan nol. $\gamma, \beta$ adalah parameter skala dan pergeseran yang dapat dipelajari)&lt;/p>
&lt;p>Alasan mengapa normalisasi pada arah lapisan (Layer Normalization) diadopsi, alih-alih normalisasi arah batch (Batch Normalization), adalah karena ketika memproses data deret (sekuensial) yang panjangnya tidak konstan seperti kalimat, statistik antar batch cenderung menjadi tidak stabil. Dengan Layer Normalization, Transformer dapat belajar dengan stabil tanpa bergantung pada ukuran batch.&lt;/p>
&lt;hr>
&lt;h1 id="8-struktur-khusus-decoder-masked-attention-dan-cross-attention">8. Struktur Khusus Decoder: Masked Attention dan Cross-Attention
&lt;/h1>&lt;p>Struktur yang telah dijelaskan sejauh ini adalah milik Encoder. Pada blok Decoder yang menghasilkan teks, strukturnya sedikit berbeda.&lt;/p>
&lt;h2 id="81-masked-multi-head-attention">8.1 Masked Multi-Head Attention
&lt;/h2>&lt;p>Peran dari Decoder adalah &amp;ldquo;untuk memprediksi kata berikutnya dari kata-kata di masa lalu&amp;rdquo;. Oleh karena itu, jika model melihat &amp;ldquo;kata di masa depan&amp;rdquo; selama pelatihan, itu sama saja dengan menyontek. Operasi matematis untuk mencegah hal ini adalah &lt;strong>Masking (Penyamaran/Pemaskeran)&lt;/strong>.&lt;/p>
&lt;p>Ke dalam matriks skor $Q K^T$, sebuah matriks mask $M$ yang mengatur nilai yang sangat kecil mendekati $-\infty$ pada bagian segitiga atas (mewakili informasi di masa depan) ditambahkan.&lt;/p>
$$ M_{ij} = \begin{cases} 0 &amp; (i \le j) \\ -\infty &amp; (i > j) \end{cases} $$
$$ \text{Masked Attention}(Q, K, V) = \text{softmax}\left(\frac{Q K^T + M}{\sqrt{d_k}}\right) V $$
&lt;p>Saat menghitung fungsi Softmax, karena $\exp(-\infty) = 0$, nilai Attention Weight ke kata di masa depan akan benar-benar menjadi $0$. Hal ini memungkinkan pembangkitan auto-regresif dengan mempertahankan hubungan sebab akibat (Causality).&lt;/p>
&lt;h2 id="82-encoder-decoder-cross-attention">8.2 Encoder-Decoder Cross-Attention
&lt;/h2>&lt;p>Sub-lapisan kedua dari Decoder adalah &lt;strong>Cross-Attention&lt;/strong> yang merujuk pada output dari Encoder.
Di sini, $Q$ dihasilkan dari lapisan Decoder sebelumnya, tetapi $K$ dan $V$ dihasilkan dari output lapisan akhir Encoder.&lt;/p>
$$ Q_{decoder} = X_{dec} W^Q $$
$$ K_{encoder} = X_{enc} W^K $$
$$ V_{encoder} = X_{enc} W^V $$
&lt;p>Berkat perhitungan ini, dalam tugas seperti terjemahan, model dapat belajar tentang &amp;ldquo;bagian mana dari kalimat bahasa asing asli yang sangat terkait dengan kata yang sedang diterjemahkan&amp;rdquo;.&lt;/p>
&lt;hr>
&lt;h1 id="9-kompleksitas-komputasi-dan-matematika-optimasi-modern">9. Kompleksitas Komputasi dan Matematika Optimasi Modern
&lt;/h1>&lt;p>Transformer adalah model yang luar biasa, tetapi ada juga &amp;ldquo;kelemahan&amp;rdquo; karena struktur matematisnya.
Perhatikan kompleksitas perhitungan dari Self-Attention. Dalam penghitungan matriks skor $Q K^T$, sebuah matriks berukuran $(N \times d_k)$ dan matriks $(d_k \times N)$ dikalikan, sehingga kompleksitas perhitungannya adalah &lt;strong>$O(N^2 \cdot d_{model})$&lt;/strong>.&lt;/p>
&lt;p>Artinya, &lt;strong>kompleksitas komputasi dan penggunaan memori meningkat secara kuadratik seiring dengan panjang urutan $N$&lt;/strong>.
Ini tidak masalah untuk kalimat pendek, tetapi jika Anda mencoba memasukkan konteks yang sangat panjang seperti keseluruhan buku ke dalam LLM, maka nilai $N$ bisa mencapai puluhan ribu hingga ratusan ribu, dan memori GPU akan segera habis dengan perhitungan Attention konvensional.&lt;/p>
&lt;p>Untuk memecahkan kutukan $O(N^2)$ ini, berbagai optimalisasi telah diusulkan dalam beberapa tahun terakhir dari pendekatan perangkat keras maupun matematis.
Contoh perwakilannya adalah &lt;strong>FlashAttention&lt;/strong>. FlashAttention adalah algoritma yang melakukan perhitungan Attention dengan membaginya menjadi bentuk ubin (Tiling) sedemikian rupa untuk meminimalkan transfer data (akses memori) antara hierarki memori GPU (SRAM dan HBM). Meskipun secara matematis mengeluarkan hasil yang persis sama dengan Attention standar (Exact Attention), optimalisasi tingkat perangkat keras ini menghasilkan peningkatan kecepatan dan pengurangan memori yang drastis, sehingga memungkinkan terwujudnya model konteks panjang seperti GPT-4.&lt;/p>
&lt;p>Selain itu, penelitian seperti Sparse Attention dan Linear Attention yang memperkirakan (mengaproksimasi) kompleksitas komputasi menjadi $O(N \log N)$ atau $O(N)$ juga sedang gencar dilakukan.&lt;/p>
&lt;hr>
&lt;h1 id="10-gambaran-implementasi-pseudocode-bergaya-pytorch">10. Gambaran Implementasi (Pseudocode bergaya PyTorch)
&lt;/h1>&lt;p>Jika struktur matematis sejauh ini dituangkan ke dalam kode pemrograman yang sebenarnya (Python / PyTorch), Anda akan menyadari bahwa strukturnya dapat ditulis dengan sangat sederhana. Berikut adalah kode semu (pseudocode) dari bagian inti Self-Attention.&lt;/p>
&lt;div class="highlight">&lt;div class="chroma">
&lt;table class="lntable">&lt;tr>&lt;td class="lntd">
&lt;pre tabindex="0" class="chroma">&lt;code>&lt;span class="lnt"> 1
&lt;/span>&lt;span class="lnt"> 2
&lt;/span>&lt;span class="lnt"> 3
&lt;/span>&lt;span class="lnt"> 4
&lt;/span>&lt;span class="lnt"> 5
&lt;/span>&lt;span class="lnt"> 6
&lt;/span>&lt;span class="lnt"> 7
&lt;/span>&lt;span class="lnt"> 8
&lt;/span>&lt;span class="lnt"> 9
&lt;/span>&lt;span class="lnt">10
&lt;/span>&lt;span class="lnt">11
&lt;/span>&lt;span class="lnt">12
&lt;/span>&lt;span class="lnt">13
&lt;/span>&lt;span class="lnt">14
&lt;/span>&lt;span class="lnt">15
&lt;/span>&lt;span class="lnt">16
&lt;/span>&lt;span class="lnt">17
&lt;/span>&lt;span class="lnt">18
&lt;/span>&lt;span class="lnt">19
&lt;/span>&lt;span class="lnt">20
&lt;/span>&lt;span class="lnt">21
&lt;/span>&lt;span class="lnt">22
&lt;/span>&lt;span class="lnt">23
&lt;/span>&lt;span class="lnt">24
&lt;/span>&lt;span class="lnt">25
&lt;/span>&lt;span class="lnt">26
&lt;/span>&lt;/code>&lt;/pre>&lt;/td>
&lt;td class="lntd">
&lt;pre tabindex="0" class="chroma">&lt;code class="language-python" data-lang="python">&lt;span class="line">&lt;span class="cl">&lt;span class="kn">import&lt;/span> &lt;span class="nn">torch&lt;/span>
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">&lt;span class="kn">import&lt;/span> &lt;span class="nn">torch.nn.functional&lt;/span> &lt;span class="k">as&lt;/span> &lt;span class="nn">F&lt;/span>
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">&lt;span class="kn">import&lt;/span> &lt;span class="nn">math&lt;/span>
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">&lt;span class="k">def&lt;/span> &lt;span class="nf">scaled_dot_product_attention&lt;/span>&lt;span class="p">(&lt;/span>&lt;span class="n">q&lt;/span>&lt;span class="p">,&lt;/span> &lt;span class="n">k&lt;/span>&lt;span class="p">,&lt;/span> &lt;span class="n">v&lt;/span>&lt;span class="p">,&lt;/span> &lt;span class="n">mask&lt;/span>&lt;span class="o">=&lt;/span>&lt;span class="kc">None&lt;/span>&lt;span class="p">):&lt;/span>
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl"> &lt;span class="c1"># bentuk q, k, v: [batch_size, num_heads, seq_length, d_k]&lt;/span>
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl"> &lt;span class="n">d_k&lt;/span> &lt;span class="o">=&lt;/span> &lt;span class="n">q&lt;/span>&lt;span class="o">.&lt;/span>&lt;span class="n">size&lt;/span>&lt;span class="p">(&lt;/span>&lt;span class="o">-&lt;/span>&lt;span class="mi">1&lt;/span>&lt;span class="p">)&lt;/span>
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl"> &lt;span class="c1"># 1. Perhitungan skor dengan perkalian titik: Q * K^T&lt;/span>
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl"> &lt;span class="c1"># Menghitung perkalian matriks dengan mentranspos dua dimensi terakhir&lt;/span>
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl"> &lt;span class="n">scores&lt;/span> &lt;span class="o">=&lt;/span> &lt;span class="n">torch&lt;/span>&lt;span class="o">.&lt;/span>&lt;span class="n">matmul&lt;/span>&lt;span class="p">(&lt;/span>&lt;span class="n">q&lt;/span>&lt;span class="p">,&lt;/span> &lt;span class="n">k&lt;/span>&lt;span class="o">.&lt;/span>&lt;span class="n">transpose&lt;/span>&lt;span class="p">(&lt;/span>&lt;span class="o">-&lt;/span>&lt;span class="mi">2&lt;/span>&lt;span class="p">,&lt;/span> &lt;span class="o">-&lt;/span>&lt;span class="mi">1&lt;/span>&lt;span class="p">))&lt;/span>
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl"> &lt;span class="c1"># 2. Penskalaan (Scaling)&lt;/span>
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl"> &lt;span class="n">scores&lt;/span> &lt;span class="o">=&lt;/span> &lt;span class="n">scores&lt;/span> &lt;span class="o">/&lt;/span> &lt;span class="n">math&lt;/span>&lt;span class="o">.&lt;/span>&lt;span class="n">sqrt&lt;/span>&lt;span class="p">(&lt;/span>&lt;span class="n">d_k&lt;/span>&lt;span class="p">)&lt;/span>
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl"> &lt;span class="c1"># 3. Masking (Dalam hal Masked Attention)&lt;/span>
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl"> &lt;span class="k">if&lt;/span> &lt;span class="n">mask&lt;/span> &lt;span class="ow">is&lt;/span> &lt;span class="ow">not&lt;/span> &lt;span class="kc">None&lt;/span>&lt;span class="p">:&lt;/span>
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl"> &lt;span class="n">scores&lt;/span> &lt;span class="o">=&lt;/span> &lt;span class="n">scores&lt;/span>&lt;span class="o">.&lt;/span>&lt;span class="n">masked_fill&lt;/span>&lt;span class="p">(&lt;/span>&lt;span class="n">mask&lt;/span> &lt;span class="o">==&lt;/span> &lt;span class="mi">0&lt;/span>&lt;span class="p">,&lt;/span> &lt;span class="o">-&lt;/span>&lt;span class="mf">1e9&lt;/span>&lt;span class="p">)&lt;/span>
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl"> &lt;span class="c1"># 4. Probabilisasi dengan Softmax&lt;/span>
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl"> &lt;span class="n">attention_weights&lt;/span> &lt;span class="o">=&lt;/span> &lt;span class="n">F&lt;/span>&lt;span class="o">.&lt;/span>&lt;span class="n">softmax&lt;/span>&lt;span class="p">(&lt;/span>&lt;span class="n">scores&lt;/span>&lt;span class="p">,&lt;/span> &lt;span class="n">dim&lt;/span>&lt;span class="o">=-&lt;/span>&lt;span class="mi">1&lt;/span>&lt;span class="p">)&lt;/span>
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl"> &lt;span class="c1"># 5. Mengalikan dengan matriks Value&lt;/span>
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl"> &lt;span class="n">output&lt;/span> &lt;span class="o">=&lt;/span> &lt;span class="n">torch&lt;/span>&lt;span class="o">.&lt;/span>&lt;span class="n">matmul&lt;/span>&lt;span class="p">(&lt;/span>&lt;span class="n">attention_weights&lt;/span>&lt;span class="p">,&lt;/span> &lt;span class="n">v&lt;/span>&lt;span class="p">)&lt;/span>
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl"> &lt;span class="k">return&lt;/span> &lt;span class="n">output&lt;/span>&lt;span class="p">,&lt;/span> &lt;span class="n">attention_weights&lt;/span>
&lt;/span>&lt;/span>&lt;/code>&lt;/pre>&lt;/td>&lt;/tr>&lt;/table>
&lt;/div>
&lt;/div>&lt;p>Dapat dilihat bahwa rumus matematika $Q K^T / \sqrt{d_k}$ diimplementasikan secara intuitif sebagai &lt;code>torch.matmul(q, k.transpose(-2, -1)) / math.sqrt(d_k)&lt;/code>. Fakta bahwa teori matematika diwujudkan dalam beberapa baris kode dengan bantuan perpustakaan (library) optimasi tingkat lanjut adalah salah satu aspek yang sangat menarik dari deep learning.&lt;/p>
&lt;hr>
&lt;h1 id="penutup-bentuk-kecerdasan-yang-terlihat-dari-rumus-matematika">Penutup: Bentuk &amp;ldquo;Kecerdasan&amp;rdquo; yang Terlihat dari Rumus Matematika
&lt;/h1>&lt;p>Dalam artikel ini, kita telah menguraikan struktur matematis di kedalaman model Transformer.&lt;/p>
&lt;p>Embedding yang memetakan kata ke dalam ruang vektor multidimensi, Positional Encoding yang mengekspresikan informasi posisi melalui sintesis gelombang trigonometri, dan mekanisme Self-Attention yang merupakan perhitungan perkalian titik matriks yang lahir dari analogi temu balik informasi. Masing-masing komponen ini hanyalah akumulasi dari matematika dasar seperti aljabar linier, kalkulus, dan probabilitas &amp;amp; statistik.&lt;/p>
&lt;p>Namun, ketika operasi matriks sederhana ini ditumpuk menjadi banyak lapisan dan mempelajari pola dari kumpulan data raksasa melalui miliaran bahkan triliunan parameter, di sanalah muncul sebuah &amp;ldquo;bentuk kecerdasan&amp;rdquo; yang seolah-olah mampu memahami &amp;ldquo;kata-kata&amp;rdquo; kita, melakukan inferensi logis, dan terkadang menghasilkan ide-ide kreatif.&lt;/p>
&lt;p>Seperti judul provokatif &amp;ldquo;Attention Is All You Need&amp;rdquo;, keindahan dari arsitektur yang membuang pemrosesan recurrent yang rumit maupun pemrosesan konvolusional dan berfokus murni pada perhitungan &amp;ldquo;Attention&amp;rdquo; (tingkat relevansi) ini, bisa dikatakan justru terletak pada kesederhanaan matematisnya.&lt;/p>
&lt;p>Di masa depan, mungkin akan muncul arsitektur baru yang melampaui Transformer (seperti Mamba yang merupakan State Space Model), tetapi kerangka kerja matematis &amp;ldquo;pemahaman konteks oleh Attention&amp;rdquo; yang dibangun oleh Transformer pasti akan terukir selamanya dalam sejarah AI.&lt;/p>
&lt;p>Jika Anda memiliki kesempatan untuk menggunakan LLM seperti ChatGPT atau Claude di masa mendatang, cobalah bayangkan bahwa di latar belakangnya terdapat triliunan kali perkalian matriks $Q K^T$ yang dihitung setiap detiknya, dan fungsi Softmax yang memunculkan probabilitas-probabilitasnya. Pemahaman (resolusi) terhadap teknologi ini akan meningkat, dan dunia AI akan terasa jauh lebih menarik bagi Anda.&lt;/p>
&lt;h3 id="referensi">Referensi
&lt;/h3>&lt;ul>
&lt;li>Vaswani, A., et al. (2017). &amp;ldquo;Attention Is All You Need.&amp;rdquo; &lt;em>Advances in Neural Information Processing Systems&lt;/em>.&lt;/li>
&lt;li>Alammar, J. (2018). &amp;ldquo;The Illustrated Transformer.&amp;rdquo;&lt;/li>
&lt;/ul>
&lt;hr>
&lt;p>&lt;em>Artikel ini ditulis sebagai panduan bagi mereka yang mempelajari pemrosesan bahasa alami dan dasar matematis dari AI. Jika Anda memiliki pertanyaan atau ingin berdiskusi, silakan beri tahu di kolom komentar!&lt;/em>&lt;/p></description></item></channel></rss>