2  Lineer Denklemlerin Geometrisi

Satır, kolon, matris — üç bakış, bir denklem

NotBölüm bilgisi

2.1 Bu Derste Ne Var?

Bu lineer cebir kursunun ilk dersi. Strang’in tüm sonraki 33 dersin üstüne bina edeceği üç bakış açısını koyuyor: aynı denklem sistemine satır görünümü, kolon görünümü ve matris formu gözüyle bakmak. Üç bakış aynı sayıyı verir; üçü farklı şeyler öğretir.

Üç bakış açısı:

  1. Satır görünümü (Row picture) — Her denklemi geometrik olarak bir doğru/düzlem olarak çiz, kesişim noktasını ara. Liseden tanıdık.
  2. Kolon görünümü (Column picture) ⭐ — Matrisin kolonlarına vektör olarak bak; hangi kombinasyon \(b\)’ye ulaşır? Strang dersin en kritik kavramı olduğunu vurguluyor.
  3. Matris formu — Sistem \(A\mathbf{x} = \mathbf{b}\). Cebirsel/programatik yaklaşım, BLAS’tan PyTorch’a kadar her yerde.
flowchart LR
    P["🟦 Lineer denklem sistemi<br/>2x - y = 0<br/>-x + 2y = 3"] --> R["Satır görünümü<br/>(iki doğrunun kesişimi)"]
    P --> C["⭐ Kolon görünümü<br/>(vektörlerin kombinasyonu)"]
    P --> M["Matris formu<br/>A·x = b"]

    R --> Rcost["2D/3D'de güzel<br/>9D'de çökiyor"]
    C --> Ccost["Yüksek boyutta da işler<br/>= Neural net forward pass"]
    M --> Mcost["Cebirsel zemin<br/>numpy / PyTorch"]

    Ccost --> ML["💡 W·x = W'nin kolonlarının<br/>x bileşenleriyle kombinasyonu"]

    style P fill:#fdf6f7,stroke:#8a1538,stroke-width:2px
    style C fill:#fff3e0,stroke:#e67e22,stroke-width:3px
    style ML fill:#fce4ec,stroke:#c2185b,stroke-width:3px
flowchart LR
    P["🟦 Lineer denklem sistemi<br/>2x - y = 0<br/>-x + 2y = 3"] --> R["Satır görünümü<br/>(iki doğrunun kesişimi)"]
    P --> C["⭐ Kolon görünümü<br/>(vektörlerin kombinasyonu)"]
    P --> M["Matris formu<br/>A·x = b"]

    R --> Rcost["2D/3D'de güzel<br/>9D'de çökiyor"]
    C --> Ccost["Yüksek boyutta da işler<br/>= Neural net forward pass"]
    M --> Mcost["Cebirsel zemin<br/>numpy / PyTorch"]

    Ccost --> ML["💡 W·x = W'nin kolonlarının<br/>x bileşenleriyle kombinasyonu"]

    style P fill:#fdf6f7,stroke:#8a1538,stroke-width:2px
    style C fill:#fff3e0,stroke:#e67e22,stroke-width:3px
    style ML fill:#fce4ec,stroke:#c2185b,stroke-width:3px
Şekil 2.1: Aynı problem, üç bakış — ve modern ML için neden kolon görünümü kritik.

“Pay attention, this is the key point.” — Strang, 8:39

İpucuBuilder Notu — ML Köprüleri
  • \(A\mathbf{x}\) = kolonların kombinasyonu. Her neural network katmanı \(\mathbf{y} = W\mathbf{x} + \mathbf{b}\) bir matris × vektör. Kolon yorumu sana embedding’lerin, attention head’lerin, LoRA decomposition’unun çalışma biçimini anlatır. Satır (dot product) yorumu sadece “hesap nasıl yapıldı”yı söyler.
  • Kolon uzayı = ulaşılabilir çıkışlar. \(W\)’nin kolonlarının kombinasyonları, ağ katmanının üretebileceği tüm vektörler. Bottleneck katmanı bu kavramla tasarlanır.
  • Singular = düşük rank = LoRA fırsatı. Strang “kolonlar bağımlıysa trouble” diyor; ML’de “ΔW zaten düşük rank, \(A \cdot B^T\) olarak parametrize edelim” deyip LoRA çıkıyor.
  • Yüksek boyut sezgisi. 768D, 12288D’de çizemezsin ama “9D’de pretend” alışkanlığı tüm ML çalışmasının zihinsel zemini.

2.2 İki Denklem, İki Bilinmeyen

Hadi somutla başlayalım:

