Kursus Matematika untuk AI · Pelajaran 5 dari 180

Indeks Tensor untuk AI: Membaca Sampel, Token, dan Fitur

Pelajari cara membaca subskrip tensor, menerjemahkan alamat batch-token-fitur ke NumPy, dan menemukan kesalahan sumbu yang tampak valid dalam kode AI.

Bagikan artikel ini

Sebuah program AI membaca X[1, 2, 0] dan mengembalikan 0.8. Ekspresi di dekatnya, X[1, 0, 2], mengembalikan 0.3. Kedua alamat valid. Hanya satu yang berarti “fitur pertama dari token terakhir pada contoh kedua.”

Perbedaannya adalah indeks: posisi yang digunakan untuk menemukan nilai di dalam struktur berurutan. Indeks adalah bagian kecil dari notasi, tetapi menentukan contoh, token, fitur, piksel, atau keluaran model mana yang benar-benar digunakan dalam perhitungan. Karena itu, indeks yang keliru dapat menghasilkan angka yang tampak masuk akal alih-alih kesalahan yang membantu.

Di akhir pelajaran ini, Anda akan mampu membaca sampel dan koordinat berindeks, mengikuti alamat tensor batch-token-fitur, menerjemahkan subskrip matematika ke NumPy, dan mendeteksi alamat yang angkanya legal tetapi makna sumbunya keliru. Pelajaran ini menambahkan urutan pada koleksi dataset dari Pelajaran 4. Situs pendamping resmi Mathematics for Machine Learning menempatkan notasi ini pada jalur dari data numerik menuju vektor, matriks, dan model yang digunakan nanti dalam kursus.

Indeks menjawab “posisi yang mana?”

Misalkan sebuah dataset berurutan berisi tiga contoh:

D=(x1,x2,x3).D=(x_1,x_2,x_3).

Subskrip dalam x2x_2 berarti “pilih contoh pada posisi 2.” Itu tidak berarti nilai contoh tersebut adalah 2. Jika contoh kedua adalah pasangan x2=(1.7,0.4)x_2=(1.7,-0.4), maka x2x_2 menamai seluruh pasangan itu.

Tambahkan subskrip kedua untuk memilih koordinat di dalam contoh tersebut:

x2,1=1.7andx2,2=0.4.x_{2,1}=1.7 \qquad\text{and}\qquad x_{2,2}=-0.4.

Baca x2,1x_{2,1} dari kiri ke kanan: pilih contoh 2, lalu koordinat 1. Indeks membentuk alamat; angka yang tersimpan di alamat itu adalah nilainya.

Ini juga memisahkan posisi dari identitas. Memindahkan sampel dari posisi 2 ke posisi 7 mengubah indeksnya meskipun ID stabil, piksel gambar, dan labelnya tidak berubah. Indeks adalah alamat yang berguna, bukan nama permanen untuk objek dunia nyata.

Setiap subskrip memilih satu sumbu

Sumbu adalah satu arah tempat array diorganisasi. Tabel memiliki sumbu baris dan sumbu kolom. Di sini, tensor adalah array multidimensi: tensor dapat memiliki kedua sumbu tersebut atau menambahkan sumbu lain untuk konsep seperti batch dan token.

Pertimbangkan tensor aktivasi

XRB×T×F,X\in\mathbb{R}^{B\times T\times F},

dengan:

  • BB adalah jumlah contoh dalam batch;
  • TT adalah jumlah posisi token per contoh; dan
  • FF adalah jumlah fitur yang disimpan untuk setiap token.

Notasi RB×T×F\mathbb{R}^{B\times T\times F} menyatakan bahwa setiap entri adalah bilangan real dan tensor memiliki bentuk B×T×FB\times T\times F. Satu entri skalar adalah

Xb,t,f,X_{b,t,f},

yang berarti: pilih posisi batch bb, posisi token tt, dan posisi fitur ff, dalam urutan tersebut.

