Kursus Matematika untuk AI · Pelajaran 21 dari 180

Transpose untuk AI: Mengubah Orientasi Relasi Token dan Fitur

Transpose sebuah matriks, prediksi bentuknya, dan beralih dengan aman antara tampilan token-per-fitur dan fitur-per-token tanpa kehilangan nilai dasarnya.

Bagikan artikel ini

Bayangkan sebuah batch berisi dua token, dan setiap token direpresentasikan oleh tiga fitur. Anda menyimpan data itu sebagai dua baris dan tiga kolom. Namun, operasi berikutnya ditulis untuk membandingkan fitur di antara token. Apakah datanya berubah, atau operasinya memerlukan orientasi yang berbeda?

Jawabannya sering kali adalah transpose: enam nilai yang sama dibaca dengan baris dan kolom yang dipertukarkan. Operasi kecil ini merupakan alat penting untuk men-debug bentuk dalam machine learning, karena makna sumbu adalah bagian dari kontrak tensor.

Setelah menyelesaikan pelajaran ini, Anda akan dapat melakukan transpose pada matriks, memprediksi bentuk keluarannya, menjelaskan apa yang bertukar secara semantik, serta memilih tata letak token-per-fitur atau fitur-per-token tanpa kehilangan jejak nilai yang mendasarinya.

Hasil pembelajaran: Melakukan transpose pada matriks dan menjelaskan pertukaran maknanya.

Pelajaran 18: Matriks mengorganisasi aturan linear memperkenalkan baris dan kolom sebagai posisi bermakna di dalam matriks. Contoh dan visualisasi dalam pelajaran ini merupakan penerapan orisinal dari notasi transpose yang dikembangkan di Bagian 2.2 Mathematics for Machine Learning.

Matriks menyimpan relasi di sepanjang sumbunya

Mulailah dengan matriks XX yang bentuknya 2×32\times3:

X=[2−10431].X = \begin{bmatrix} 2 & -1 & 0\\ 4 & 3 & 1 \end{bmatrix}.

Dimensi pertama memiliki panjang 22, jadi ada dua baris. Dimensi kedua memiliki panjang 33, jadi ada tiga kolom. Bentuk hanya memberi tahu kita dimensinya; label memberi tahu apa arti dimensi tersebut. Dalam pelajaran ini, setiap baris adalah satu token dan setiap kolom adalah satu fitur:

f1f_1f2f_2f3f_3
t1t_12−10
t2t_2431

Entri X2,3=1X_{2,3}=1 berarti “baris 2, kolom 3”: fitur ketiga dari token kedua. Indeks bukan sekadar hiasan. Jika kode berikutnya memperlakukan kolom sebagai token, angkanya mungkin masih terlihat masuk akal, sementara model sebenarnya membaca relasi yang keliru.

Definisi: transpose menukar posisi, bukan nilai

Transpose matriks XX ditulis sebagai XTX^{\mathsf T}. Aturan definisinya adalah

(XT)j,i=Xi,j.\left(X^{\mathsf T}\right)_{j,i}=X_{i,j}.

Dengan kata lain, entri pada baris ii, kolom jj berpindah ke baris jj, kolom ii. Karena itu, jika XX berbentuk m×nm\times n, maka XTX^{\mathsf T} berbentuk n×mn\times m:

X∈Rm×n⟹XT∈Rn×m.X\in\mathbb{R}^{m\times n} \quad\Longrightarrow\quad X^{\mathsf T}\in\mathbb{R}^{n\times m}.

Transpose tidak menegasikan, mengurutkan, menskalakan, atau menghitung ulang entri mana pun. Transpose mengubah orientasi relasi antara sebuah entri dan label baris serta kolomnya.

Enam nilai tetap sama, sementara peran baris dan kolom bertukar. Bagian buka-tutup bawaan di bawah panel memberikan pemetaan sel yang tepat bagi pembaca yang tidak menggunakan warna atau grafik interaktif.

X: token sebagai baris dan fitur sebagai kolom

Dua baris token, dengan satu fitur di setiap kolom.

Matriks asli X, bentuk 2 kali 3
Tokenf₁f₂f₃
t₁2−10
t₂431

Token → rows · Fitur → columns

Xᵀ: fitur sebagai baris dan token sebagai kolom

Tiga baris fitur, dengan satu token di setiap kolom.