\[ \begin{aligned} 2x - y &= 0 \\ -x + 2y &= 3 \end{aligned} \]

Hangi \((x, y)\) değerleri her iki denklemi sağlar?

Matris formuna çevirelim:

\[ \underbrace{\begin{pmatrix} 2 & -1 \\ -1 & 2 \end{pmatrix}}_{A} \underbrace{\begin{pmatrix} x \\ y \end{pmatrix}}_{\mathbf{x}} = \underbrace{\begin{pmatrix} 0 \\ 3 \end{pmatrix}}_{\mathbf{b}} \]

  • \(A\) = katsayı matrisi, her satır bir denklemin katsayıları.
  • \(\mathbf{x}\) = bilinmeyenler vektörü.
  • \(\mathbf{b}\) = sağ taraf vektörü.

Bu format dersin geri kalanında ve gerçek hayatta (numpy, PyTorch, MATLAB) sürekli karşına çıkacak.

2.3 Birinci Bakış: Satır Görünümü

Lise matematiği: her denklem bir doğru, çözüm = kesişim noktası.

  • \(2x - y = 0\)\(y = 2x\) (eğim 2, orijinden geçer)
  • \(-x + 2y = 3\)\(y = (x + 3)/2\) (eğim 1/2, orijinden geçmez)
import numpy as np
import matplotlib.pyplot as plt

x = np.linspace(-2, 3, 200)
y1 = 2 * x                # 2x - y = 0  ->  y = 2x
y2 = (x + 3) / 2          # -x + 2y = 3  ->  y = (x+3)/2

fig, ax = plt.subplots(figsize=(8, 6))
ax.plot(x, y1, color='#8a1538', linewidth=2.5, label=r'$2x - y = 0$')
ax.plot(x, y2, color='#1f4e79', linewidth=2.5, label=r'$-x + 2y = 3$')

# Kesişim
ax.plot(1, 2, 'o', color='#e67e22', markersize=14, zorder=5,
        markeredgecolor='#8a1538', markeredgewidth=2)
ax.annotate('Çözüm $(1, 2)$', xy=(1, 2), xytext=(1.3, 2.3),
            fontsize=13, fontweight='bold', color='#8a1538',
            arrowprops=dict(arrowstyle='->', color='#8a1538'))

ax.axhline(0, color='#cbd5e0', linewidth=0.8)
ax.axvline(0, color='#cbd5e0', linewidth=0.8)
ax.grid(alpha=0.3)
ax.set_xlim(-2, 3); ax.set_ylim(-3, 4)
ax.set_xlabel('$x$', fontsize=12); ax.set_ylabel('$y$', fontsize=12)
ax.set_title('Satır görünümü: iki doğru, bir kesişim', fontsize=12)
ax.legend(loc='lower right', fontsize=11)
ax.set_aspect('equal')
plt.tight_layout()
plt.show()
Şekil 2.2

İki denklem, iki bilinmeyen için bu güzel. 3 boyutta her denklem bir düzlem, üç düzlemin kesişimi bir nokta — hâlâ çizilebilir ama zor. 9 boyutta her denklem 8 boyutlu bir “hyperplane” — zihinde canlandırılamaz. Bu yüzden satır görünümü iyi bir başlangıç; ölçeklenmek için kolon görünümüne geçeceğiz.

2.4 İkinci Bakış: Kolon Görünümü ⭐

Strang dersin kalbi. Aynı sistemi farklı yaz:

\[ x \begin{pmatrix} 2 \\ -1 \end{pmatrix} + y \begin{pmatrix} -1 \\ 2 \end{pmatrix} = \begin{pmatrix} 0 \\ 3 \end{pmatrix} \]

Doğrula:

    1. bileşen: \(x \cdot 2 + y \cdot (-1) = 2x - y\)
    1. bileşen: \(x \cdot (-1) + y \cdot 2 = -x + 2y\)

Matematiksel hiçbir şey değişmedi — bakış açısı değişti. Şimdi iki kolon vektörü var:

  • \(\mathbf{c}_1 = (2, -1)\)\(A\)’nın birinci kolonu
  • \(\mathbf{c}_2 = (-1, 2)\)\(A\)’nın ikinci kolonu

Soru artık şu: \(\mathbf{c}_1\) ve \(\mathbf{c}_2\) vektörlerini hangi oranda karıştırırsan \(\mathbf{b} = (0, 3)\) vektörüne ulaşırsın?

“It’s a linear combination of the columns. That’s the most fundamental operation in the whole course. — Strang, 9:51

Satır görünümünden bulduğumuz \(x = 1, y = 2\) ile doğrulayalım:

