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.
| Kavram | Boyut | Shape örneği | Tipik kullanım |
|---|---|---|---|
| Skaler | 0 | () | learning rate, loss |
| Vektör | 1 | (n,) | embedding, bias |
| Matris | 2 | (m, n) | ağırlık katmanı |
| Tensor | N | (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:
Burada öğrenilen ağırlıkları, girdiyi, bias'ı ve 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ş, ve 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. 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.