Matriks transpose Xᵀ, bentuk 3 kali 2
Fiturt₁t₂
f₁24
f₂−13
f₃01

Fitur → rows · Token → columns

Korespondensi sel:X[2, 3] = 1 menjadi Xᵀ[3, 2] = 1: nilai tersebut mempertahankan identitasnya, sementara koordinatnya bertukar.

Periksa satu sel langkah demi langkah

Nilai pada token kedua dan fitur ketiga berpindah ke baris ketiga dan kolom kedua setelah transpose.

Sebelum
X[2, 3] = 1
Sesudah
Xᵀ[3, 2] = 1

Visualisasi ini menggunakan label, bukan warna, sebagai petunjuk utama. Dua tabel semantiknya juga menjadi alternatif lengkap: pembaca dapat memverifikasi setiap nilai, dimensi, dan makna sumbu tanpa JavaScript. Bagian buka-tutup ini merupakan kontrol bawaan yang dapat dioperasikan dengan keyboard, dan komponen ini tidak memiliki gerakan berkelanjutan yang mengganggu preferensi gerakan yang dikurangi.

Contoh langkah demi langkah: transpose matriks 2×32\times3

Gunakan definisinya satu posisi pada satu waktu. Baris pertama XTX^{\mathsf T} berasal dari kolom pertama XX:

(XT)1,1=X1,1=2,(XT)1,2=X2,1=4.\left(X^{\mathsf T}\right)_{1,1}=X_{1,1}=2, \qquad \left(X^{\mathsf T}\right)_{1,2}=X_{2,1}=4.

Baris kedua berasal dari kolom kedua:

(XT)2,1=X1,2=−1,(XT)2,2=X2,2=3.\left(X^{\mathsf T}\right)_{2,1}=X_{1,2}=-1, \qquad \left(X^{\mathsf T}\right)_{2,2}=X_{2,2}=3.

Baris ketiga berasal dari kolom ketiga:

(XT)3,1=X1,3=0,(XT)3,2=X2,3=1.\left(X^{\mathsf T}\right)_{3,1}=X_{1,3}=0, \qquad \left(X^{\mathsf T}\right)_{3,2}=X_{2,3}=1.

Jika entri-entri tersebut disatukan, hasilnya adalah

XT=[24−1301],XT∈R3×2.X^{\mathsf T}= \begin{bmatrix} 2 & 4\\ -1 & 3\\ 0 & 1 \end{bmatrix}, \qquad X^{\mathsf T}\in\mathbb{R}^{3\times2}.

Dua pemeriksaan dapat menangkap sebagian besar kesalahan hitung manual. Pertama, bentuknya dibalik dari 2×32\times3 menjadi 3×23\times2. Kedua, membaca satu kolom XTX^{\mathsf T} dari atas ke bawah harus mengembalikan satu baris XX: kolom pertamanya adalah [2,4]T[2,4]^{\mathsf T}, yang merupakan baris pertama XX.

Mengapa orientasi penting dalam data AI

Batch berbasis baris memudahkan satu operasi umum. Jika X∈Rb×dX\in\mathbb{R}^{b\times d} menyimpan bb contoh dengan dd fitur, dan matriks bobot fitur-ke-output W∈Rk×dW\in\mathbb{R}^{k\times d} biasanya diterapkan sebagai

Y=XWT,(b×d)(d×k)=(b×k).Y=XW^{\mathsf T}, \qquad (b\times d)(d\times k)=(b\times k).

Di sini transpose tidak mengubah angka yang dipelajari. Transpose membuat sumbu fitur pada bobot sejajar dengan kolom fitur pada matriks batch. Output memiliki bb baris, satu untuk setiap contoh, dan kk kolom, satu untuk setiap fitur output.

Data yang sama juga dapat disimpan dengan fitur di depan sebagai XT∈Rd×bX^{\mathsf T}\in\mathbb{R}^{d\times b}. Tampilan ini berguna ketika pertanyaannya adalah “bagaimana setiap fitur bervariasi di antara contoh?”, tetapi tidak dapat dipertukarkan begitu saja dengan tampilan batch berbasis baris. Selalu lakukan transpose kembali, atau tulis perkaliannya dengan konvensi fitur-di-depan, sebelum meneruskan array ke kode yang mengharapkan contoh berada di baris.