\[ 1 \cdot \begin{pmatrix} 2 \\ -1 \end{pmatrix} + 2 \cdot \begin{pmatrix} -1 \\ 2 \end{pmatrix} = \begin{pmatrix} 2 \\ -1 \end{pmatrix} + \begin{pmatrix} -2 \\ 4 \end{pmatrix} = \begin{pmatrix} 0 \\ 3 \end{pmatrix} = \mathbf{b} \]

Birinci kolondan bir tane, ikinci kolondan iki tane al, topla → \(\mathbf{b}\).

fig, ax = plt.subplots(figsize=(9, 7))

c1 = np.array([2, -1])
c2 = np.array([-1, 2])
b = np.array([0, 3])

# 1·c1
ax.annotate('', xy=c1, xytext=(0, 0),
            arrowprops=dict(arrowstyle='->', color='#8a1538', lw=2.5))
ax.text(c1[0]/2 + 0.15, c1[1]/2 - 0.3, r'$1 \cdot \mathbf{c}_1$',
        fontsize=14, color='#8a1538', fontweight='bold')

# 2·c2, c1'in ucundan
end_2c2 = c1 + 2 * c2
ax.annotate('', xy=end_2c2, xytext=c1,
            arrowprops=dict(arrowstyle='->', color='#1f4e79', lw=2.5))
ax.text(c1[0] + c2[0] - 0.7, c1[1] + c2[1] + 0.2, r'$2 \cdot \mathbf{c}_2$',
        fontsize=14, color='#1f4e79', fontweight='bold')

# b vektörü
ax.annotate('', xy=b, xytext=(0, 0),
            arrowprops=dict(arrowstyle='->', color='#e67e22', lw=3, linestyle='--'))
ax.text(b[0] - 0.7, b[1] - 0.4, r'$\mathbf{b} = (0, 3)$',
        fontsize=14, color='#e67e22', fontweight='bold')

# Referans c1, c2 ayrıca (gri)
ax.annotate('', xy=c2, xytext=(0, 0),
            arrowprops=dict(arrowstyle='->', color='#1f4e79', lw=1, alpha=0.4))
ax.text(c2[0] - 0.6, c2[1] + 0.1, r'$\mathbf{c}_2$', fontsize=11, color='#1f4e79', alpha=0.6)
ax.text(c1[0] + 0.1, c1[1] - 0.2, r'$\mathbf{c}_1$', fontsize=11, color='#8a1538', alpha=0.8)

ax.axhline(0, color='#cbd5e0', linewidth=0.6)
ax.axvline(0, color='#cbd5e0', linewidth=0.6)
ax.grid(alpha=0.3)
ax.set_xlim(-2, 3); ax.set_ylim(-2, 4.5)
ax.set_xlabel('$x$', fontsize=12); ax.set_ylabel('$y$', fontsize=12)
ax.set_title(r'$1 \cdot \mathbf{c}_1 + 2 \cdot \mathbf{c}_2 = \mathbf{b}$  (kolonların lineer kombinasyonu)', fontsize=12)
ax.set_aspect('equal')
plt.tight_layout()
plt.show()
Şekil 2.3
İpucuBuilder Notu — Forward Pass’in Anlamı

Bir neural network katmanı y = W @ x + b. İki yorum:

  • Satır yorumu (dot product): \(y_i = \sum_j W_{ij}\,x_j\). Kod kıvamı.
  • Kolon yorumu: \(\mathbf{y} = \sum_j x_j\,W_{:,j}\)\(W\)’nin kolonlarının \(x\) bileşenleriyle kombinasyonu. Geometrik kıvamı.

İkisi aynı sayıyı verir, ama farklı zihinsel model. Kolon yorumu sana embedding’lerin yorumunu (her token’in embedding’i, embedding matrisinin bir kolonudur), attention’da \(V\) kolonlarının skor ağırlıklarıyla karışmasını, LoRA’nın \(\Delta W = AB^T\) ayrışımını anlatır. Satır yorumu sadece çarpımın aritmetiğini.

ML için ağırlık kolon yorumunda.

2.5 Tüm Kombinasyonlar Neyi Doldurur?

Sezgisel soru: \(x\) ve \(y\) tüm gerçek sayıları alabilse, \(x\mathbf{c}_1 + y\mathbf{c}_2\) ne tür vektörler üretir?

Cevap: Tüm 2D düzlem. Hangi hedef vektörü \(\mathbf{b}\) seçersen seç, \(\mathbf{c}_1\) ile \(\mathbf{c}_2\)’nin doğru bir kombinasyonu seni oraya götürür. Bu, matrisin non-singular (tekil olmayan, tersi alınabilir) olması demek.