Untuk tensor dengan bentuk 2×3×42\times3\times4, konvensi matematika yang dimulai dari satu memungkinkan

1b2,1t3,1f4.1\le b\le2, \qquad 1\le t\le3, \qquad 1\le f\le4.

Bentuk menyediakan rentang setiap indeks. Nama sumbu menyediakan maknanya. Tidak satu pun fakta menggantikan fakta lainnya.

Satu alamat, ditelusuri sampai menjadi nilai

Gunakan tensor dua batch berikut. Setiap item batch berisi tiga baris token, dan setiap token memiliki empat nilai fitur.

Ikuti alamat X2,3,1: pilih item batch 2, lalu token 3, kemudian fitur 1. Sel yang dipilih berisi 0,8.
Kisi tensor Item batch 1 Tiga baris token dan empat kolom fitur untuk item batch 1.Item batch 1indeks fitur →indeks token →f1f2f3f4token 10.20.8-0.10.4token 21.1-0.30.50.0token 30.70.60.2-0.4 Kisi tensor Item batch 2 Tiga baris token dan empat kolom fitur untuk item batch 2. Token 3, fitur 1 dipilih dan bernilai 0,8.Item batch 2indeks fitur →indeks token →f1f2f3f4token 1-0.20.90.30.1token 20.4-0.71.20.5token 30.8 ★0.1-0.61.5★ X₂,₃,₁ = 0.8
Item batch 1: baris token menurut kolom fitur
TokenFitur 1Fitur 2Fitur 3Fitur 4
10.20.8-0.10.4
21.1-0.30.50.0
30.70.60.2-0.4
Item batch 2: baris token menurut kolom fitur
TokenFitur 1Fitur 2Fitur 3Fitur 4
1-0.20.90.30.1
20.4-0.71.20.5
30.80.1-0.61.5

Pembacaan bertahap ini lebih penting daripada menghafal urutan huruf. Proyek lain mungkin menyimpan token sebelum batch, atau menggunakan sumbu tinggi, lebar, dan kanal untuk gambar. Kode dan dokumentasi harus menyatakan kontraknya.

NumPy dimulai dari nol

Banyak teks matematika memberi label posisi mulai dari 1. Python dan NumPy menggunakan pengindeksan berbasis nol, jadi posisi pertama adalah 0. Panduan pengindeksan resmi NumPy juga mengonfirmasi bahwa satu bilangan bulat per dimensi memilih satu elemen dan bahwa indeks nonnegatif yang valid untuk sumbu berukuran dd memenuhi 0i<d0\le i<d.

Posisi yang dimaksudMatematika berbasis satuNumPy berbasis nol
Item batch 2b=2b=2b = 1
Token 3t=3t=3t = 2
Fitur 1f=1f=1f = 0
Alamat lengkapX2,3,1X_{2,3,1}X[1, 2, 0]

Berikut tensor lengkap dan beberapa pilihan yang telah diverifikasi:

import numpy as np

X = np.array([
    [[ 0.2,  0.8, -0.1,  0.4],
     [ 1.1, -0.3,  0.5,  0.0],
     [ 0.7,  0.6,  0.2, -0.4]],
    [[-0.2,  0.9,  0.3,  0.1],
     [ 0.4, -0.7,  1.2,  0.5],
     [ 0.8,  0.1, -0.6,  1.5]],
])

print("shape:", X.shape)
print("one activation:", X[1, 2, 0])
print("last token of example 2:", X[1, 2])
print("feature 1 of every last token:", X[:, 2, 0])
shape: (2, 3, 4)
one activation: 0.8
last token of example 2: [ 0.8  0.1 -0.6  1.5]
feature 1 of every last token: [0.7 0.8]

Titik dua dalam X[:, 2, 0] berarti “pertahankan setiap posisi pada sumbu ini.” Sumbu pertama tetap dipertahankan, sedangkan token dan fitur menerima indeks spesifik, sehingga hasilnya berisi satu nilai untuk masing-masing dari dua item batch.

