Tensor Nedir? Derin Öğrenme için Lineer Cebir
24 Haz 2026 · 4 dk okuma
Derin öğrenmeye yeni başlayan hemen herkesin gözünü korkutan ilk kelimelerden biri tensor'dır. PyTorch ya da JAX dökümantasyonunu açtığınızda her satırda karşınıza çıkar ve kulağa fizikten fırlamış ağır bir kavram gibi gelir. Oysa işin özü gayet sade: bir tensor, belirli bir shape'e (boyut yapısına) sahip bir sayı dizisidir, hepsi bu. Aşağıda bu merdiveni adım adım çıkacak, bir de şunu göreceğiz: bütün derin öğrenme aslında sayıları doğru şekiller arasında gezdirmekten ibaret.
Skalerden tensöre: bir merdiven
Tek bir tanımı ezberlemek yerine bunu, boyut sayısına göre yükselen bir merdiven gibi düşünün; çok daha sağlam bir sezgi oturur.
En altta skaler vardır: tek bir sayı, örneğin learning rate olarak
kullandığınız 0.001. Bir üst basamak vektör, yani sıralı bir sayı listesi;
bir kelimeyi temsil eden embedding bunun tipik örneği. Üçüncü basamakta matris
var: satır ve sütunlardan oluşan bir tablo; bir sinir ağı katmanının ağırlıkları
çoğunlukla bu biçimde. Tensor ise bütün bunların ortak adı: kaç boyutu olursa
olsun, sayıların düzenli bir ızgarada dizilmesi.
| 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ükteki 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 gösterir. Yani tensor, "çok boyutlu sayı kabı" demenin biraz daha
resmî bir yolu.
Asıl kahraman: shape
Tensörlerle çalışırken kafanızda sürekli canlı tutmanız gereken şey, içindeki sayıların değerleri değil shape'idir. Çünkü derin öğrenmedeki işlemlerin neredeyse hepsi, tensörleri belirli kurallara göre yeniden şekillendirmek, çarpmak ve toplamaktan ibaret. Bir modelin "çalışması" da büyük ölçüde shape'lerin birbirine oturması demek.
İ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. Bir de farklı shape'lerdeki tensörleri otomatik olarak genişletip işleme
sokan broadcasting kuralları vardır; ileride ayrı bir yazıda ele alacağımız bu
mekanizma, kodun pek çok yerinde 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 bir matris çarpımı ile ona eklenen bir bias terimi çıkar:
Burada öğrenilen ağırlıkları, girdiyi, bias'ı, de katmanın çıktısını gösterir. Tek başına bu ifade yalnızca doğrusal bir dönüşüm; asıl gücünü, bu katmanları üst üste dizip aralarına doğrusal olmayan bir fonksiyon (non-linearity) koyduğumuzda kazanır. "Derin" sözcüğü de işte bu üst üste yığılan 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,)'ü çarpıp (3,) üretir; işlemin
tanımlı olmasının tek koşulu, iç boyutların, yani iki taraftaki 4'lerin
eşleşmesidir. Bias'ı eklediğimizde shape değişmez, yalnızca her bileşene bir kayma
uygulanır. Sadeleştirilmiş hâliyle bütün derin öğrenme, bu adımın doğru shape'ler
ve uygun non-linearity'lerle tekrar tekrar uygulanmasıdır; geriye kalan iş, ve
için iyi değerleri bulmaktır, onu da gradient descent üstlenir.
Sayıların ötesinde: geometrik sezgi
Lineer cebiri yalnızca bir aritmetik aracı olarak görmek, işin yarısını kaçırmaktır. Bir vektörü uzayda bir nokta ya da bir yön gibi düşünebilirsiniz; bir matrisi ise bu uzayı esneten, döndüren ya da ölçekleyen bir dönüşüm gibi. ile çarpmak, girdiyi 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ğildir; 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, batch boyutunu yanlış konuma
koymak; hepsi aynı sınıf hataya çıkar. Bu yüzden geliştirirken en faydalı
alışkanlık, kodun kritik yerlerine print(x.shape) satırları serpiştirip her adımda
boyutların beklediğiniz gibi olduğunu kontrol etmektir. Bu basit refleks, saatler
sürebilecek hata ayıklamayı çoğu zaman tek bakışta bitirir.
Buradan nereye
Tensörün ne olduğunu ve bir katmanın neden bir matris çarpımından ibaret olduğunu gördük. Akla gelen bir sonraki soru şu: model bu ağırlıkların "iyi" değerlerini gerçekte nasıl buluyor? Yanıt, derin öğrenmenin kalbindeki optimizasyon döngüsünde, yani gradient descent'te. Bir sonraki yazıda tam olarak onu, yine sıfırdan ele alacağız.
Yeni makale yayınlandığında haberiniz olsun ister misiniz?
Yeni bir yazı yayınlandığında size e-posta gelsin. Dilediğiniz an iptal edebilirsiniz.
Yorumlar
Benzer makaleler
Gradient Descent Gerçekte Nasıl Çalışır
22 Haz 2026 · 4 dk okuma
Claude Code ile Verimli Çalışmak — Bölüm 2: Ajanlar, Alt Ajanlar ve Çoklu Ajan Kurulumları
15 Tem 2026 · 10 dk okuma
BPE(Byte Pair Encoding) nedir ve LLM'ler için neden önemli
1 Tem 2026 · 8 dk okuma
Claude Code ile Verimli Çalışmak — Bölüm 1: Bağlam (Context), Beceriler ve Prompt Yazımı
1 Tem 2026 · 6 dk okuma
GPT'yi Sıfırdan Yazalım: nano-gpt
27 Haz 2026 · 13 dk okuma
Bu Blog Ne Hakkında?
26 Haz 2026 · 2 dk okuma
Attention'ı Sıfırdan Anlamak
23 Haz 2026 · 3 dk okuma
Kimlik-Farkında Negatif Örnekleme Neden Önemli
20 Haz 2026 · 3 dk okuma