fig, axes = plt.subplots(1, 2, figsize=(12, 5))

# Sol: bağımsız kolonlar, tüm düzlemi doldurur
ax = axes[0]
c1 = np.array([2, -1])
c2 = np.array([-1, 2])
alphas = np.linspace(-1.5, 1.5, 18)
betas = np.linspace(-1.5, 1.5, 18)
for a in alphas:
    for b in betas:
        v = a * c1 + b * c2
        ax.plot(v[0], v[1], 'o', color='#8a1538', markersize=3, alpha=0.4)
ax.annotate('', xy=c1, xytext=(0, 0), arrowprops=dict(arrowstyle='->', color='#8a1538', lw=2.5))
ax.annotate('', xy=c2, xytext=(0, 0), arrowprops=dict(arrowstyle='->', color='#1f4e79', lw=2.5))
ax.text(c1[0] + 0.1, c1[1] - 0.3, r'$\mathbf{c}_1$', fontsize=14, color='#8a1538', fontweight='bold')
ax.text(c2[0] - 0.4, c2[1] + 0.2, r'$\mathbf{c}_2$', fontsize=14, color='#1f4e79', fontweight='bold')
ax.set_title('Lineer bağımsız → tüm 2D düzlemi doldurur', fontsize=11)
ax.set_xlim(-5, 5); ax.set_ylim(-5, 5)
ax.axhline(0, color='#cbd5e0', linewidth=0.5)
ax.axvline(0, color='#cbd5e0', linewidth=0.5)
ax.set_aspect('equal'); ax.grid(alpha=0.3)

# Sağ: bağımlı kolonlar, sadece bir doğru
ax = axes[1]
c1 = np.array([2, -1])
c2 = np.array([-4, 2])   # = -2 * c1
for a in alphas:
    for b in betas:
        v = a * c1 + b * c2
        ax.plot(v[0], v[1], 'o', color='#8a1538', markersize=3, alpha=0.5)
ax.annotate('', xy=c1, xytext=(0, 0), arrowprops=dict(arrowstyle='->', color='#8a1538', lw=2.5))
ax.annotate('', xy=c2, xytext=(0, 0), arrowprops=dict(arrowstyle='->', color='#1f4e79', lw=2.5))
ax.text(c1[0] + 0.1, c1[1] - 0.3, r'$\mathbf{c}_1$', fontsize=14, color='#8a1538', fontweight='bold')
ax.text(c2[0] - 0.5, c2[1] + 0.2, r'$\mathbf{c}_2 = -2\mathbf{c}_1$', fontsize=12, color='#1f4e79', fontweight='bold')
ax.set_title('Lineer bağımlı (singular) → tek doğru', fontsize=11)
ax.set_xlim(-7, 7); ax.set_ylim(-4, 4)
ax.axhline(0, color='#cbd5e0', linewidth=0.5)
ax.axvline(0, color='#cbd5e0', linewidth=0.5)
ax.set_aspect('equal'); ax.grid(alpha=0.3)

plt.tight_layout()
plt.show()
Şekil 2.4

Sağdaki singular durumda \(\mathbf{c}_2 = -2\mathbf{c}_1\) olduğu için \(\mathbf{c}_2\) “yeni bilgi” getirmiyor. Kombinasyonlar 2D’nin tamamı yerine sadece bir doğru üzerinde kalır. O doğrunun dışındaki her \(\mathbf{b}\) için sistemin çözümü yoktur.

2.6 Üç Boyuta Çıkış: 3×3 Sistem

İkinci örnek:

\[ \begin{aligned} 2x - y &= 0 \\ -x + 2y - z &= -1 \\ -3y + 4z &= 4 \end{aligned} \]

Matris formu:

\[ A = \begin{pmatrix} 2 & -1 & 0 \\ -1 & 2 & -1 \\ 0 & -3 & 4 \end{pmatrix}, \quad \mathbf{b} = \begin{pmatrix} 0 \\ -1 \\ 4 \end{pmatrix} \]

Satır görünümü 3D’de: Her denklem 3D uzayda bir düzlem. Üç düzlemin ortak kesişimi = çözüm.

“the row picture is getting a little hard to see” — Strang, 21:11

Strang itiraf ediyor: üç düzlemin nerede kesiştiğini gözle bulmak zor. 4D’de imkânsız. Yine kolon görünümüne geçelim.

Kolon görünümü:

