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.
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 yang bentuknya :
Dimensi pertama memiliki panjang , jadi ada dua baris. Dimensi kedua memiliki panjang , 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:
| 2 | −1 | 0 | |
| 4 | 3 | 1 |
Entri 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 ditulis sebagai . Aturan definisinya adalah
Dengan kata lain, entri pada baris , kolom berpindah ke baris , kolom . Karena itu, jika berbentuk , maka berbentuk :
Transpose tidak menegasikan, mengurutkan, menskalakan, atau menghitung ulang entri mana pun. Transpose mengubah orientasi relasi antara sebuah entri dan label baris serta kolomnya.
X: token sebagai baris dan fitur sebagai kolom
Dua baris token, dengan satu fitur di setiap kolom.
| Token | f₁ | f₂ | f₃ |
|---|---|---|---|
| t₁ | 2 | −1 | 0 |
| t₂ | 4 | 3 | 1 |
Token → rows · Fitur → columns
Xᵀ: fitur sebagai baris dan token sebagai kolom
Tiga baris fitur, dengan satu token di setiap kolom.
| Fitur | t₁ | t₂ |
|---|---|---|
| f₁ | 2 | 4 |
| f₂ | −1 | 3 |
| f₃ | 0 | 1 |
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
Gunakan definisinya satu posisi pada satu waktu. Baris pertama berasal dari kolom pertama :
Baris kedua berasal dari kolom kedua:
Baris ketiga berasal dari kolom ketiga:
Jika entri-entri tersebut disatukan, hasilnya adalah
Dua pemeriksaan dapat menangkap sebagian besar kesalahan hitung manual. Pertama, bentuknya dibalik dari menjadi . Kedua, membaca satu kolom dari atas ke bawah harus mengembalikan satu baris : kolom pertamanya adalah , yang merupakan baris pertama .
Mengapa orientasi penting dalam data AI
Batch berbasis baris memudahkan satu operasi umum. Jika menyimpan contoh dengan fitur, dan matriks bobot fitur-ke-output biasanya diterapkan sebagai
Di sini transpose tidak mengubah angka yang dipelajari. Transpose membuat sumbu fitur pada bobot sejajar dengan kolom fitur pada matriks batch. Output memiliki baris, satu untuk setiap contoh, dan kolom, satu untuk setiap fitur output.
Data yang sama juga dapat disimpan dengan fitur di depan sebagai . 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.
dan menanyakan hal yang berbeda
Transpose sering muncul di samping perkalian matriks. Bentuknya menunjukkan apa yang dibandingkan:
jadi setiap entri membandingkan dua fitur di antara contoh. Sebaliknya,
jadi setiap entri membandingkan dua contoh di antara fitur mereka. Tidak ada yang “lebih ditranspose” daripada yang lain; keduanya menjawab pertanyaan relasi yang berbeda.
Untuk matriks dalam pelajaran ini,
Yang pertama berbentuk karena ada tiga fitur. Yang kedua berbentuk 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 sebagai operasi yang “membatalkan” . Namun, secara umum itu keliru. Transpose hanya menukar sumbu. Invers, jika ada, adalah matriks berbeda yang memenuhi
Invers memerlukan matriks persegi dan tidak singular. Matriks seperti dalam pelajaran ini tidak dapat memiliki invers dua sisi biasa karena bentuknya bahkan tidak cocok dengan matriks identitas persegi. Bahkan untuk matriks persegi, hanya menjadi invers dalam kasus khusus, seperti ketika 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:
- Nyatakan makna setiap sumbu.
- Prediksi bentuk baru sebelum melakukan transpose.
- Verifikasi satu atau dua pemetaan indeks dengan tangan.
- Periksa kontrak bentuk operator berikutnya.
- 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 menjadi , jadi matriks menjadi .
Langkah 2: tukar indeksnya. Aturan definisinya adalah . 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. memiliki dua baris dan tiga kolom, jadi transposenya harus memiliki tiga baris dan dua kolom.
Langkah 2: salin kolom menjadi baris. Kolom pertama menjadi baris pertama; kolom kedua menjadi baris kedua; kolom ketiga menjadi baris ketiga.
Langkah 3: tulis hasilnya.
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 ke .
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 ke .
Langkah 2: tukar lagi. Transpose kedua mengirim entri yang sama dari kembali ke . 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 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. berbentuk .
Langkah 2: kalikan dengan urutan pertama. , jadi membandingkan pasangan dari lima fitur di antara delapan contoh.
Langkah 3: kalikan dengan urutan kedua. , jadi 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. berarti dua pertukaran sumbu mengembalikan posisi asal.
Langkah 2: nyatakan syarat invers. Sebuah invers harus dikalikan dengan untuk menghasilkan matriks identitas pada sisi yang sesuai.
Langkah 3: gunakan kasus batasnya. Matriks 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 dan . 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. berbentuk .
Langkah 3: periksa perkalian yang diperbaiki. . 32 baris tetap menjadi contoh dan 256 kolom menjadi fitur output. Transpose memperbaiki konvensi sumbu, bukan nilai bobot yang dipelajari.