XTXX^{\mathsf T}X dan XXTXX^{\mathsf T} menanyakan hal yang berbeda

Transpose sering muncul di samping perkalian matriks. Bentuknya menunjukkan apa yang dibandingkan:

XTX:(d×b)(b×d)=(d×d),X^{\mathsf T}X: \quad (d\times b)(b\times d)=(d\times d),

jadi setiap entri membandingkan dua fitur di antara bb contoh. Sebaliknya,

XXT:(b×d)(d×b)=(b×b),XX^{\mathsf T}: \quad (b\times d)(d\times b)=(b\times b),

jadi setiap entri membandingkan dua contoh di antara dd fitur mereka. Tidak ada yang “lebih ditranspose” daripada yang lain; keduanya menjawab pertanyaan relasi yang berbeda.

Untuk matriks dalam pelajaran ini,

XTX=[1021124−211−217]danXXT=[6−1−125].X^{\mathsf T}X= \begin{bmatrix} 10 & 2 & 11\\ 2 & 4 & -2\\ 11 & -2 & 17 \end{bmatrix} \quad\text{dan}\quad XX^{\mathsf T}= \begin{bmatrix} 6 & -1\\ -1 & 25 \end{bmatrix}.

Yang pertama berbentuk 3×33\times3 karena ada tiga fitur. Yang kedua berbentuk 2×22\times2 karena ada dua token. Angkanya saling terkait, tetapi makna indeksnya berbeda.

Menerapkan pertukaran di NumPy

Untuk contoh pengajaran kecil, loop eksplisit mencerminkan definisinya. Loop ini mengalokasikan bentuk yang dibalik lalu menyalin matrix[row, column] ke result[column, row]:

import numpy as np

X = np.array([[2, -1, 0],
              [4,  3, 1]])

def transpose_by_loops(matrix):
    rows, columns = matrix.shape
    result = np.empty((columns, rows), dtype=matrix.dtype)
    for row in range(rows):
        for column in range(columns):
            result[column, row] = matrix[row, column]
    return result

X_T_by_loops = transpose_by_loops(X)
X_T = X.T

np.testing.assert_array_equal(X_T_by_loops, X_T)
np.testing.assert_array_equal(X_T.T, X)

feature_relationships = X.T @ X
token_relationships = X @ X.T
print(X_T)
print(feature_relationships.shape, token_relationships.shape)

Loop ini berguna untuk memahami konsep, bukan untuk kecepatan produksi. ndarray.T milik NumPy adalah penulisan ringkas untuk transpose pada array dua dimensi, sedangkan np.transpose menggeneralisasi operasi tersebut ke array dengan lebih banyak sumbu. Dokumentasi resmi NumPy mencatat batas penting: melakukan transpose pada array satu dimensi tidak mengubah bentuknya. Vektor berbentuk (3,) tidak memiliki sumbu baris dan kolom yang terpisah untuk dipertukarkan; gunakan vector[:, np.newaxis] untuk kolom eksplisit berbentuk (3, 1), atau vector[np.newaxis, :] untuk baris berbentuk (1, 3).

Ketika operasi berikutnya adalah perkalian matriks, bedakan operatornya: @ berarti perkalian matriks, sedangkan * berarti perkalian elemen demi elemen. Misalnya, X.T @ X mengontraksikan sumbu token dan mengembalikan matriks (3, 3); X.T * X.T hanya bekerja ketika bentuknya cocok dan menghasilkan perkalian elemen demi elemen. Referensi transpose NumPy, referensi .T, dan referensi perkalian matriks menjadi sumber implementasi untuk perbedaan ini.

Kasus batas: transpose bukan invers

Memang menggoda untuk menyebut XTX^{\mathsf T} sebagai operasi yang “membatalkan” XX. Namun, secara umum itu keliru. Transpose hanya menukar sumbu. Invers, jika ada, adalah matriks berbeda X−1X^{-1} yang memenuhi

X−1X=IdanXX−1=I.X^{-1}X=I \quad\text{dan}\quad XX^{-1}=I.

Invers memerlukan matriks persegi dan tidak singular. Matriks 2×32\times3 seperti XX dalam pelajaran ini tidak dapat memiliki invers dua sisi biasa karena bentuknya bahkan tidak cocok dengan matriks identitas persegi. Bahkan untuk matriks persegi, XTX^{\mathsf T} hanya menjadi invers dalam kasus khusus, seperti ketika XX adalah matriks ortogonal.