\[ x \begin{pmatrix} 2 \\ -1 \\ 0 \end{pmatrix} + y \begin{pmatrix} -1 \\ 2 \\ -3 \end{pmatrix} + z \begin{pmatrix} 0 \\ -1 \\ 4 \end{pmatrix} = \begin{pmatrix} 0 \\ -1 \\ 4 \end{pmatrix} \]

Strang hile yaptı: \(\mathbf{b} = (0, -1, 4)\) tam olarak \(\mathbf{c}_3\)’e eşit. O zaman çözüm bir bakışta görünüyor: \(x = 0, y = 0, z = 1\) — sadece üçüncü kolondan bir tane al.

“I made it work that way just so we would get an answer.” — Strang, 25:15

from mpl_toolkits.mplot3d import Axes3D  # noqa
fig = plt.figure(figsize=(10, 7))
ax = fig.add_subplot(111, projection='3d')

c1 = np.array([2, -1, 0])
c2 = np.array([-1, 2, -3])
c3 = np.array([0, -1, 4])

origin = np.array([0, 0, 0])

def vec(ax, v, color, label, lw=2.5, alpha=1):
    ax.quiver(*origin, *v, color=color, arrow_length_ratio=0.08, linewidth=lw, alpha=alpha)
    ax.text(v[0]*1.05, v[1]*1.05, v[2]*1.05, label, color=color, fontsize=12, fontweight='bold')

vec(ax, c1, '#8a1538', r'$\mathbf{c}_1$')
vec(ax, c2, '#1f4e79', r'$\mathbf{c}_2$')
vec(ax, c3, '#e67e22', r'$\mathbf{c}_3 = \mathbf{b}$', lw=3.5)

ax.set_xlim(-2, 3); ax.set_ylim(-2, 3); ax.set_zlim(-4, 5)
ax.set_xlabel('1. bileşen'); ax.set_ylabel('2. bileşen'); ax.set_zlabel('3. bileşen')
ax.set_title(r'$x=0, y=0, z=1$$\mathbf{b}$ direkt $\mathbf{c}_3$ ile elde edilir', fontsize=11)
plt.tight_layout()
plt.show()
Şekil 2.5

2.7 Büyük Soru: Her \(\mathbf{b}\) İçin Çözüm Var mı?

Dersin merkez sorusu:

Cebirsel hâli: Verilen \(A\) matrisi için, her sağ taraf \(\mathbf{b}\) için \(A\mathbf{x} = \mathbf{b}\) denkleminin çözümü var mı?

Kombinasyon dili: \(A\)’nın kolonlarının lineer kombinasyonları tüm uzayı dolduruyor mu?

Strang vurguluyor: bu aynı soru, sadece farklı kelimelerle. Cevap “evet” ise \(A\) non-singular (full rank, invertible) — eşdeğer isimler.

Cevap “hayır” olduğunda: Kolonlar bağımlı, “tüm uzay” yerine bir alt-uzayı dolduruyorlar. O alt-uzayın dışında kalan \(\mathbf{b}\)’lere ulaşılamaz.

İpucuBuilder Notu — LoRA ve Düşük Rank

Strang “singular = trouble” diyor. ML’de aynı geometri araç oluyor.

LoRA (Low-Rank Adaptation): Bir LLM’in ağırlık matrisini fine-tune ederken, güncelleme \(\Delta W\)’nin tam rank olması gerekli değil. Pratikte \(\Delta W\) zaten düşük ranklı — kolonları birbirine bağlı.

O yüzden \(\Delta W\) yerine \(\Delta W = A \cdot B^T\) yazılır; \(A, B\) ince dikdörtgen matrisler (\(r \ll d\)). Tipik \(d = 768\), \(r = 8\): \(768 \times 768 = 589{,}824\) parametre yerine \(2 \times 768 \times 8 = 12{,}288\) — ~48× tasarruf.

Strang’ın “kolonlar bağımlıysa kayıp” dediği özellik, LoRA’nın temel sezgisi. Aynı geometri, farklı yorum.

2.8 Yüksek Boyutlarda Düşünmek

“Shall we take a little shot at thinking about nine dimensions?” — Strang, 32:25

9 denklem, 9 bilinmeyen = 9 kolon, her biri 9 boyutlu. Aynı soru: 9 kolonun kombinasyonları, 9 boyutlu uzayın tamamını doldurur mu?

Çizemezsin. Strang da “I don’t pretend to do it” diyor. Ama mantığı işletebilirsin:

  1. 2D: 2 bağımsız kolon → tüm düzlem.
  2. 3D: 3 bağımsız kolon → tüm 3D.
  3. Genelleme: \(n\) boyutta \(n\) bağımsız kolon → tüm \(n\)-boyutlu uzay.

Rastgele seçilirse:

