---
title: "Lineer Denklemlerin Geometrisi"
subtitle: "Satır, kolon, matris — üç bakış, bir denklem"
---
::: {.callout-note title="Bölüm bilgisi"}
- **Strang'in videosu:** [YouTube — Lecture 1: The Geometry of Linear Equations](https://www.youtube.com/watch?v=J7DzL2_Na80) (≈40 dk)
- **OCW sayfası:** [MIT 18.06SC — Lecture 1](https://ocw.mit.edu/courses/18-06sc-linear-algebra-fall-2011/resources/the-geometry-of-linear-equations/)
- **Okuma süresi:** ≈30 dk
:::
## Bu Derste Ne Var? {#sec-bu-derste}
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.
```{mermaid}
%%| label: fig-concept-map
%%| fig-cap: "Aynı problem, üç bakış — ve modern ML için neden kolon görünümü kritik."
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
```
> *"Pay attention, this is the key point."* — Strang, 8:39
::: {.callout-tip title="Builder 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](https://arxiv.org/abs/2106.09685) çı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.
:::
## İki Denklem, İki Bilinmeyen {#sec-2d-sistem}
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.
## Birinci Bakış: Satır Görünümü {#sec-satir-gorunumu}
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)
```{python}
#| label: fig-satir-gorunumu
#| fig-cap: "Satır görünümü: iki doğrunun kesişimi (1, 2). 2D'de güzel; 3D'de düzlemlerin kesişimi gözle bulunması zor; 9D'de imkânsız."
#| fig-width: 8
#| fig-height: 6
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()
```
İ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.
## İkinci Bakış: Kolon Görünümü ⭐ {#sec-kolon-gorunumu}
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$ ✓
- 2. 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}$.
```{python}
#| label: fig-kolon-gorunumu
#| fig-cap: "Kolon görünümü: $\\mathbf{c}_1$ vektörünün 1 katı + $\\mathbf{c}_2$ vektörünün 2 katı = $\\mathbf{b}$. Vektörleri uç uca topla."
#| fig-width: 9
#| fig-height: 7
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()
```
::: {.callout-tip title="Builder 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.
:::
## Tüm Kombinasyonlar Neyi Doldurur? {#sec-kapsama}
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.
```{python}
#| label: fig-kombinasyon-doldur
#| fig-cap: "$\\mathbf{c}_1$ ve $\\mathbf{c}_2$ vektörlerinin bağımsız olduğu zaman, $\\alpha\\mathbf{c}_1 + \\beta\\mathbf{c}_2$ kombinasyonları tüm düzlemi tarar (sol). Bağımlı kolonlar (sağ) sadece bir doğruyu tarar — singular durum."
#| fig-width: 12
#| fig-height: 5
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()
```
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.
## Üç Boyuta Çıkış: 3×3 Sistem {#sec-3d}
İ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
```{python}
#| label: fig-3d-sistem
#| fig-cap: "3D kolon görünümü: $\\mathbf{b}$ tam olarak $\\mathbf{c}_3$'e denk seçildi, çözüm $(0, 0, 1)$ — sadece 3. kolondan bir tane al."
#| fig-width: 10
#| fig-height: 7
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()
```
## Büyük Soru: Her $\mathbf{b}$ İçin Çözüm Var mı? {#sec-buyuk-soru}
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.
::: {.callout-tip title="Builder 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.
:::
## Yüksek Boyutlarda Düşünmek {#sec-yuksek-boyut}
> *"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.
::: {.callout-tip title="Builder 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.
:::
## Matris × Vektör: İki Hesaplama Yolu {#sec-matris-vektor}
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
```{python}
#| label: code-iki-yontem
#| code-fold: false
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.
## Bu Dersin Özeti {#sec-ozet}
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).
::: {.callout-important title="Tek 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.
:::
## Kontrol Soruları {#sec-sorular}
::: {.callout-note collapse="true" title="Soru 1: A = ((1,2),(3,4)) ve x = (5,6) için Ax'i (a) satır yöntemi, (b) kolon yöntemi ile hesapla."}
**(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. ✓
:::
::: {.callout-note collapse="true" title="Soru 2: Aşağıdaki matrisin kolonları bağımlı mı bağımsız mı? Ax = b her b için çözülebilir mi?"}
$$
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).
:::
::: {.callout-note collapse="true" title="Soru 3: 'A non-singular' ile 'A'nın kolonlarının kombinasyonları tüm uzayı doldurur' aynı şeyi mi söylüyor?"}
**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).
:::
::: {.callout-note collapse="true" title="Soru 4: (Builder) 768×768 W matrisinin 200 kolonu diğer kolonların kombinasyonu. Bu ne anlama gelir?"}
**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.
:::
## Egzersizler {#sec-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.
```{python}
#| label: code-egzersiz-4
#| code-fold: false
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.)
## Sonraki Ders İçin Hazırlık {#sec-sonraki}
**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.
::: {.callout-warning title="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ı).
:::
## Anahtar Kavramlar (Cheat Sheet) {#sec-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 |
## ML Bağlantıları Özeti {#sec-ml-baglantilar}
::: {.callout-tip title="5 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ı.
:::
::: {.callout-important title="Tek 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.
:::