Ada kasus batas kedua dalam kode. Ekspresi X.T tidak ambigu untuk matriks dua dimensi, tetapi vector.T tidak melakukan apa-apa pada array NumPy satu dimensi. Jika model mengharapkan satu kolom fitur, buat dimensi itu secara eksplisit dan periksa array.shape sebelum perkalian matriks. Kesalahan bentuk sering menjadi bukti berguna bahwa suatu konvensi sumbu masih dibiarkan implisit.

Urutan debugging yang dapat diandalkan adalah:

  1. Nyatakan makna setiap sumbu.
  2. Prediksi bentuk baru sebelum melakukan transpose.
  3. Verifikasi satu atau dua pemetaan indeks dengan tangan.
  4. Periksa kontrak bentuk operator berikutnya.
  5. Pastikan baris dan kolom yang dihasilkan masih sesuai dengan konvensi model.

Pelajaran 22 akan menggunakan transformasi identitas dan invers untuk membahas kapan sebuah operasi linear benar-benar dapat dibatalkan. Transpose adalah jembatan yang hati-hati: ia mengubah orientasi agar relasi berikutnya dinyatakan dengan sumbu yang kompatibel, tetapi tidak menjanjikan keterbalikan.

Uji pemahaman Anda

Question 1

Jika A berbentuk 4 × 7, berbentuk apa Aᵀ, dan ke mana entri A[3, 6] berpindah?

Show the step-by-step solution

Langkah 1: balik dimensinya. Transpose mengubah (m,n)(m,n) menjadi (n,m)(n,m), jadi matriks 4×74\times7 menjadi 7×47\times4.

Langkah 2: tukar indeksnya. Aturan definisinya adalah (AT)j,i=Ai,j(A^{\mathsf T})_{j,i}=A_{i,j}. Jadi, entri pada baris 3, kolom 6 berpindah ke baris 6, kolom 3.

Langkah 3: tafsirkan hasilnya. Nilainya tidak berubah; hanya posisi baris dan kolom, dan karena itu labelnya, yang bertukar.

Question 2

Transpose M = [[5, −2, 1], [0, 4, 3]] dengan tangan dan nyatakan bentuk hasilnya.

Show the step-by-step solution

Langkah 1: hitung sumbu asal. MM memiliki dua baris dan tiga kolom, jadi transposenya harus memiliki tiga baris dan dua kolom.

Langkah 2: salin kolom menjadi baris. Kolom pertama [5,0][5,0] menjadi baris pertama; kolom kedua [−2,4][-2,4] menjadi baris kedua; kolom ketiga [1,3][1,3] menjadi baris ketiga.

Langkah 3: tulis hasilnya.

MT=[50−2413],MT∈R3×2.M^{\mathsf T}=\begin{bmatrix}5&0\\-2&4\\1&3\end{bmatrix}, \qquad M^{\mathsf T}\in\mathbb{R}^{3\times2}.

Question 3

Sebuah matriks memiliki baris untuk dokumen dan kolom untuk fitur kosakata. Apa arti baris dan kolom setelah transpose?

Show the step-by-step solution

Langkah 1: namai sumbu asal. Sebelum transpose, setiap baris adalah satu dokumen dan setiap kolom adalah satu fitur kosakata.

Langkah 2: terapkan aturan indeks. Setiap nilai dokumen-fitur berpindah dari (document,feature)(document, feature) ke (feature,document)(feature, document).

Langkah 3: nyatakan makna baru. Setelah transpose, setiap baris adalah satu fitur kosakata dan setiap kolom adalah satu dokumen. Nilainya tidak berubah, tetapi operasi berbasis baris kini mengagregasi lintas dokumen, bukan lintas fitur. Itulah sebabnya makna sumbu harus ikut dibawa bersama array.

Question 4

Mengapa (Aᵀ)ᵀ = A, dan apa yang tidak disiratkan oleh identitas ini?

Show the step-by-step solution

Langkah 1: tukar sekali. Transpose pertama mengirim entri (i,j)(i,j) ke (j,i)(j,i).

Langkah 2: tukar lagi. Transpose kedua mengirim entri yang sama dari (j,i)(j,i) kembali ke (i,j)(i,j). Setiap nilai kembali ke posisi asalnya.