“If I picked a random matrix, … I guarantee it would be good.” — Strang, 33:33

Rastgele vektörlerin tam olarak bağımlı çıkması olasılığı sıfır (ölçü sıfır). Patolojik durumlar bilinçli kurulur.

İpucuBuilder Notu — Yüksek Boyut Sezgisi

ML hep yüksek boyutta yaşar:

  • BERT embedding: 768 boyut
  • GPT-3 embedding: 12288 boyut
  • LLaMA-3 70B bazı katmanlar: 8192

Çizemezsin. Ama 2D/3D’de öğrendiğin mantığın yüksek boyutta da geçerli olduğuna alışmalısın. Yapay zekayı anlamak büyük ölçüde “yüksek boyutta sezgisel düşünmek” demek. Strang’ın “pretend 9D” alıştırması bunun temeli.

2.9 Matris × Vektör: İki Hesaplama Yolu

Somut soru: \(A\mathbf{x}\) nasıl hesaplanır?

\[ A = \begin{pmatrix} 2 & 5 \\ 1 & 3 \end{pmatrix}, \quad \mathbf{x} = \begin{pmatrix} 1 \\ 2 \end{pmatrix} \]

Yöntem 1: Kolon kombinasyonu (Strang’in tercihi)

\[ A\mathbf{x} = 1 \cdot \begin{pmatrix} 2 \\ 1 \end{pmatrix} + 2 \cdot \begin{pmatrix} 5 \\ 3 \end{pmatrix} = \begin{pmatrix} 12 \\ 7 \end{pmatrix} \]

Yöntem 2: Satır × vektör (dot product)

\[ y_1 = (2, 5) \cdot (1, 2) = 12, \quad y_2 = (1, 3) \cdot (1, 2) = 7 \]

Aynı sonuç. Ama farklı zihinsel model:

“A times x is a combination of the columns of A. That’s how I hope you will think of A times x when we need it.” — Strang, 38:24

import numpy as np

A = np.array([[2, 5],
              [1, 3]])
x = np.array([1, 2])

# Yontem 1: kolon kombinasyonu
y1 = sum(x[j] * A[:, j] for j in range(A.shape[1]))

# Yontem 2: satir x vektor (dot product)
y2 = np.array([np.dot(A[i], x) for i in range(A.shape[0])])

# Direkt numpy çarpımı (BLAS arka planda)
y3 = A @ x

print("Kolon kombinasyonu:", y1)
print("Satir dot product :", y2)
print("A @ x (numpy)     :", y3)

assert np.allclose(y1, y2) and np.allclose(y2, y3)

Üç farklı kod, aynı sonuç. Modern kütüphaneler (numpy, PyTorch, JAX) bunu BLAS/cuBLAS ile çok daha hızlı yapar, ama altta yatan mantık bu.

2.10 Bu Dersin Özeti

  1. Lineer denklem sistemi: \(A\mathbf{x} = \mathbf{b}\).
  2. Üç bakış: satır görünümü (doğrular/düzlemler), kolon görünümü ⭐ (vektörler), matris formu (cebirsel).
  3. Kolon görünümü kritik, çünkü yüksek boyutta da işliyor; satır görünümü çöker.
  4. Lineer kombinasyon: \(\alpha_1\mathbf{v}_1 + \alpha_2\mathbf{v}_2 + \dots\) — dersin en temel işlemi.
  5. Büyük soru: Kolonların kombinasyonları tüm uzayı doldurur mu? Evet ise \(A\) non-singular.
  6. Singular durum: kolonlar bağımlıysa kombinasyonlar bir alt-uzayı doldurur, bazı \(\mathbf{b}\) erişilmezdir.
  7. Yüksek boyutta aynı mantık çalışır — sadece çizemezsin.
  8. \(A\mathbf{x}\): kolon yöntemi (ML için doğru zihin modeli) ya da dot product (kod aritmetiği).
ÖnemliTek bir cümle

\(A\mathbf{x}\) ifadesi, \(A\) matrisinin kolonlarının \(\mathbf{x}\) bileşenleriyle ağırlıklandırılmış lineer kombinasyonudur — sonraki 33 ders bu cümlenin üzerine inşa edilir.

2.11 Kontrol Soruları

(a) Satır yöntemi (dot product):

  • \(y_1 = 1 \cdot 5 + 2 \cdot 6 = 17\)
  • \(y_2 = 3 \cdot 5 + 4 \cdot 6 = 39\)
  • \(\mathbf{y} = (17, 39)\)

(b) Kolon yöntemi (lineer kombinasyon):

