Vektörler ve Benzerlik

Nokta çarpım, matris, kosinüs ve gömme.

Önceki yazılarda “sayı listesi” dedik: tokenizer bir satır numarası verir, tablodaki o satır ondalıklardan oluşur. O listeye vektör denir. number[]. Yeni bir nesne modeli yoktur. Modelin bütün çarpma-toplaması bu listeler üzerinedir. “Kedi” ile “köpek”in yakın olması, iki listenin birbirine bakmasıdır; makinenin kedi tanıması değildir.

Vektör ve nokta çarpım

n boyutlu vektör x = (x₁, …, xₙ). Toplama bileşen bileşen, skaler çarpım her bileşeni katlar. Norm (Öklid) ‖x‖ = √(x·x). Sıfır vektörün uzunluğu 0’dır; yönü belirsizdir.

Nokta çarpım x · y = Σᵢ xᵢ yᵢ = ‖x‖ ‖y‖ cos θ. Aynı yöne bakıyorlarsa pozitif, dikse 0, zıtlarsa negatiftir. x · y aynı zamanda x’in y yönündeki izdüşümünün ‖y‖ ile çarpımıdır.

function dot(a: number[], b: number[]): number {
  return a.reduce((sum, value, i) => sum + value * b[i], 0);
}

const a = [1, 0];
const b = [0.6, 0.8];
// a·b = 0.6, ‖a‖ = 1, ‖b‖ = 1, θ = arccos(0.6) ≈ 53°

Kosinüs benzerliği cos θ = (x·y) / (‖x‖ ‖y‖) uzunluğu atar, açıyı bırakır. Metinde cümle boyu (norm) sık gürültüdür; açı daha kararlıdır. Norm 0 ise tanımsızdır; sıfır gömme ayrı ele alınır.

Öklid mesafe ‖x − y‖² = ‖x‖² + ‖y‖² − 2 x·y. Birim vektörlerde (‖x‖ = ‖y‖ = 1) mesafeyi küçültmek kosinüsü büyütmekle aynıdır. Bu yüzden gömmeler sık sık normalize edilir.

Matris bir yığındır

Matris W (m × n), n boyutlu vektörü m boyuta doğrusal taşır: h = Wx. hᵢ = satırᵢ · x. Her satır bir “ne arıyorum” vektörüdür. Katman, tam bu çarpımdır.

function matVec(W: number[][], x: number[]): number[] {
  return W.map((row) => dot(row, x));
}

const W = [
  [1, 2],
  [0, 1],
];
const x = [3, 4];
// Wx = [1*3+2*4, 0*3+1*4] = [11, 4]

W (x + y) = Wx + Wy ve W(cx) = c Wx. Doğrusal harita orijini korur; kayma b ayrı eklenir: Wx + b. Affine harita budur. Birden fazla vektörü sütun sütun dizip tek matris çarpımı yapmak (H = XW) GPU’nun işidir: aynı işlem, yığın.

Boyut uyumu zorunludur. W m × n, x n. Dikkatte Q Kᵀ bu yüzden d_k boyutunda anlaşır. Uyumsuz boyut, “anlam” değil, tanımsız çarpımdır.

Yüksek boyutta rastgele vektörler neredeyse dikleşir; mesafeler birbirine yaklaşır. Ham pikselde “en yakın komşu” bu yüzden zayıftır. Gömme, mesafenin anlamlı olacağı az boyuta (veya yapılaşmış boyuta) indirgemektir.

Gömme

Gömme e: nesne → ℝᵈ, benzer nesneleri yakın noktalara basar. Hedef eğitim sinyalidir: eşdizim (word2vec), cümle çifti, tıklama. Aynı kelime, farklı hedefte farklı komşu edinir.

Sürekli uzay, görülmemiş cümleye de bir nokta verir. Bu, genelleme gibi durur; aslında eğitimde görülen yönlere izdüşümdür. “kral − erkek + kadın ≈ kraliçe” aritmetiği, uzayın bazı eksenlerde cinsiyet/rol ayrımı taşıdığını gösteren bir gözlemdir; ispat veya garanti değildir.

Sonraki yazı, bu noktaları kayıp yüzeyinde hareket ettiren aracı verir: türev.

Alıştırma

u = [1, 2], v = [2, 1], w = [−2, −4] için u·v, u·w ve kosinüsleri hesaplayın. w = −2u iken kosinüs neden −1’dir? Üç boyutta konu/duygu/uzunluk eksenine kendi üç cümlenizi 0–1 koyup aynı hesabı tekrarlayın.