Langkah 3: pertahankan perbedaannya. Identitas ini mengatakan bahwa transpose adalah involusi: menerapkan pertukaran orientasi yang sama dua kali mengembalikan matriks. Identitas ini tidak mengatakan bahwa ATA^{\mathsf T} adalah invers, atau bahwa operasi pertama membatalkan transformasi yang dipelajari dalam arti matriks invers.

Question 5

Untuk X dengan bentuk (8, 5), apa bentuk XᵀX dan XXᵀ, dan apa yang dibandingkan oleh setiap pasangan indeks?

Show the step-by-step solution

Langkah 1: transpose bentuknya. XTX^{\mathsf T} berbentuk (5,8)(5,8).

Langkah 2: kalikan dengan urutan pertama. (5,8)(8,5)→(5,5)(5,8)(8,5)\to(5,5), jadi XTXX^{\mathsf T}X membandingkan pasangan dari lima fitur di antara delapan contoh.

Langkah 3: kalikan dengan urutan kedua. (8,5)(5,8)→(8,8)(8,5)(5,8)\to(8,8), jadi XXTXX^{\mathsf T} membandingkan pasangan dari delapan contoh di sepanjang lima fiturnya. Membalik urutan mengubah pertanyaannya, bukan sekadar notasinya.

Question 6

Dalam NumPy, mengapa vector.T mempertahankan vektor berbentuk (3,) pada bentuk (3,), sedangkan vector[:, np.newaxis] berbentuk (3, 1)?

Show the step-by-step solution

Langkah 1: periksa jumlah sumbu. Bentuk (3,) mendeskripsikan satu sumbu dengan panjang tiga. Tidak ada sumbu baris dan kolom yang berbeda untuk ditukar oleh .T.

Langkah 2: baca perilaku NumPy. Transpose satu dimensi adalah view yang tidak berubah, sehingga vector.T.shape tetap (3,).

Langkah 3: tambahkan sumbu yang dimaksud secara eksplisit. vector[:, np.newaxis] menyisipkan sumbu kedua setelah tiga entri, sehingga menghasilkan (3, 1). Ini adalah vektor kolom eksplisit dan dapat ikut dalam perkalian matriks dengan bentuk yang dimaksudkan.

Question 7

Seorang pembelajar mengatakan bahwa Xᵀ adalah invers dari X karena melakukan transpose dua kali menghasilkan X. Apa koreksi yang tepat?

Show the step-by-step solution

Langkah 1: bedakan kedua identitas. (XT)T=X(X^{\mathsf T})^{\mathsf T}=X berarti dua pertukaran sumbu mengembalikan posisi asal.

Langkah 2: nyatakan syarat invers. Sebuah invers harus dikalikan dengan XX untuk menghasilkan matriks identitas pada sisi yang sesuai.

Langkah 3: gunakan kasus batasnya. Matriks 2×32\times3 dalam pelajaran ini bukan matriks persegi, sehingga sama sekali tidak memiliki invers dua sisi biasa. Bahkan matriks persegi belum tentu sama dengan invers transposenya. Transpose adalah operasi orientasi; invers adalah sifat keterbalikan.

Question 8

Sebuah batch X berbentuk (32, 768) dan matriks bobot W berbentuk (256, 768). Mengapa X @ W tidak valid, dan transpose mana yang menghasilkan output batch berbasis baris yang umum?

Show the step-by-step solution

Langkah 1: periksa perkalian yang dicoba. Bentuknya adalah (32,768)(32,768) dan (256,768)(256,768). Perkalian matriks memerlukan jumlah kolom di kiri, 768, sama dengan jumlah baris di kanan, 256. Keduanya tidak sama, jadi X @ W tidak valid.

Langkah 2: transpose bobotnya. WTW^{\mathsf T} berbentuk (768,256)(768,256).

Langkah 3: periksa perkalian yang diperbaiki. (32,768)(768,256)→(32,256)(32,768)(768,256)\to(32,256). 32 baris tetap menjadi contoh dan 256 kolom menjadi fitur output. Transpose memperbaiki konvensi sumbu, bukan nilai bobot yang dipelajari.

Sumber

  1. Mathematics for Machine Learning companion website
  2. Mathematics for Machine Learning book PDF
  3. NumPy documentation: numpy.transpose
  4. NumPy documentation: ndarray.T
  5. NumPy documentation: numpy.matmul