\[ A\mathbf{x} = 5 \cdot \begin{pmatrix} 1 \\ 3 \end{pmatrix} + 6 \cdot \begin{pmatrix} 2 \\ 4 \end{pmatrix} = \begin{pmatrix} 5 \\ 15 \end{pmatrix} + \begin{pmatrix} 12 \\ 24 \end{pmatrix} = \begin{pmatrix} 17 \\ 39 \end{pmatrix} \]

İki yöntem aynı sonucu verir. ✓

\[ A = \begin{pmatrix} 1 & 2 & 3 \\ 2 & 4 & 6 \\ 1 & 1 & 2 \end{pmatrix} \]

Cevap: Lineer bağımlı.

Kolonlar: \(\mathbf{c}_1 = (1, 2, 1)\), \(\mathbf{c}_2 = (2, 4, 1)\), \(\mathbf{c}_3 = (3, 6, 2)\).

Dikkat: \(\mathbf{c}_3 = \mathbf{c}_1 + \mathbf{c}_2\) (1+2=3, 2+4=6, 1+1=2). Üçüncü kolon yeni bilgi getirmiyor. Matris singular.

Her \(\mathbf{b}\) için çözüm yok — sadece \(\mathbf{c}_1\) ve \(\mathbf{c}_2\) kombinasyonu olarak yazılabilen \(\mathbf{b}\) vektörleri çözülebilir (kolon uzayı 3D yerine 2D’lik bir düzlem).

Cevap: Evet, aynı şey.

  • “Non-singular” = \(A\mathbf{x} = \mathbf{b}\) her \(\mathbf{b}\) için çözülebilir.
  • Çözüm = \(\mathbf{b}\) vektörünü \(A\)’nın kolonlarının kombinasyonu olarak yazma.
  • “Her \(\mathbf{b}\) için çözüm var” = “her \(\mathbf{b}\) kolonların kombinasyonu olarak yazılabilir”.
  • “Her \(\mathbf{b}\) yazılabilir” = “kombinasyonlar tüm uzayı doldurur”.

Bu eşdeğerlik dersin temel mesajlarından biri (Strang 27:46–30:35).

Cevap: \(W\)’nin etkin rank’i en fazla \(768 - 200 = 568\). \(W\) 768 boyutlu çıkış alanında çalışmasına rağmen, ulaşabildiği vektörler 568 boyutluk bir alt-uzayda yatıyor.

Sonuç:

  • Temsil gücü tam 768 boyutlu değil; 200 boyutluk “kayıp” var.
  • Düşük-rank temsille daha verimli ifade edilebilir: \(W \approx U V^T\), \(U, V \in \mathbb{R}^{768 \times r}\).
  • LoRA fine-tuning’de tipik \(r = 4{-}32\). \(768 \times 768 = 589{,}824\) parametre yerine \(2 \times 768 \times r\).
  • \(r = 32\) için \(\approx 12\times\) bellek tasarrufu.

LoRA’nın temel sezgisi: fine-tuning için tam rank gerekli değil, çünkü ağırlık güncellemeleri zaten düşük ranklıdır.

2.12 Egzersizler

Egzersiz 1. Aşağıdaki sistemi (a) satır yöntemi (çizerek), (b) kolon yöntemi (vektörleri çizerek), (c) matris formunda yaz:

\[ \begin{aligned} 3x + 2y &= 7 \\ x - y &= 1 \end{aligned} \]

Egzersiz 2. \(A = \begin{pmatrix} 1 & 1 \\ 1 & 2 \end{pmatrix}\) matrisinin kolonlarının kombinasyonlarının tüm 2D düzlemi doldurduğunu göster. Rastgele bir \(\mathbf{b}\) seç, \(\mathbf{x}\)’i bul.

Egzersiz 3. \(A = \begin{pmatrix} 1 & 2 \\ 2 & 4 \end{pmatrix}\) matrisinin kolonları hangi alt-uzayı tarar? Hangi \(\mathbf{b}\) vektörleri için çözüm var, hangileri için yok? (İpucu: \(\mathbf{c}_2 = 2\mathbf{c}_1\).)

Egzersiz 4. (Python — sayısal doğrulama) \(5 \times 5\) rastgele bir sistem kur, çözümü hem kolon hem dot-product yöntemiyle elle hesapla ve np.linalg.solve ile karşılaştır.

import numpy as np
rng = np.random.default_rng(0)

A = rng.standard_normal((5, 5))
b = rng.standard_normal(5)
x = np.linalg.solve(A, b)

# Kolon yontemi ile A @ x doğrula
Ax_kolon = sum(x[j] * A[:, j] for j in range(5))
# Satir (dot product) yontemi ile
Ax_satir = np.array([np.dot(A[i], x) for i in range(5)])