Atribut shape melaporkan (2, 3, 4), tetapi tuple itu sendiri tidak mengatakan “batch, token, fitur.” Nama-nama tersebut berasal dari kontrak data program.

Kembali ke ekspresi pembuka:

X[1, 2, 0]  # 0.8: batch 2, token 3, feature 1
X[1, 0, 2]  # 0.3: batch 2, token 1, feature 3

Kedua alamat cocok dengan bentuk tersebut. NumPy tidak tahu bahwa baris kedua menukar makna token dan fitur. Ini adalah bug pengindeksan semantik: program mengambil entri nyata, tetapi bukan entri yang dimaksudkan perhitungan.

Pertahanan yang berguna mencakup menamai kontrak sumbu di samping tensor, memeriksa bentuk di batas-batas, dan memberi nama deskriptif pada variabel indeks:

batch_index = 1
token_index = 2
feature_index = 0

activation = X[batch_index, token_index, feature_index]
assert X.shape == (2, 3, 4)
assert activation == 0.8

Assertion memeriksa contoh ini. Variabel deskriptif mempertahankan penalaran yang menghasilkan alamat tersebut.

Kesalahan batas lebih aman daripada kesalahan sumbu yang diam-diam

Untuk bentuk berbasis nol (2, 3, 4), alamat nonnegatif terakhir adalah X[1, 2, 3]. X[2, 0, 0] tidak valid karena indeks batch 2 meminta item ketiga dari sumbu yang hanya berisi dua item. NumPy memunculkan IndexError, bukan mengembalikan nilai yang dibuat-buat.

Indeks negatif adalah konvensi Python: -1 memilih posisi terakhir pada suatu sumbu, jadi X[-1, -1, -1] adalah cara lain untuk membaca X[1, 2, 3]. Kode itu valid, tetapi tidak boleh diterjemahkan diam-diam menjadi subskrip matematika berbasis satu. Nyatakan konvensinya setiap kali perbedaannya penting.

Pelajaran berikutnya akan menggunakan alamat ini di dalam penjumlahan. Setelah xix_i jelas berarti contoh ke-ii dan i\ell_i berarti loss-nya, simbol seperti ii\sum_i\ell_i menjadi instruksi ringkas untuk mengunjungi setiap loss berindeks dan menggabungkan nilainya.

Uji pemahaman

Pertanyaan 1

Jika x₄ = (2.5, −1.0, 0.3), apa yang dirujuk oleh x₄ dan x₄,₂?

Tampilkan solusi langkah demi langkah

Pertama, baca jumlah subskripnya.

  1. x4x_4 memiliki satu indeks, jadi memilih seluruh contoh pada posisi 4.
  2. Contoh yang diberikan adalah nilai dengan tiga koordinat (2.5,1.0,0.3)(2.5,-1.0,0.3).
  3. x4,2x_{4,2} menambahkan indeks koordinat, jadi memilih koordinat 2 di dalam contoh tersebut.

Karena itu,

x4=(2.5,1.0,0.3)andx4,2=1.0.x_4=(2.5,-1.0,0.3) \qquad\text{and}\qquad x_{4,2}=-1.0.

Subskrip 4 adalah alamat, bukan nilai yang disimpan.

Pertanyaan 2

Gunakan visual untuk menghitung X₂,₂,₃. Tunjukkan setiap pilihan sumbu.

Tampilkan solusi langkah demi langkah

Ikuti indeks dalam urutan batch-token-fitur yang telah dinyatakan.

  1. b=2b=2 memilih item batch 2.
  2. t=2t=2 memilih baris token kedua: (0.4,0.7,1.2,0.5)(0.4,-0.7,1.2,0.5).
  3. f=3f=3 memilih koordinat ketiga dari baris itu.

Jadi,

X2,2,3=1.2.X_{2,2,3}=1.2.

