Inside AI Models
← Tüm makaleler
Lineer CebirTemeller

Tensor Nedir? Derin Öğrenme için Lineer Cebir

24 Haz 2026 · 5 dk okuma

Derin öğrenmeye yeni başlayan hemen herkesin gözünü ilk korkutan kelimelerden biri tensor'dır. PyTorch ya da JAX dökümantasyonunu açtığınızda her satırda karşınıza çıkar, kulağa fizikten fırlamış ağır bir kavram gibi gelir. Oysa işin özü çok sade: bir tensor, belirli bir shape'e (boyut yapısına) sahip bir sayı dizisinden başka bir şey değildir. Bu yazıda hem bu merdiveni adım adım çıkacağız hem de daha önemli bir noktayı göreceğiz — bütün derin öğrenmenin, aslında sayıları doğru şekiller arasında gezdirmekten ibaret olduğunu.

Skalerden tensöre: bir merdiven

Kavramı tek bir tanımla ezberlemek yerine, boyut sayısına göre yükselen bir merdiven olarak düşünmek çok daha sağlam bir sezgi verir.

En altta skaler vardır: tek bir sayı, örneğin learning rate olarak kullandığınız 0.001. Bir sonraki basamak vektör, yani sıralı bir sayı listesidir; bir kelimeyi temsil eden embedding bunun tipik örneğidir. Üçüncü basamakta matris bulunur — satır ve sütunlardan oluşan bir tablo; bir sinir ağı katmanının ağırlıkları çoğunlukla bu biçimdedir. Tensor ise bütün bunların genel adıdır: kaç boyutu olursa olsun, sayıların düzenli bir ızgarada dizilmesidir.

KavramBoyutShape örneğiTipik kullanım
Skaler0()learning rate, loss
Vektör1(n,)embedding, bias
Matris2(m, n)ağırlık katmanı
TensorN(a, b, c, …)görüntü batch'i, dizi

Somut bir örnek bu soyutlamayı yere indirir: 224×224 çözünürlükte 32 RGB görüntüden oluşan bir batch, shape'i (32, 3, 224, 224) olan dört boyutlu bir tensördür. Buradaki sayılar sırasıyla batch büyüklüğünü, kanal sayısını, yüksekliği ve genişliği ifade eder. Görüldüğü gibi tensor, "çok boyutlu sayı kabı" demenin biraz daha resmî bir yoludur.

Asıl kahraman: shape

Tensörlerle çalışırken zihninizde sürekli canlı tutmanız gereken kavram, içindeki sayıların değerleri değil shape'idir. Çünkü derin öğrenmedeki işlemlerin neredeyse tamamı, tensörleri belirli kurallara göre yeniden şekillendirmek, çarpmak ve toplamaktan ibarettir. Bir modelin "çalışması", büyük ölçüde shape'lerin birbirine uyması demektir.

İki tensörü birbirine bağlayan en temel işlem matris çarpımıdır ve bu işlem yalnızca iç boyutlar uyuştuğunda tanımlıdır: (m, k) boyutlu bir matrisi (k, n) boyutlu bir matrisle çarptığınızda sonuç (m, n) olur; ortadaki k'ların eşleşmesi şarttır. Buna ek olarak, farklı shape'lerdeki tensörlerin otomatik olarak genişletilip işleme sokulmasını sağlayan broadcasting kuralları vardır; ileride ayrı bir yazıda ele alacağımız bu mekanizma, kodun çoğu yerde sessizce devreye girer.

Neden her şeyin dili lineer cebir

Bir sinir ağı katmanını en yalın hâliyle yazdığımızda karşımıza çıkan ifade, bir matris çarpımı ile ona eklenen bir bias terimidir:

y=Wx+b\mathbf{y} = W\mathbf{x} + \mathbf{b}

Burada WW öğrenilen ağırlıkları, x\mathbf{x} girdiyi, b\mathbf{b} bias'ı ve y\mathbf{y} de katmanın çıktısını temsil eder. Tek başına bu ifade yalnızca doğrusal bir dönüşümdür; gerçek gücünü, bu katmanları üst üste dizip aralarına doğrusal olmayan bir fonksiyon (non-linearity) yerleştirdiğimizde kazanır. İşte "derin" sözcüğü tam da bu üst üste yığılmış katmanlardan gelir.

Aşağıdaki örnek, dört elemanlı bir girdiyi üç elemanlı bir çıktıya dönüştüren tek bir katmanı gösteriyor:

import torch
 
x = torch.randn(4)        # girdi vektörü, shape (4,)
W = torch.randn(3, 4)     # ağırlıklar, shape (3, 4)
b = torch.randn(3)        # bias, shape (3,)
 
y = W @ x + b             # çıktı vektörü, shape (3,)
print(y.shape)            # torch.Size([3])

Buradaki W @ x ifadesi (3, 4) ile (4,)'yi çarpıp (3,) üretir; iç boyutların — yani her iki taraftaki 4'lerin — eşleşmesi işlemin tanımlı olmasının tek koşuludur. Bias'ı eklediğimizde shape değişmez, yalnızca her bileşene bir kayma uygulanır. Tüm derin öğrenme, sadeleştirilmiş hâliyle, bu adımın doğru shape'lerle ve uygun non-linearity'lerle tekrar tekrar uygulanmasıdır; geriye kalan iş, WW ve b\mathbf{b} için iyi değerleri bulmaktır ki onu da gradient descent üstlenir.

Sayıların ötesinde: geometrik sezgi

Lineer cebiri yalnızca aritmetik bir araç olarak görmek, işin yarısını kaçırmak olur. Bir vektörü uzayda bir nokta ya da bir yön olarak düşünebilirsiniz; bir matrisi ise bu uzayı esneten, döndüren ya da ölçekleyen bir dönüşüm olarak. WW ile çarpmak, girdimizi yeni bir uzaya taşımak demektir; sinir ağının her katmanı, veriyi sınıfların daha kolay ayrılabileceği bir temsile doğru biraz daha iter. Bu geometrik bakış, ileride attention ya da embedding gibi konulara geldiğimizde "benzerlik" ve "uzaklık" kavramlarını çok daha doğal kılacak.

Sık düşülen tuzaklar

Pratikte karşılaşacağınız hataların önemli bir kısmı, kavramsal değil, kılık değiştirmiş birer shape uyuşmazlığıdır. Bir tensörün satır mı yoksa sütun vektörü mü olduğunu karıştırmak, transpoze almayı unutmak ya da batch boyutunu yanlış konuma yerleştirmek; hepsi aynı sınıf hataya çıkar. Bu yüzden geliştirme sürecinde en faydalı alışkanlık, kodun kritik noktalarına print(x.shape) satırları serpiştirmek ve her adımda boyutların beklediğiniz gibi olduğunu teyit etmektir. Bu basit refleks, saatlerce sürebilecek hata ayıklamayı çoğu zaman tek bakışta çözer.

Buradan nereye

Tensörün ne olduğunu ve bir katmanın neden bir matris çarpımından ibaret olduğunu gördüğümüze göre, sıradaki doğal soru şu: bu ağırlıkların "iyi" değerlerini model gerçekte nasıl buluyor? Yanıt, derin öğrenmenin kalbindeki optimizasyon döngüsünde, yani gradient descent'te yatıyor. Bir sonraki yazıda tam olarak bunu, yine sıfırdan ele alacağız.

okunma

Benzer makaleler