print("x        :", np.round(x, 3))
print("|Ax_kolon - b|:", np.linalg.norm(Ax_kolon - b))
print("|Ax_satir - b|:", np.linalg.norm(Ax_satir - b))
assert np.allclose(Ax_kolon, b) and np.allclose(Ax_satir, b)

Egzersiz 5. \(A\) matrisi \(n \times n\), kolonları lineer bağımsız. \(A\mathbf{x} = \mathbf{0}\) denkleminin kaç çözümü vardır? (Bu sorunun cevabı Ders 6’da sıfır uzayı \(N(A)\) kavramının temelini oluşturacak.)

2.13 Sonraki Ders İçin Hazırlık

Ders 2: Matrislerle Eliminasyon

Bu derste sezgi seviyesinde kaldık. Genel bir 3×3 sistem verilse hâlâ sistematik çözüm yöntemimiz yok — kolon görünümünde sezgi bazı özel durumlarda çalışır, genel durumda yetmez.

“Every bit of software, too — production, large-scale software would solve the equations.” — Strang, 25:35

Ders 2’de Gauss eliminasyonunun mekaniği, hata durumları (sıfır pivot, satır değiş tokuşu), ve LU ayrışımına giden yol. numpy linalg.solve arka planda tam olarak bunu yapar.

UyarıDers 2 öncesi yapılacak
  • Egzersizleri çöz — özellikle 4 (Python doğrulama) ve 5 (sıfır çözüm = bağımsız kolonlar).
  • Bu cümleyi içselleştir: \(A\mathbf{x}\) ifadesi, \(A\)’nın kolonlarının lineer kombinasyonudur.”
  • Strang’in PS1’inden 2-3 problem dene (OCW 18.06SC sayfası).

2.14 Anahtar Kavramlar (Cheat Sheet)

Kavram Tanım Strang’da
Lineer denklem sistemi \(A\mathbf{x} = \mathbf{b}\) formundaki denklemler kümesi 1:02
Matris Sayıların dikdörtgen düzeni; lineer dönüşümü temsil eder 2:30
Vektör \(n\) bileşenli sıralı sayı listesi; geometrik nesne 3:21
Satır görünümü Her denklemi geometrik doğru/düzlem olarak görme 4:20
Kolon görünümü \(A\mathbf{x}\)’i kolonların kombinasyonu olarak görme 8:39
Lineer kombinasyon \(\alpha_1\mathbf{v}_1 + \alpha_2\mathbf{v}_2 + \dots\) — dersin temel işlemi 9:51
Non-singular matris Her \(\mathbf{b}\) için \(A\mathbf{x} = \mathbf{b}\)’nin çözümü olan matris 30:04
Singular matris Kolonları bağımlı, bazı \(\mathbf{b}\) için çözüm yok 32:09
Lineer bağımsızlık Hiçbir vektörün diğerlerinin kombinasyonu olarak yazılamaması 34:00 (örtük)
Dot product \(\mathbf{u} \cdot \mathbf{v} = \sum_i u_i v_i\) 37:52

2.15 ML Bağlantıları Özeti

İpucu5 köprü
  1. \(W\mathbf{x}\) = \(W\)’nin kolonlarının kombinasyonu → Her nöral ağ katmanı bu işlem. Embedding’ler, attention’da \(V\), MLP’lerin gizli temsilleri — hepsi kolon yorumuyla anlam kazanır.
  2. Kolon uzayı \(C(W)\) → Katmanın “ulaşabildiği” çıkışlar. Bottleneck/encoder katmanı tasarımı bu kavramla.
  3. Lineer bağımlılık → Rank → LoRA → Düşük rank kabul edip \(\Delta W = AB^T\) ile parametrize etme; LoRA’nın temel sezgisi.
  4. Singular = null vektör → dropout / pruning → Bazı yön sinyallerini sıfırlayan operasyonlar.
  5. Yüksek boyut sezgisi → Tüm ML 768D+ boyutlarda yaşar. 2D/3D’den 768D’ye taşınmış sezgi alışkanlığı, bu dersin en kalıcı kazancı.
ÖnemliTek bir şey alıp gideceksen

\(A\mathbf{x}\) ifadesi \(A\)’nın kolonlarının kombinasyonudur. Bu cümle, sonraki 33 ders, ve neredeyse tüm modern ML’in zihinsel iskeletidir. Üç kez okuduğunda “evet, kolonların kombinasyonu” diye içinde otursa, bu dersin amacına ulaşmış olur.