Memilih fitur 3 sebelum token 2 akan mengubah pertanyaannya karena sumbu-sumbu memiliki urutan.

Pertanyaan 3

Terjemahkan alamat matematika berbasis satu X₂,₃,₄ ke NumPy berbasis nol dan temukan nilainya.

Tampilkan solusi langkah demi langkah

Kurangi 1 dari setiap posisi ketika berpindah dari konvensi berbasis satu yang dinyatakan ke NumPy:

(2,3,4)(1,2,3).(2,3,4)\longrightarrow(1,2,3).

Alamat kodenya adalah X[1, 2, 3]. Pada item batch 2, token 3 adalah (0.8,0.1,0.6,1.5)(0.8,0.1,-0.6,1.5), dan fitur 4 adalah 1.51.5. Jadi

X2,3,4=1.5.X_{2,3,4}=1.5.

Pertanyaan 4

Untuk tensor berbasis nol dengan bentuk (2, 3, 4), klasifikasikan X[0, 2, 3], X[1, 3, 0], dan X[2, 0, 0] sebagai berada dalam batas atau di luar batas.

Tampilkan solusi langkah demi langkah

Terjemahkan bentuk itu menjadi rentang nonnegatif yang valid:

b{0,1},t{0,1,2},f{0,1,2,3}.b\in\{0,1\},\qquad t\in\{0,1,2\},\qquad f\in\{0,1,2,3\}.
  • X[0, 2, 3] berada dalam batas karena setiap indeks termasuk dalam rentangnya.
  • X[1, 3, 0] berada di luar batas karena indeks token 3 tidak termasuk dalam {0,1,2}\{0,1,2\}.
  • X[2, 0, 0] berada di luar batas karena indeks batch 2 tidak termasuk dalam {0,1}\{0,1\}.

Sumbu pertama yang gagal sudah cukup bagi NumPy untuk menolak alamat lengkapnya.

Pertanyaan 5

Developer bermaksud batch 2, token 3, fitur 1 tetapi menulis X[1, 0, 2]. Mengapa tidak terjadi kesalahan batas, dan bagaimana baris tersebut harus diperbaiki?

Tampilkan solusi langkah demi langkah

Untuk bentuk (2, 3, 4), indeks (1, 0, 2) valid secara mekanis:

1<2,0<3,2<4.1<2,\qquad 0<3,\qquad 2<4.

Karena itu NumPy mengembalikan nilai pada batch 2, token 1, fitur 3, yaitu 0.30.3. Pustaka tidak dapat menyimpulkan makna sumbu yang dimaksudkan.

Konversikan posisi berbasis satu yang dimaksudkan (2,3,1)(2,3,1) ke posisi berbasis nol $(1,2,0)`. Baris yang diperbaiki adalah:

activation = X[1, 2, 0]  # 0.8

Ini adalah bug semantik, bukan bug batas, sehingga nama variabel deskriptif dan kontrak sumbu yang eksplisit merupakan pertahanan yang berguna.

Pertanyaan 6

Apa yang dipilih oleh X[-1, -1, -1], dan mengapa −1 bukan identitas permanen untuk nilai tersebut?

Tampilkan solusi langkah demi langkah

Dalam NumPy, -1 berarti “posisi terakhir pada sumbu ini.” Untuk bentuk (2, 3, 4), posisi berbasis nol terakhir adalah (1, 2, 3). Karena itu,

X[1,1,1]=X[1,2,3]=1.5.X[-1,-1,-1]=X[1,2,3]=1.5.

Maknanya bergantung pada bentuk dan urutan saat ini. Jika item batch atau token lain ditambahkan, -1 akan menunjuk ke tempat lain. Itu adalah alamat relatif, bukan ID stabil yang melekat pada nilai tersimpan.

Sumber

  1. Mathematics for Machine Learning companion website
  2. Mathematics for Machine Learning book PDF
  3. NumPy documentation: indexing on ndarrays
  4. NumPy documentation: ndarray shape