Ana sayfa / Özet kartları Özet kartları Her dersin SONUNDAKİ özet kartı, burada TEK bir sayfada birleşti. Mülakata ya da bir projeye hazırlanırken,150 dersi tekrar AÇMADAN, sadece burayı TARAYARAK tüm kursu hızlıca hatırlayabilirsin. Bir madde tanıdık gelmiyorsa, başlığa tıklayıp o dersin TAMAMINA gidebilirsin.
İstatistik 20 ders Ek: Matematik Temelleri 14 ders Veri Bilimi 16 ders Makine Öğrenmesi 31 ders Derin Öğrenme: Görüntü 35 ders Derin Öğrenme: NLP & LLM 22 ders Prompt Mühendisliği 12 ders Ortalama her değeri hesaba katar; medyan sadece sıradaki konumu önemser — bu yüzden aykırı değerlere farklı tepki verirler. Mod, en sık tekrarlanan değerdir; kategorik veya çok tekrarlı veride en anlamlısı odur. Standart sapma ve varyans, verinin ortalamadan ne kadar dağıldığını ölçer; IQR aynı işi uç değerlere karşı daha dayanıklı yapar. Çarpık veya aykırı değerli veride medyan ve IQR, ortalama ve standart sapmadan daha güvenilir bir özet verir. Bir özet istatistiği raporlamadan önce veriye mutlaka görsel olarak (histogram, kutu grafiği) bak. Olasılık, bir olayın sonsuz tekrarda görülme oranının yakınsadığı sayıdır — 0 ile 1 arasında. P(A veya B) = P(A) + P(B) − P(A ve B); kesişimi çıkarmayı unutma. İki olay bağımsızsa P(A ve B) = P(A) × P(B) — bunu varsaymadan önce test et. Az sayıda denemeden genel bir olasılık çıkarma; büyük sayılar yasası ancak çok tekrarda işler. Örneklem uzayını ve olayları net tanımlamak, olasılık hesabının ilk ve en kritik adımıdır. Rassal değişken, şansa bağlı bir sonucu sayıya çevirir; kesikli (sayılabilir değerler) veya sürekli (aralıktaki her değer) olabilir. Kesiklide PMF, her değerin olasılığını doğrudan verir; toplamları 1 eder. Süreklide PDF sadece bir yoğunluktur — gerçek olasılık, bir aralığın altındaki alandan gelir. Sürekli bir değişkende tek bir noktanın olasılığı her zaman sıfırdır. CDF, F(x) = P(X ≤ x), her iki dünyada da aynı mantıkla çalışır — kesiklide basamaklı, süreklide pürüzsüz. Bernoulli, tek bir denemede iki sonuçlu (başarı/başarısızlık) en temel kesikli dağılımdır — tek parametresi p. Binom, n bağımsız Bernoulli denemesindeki toplam başarı sayısının dağılımıdır. Beklenen değer E[X] = np, varyans Var(X) = np(1-p) — formülle doğrudan hesaplanır, simülasyona gerek yok. Binom uygulamak için iki şart var: denemeler bağımsız olmalı, başarı olasılığı (p) her denemede sabit olmalı. n büyüdükçe Binom dağılımının şekli Normal dağılıma benzemeye başlar — bu benzerlik ileride merkezi limit teoreminde işimize yarayacak. Poisson, belirli bir aralıkta (zaman, alan) rastgele ve bağımsız gerçekleşen olayların sayısını modeller. Tek parametresi λ — hem beklenen değer hem varyans λ'ya eşittir. Poisson, Binom'un n çok büyük, p çok küçükken (np=λ sabit) aldığı limit halidir. λ arttıkça dağılım sağa kayar, genişler ve giderek Normal dağılıma benzemeye başlar. Web trafiği, çağrı merkezi, kalite kontrol gibi "nadir, bağımsız olay sayma" problemlerinin standart aracıdır. Normal dağılım, ortalama etrafında yoğunlaşan ve simetrik seyrekleşen değerleri tanımlar — μ (merkez) ve σ (yayılım) ile belirlenir. PDF bir yoğunluktur, olasılık değildir; gerçek olasılık için bir aralığın altındaki alanı (CDF farkını) hesaplarız. CDF, "bu değer ve altı" sorusunun doğrudan cevabıdır — 0 ile 1 arasında, hep artan. "80 ve üzeri oranı" gibi sorular 1 − CDF(80) ile çözülür. PDF yüksekliğini olasılıkla karıştırmak en yaygın hata — sürekli dağılımda tek nokta olasılığı sıfırdır. Uniform dağılımda [a,b] aralığındaki her değer eşit yoğunluğa sahiptir — hiçbir değer diğerinden favori değildir. PDF sabittir: 1/(b-a). Toplam alanın 1 olması bu yüksekliği zorunlu kılar. Olasılık sadece aralığın uzunluğuna bağlıdır, aralığın nerede olduğuna değil. Ortalama tam orta nokta (a+b)/2'dir. Bilgisayarların rastgele sayı üretiminin temelidir — diğer tüm dağılımlar buradan türetilir. Log-normal, logaritması Normal dağılan bir değişkenin dağılımıdır — her zaman pozitif, hep sağa çarpık. Çarpımsal büyüme süreçlerinden (gelir, hisse fiyatı, ev fiyatı) doğal olarak ortaya çıkar. μ ve σ, değişkenin kendisinin değil, logaritmasının ortalaması ve std sapmasıdır. Ortalama her zaman medyandan büyüktür — sağa çarpıklığın matematiksel imzası. Sağa çarpık veride medyan, ortalamadan daha güvenilir bir merkez ölçüsüdür. Pareto, bir alt sınırın (xm) üzerinde ağır kuyruklu değerleri modeller — büyük değerlerin olasılığı yavaş söner. α (şekil parametresi) küçüldükçe kuyruk ağırlaşır, uç değerler daha olası hâle gelir. "80/20 kuralı", Pareto tipi dağılımların gelir/değer yoğunlaşmasının popüler bir yansımasıdır — kesin oran α'ya bağlıdır. Log-log eksende düz çizgi, güç yasası (Pareto benzeri) davranışın karakteristik imzasıdır. Ağır kuyruklu veride ortalama yanıltıcıdır — medyan ve yüzdelik dilimler tercih edilmelidir. Merkezi limit teoremi: kaynak dağılım ne olursa olsun, örneklem ortalamalarının dağılımı n büyüdükçe Normal'e yaklaşır. Normalleşen veri değil, verinin ortalamasıdır — tek bir gözlem hiçbir zaman normalleşmez. Örneklem ortalamalarının std sapmasına standart hata denir: σ/√n. Standart hatayı yarıya indirmek için örneklem büyüklüğünü 4 katına çıkarman gerekir (√n ilişkisi). Bu teorem, güven aralığı ve hipotez testi gibi ileride göreceğimiz yöntemlerin temel dayanağıdır. Popülasyon, incelemek istediğin bütün birimler; örneklem, bunlardan seçtiğin küçük alt küme. Örneklem hatası (tahmin ile gerçek arasındaki fark) rastgele örneklemede kaçınılmazdır ama n büyüdükçe küçülür. Yanlı örnekleme sistematik bir hatadır — büyüklükle düzelmez, sadece örnekleme YÖNTEMİNİ değiştirerek düzelir. Rastgele örnekleme, popülasyondaki her birimin seçilme şansının eşit (veya bilinen) olmasını garanti eder. Bir örneklemin ne kadar "büyük" olduğu değil, ne kadar "temsili" olduğu asıl belirleyicidir. Güven aralığı, bir örneklem ortalamasının etrafına kurulan ve gerçek ortalamayı yakalama şansı yüksek bir bant çizer. "%95 güven" YÖNTEMİN uzun vadeli başarı oranını ifade eder — tek bir aralık için olasılık yorumu yanlıştır. Formül: x̄ ± z* × (s/√n) — z*, seçilen güven seviyesine göre belirlenir. Güven seviyesi arttıkça aralık genişler; örneklem büyüklüğü arttıkça aralık daralır. Küçük-orta örneklemlerde z yerine t-dağılımı kullanmak, kapsama oranını nominal seviyeye daha yakın tutar. Hipotez testi, H0 (değişim yok) varsayımıyla başlar ve kanıtın bu varsayımla ne kadar uyumsuz olduğuna bakar. Test istatistiği, gözlemlenen sonucun H0dan kaç standart hata uzakta olduğunu ölçer. p-değeri, H0 doğruyken bu kadar uç bir sonucu şans eseri görme olasılığıdır — H0nın olasılığı DEĞİLDİR. p < α ise H0 reddedilir; p ≥ α ise reddedilemez (bu, H0nın doğru olduğu anlamına gelmez). α, veriye bakmadan önce belirlenmelidir — sonradan değiştirmek testin dürüstlüğünü bozar. İki oranlı z-testi, iki grubun gerçek oranının aynı olup olmadığını (A/B testi gibi) test eder. Havuzlanmış oran, H0'ın "iki grup aynı" varsayımıyla tutarlı bir standart hata hesaplamayı sağlar. z-testi büyük örneklemlerde (n≥30 gibi) uygundur — merkezi limit teoremi bunu garanti eder. Sınır durumdaki bir p-değeri (0.05'e yakın), eşiği esnetme değil, daha fazla veri toplama sinyalidir. Testi tekrar tekrar çalıştırıp "istediğin sonucu bulmak" (p-hacking), gerçek yanlış pozitif oranını ciddi şekilde artırır. t-testi, popülasyon std sapması bilinmediğinde (neredeyse her zaman) ve/veya örneklem küçükken kullanılır. t-dağılımı, örneklemden std sapma tahmin etmenin getirdiği ekstra belirsizliği kalın kuyruklarla yansıtır. Serbestlik derecesi (df) küçüldükçe kritik değerler büyür — küçük örneklemde daha güçlü kanıt gerekir. df büyüdükçe t-dağılımı Normal'e yaklaşır; büyük örneklemde t ve z testleri neredeyse aynı sonucu verir. Eşleştirilmiş (önce/sonra) veriye bağımsız değil, eşleştirilmiş t-testi uygulanmalıdır. Tip 1 hata (α): H0 gerçekte doğruyken yanlışlıkla reddetmek — yanlış alarm. Tip 2 hata (β): H0 gerçekte yanlışken reddedememek — gerçek bir etkiyi kaçırmak. İstatistiksel güç (1−β), gerçek bir etkiyi doğru şekilde tespit etme olasılığıdır. Gücü artıran üç etken: daha büyük etki büyüklüğü, daha büyük örneklem, daha gevşek α — ama α gevşetmek Tip 1 riskini artırır. "H0 reddedilmedi" hiçbir zaman "etki yok" anlamına gelmez — düşük güçlü bir test gerçek etkileri kaçırabilir. Ki-kare testi, kategorik değişkenler arasında bir ilişki olup olmadığını test eder. Gözlenen ve beklenen (H0 altında hesaplanan) frekanslar arasındaki fark, ki-kare istatistiğini oluşturur. Fark ne kadar büyükse (ve beklenen sayıya göre orantılı olarak ne kadar önemliyse), ki-kare o kadar büyür. Ki-kare sadece "ilişki var mı" sorusuna cevap verir — hangi kategorinin nasıl farklı olduğunu göstermez. Küçük beklenen frekanslarda (genelde <5) ki-kare güvenilmez olur, alternatif testler gerekir. ANOVA, ikiden fazla grubun ortalamalarını TEK bir testte karşılaştırır. F istatistiği, gruplar arası varyansı gruplar içi varyansa oranlar — büyük F, gerçek bir fark olduğuna işaret eder. Birden fazla ayrı t-testi kullanmak, gerçek fark olmasa bile en az bir yanlış alarm riskini katlar (çoklu karşılaştırma sorunu). ANOVA sadece "en az bir grup farklı" der — hangisinin farklı olduğunu bulmak için post-hoc testler gerekir. Gruplar arasındaki varyansların birbirine yakın olması, ANOVA'nın güvenilir çalışması için önemli bir varsayımdır. Bayes teoremi, yeni bir kanıt ışığında bir olasılığı (taban oranından sonsal olasılığa) günceller. Taban oranı (prior), sonucu en az testin kendisi kadar etkiler — özellikle nadir olaylarda. Doğal frekans yaklaşımı (1000 kişi üzerinden düşünmek), Bayes formülünü sezgisel hale getirir. Duyarlılık yüksek olsa bile, taban oranı düşükse "pozitif çıkan biri gerçekten pozitif mi" sorusunun cevabı düşük olabilir. Nadir olay tespitinde (hastalık, dolandırıcılık, spam), taban oranını görmezden gelmek en yaygın yorumlama hatasıdır. Korelasyon katsayısı (r), iki değişken arasındaki DOĞRUSAL ilişkinin gücünü −1 ile +1 arasında özetler. Aynı r değeri çok farklı veri şekillerinden gelebilir (Anscombe dörtlüsü) — her zaman grafiğe de bak. Korelasyon nedensellik kanıtı değildir: A→B, B→A, veya gizli bir C→A,B her zaman olası açıklamalardır. Karışık değişkenler (confounder), iki değişkeni de bağımsız olarak etkileyip sahte bir ilişki yaratabilir. r sadece doğrusal ilişkiyi yakalar — güçlü ama eğrisel bir ilişkide r yanıltıcı şekilde düşük çıkabilir. Bu kurstaki HER matematiksel sembol, zaten sezgisel olarak bildiğin bir İŞLEMİN kısaltmasıdır. Σ (sigma) sembolü, SADECE 'bir listeyi topla' demektir -- np.sum() ile birebir AYNI sonucu verir. 'Benzerlik' (nokta çarpım) ve 'değişim hızı' (türev) kavramları, GÜNLÜK sezgiyle YAKINDAN ilişkilidir. Bu ekin yol haritası: 2-7. ders VEKTÖR/MATRİS, 8-13. ders FONKSİYON/TÜREV/GRADYAN, 14. ders ÖZET. Amaç EZBER değil, sembolleri ARKASINDAKİ somut işlemle TANIMAKTIR. Bir vektör, sıralı bir sayı listesidir -- veriyi "ölçülebilir özellikler dizisi" olarak temsil eder. Vektör uzayında YAKIN olan noktalar, gerçek dünyada da BENZER şeyleri temsil eder (bu dersteki elma-armut örneği). Bir vektörün 'boyutu', kaç sayıdan oluştuğudur -- 2'den (meyve örneği) 784'e (görüntü) ve daha fazlasına çıkabilir. Boyut sayısı ne olursa olsun, MANTIK aynı kalır: sıralı liste, yakınlık = benzerlik. Bu fikir, Veri Bilimi, Makine Öğrenmesi ve NLP kategorilerindeki "veri" kavramının TEMELİDİR. Vektör toplama, HER boyutu ayrı ayrı toplamaktır -- iki hareketi arka arkaya yapmakla AYNI. Skalerle çarpma, bir vektörün YÖNÜNÜ korur, BÜYÜKLÜĞÜNÜ (ve gerekirse yönünü, negatifse) değiştirir. Norm (||v||), bir vektörün UZUNLUĞUNU ölçer -- Pisagor teoreminin HER boyuta genelleşmiş hâlidir. Bu dersteki [3,0] + [0,4] = [3,4] örneği, normu TAM 5 olan klasik bir 3-4-5 üçgenidir. Bu üç işlem, Makine Öğrenmesi'ndeki ağırlık güncellemelerinin ve düzenlileştirmenin TEMELİDİR. Nokta çarpım (A·B), karşılık gelen bileşenleri çarpıp toplayarak TEK bir sayı üretir. Nokta çarpımın İŞARETİ yön ilişkisini anlatır: pozitif = aynı yöne yakın, sıfıra yakın = dik, negatif = zıt yöne yakın. Kosinüs benzerliği (A·B / (||A|| ||B||)), nokta çarpımı normlara bölerek SADECE yönü karşılaştırır -- büyüklükten bağımsızdır. Bu dersteki K1-K2 örneği (kosinüs=0.999) bunu KANITLIYOR: FARKLI uzunluktaki vektörler, AYNI yönde olduğunda YÜKSEK benzerlik verir. Kosinüs benzerliği, NLP embedding karşılaştırmalarının ve Prompt Mühendisliği'ndeki belge aramasının TEMELİDİR. Bir matris, aynı boyuttaki birden fazla vektörün üst üste yığılmasıyla oluşan bir TABLODUR. Bir matrisin ŞEKLİ (shape), (satır sayısı, sütun sayısı) çiftidir. M[i] bir SATIRA (bir örneğin TAM vektörüne) erişir; M[:, j] bir SÜTUNA (tüm örnekler için AYNI özelliğe) erişir. "Satır=örnek, sütun=özellik" fikri, pandas DataFrame'lerinden ML veri kümelerine kadar HER YERDE karşına çıkar. Bu dersteki 3x2 meyve matrisi, ilerideki TÜM veri temsillerinin en BASİT hâlidir. Bir matrisi bir vektörle çarpmak (Mv), o vektörü uzayda DÖNÜŞTÜRÜR -- döndürür, ölçekler ya da eğer. Sonucun her bileşeni, matrisin İLGİLİ SATIRI ile vektörün NOKTA ÇARPIMIDIR -- 4. dersteki nokta çarpım burada TEKRAR karşına çıkar. Farklı matrisler, farklı dönüşüm TÜRLERİNİ temsil eder: kimlik, ölçekleme, döndürme, kesme. Matris çarpımı KOMÜTATİF DEĞİLDİR -- dönüşümlerin uygulanma SIRASI sonucu değiştirir. Bir sinir ağı katmanının "öğrendiği" şey, ÖZÜNDE, doğru dönüşüm matrisini BULMAKTIR. Bir özvektör, bir matrisle çarpılınca YÖNÜ hiç değişmeyen özel bir vektördür. Bir özdeğer, o özvektörün ne KADAR ölçeklendiğini (kaç katına çıktığını) gösteren sayıdır: Mv = λv. np.linalg.eig(M), bir matrisin TÜM özdeğer ve özvektörlerini otomatik bulur. Bu dersteki M=[[2,1],[1,2]] örneğinde özdeğerler 3 ve 1, özvektörler [1,1] ve [1,-1] yönleridir. Makine Öğrenmesi kategorisindeki PCA, verideki en önemli yönleri bulmak için TAM OLARAK bu fikri kullanır. Bir fonksiyon, bir girdi alıp TEK bir çıktı üreten bir makinedir -- aynı girdi HER ZAMAN aynı çıktıyı verir. Bir fonksiyonun grafiği, TÜM (girdi, çıktı) çiftlerinin bir resmidir. İki nokta arasındaki ORTALAMA değişim hızı, (çıktı farkı) / (girdi farkı) olarak hesaplanır. Bu ortalama hız, fonksiyonun HER noktasındaki hızı YANSITMAZ -- sadece o iki nokta arasındaki ortalamadır. Bir noktadaki ANLIK değişim hızını bulmak, 9. dersin (türev) konusudur. Türev, bir noktadaki ANLIK değişim hızıdır -- h sıfıra yaklaşırken ortalama hızın yakınsadığı değer. Geometrik olarak türev, o noktadaki TEĞET doğrunun EĞİMİDİR. x^n fonksiyonunun türevi, ANALİTİK olarak n·x^(n-1) formülüyle bulunur. Teğet doğru, SADECE o noktanın yakınında İYİ bir yaklaşımdır -- uzaklaştıkça fark büyür. Türev, backpropagation ve gradyan inişinin (10-12. dersler) TEMEL yapı taşıdır. Zincir kuralı, iç içe geçmiş fonksiyonların (h(x)=f(g(x))) türevini bulmanın yoludur: f'(g(x)) · g'(x). Bu ders, dış fonksiyonun türevinin İÇ fonksiyonun türeviyle ÇARPILDIĞINI (toplanmadığını) gösterdi. Backpropagation, zincir kuralının bir hesaplama grafiğinin TÜM katmanlarına GERİYE doğru uygulanmasıdır. Bu dersteki mini "sinir ağı" örneğinde (w→z→a→Kayıp), üç yerel türev ÇARPILARAK dKayıp/dw=1248 bulundu. Katman sayısı ne olursa olsun (2 ya da 200), mantık AYNIDIR: her katmanın yerel türevini ÇARP. Kısmi türev, diğer değişkenleri sabit tutup, sadece birine göre türev almaktır. Gradyan (∇f), tüm kısmi türevleri bir vektörde toplar -- ve fonksiyonun en dik çıkış yönünü gösterir. Yönlü türev (gradyan ile bir yön vektörünün nokta çarpımı), gradyan yönünde EN BÜYÜK değerini alır. Bu dersteki f(x,y)=x²+y² örneğinde gradyan (2,4), eş-yükselti çizgilerine DİK çıktı. Gradyan inişi (12. ders), parametreleri gradyanın TERSİ yönünde güncelleyerek kaybı azaltır. Gradyan inişi, gradyanın TERSİ yönünde küçük adımlar atarak bir fonksiyonun en küçük olduğu noktayı arar. Güncelleme kuralı: w_yeni = w - öğrenme_oranı * gradyan(w). Bu dersteki örnekte 40 adım sonra w, hedefe (3.0) neredeyse TAM ulaştı (kayıp neredeyse sıfır). Öğrenme oranı ÇOK KÜÇÜKSE yavaş ama güvenli, ÇOK BÜYÜKSE (bu fonksiyon için >1) IRAKSAR. Bu, Makine Öğrenmesi kategorisindeki GradyanİnişiDemo bileşeninin ve TÜM derin öğrenme eğitiminin TEMEL algoritmasıdır. Üstel fonksiyon, katlanarak büyümeyi (ya da küçülmeyi) anlatır -- ilk başta yavaş, sonra HIZLA patlar. Logaritma, üstelin TAM TERSİDİR: log(exp(x))=x ve exp(log(x))=x. Logaritmanın en pratik faydası: log(a·b) = log(a) + log(b) -- çarpmayı toplamaya ÇEVİRİR. Bu dersteki 400-olasılık örneği, doğrudan çarpımın SIFIRA yuvarlandığını (alt taşma), log-toplamının ise KARARLI kaldığını GÖSTERDİ. Softmax (exp) ve çapraz entropi (log), bu dersteki fikirlerin, kursun İLERİDEKİ kategorilerindeki DOĞRUDAN uygulamalarıdır. Vektör → norm → nokta çarpım → matris → dönüşüm → özvektör: vektör cebirinin TAM zinciri. Fonksiyon → türev → zincir kuralı → gradyan → gradyan inişi: kalkülüsün TAM zinciri. Logaritma ve üstel, sayısal kararlılığın (softmax, çapraz entropi) ARKASINDAKİ araçlardır. Bu 14 ders, Makine Öğrenmesi, DL Görüntü, DL NLP ve Prompt Mühendisliği kategorilerinde SÜREKLİ karşına çıkacak. Bir formül seni KORKUTTUĞUNDA, bu kart bir REFERANS noktasıdır -- geri dönüp buradaki BASİT halini HATIRLA. Veri bilimi süreci dört adımdır: soru → veri → model → karar. Net olmayan bir soru, doğru veriyi toplamayı imkansızlaştırır. Model, veriyi soruya cevap verecek şekilde özetleyen araçtır — her zaman karmaşık olması gerekmez. Süreç, ölçülebilir bir kararla ve beklenen etki tahminiyle biter — raporla değil. Bu döngü, kursun geri kalanındaki her aracın (NumPy, pandas, görselleştirme) neden var olduğunu açıklar. NumPy dizisi, bir işlemi tüm elemanlara aynı anda uygulayan (vektörleştirilmiş) bir veri yapısıdır. shape, dtype ve ndim, bir dizinin boyutunu, tipini ve kaç boyutlu olduğunu anlatır. Python listesi ile NumPy dizisi aynı operatörlere (+, *) farklı anlamlar yükler. Karşılaştırma operatörleri de eleman bazlı çalışır, bu da boolean indekslemeyle filtrelemeyi mümkün kılar. Bu "dizi düşüncesi", pandas ve scikit-learn dahil neredeyse tüm veri bilimi araçlarının temelidir. Broadcasting, farklı şekilli dizileri döngüsüz toplamayı/çarpmayı sağlayan bir NumPy kuralıdır. Şekiller SAĞDAN hizalanır; her boyut çifti eşit olmalı veya biri 1 olmalı. Kural sağlanmazsa NumPy ValueError fırlatır — sessizce yanlış sonuç üretmez. reshape, bir dizinin boyutlarını broadcasting kurallarına uyacak şekilde yeniden düzenlemenin standart yoludur. Broadcasting bellekte gerçek kopyalama yapmaz — hızlı ve bellek dostudur. Vektörleştirme, bir işlemi Python döngüsü yerine NumPy'ın derlenmiş, toplu işlem mekanizmasına bırakmaktır. Hız farkının kaynağı: döngü her adımda tip kontrolü tekrarlar, vektörleştirme bunu bir kez yapar. Fark küçük veride bile belirgindir (örnekte 48x), büyük veride çok daha belirgin hale gelir (138x). Vektörleştirilebilir bir işlemi döngüyle yazmak, veri büyüdükçe ciddi performans kaybına yol açar. Bazı sıralı/durum bağımlı hesaplamalar doğrudan vektörleştirilemez — bu bir istisna, kural değil. Series, etiketli (indeksli) tek boyutlu bir veri yapısıdır — NumPy dizisi + anlamlı isimler. DataFrame, ortak bir indeksi paylaşan birden çok Series'in yan yana durduğu bir tablodur. Bir DataFrame'in her sütunu bağımsız bir Series'tir ve kendi dtype'ını taşıyabilir. İndeks, satır numarası olmak zorunda değildir — tarih, kimlik numarası gibi anlamlı bir etiket olabilir. pandas 3'te metin sütunları artık özel bir `str` dtype'ı kullanır (eski sürümlerde `object` idi). pandas bir sütunu, TÜM hücreleri sayı olarak ayrıştırılabiliyorsa sayısal okur — tek bir uyumsuz hücre tüm sütunu metne çevirir. Sayısal görünen metin sütunlarını temizlemek için bilinen kalıpları (birim, ayraç) kaldırıp float() ile çevirmek standart yoldur. Karışık biçimli tarih verisinde otomatik algılamaya güvenmek yerine, her biçimi kendi deseniyle elle ayırt etmek daha güvenilirdir. Eksik değerleri (özel işaretlerle gösterilmiş olsalar bile) NaN'e çevirmek, sonraki analizlerin doğru çalışması için şarttır. Tanınmayan bir veri biçimiyle karşılaşınca sessizce yanlış tahmin yapmak yerine hata fırlatmak daha güvenlidir. .iloc pozisyona (0'dan başlayan sıra), .loc etikete (indeks değeri) göre erişir. Boolean filtreleme, bir koşuldan True/False Series üretip bunu satır filtresi olarak kullanır. Çoklu koşullarda & (ve) ve | (veya) kullanılır — her koşul kendi parantezinde olmalıdır. .loc[koşul, sütunlar], satır filtresini ve sütun seçimini tek satırda birleştirir. and/or Python anahtar kelimeleri pandas Series'lerinde çalışmaz — &/| gerekir. groupby, "böl-uygula-birleştir" mantığıyla veriyi bir sütuna göre gruplayıp her gruba özet fonksiyon uygular. .agg(["count","mean","sum"]) ile aynı anda birden fazla istatistik hesaplanabilir. Birden fazla sütuna göre gruplamak çok seviyeli (multi-index) bir sonuç üretir. pivot_table, aynı gruplama hesabını iki boyutlu, tanıdık bir çapraz tabloya dönüştürür. aggfunc parametresini her zaman açıkça belirtmek, beklenmedik varsayılan davranışları önler. merge, iki tabloyu ortak bir anahtar sütuna göre yan yana birleştirir — SQL JOIN mantığıyla. inner join sadece eşleşen anahtarları tutar; left join sol tablonun tamamını korur. concat, aynı sütun yapısındaki tabloları anahtar araması yapmadan üst üste yığar. how parametresini bilinçli seçmek, birleştirme sonrası kaç satırın kaldığını doğrudan belirler. Birleştirme sonrası satır sayısını her zaman kontrol etmek, beklenmedik veri kaybını veya çoğalmasını erken yakalar. Eksik veri için iki temel strateji vardır: silmek (dropna) ve doldurmak (fillna). dropna() parametresiz kullanıldığında, herhangi bir sütunda eksik olan her satırı siler — subset ile bu daraltılabilir. Sayısal sütunlarda medyan, kategorik sütunlarda mod ile doldurma yaygın ve güvenli bir başlangıç noktasıdır. Eksik verinin RASTGELE mi yoksa bir örüntü mü izlediği, hangi stratejinin güvenli olduğunu belirler. Doldurma stratejisi veriyi korur ama yanlış varsayımlar altında sonuçları sessizce çarpıtabilir. IQR yöntemi, Q1-1.5×IQR ile Q3+1.5×IQR dışındaki değerleri aykırı sayar — medyan tabanlı, dayanıklı. z-skoru yöntemi, ortalamadan 3 standart sapmadan uzak değerleri aykırı sayar — ortalama tabanlı, daha hassas. İki yöntem farklı referans noktaları kullandığı için aynı veride farklı sonuç verebilir. Çarpık dağılımlı veride IQR genelde z-skorundan daha güvenilirdir. Bir aykırı değer bulmak son adım değildir — gerçek mi hata mı olduğunu araştırmak, silme kararından önce gelir. EDA, veriyi tanımak için izlenen sistematik bir üç adımlı süreçtir: genel bakış → kalite kontrolü → ilişkiler. describe(), dtypes ve shape ile başlamak, veri setinin büyüklüğü ve yapısı hakkında hızlı bir resim verir. Eksik ve aykırı değer kontrolü, modellemeden veya karar vermeden ÖNCE yapılmalıdır. Korelasyon ve gruplama, değişkenler arası ilişkileri ortaya çıkarır — ama nedensellik göstermez (20. istatistik dersini hatırla). EDA bir kerelik değil, her yeni veya güncellenen veri setinde tekrarlanan bir alışkanlıktır. Figure, tüm tuvaldir; Axes, üzerine çizim yapılan çerçevedir — bir Figure birden fazla Axes içerebilir. pyplot API (plt.) tek grafikte pratiktir ama çok panelli figürlerde hangi panele işlem yaptığı belirsizleşir. Nesne yönelimli API (ax.) her zaman hangi Axes'e işlem yapıldığını açıkça belirtir — bu kursta tercih ettiğimiz yol. Başlık, eksen etiketi, efsane, kenar çizgisi ve işaret, bir grafiğin standart parçalarıdır. Bu terimleri bilmek, matplotlib dokümantasyonunu ve seaborn gibi üzerine kurulu kütüphaneleri okumayı kolaylaştırır. Grafik seçimi, değişken SAYISI (bir/iki) ve TİPİ (sayısal/kategorik) tarafından belirlenir. Tek sayısal → histogram; tek kategorik → çubuk grafik (sayım). İki sayısal → serpme grafik; sayısal+kategorik → kutu grafiği; iki kategorik → ısı haritası. seaborn, DataFrame sütun adlarını doğrudan anlayarak matplotlib'e göre çok daha az kodla aynı grafikleri üretir. Yanlış grafik türü, veri tipiyle uyuşmadığında hikayeyi gizler veya yanıltır. Öznitelik mühendisliği, var olan sütunlardan modele daha faydalı yeni sütunlar türetmektir. Ölçekleme (StandardScaler, MinMaxScaler), farklı büyüklükteki sayısal sütunları aynı "birime" getirir. StandardScaler formülü, istatistikteki z-skoru ile birebir aynıdır. One-hot encoding, kategorik bir sütunu modelin anlayabileceği 0/1 sütunlarına dönüştürür. Ölçekleyici ve kodlayıcıyı eğitim ve test verisine AYRI ayrı uygulamak, veri sızıntısına yol açar (bir sonraki ders). Veri sızıntısı, test verisi hakkındaki bilginin eğitim sürecine (öznitelik hesaplama dahil) karışmasıdır. Kategori kodlama, ölçekleme gibi her istatistik, SADECE eğitim verisinden öğrenilmeli, sonra test verisine uygulanmalıdır. Sızıntı, test skorunu yapay olarak şişirir — üretimde bu performans kaybolur. Az örnekli (yüksek kardinaliteli) kategorik değişkenlerde sızıntının etkisi çok daha şiddetlidir. Bir test skoru "gerçek olamayacak kadar iyi" görünüyorsa, ilk şüphelenilmesi gereken şey veri sızıntısıdır. Kural tabanlı sistemde kuralı insan yazar; makine öğrenmesinde kural örneklerden öğrenilir. Öznitelik, modelin girdisi; etiket, tahmin etmeye çalıştığımız sonuçtur. Basit bir eşik bile, veriden öğrenilen bir "model" örneğidir. Makine öğrenmesi her problemde gerekli değildir — net kurallı problemlerde kural tabanlı yaklaşım hâlâ tercih edilir. Öğrenilen her model bir hata payı taşır — %100 doğruluk beklemek gerçekçi değildir. Denetimli öğrenme, öznitelik + etiket ile çalışır; amaç yeni örnekler için etiket tahmin etmek. Denetimsiz öğrenme, sadece öznitelikle çalışır; amaç veride gizli örüntüyü/grupları bulmak. Pekiştirmeli öğrenme, sadece bir ödül sinyaliyle çalışır; ajan deneme-yanılma ile en iyi eylemi keşfeder. Saf açgözlü (sömürü odaklı) bir ajan, erken şanslı sonuçlar yüzünden yanlış bir seçime saplanabilir. Az miktarda keşif (epsilon-açgözlü gibi), ajanın gerçek en iyi seçeneği bulma şansını büyük ölçüde artırır. Doğrusal regresyon, veriye en iyi uyan doğruyu (y = mx + b) bulur. 'En iyi', ortalama karesel hatayı (MSE) minimize eden doğru demektir. En küçük kareler (OLS), bu en iyi eğim ve kesişimi kapalı bir formülle doğrudan hesaplar. scikit-learn'ün LinearRegression'ı aynı formülü uygular, deneme yanılma yapmaz. Doğrusal regresyon, daha karmaşık modeller için bir başlangıç karşılaştırma noktasıdır. Çoklu doğrusal regresyon, birden fazla özniteliği aynı anda kullanır — her biri kendi katsayısını alır. Bir katsayı, diğer öznitelikler sabitken o özniteliğin etkisini gösterir. Gradyan inişi, kaybı azaltacak yönde küçük adımlarla ilerleyerek OLS ile aynı sonuca ulaşabilir. Öğrenme oranı çok küçükse yakınsama yavaş olur; çok büyükse model ıraksayabilir. Gradyan inişi, kapalı formülün pahalı/imkansız olduğu büyük ve doğrusal olmayan modellerde (sinir ağları gibi) vazgeçilmezdir. MAE, hataların mutlak değerinin ortalamasıdır — her hataya eşit ağırlık verir. MSE/RMSE, hataların KARESİNİ aldığı için büyük hatalara (aykırı değerlere) çok daha duyarlıdır. RMSE, MSE'nin karekökü olduğu için orijinal birimle yorumlanabilir. R², modelin veri değişiminin ne kadarını açıkladığını gösterir; hiçbir şey öğrenmeyen bir model için tanım gereği 0'dır. Veri setinde aykırı değerler varsa MAE ve RMSE'yi birlikte incelemek, tek bir metriğe güvenmekten daha güvenlidir. Polinom regresyon, x'in kuvvetlerini (x², x³, ...) yeni öznitelikler olarak ekleyen bir doğrusal regresyon türüdür. Derece arttıkça model daha esnek bir eğri çizebilir, ama bu her zaman daha iyi sonuç anlamına gelmez. Çok yüksek dereceler, ölçeklenmemiş devasa sayılar yüzünden sayısal kararsızlığa yol açabilir. Yüksek dereceli bir modelin eğitim verisindeki performansı bile kararsızlık yüzünden kötüleşebilir. Doğru dereceyi seçmek bir denge işidir — bu dengeyi bir sonraki derste (bias-variance) formel olarak inceleyeceğiz. Bir modeli sadece eğitim verisinde değerlendirmek yanıltıcıdır; test verisi (modelin hiç görmediği veri) gerçek performansı gösterir. Yetersiz öğrenme (yüksek bias): model çok basit, hem eğitim hem test hatası yüksek. Aşırı öğrenme (yüksek varyans): model çok esnek, eğitim hatası düşük ama test hatası yüksek. En iyi model karmaşıklığı, bias ile varyansın toplamını minimize eden noktadır. Eğitim ile test hatası arasındaki AÇILAN FARK, aşırı öğrenmenin en güvenilir işaretidir. Düzenlileştirme, kayıp fonksiyonuna katsayı büyüklüğünü cezalandıran bir terim ekleyerek aşırı öğrenmeyi frenler. Ridge (L2), tüm katsayıları küçültür ama neredeyse hiçbir zaman tam sıfıra indirmez. Lasso (L1), bazı katsayıları TAM SIFIRA indirir -- bu otomatik bir öznitelik seçimidir (seyreklik/sparsity). Elastic Net, L1 ve L2 cezalarını l1_ratio ile karıştırarak ikisi arasında bir denge sunar. Düzenlileştirme gücü (α) veri setine göre ayarlanmalı, genelde çapraz doğrulamayla bulunur. Çapraz doğrulama, veriyi birden fazla şekilde bölüp test ederek tek bir ayrımdan daha güvenilir bir performans tahmini verir. Düz K-Fold, veri sıralı veya dengesizse bazı katlamalarda bir sınıfı hiç görmeyebilir. Stratified K-Fold, her katlamada sınıf oranını koruyarak bu sorunu çözer. TimeSeriesSplit, testi her zaman kendi eğitiminden SONRAYA yerleştirerek zaman serisi verisinde veri sızıntısını önler. Zaman serisi verisinde rastgele karıştırma kullanmak, sonuçları yapay olarak iyimser gösteren ciddi bir hatadır. Lojistik regresyon, sınıflandırma (kategori tahmini) için kullanılan, isimdeki "regresyon"a rağmen bir sınıflandırma yöntemidir. Doğrusal regresyonun ham skorunu sigmoid fonksiyonundan geçirerek geçerli bir olasılığa (0-1 arası) dönüştürür. Karar sınırı, modelin P=0.5 verdiği noktadır; varsayılan olarak bu eşiğe göre sınıflandırma yapılır. Katsayılar, olasılığı değil odds'un logaritmasını doğrusal olarak etkiler -- yorumlamak için exp() almak gerekir. Model hem sınıf tahmini (predict) hem de olasılık tahmini (predict_proba) verebilir. Doğruluk (accuracy) tek başına yanıltıcı olabilir, özellikle dengesiz veri setlerinde. Kesinlik (precision), "pozitif dediklerinin kaçı doğruydu" sorusuna; duyarlılık (recall), "gerçek pozitiflerin kaçını yakaladın" sorusuna cevap verir. F1 skoru, kesinlik ve duyarlılık arasında dengeli bir özet sunar. Karar eşiğini değiştirmek, kesinlik ile duyarlılık arasında bir denge (tradeoff) yaratır. ROC-AUC, modelin TÜM eşiklerdeki genel ayırt etme gücünü, tek bir sayıyla özetler. Dengesiz veri setlerinde, düz bir model azınlık sınıfını tamamen göz ardı edebilir (duyarlılık=0 bile olabilir). class_weight="balanced", azınlık sınıfındaki hataları daha ağır cezalandırarak modelin onu öğrenmesini zorlar. Oversampling, azınlık sınıfını çoğunlukla aynı sayıya gelene kadar yeniden örnekler. Her iki yöntem de duyarlılığı artırır ama genelde kesinlik pahasına -- bu 11. dersteki dengenin bir uzantısıdır. Yeniden örnekleme, HER ZAMAN eğitim/test ayrımından SONRA, sadece eğitim setine uygulanmalıdır. SVM, iki sınıf arasındaki marjini (boşluğu) maksimize eden sınırı bulur. Sınırı sadece marjine en yakın noktalar (destek vektörleri) belirler -- diğer noktalar etkisizdir. C parametresi, marjin genişliği ile hataya tolerans arasındaki dengeyi kontrol eder. Doğrusal kernel, sadece doğrusal olarak ayrılabilir veride iyi çalışır. RBF gibi kernel'ler, veriyi üst boyuta taşıyarak doğrusal olmayan sınırları öğrenmeyi mümkün kılar. Kernel hilesi, veriyi yüksek boyutlu bir uzaya gerçekten taşımadan, o uzaydaki iç çarpımı doğrudan hesaplar. Bu sayede SVM, doğrusal olmayan sınırları, aslında doğrusal bir algoritma kalarak öğrenebilir. RBF kernel, sonsuz boyutlu bir uzaya karşılık gelir -- elle asla erişilemeyecek bir esneklik sağlar. Farklı kernel'ler farklı dönüşümleri ima eder; doğru seçim verinin yapısına bağlıdır. Kernel hilesinin asıl verimlilik avantajı, öznitelik sayısı çok büyüdüğünde ortaya çıkar. Naive Bayes, Bayes teoremini kullanarak hangi sınıfın daha olası olduğunu hesaplar. "Naive" varsayımı, tüm özniteliklerin birbirinden bağımsız olduğunu kabul eder -- genelde gerçekçi değildir. Bu varsayım ihlal edilse bile, model sınıflar arası SIRALAMAYI genelde doğru yapar -- bu yüzden pratikte iyi çalışır. Naive Bayes, kapalı formülle (iteratif optimizasyon olmadan) eğitildiği için çok hızlıdır. Metin sınıflandırma gibi yüksek boyutlu, seyrek veri problemlerinde hâlâ rekabetçi bir seçenektir. KNN, yeni bir noktayı en yakın k eğitim noktasının çoğunluk sınıfına göre sınıflandırır. "Tembel öğrenme" olarak adlandırılır çünkü eğitim aşamasında hiçbir şey hesaplamaz, sadece veriyi saklar. Küçük k, karar sınırını pürüzlü ve gürültüye duyarlı yapar; büyük k sınırı yumuşatır ama aşırı büyürse yetersiz öğrenmeye yol açabilir. KNN, mesafeye dayandığı için öznitelik ölçeklemesi NEREDEYSE HER ZAMAN zorunludur. Büyük veri setlerinde her tahmin TÜM veriyle karşılaştırma gerektirdiği için KNN yavaşlayabilir. Karar ağacı, veriyi art arda ikiye bölerek, her bölünmede grupları mümkün olduğunca "saf" hale getirmeye çalışır. Gini kirliliği, bir grubun sınıf karışıklığını ölçer; bilgi kazancı, bir bölünmenin bu kirliliği ne kadar azalttığını gösterir. Ağaç, her adımda açgözlü (greedy) bir şekilde en yüksek bilgi kazancını veren bölünmeyi seçer. Derinliği sınırlamamak, ağacın eğitim verisini ezberlemesine (aşırı öğrenme) yol açar. Karar ağaçları her zaman eksenlere paralel, dikdörtgen sınırlar çizer -- bu SVM gibi yöntemlerden temel bir farktır. Gini ve entropi, bir grubun sınıf karışıklığını ölçen iki farklı formüldür -- ikisi de 0 (saf) ile maksimum (karışık) arasında değişir. Entropi, bilgi teorisinden gelir ve "bit" cinsinden belirsizliği ölçer; Gini hesaplama açısından biraz daha basittir. İki ölçü genelde benzer ağaçlar üretir ama GARANTİ DEĞİLDİR -- bazen belirgin şekilde farklı sonuçlar verebilirler. Her iki ölçü de, ikiden fazla sınıfa (çok sınıflı problemlere) doğal olarak genelleşir. Hangi kriterin daha iyi olduğu veri setine bağlıdır; emin olmak için çapraz doğrulamayla karşılaştırmak gerekir. Topluluk yöntemleri, birden fazla modelin tahminlerini birleştirerek tek bir modelden daha güvenilir sonuçlar elde etmeye çalışır. Bagging, aynı algoritmayı farklı bootstrap örneklemlerle eğitip oylarını birleştirir. Oy birliği (voting), farklı algoritma türlerinin tahminlerini birleştirir. Topluluğun avantajı, modellerin hatalarının birbirinden BAĞIMSIZ olmasına dayanır. Topluluk, en zayıf modeli geride bırakabilir ama en güçlü tek modeli her zaman geçeceği garanti edilemez. Random Forest, bagging'e ek olarak her bölünmede rastgele bir öznitelik alt kümesi kullanarak ağaçları daha da bağımsızlaştırır. Bu ekstra rastgelelik, düz bagging'e göre küçük ama gerçek bir performans artışı sağlar. Öznitelik önemi, gerçek ve gürültü öznitelikleri arasındaki farkı elle bir işlem yapmadan ortaya çıkarır. Ağaç sayısı arttıkça performans yükselir ama bir noktadan sonra düzleşir -- gereğinden fazla artırmak sadece maliyeti yükseltir. OOB skoru, ekstra hesaplama gerektirmeden çapraz doğrulamaya yakın bir performans tahmini sunar. AdaBoost, zayıf öğrenicileri (genelde karar kütükleri) SIRAYLA kurarak güçlü bir sınıflandırıcı oluşturur. Her turda, yanlış sınıflandırılan örneklerin ağırlığı artırılır -- bir sonraki model bu zor örneklere odaklanır. Her modele, hata oranına göre bir "güven" ağırlığı (alfa) verilir; nihai tahmin bu ağırlıklı oyların toplamıdır. Bagging/Random Forest'tan farklı olarak modeller PARALEL değil, SIRALI ve birbirine BAĞIMLI kurulur. Kütük sayısı arttıkça performans hızla yükselir ama bir noktadan sonra düzleşir. Gradient Boosting, ortalama gibi basit bir tahminle başlar, her turda bir önceki modelin kalıntısına yeni bir küçük ağaç uydurup ekler. Öğrenme oranı, her yeni ağacın toplama ne kadar güçlü katılacağını belirler. Düşük öğrenme oranı daha fazla ağaç (tur) gerektirir; yüksek öğrenme oranı hızlı öğrenir ama aşırı öğrenmeye daha yatkındır. Eğitim hatasının çok düşük olması başarı değil, aşırı öğrenme riskinin işareti olabilir -- çapraz doğrulama şart. AdaBoost gibi sıralı çalışır; XGBoost ve LightGBM (23-24. ders) bu fikrin optimize edilmiş, endüstri standardı uygulamalarıdır. XGBoost, Gradient Boosting'in matematiğini korur ama hız ve düzenlileştirme açısından ciddi şekilde optimize eder. Erken durdurma, doğrulama skoru iyileşmeyi bıraktığında eğitimi otomatik olarak durdurur. Düzenlileştirme (reg_lambda, reg_alpha gibi), ağaç karmaşıklığını doğrudan kayıp fonksiyonuna gömerek aşırı öğrenmeyi kontrol eder. XGBoost'un asıl avantajı genelde doğrulukta değil, HIZ ve büyük veriye ölçeklenebilirlikte ortaya çıkar. Yerleşik düzenlileştirme parametreleri, aşırı öğrenmeyi kontrol etmek için hazır ve etkili araçlar sunar. LightGBM, ağaçları yaprak bazlı büyütür -- her seferinde en çok fayda sağlayan yaprağı böler, dengeli olmayan ama verimli ağaçlar üretir. Bu strateji, özellikle büyük veri setlerinde XGBoost'a göre belirgin bir hız avantajı sağlar. LightGBM, kategorik öznitelikleri one-hot encoding olmadan doğrudan işleyebilir. Küçük veri setlerinde yaprak bazlı büyüme aşırı öğrenmeye daha yatkın olabilir -- num_leaves gibi parametrelerle dikkatli sınırlanmalıdır. LightGBM ile XGBoost arasındaki seçim, çoğu zaman doğruluktan çok veri boyutuna ve hıza bağlıdır. Box-Cox dönüşümü, çarpık bir değişkeni veriden öğrenilen tek bir λ parametresiyle normale yaklaştırır. λ=0 özel durumu, doğrudan log dönüşümüne karşılık gelir. Çarpık bir hedef değişken, doğrusal regresyon gibi yöntemlerin normallik varsayımını ihlal ederek kalıntıları da çarpık bırakabilir. Shapiro-Wilk gibi testler, dönüşümün normalliğe ne kadar yaklaştırdığını resmi olarak doğrulayabilir. Ağaç tabanlı yöntemler dağılım şekline duyarlı olmadığı için Box-Cox'a genelde ihtiyaç duymaz. PCA, veriyi varyansın en çok olduğu (birbirine dik) yönlerde yeniden ifade eder. Ana bileşenler, açıkladıkları varyans miktarına göre sıralanır -- PC1 en çok, PCn en az varyansı açıklar. İlişkili öznitelikler, verinin gerçek "bilgi boyutunu" görünen öznitelik sayısından çok daha az yapabilir. Yeniden inşa hatası, tutulan bileşen sayısı arttıkça azalır ve tüm bileşenler tutulduğunda sıfır olur. PCA öncesi öznitelik ölçekleme neredeyse her zaman gereklidir -- varyans mutlak ölçeğe bağlıdır. K-Means, noktaları en yakın merkeze atayıp merkezleri güncelleyerek, inertia'yı (iç-küme hatasını) azaltan bir döngü çalıştırır. Bu döngü sadece YEREL bir iyileştirme yapar -- global en iyi çözüme ulaşacağı garanti edilmez. Kötü bir başlangıç, kümelerin yanlış birleşmesine yol açabilir; k-means++ (akıllı başlangıç) ve n_init (çok sayıda deneme) bu riski azaltır. Dirsek yöntemi, farklı k değerleri için inertia'ya bakarak makul bir küme sayısı önerir. K-Means, mesafeye dayandığı için öznitelik ölçeklemesi gerektirir (KNN'deki gibi). Silhouette skoru, her noktanın kendi kümesine (a(i)) ve en yakın diğer kümeye (b(i)) olan mesafesini karşılaştırır. İnertia'nın aksine, silhouette skoru gerçek bir "en iyi k" zirvesi gösterebilir. ARI, bulunan kümeleri gerçek etiketlerle karşılaştırır ama sadece etiket bilindiğinde kullanılabilir. Silhouette ve ARI'nin birbirini desteklemesi, bir kümelemenin gerçekten iyi olduğuna dair güçlü bir kanıttır. Kümeleme kalitesini değerlendirmek için birden fazla metriği birlikte kullanmak, tek bir metriğe güvenmekten daha güvenilirdir. Hiyerarşik kümeleme, her noktayı ayrı küme olarak başlatıp en yakın kümeleri adım adım birleştirerek bir dendrogram üretir. K-Means'in aksine, k'yı baştan belirtmek gerekmez -- dendrogram sonradan istenen yükseklikte "kesilir". Bağlantı (linkage) yöntemi, iki kümenin mesafesinin nasıl ölçüldüğünü belirler ve sonucu gerçekten değiştirebilir. "single" bağlantı, zincirleme (chaining) sorununa açıktır; "ward" genelde daha dengeli sonuçlar verir. Hiyerarşik kümeleme, büyük veri setlerinde K-Means'ten çok daha yavaştır. DBSCAN, kümeleri yoğunluğa göre tanımlar: çekirdek, sınır ve gürültü noktaları olarak sınıflandırır. K-Means/hiyerarşik kümelemenin aksine, bazı noktaları hiçbir kümeye atamadan "gürültü" olarak bırakabilir. Dairesel olmayan (ay şekli gibi) kümeleri, K-Means'in başaramadığı şekilde doğru bulabilir. eps ve minPts parametreleri sonucu çok hassas etkiler -- çok küçük eps her şeyi gürültü yapar, çok büyük eps kümeleri birleştirir. Küme sayısını (k) önceden belirtmek gerekmez -- DBSCAN bunu veriden kendisi çıkarır. Isolation Forest, bir noktayı rastgele bölünmelerle izole etmenin ne kadar kolay olduğuna bakarak anomalileri tespit eder. İzole (az komşulu) noktalar, yoğun bölgedeki noktalardan çok daha az adımda ayrılır. Anomali skoru, YÜZLERCE ağacın izolasyon derinliklerinin ortalamasına dayanır -- bu da gürültüyü azaltır. `contamination` parametresi, modelin zaten hesapladığı skorların hangi eşikten itibaren anomali sayılacağını belirler. Etiket gerektirmeyen (unsupervised) bir yöntemdir -- hangi noktaların gerçekten anomali olduğunu önceden bilmene gerek yoktur. Perceptron, girdilerin ağırlıklı toplamını bir eşikle karşılaştıran en basit yapay nörondur. Kendi öğrenme kuralı vardır: yanlış tahminde ağırlıkları hatanın yönünde küçük adımlarla günceller. Karar sınırı her zaman doğrusaldır (düz bir çizgi veya hiperdüzlem). XOR gibi doğrusal olarak ayrılamayan problemler, tek bir perceptron ile ASLA tam doğrulukla çözülemez. Bu sınırlama, çok katmanlı sinir ağlarının (bir sonraki ders) neden gerekli olduğunun tarihi motivasyonudur. Çok katmanlı algılayıcı (MLP), perceptron'ları gizli katmanlar halinde bir araya getirir. Her gizli nöron kendi doğrusal sınırını çizer; bu sınırlar doğrusal olmayan aktivasyonlarla birleşerek karmaşık sınırlar oluşturabilir. Doğrusal olmayan aktivasyon fonksiyonu OLMADAN, derinliğin hiçbir matematiksel faydası kalmaz. Gizli nöron/katman sayısı, hem modelin KAPASİTESİNİ hem de eğitilebilirliğini etkiler. Bu gizli katman fikri, sonraki tüm derin öğrenme mimarilerinin (CNN, transformer) temelini oluşturur. İleri yayılım, bir girdinin katmanlardan sırayla geçerek bir tahmine dönüşme sürecidir. Her katman aynı formülü tekrarlar: girdiyi ağırlıklarla çarp, bias ekle, aktivasyon fonksiyonundan geçir. Gerçek sistemler, tek tek örnekler yerine TÜM bir grubu (batch) tek bir matris çarpımıyla işler. Vektörleştirilmiş matris işlemleri, Python döngülerinden onlarca-yüzlerce kat daha hızlıdır. İleri yayılım, eğitilmiş bir modelin yeni tahminler üretirken yaptığı TEK işlemdir. Geri yayılım, zincir kuralını kullanarak kayıptan her ağırlığa kadar gradyanı geriye doğru taşır. Her "halka", sadece kendi yerel türevini hesaplar; zincir kuralı bunları çarparak toplam etkiyi bulur. Sayısal gradyan kontrolü (ağırlığı ε kadar oynatıp kaybı ölçmek), analitik gradyanların doğruluğunu bağımsız olarak doğrular. Gradyanlar bulunduktan sonra, ağırlıklar gradyanın TERSİ yönünde küçük adımlarla güncellenir. PyTorch gibi kütüphaneler, bu süreci "autograd" ile otomatikleştirir -- ama arka planda olan matematik tam olarak budur. Kaybolan gradyan, geri yayılım zinciri uzadıkça gradyanların katlanarak küçülüp neredeyse sıfırlanması problemidir. Sebebi, her katmanda aktivasyon türevinin gradyana ÇARPILMASI -- sigmoid'in türevi her zaman ≤0.25'tir. ReLU'nun türevi (pozitif bölgede) tam olarak 1 olduğu için bu sönümlenmeyi yaşamaz. Bu, ReLU'nun modern derin ağlarda sigmoid/tanh'a tercih edilmesinin ana nedenlerinden biridir. Kaybolan gradyan yaşayan bir katman, gradyan inişiyle pratikte ÖĞRENMEYİ durdurur. Sigmoid, herhangi bir girdiyi (0, 1) aralığına sıkıştıran S şeklinde bir fonksiyondur. Türevi σ(x)(1-σ(x)) formülüyle hesaplanır, maksimumu (0.25) x=0'dadır. Büyük |x| değerlerinde çıktı 0 veya 1'e "yapışır" (doygunluk) ve türev neredeyse sıfırlanır. Bu doygunluk, 5. dersteki kaybolan gradyan probleminin doğrudan matematiksel kaynağıdır. Modern ağlarda genelde sadece çıktı katmanında (olasılık üretmek için) tercih edilir, gizli katmanlarda nadiren. TanH, sigmoid ile aynı S şeklindeki eğri ailesine ait ama çıktısı (-1,1) aralığında, sıfır merkezlidir. Matematiksel olarak tanh(x) = 2σ(2x)-1 -- sigmoid'in doğrusal bir dönüşümü. TanH'ın maksimum türevi (1.0), sigmoid'inkinden (0.25) 4 kat büyüktür. Sıfır merkezlilik, sonraki katmanın öğrenmesini kolaylaştırabilir. TanH da uçlarda doygunlaşır -- kaybolan gradyan sorununu hafifletir ama çözmez. ReLU, negatif girdileri sıfıra kırpar, pozitif girdileri olduğu gibi geçirir -- pozitif bölgede doygunluk yoktur. ReLU'nun negatif bölgedeki türevi tam olarak sıfırdır -- bir nöron kalıcı olarak buraya düşerse "ölür". GELU, negatif bölgede tam sıfıra inmeyen yumuşak bir eğri kullanarak bu riski azaltır. Ölü ReLU, kötü ağırlık ilklendirme veya çok büyük öğrenme oranı gibi nedenlerle ortaya çıkabilir. GELU, özellikle büyük transformer tabanlı modellerde ReLU'ya tercih edilen standart hale gelmiştir. Softmax, birden fazla ham skoru (logit), toplamı 1 olan bir olasılık dağılımına çevirir. Üstel fonksiyon (exp), tüm değerlerin pozitif kalmasını garanti eder -- sadece toplama bölmek bunu sağlamaz. Softmax, çok sınıflı sınıflandırmanın standart çıktı katmanıdır. Sıcaklık (temperature), dağılımın ne kadar "keskin" (düşük sıcaklık) veya "yumuşak" (yüksek sıcaklık) olacağını kontrol eder. Softmax, dil modellerinin kelime tahmininden attention mekanizmasına kadar birçok yerde tekrar karşımıza çıkacak. Sigmoid, tanh, ReLU ve GELU, farklı doygunluk ve sıfır-merkezlilik özellikleriyle farklı ihtiyaçlara hizmet eder. Çok küçük görünen türev farkları (tam sıfır vs sıfıra yakın), eğitim dinamiklerinde büyük fark yaratabilir. Gizli katmanlarda genelde ReLU veya GELU, çıktı katmanında görevin gerektirdiği fonksiyon (sigmoid/softmax/doğrusal) tercih edilir. Aktivasyon seçimi, modelin eğitilebilir olup olmadığını doğrudan etkileyen bir mimari karardır. Bu özet tablo, sonraki bölümlerde (CNN, transformer) referans olarak kullanılacak. Kayıp, tek bir örnek için hatayı; maliyet, tüm veri setindeki ortalama kaybı ölçer. Hatayı doğrudan ortalamak yanıltıcıdır -- pozitif ve negatif hatalar birbirini iptal edebilir. Kare alma veya mutlak değer alma, bu iptali önler ve hatayı anlamlı şekilde ölçer. Bir kayıp fonksiyonu, gradyan inişiyle optimize edilebilmesi için TÜREVLENEBİLİR olmalıdır. Konveks (tek vadili) bir maliyet yüzeyinde, gradyan inişi global minimumu güvenle bulur. MSE hatayı karesiyle, MAE hatayı doğrusal, Huber ikisinin karışımıyla cezalandırır. Tek bir aykırı değer MSE'yi MAE'den çok daha fazla büyütür -- MSE aykırı değerlere daha duyarlıdır. Huber'in delta parametresi, MSE-benzeri ve MAE-benzeri davranış arasındaki geçiş noktasını kontrol eder. Kayıp fonksiyonu seçimi, verinin aykırı değer riskine göre yapılmalı -- teknik bir detay değil, tasarım kararıdır. Kayıp değerlerinin mutlak büyüklüğü, hangi fonksiyonun kullanıldığına bağlıdır -- MAE ve MSE değerleri doğrudan karşılaştırılamaz. Cross-entropy, modelin doğru sınıfa verdiği olasılığın logaritmasını (eksi işaretle) alır. Yanlış yönde emin olmak, cross-entropy'de logaritmik olarak sonsuza yaklaşan bir ceza alır. MSE + sigmoid kombinasyonu, çok yanlış tahminlerde bile küçük gradyan üretebilir -- cross-entropy bu tuzağa düşmez. İkili sınıflandırmada binary cross-entropy (nn.BCEWithLogitsLoss), çok sınıflıda kategorik cross-entropy (nn.CrossEntropyLoss) kullanılır. nn.CrossEntropyLoss ham logit bekler -- softmax'ı kendi içinde uygular. Optimizer, ağırlık güncelleme kuralının kendisidir -- 4. dersten beri elle yaptığımız işlemin kısaltılmış hali. torch.optim.SGD, "w -= öğrenme_oranı * gradyan" işlemini yapar -- matematik manuel döngüyle birebir aynıdır. Öğrenme oranı çok küçükse yakınsama güvenli ama yavaş; çok büyükse ıraksama (patlama) riski var. Öğrenme oranı, en sık ayarlanan hiperparametrelerden biridir. Sonraki 5 ders (SGD, momentum, Adagrad, RMSprop, Adam), bu temel güncelleme kuralının farklı, daha akıllı versiyonlarını inceleyecek. SGD, gradyanı tüm veri yerine küçük bir rastgele örneklemle (mini-batch) tahmin eder. Küçük batch boyutu daha hızlı ama daha gürültülü gradyan tahmini üretir. Momentum, geçmiş gradyanların ağırlıklı ortalamasını kullanarak bu gürültüyü yumuşatır. Momentum, sonraki derslerde göreceğimiz Adagrad/RMSprop/Adam gibi optimizer'ların da temel bir bileşenidir. Batch boyutu (32-256 arası yaygın) ve momentum (genelde β=0.9), birlikte ayarlanan pratik hiperparametrelerdir. Adagrad, her ağırlık için AYRI ve UYARLANABİLİR bir öğrenme oranı tutar. Bu oran, o ağırlığın geçmiş gradyanlarının kareler toplamına (cache) göre otomatik küçülür. Sık güncellenen ağırlıklar zamanla yavaşlar; seyrek güncellenenler göreli hızlı kalır. Cache sadece büyüyebildiği için, efektif öğrenme oranı uzun eğitimlerde çok küçülebilir -- Adagrad'ın temel zayıflığı. Adagrad, seyrek veri (örn. nadir kelimeler) için özellikle faydalıdır; bir sonraki derste bu zayıflığı gideren RMSprop'u göreceğiz. RMSprop, Adagrad'ın "tüm geçmişi topla" yaklaşımını "yakın geçmişi ağırlıklı hatırla" (üstel hareketli ortalama) ile değiştirir. Bu değişiklik, efektif öğrenme oranının sıfıra sürüklenmesini önler -- bir kararlı duruma ulaşıp orada kalır. RMSprop, pratikte Adagrad'ın yerini almış, uzun eğitimler için çok daha güvenli bir yöntemdir. Adadelta, RMSprop'un fikrini genişletip öğrenme oranını bile elle belirlemeyi gereksiz kılar -- ama yavaş başlar. Bir sonraki derste, momentum ve RMSprop'un fikirlerini BİRLEŞTİREN Adam'ı göreceğiz. Adam, momentum (birinci moment) ve RMSprop (ikinci moment) fikirlerini birleştirir. m ve v, sıfırdan başladığı için ilk adımlarda gerçek değerlerinden sistematik olarak küçük kalır -- bias. Bias düzeltmesi ((1-beta^t)'ye bölme), bu erken-adım sapmasını giderir; düzeltme olmadan eğitim ıraksayabilir. Adam, günümüzde derin öğrenmenin en yaygın kullanılan varsayılan optimizer'ıdır. Varsayılan hiperparametreler (β1=0.9, β2=0.999) çoğu problemde iyi bir başlangıç noktasıdır. Patlayan gradyan, ağırlıklar 1'den büyükken (veya benzer bir çarpan etkisiyle) geri yayılımda gradyanın katman sayısıyla üstel büyümesidir. Bu, kaybolan gradyanın (5. ders) tam tersi problemidir -- ama sonucu aynı derecede yıkıcı olabilir. Tek bir kötü güncelleme, ağırlıkları anlamsız (hatta NaN) değerlere savurabilir. Gradient clipping (clip_grad_norm_), gradyan normunu bir tavana sabitleyerek bu riski kontrol eder. Kırpma, patlamanın SONUCUNU sınırlar; kök nedeni (ağırlık ilklendirme, öğrenme oranı) ayrıca ele almak gerekir. Tüm ağırlıkları aynı değerle (örn. sıfır) başlatmak, nöronlar arasındaki simetriyi asla kırmaz. Rastgele ilklendirmenin ÖLÇEĞİ kritiktir: çok küçük sinyali söndürür, çok büyük doygunluğa kilitler. Xavier ilklendirme (√(1/fan_in)), sigmoid/tanh aktivasyonları için tasarlanmıştır. He ilklendirme (√(2/fan_in)), ReLU'nun yarı-sıfırlama etkisini telafi eder. Doğru ilklendirme seçimi, derin bir ağın eğitilebilir olup olmadığını doğrudan etkiler. Düzenlileştirme, kayıp fonksiyonuna ağırlık büyüklüğünü cezalandıran bir terim ekleyerek aşırı öğrenmeyi önler. L1 (Lasso), ağırlıkları tam sıfıra çekebilir (seyreklik); L2 (Ridge/weight decay) küçültür ama sıfırlamaz. Sinir ağlarında L2, weight_decay parametresiyle optimizer içinde uygulanır ve L1'den çok daha yaygındır. Düzenlileştirme gücü (λ / weight_decay) bir "tatlı nokta" gerektirir -- çok azı aşırı öğrenmeyi önlemez, çok fazlası yetersiz öğrenmeye yol açar. Bir sonraki derste (Dropout), ağırlık büyüklüğünü değil, ağın YAPISINI hedefleyen farklı bir düzenlileştirme tekniği göreceğiz. Dropout, eğitim sırasında her nöronu belirli bir olasılıkla geçici olarak sıfırlar. "Inverted dropout", kalan nöronları 1/(1-p) ile ölçekleyerek beklenen çıktı büyüklüğünü korur. train() modunda dropout AKTİF (rastgele); eval() modunda KAPALI (deterministik). model.eval() çağırmayı unutmak, üretimde tutarsız tahminlere yol açan yaygın bir hatadır. Dropout oranı da bir "tatlı nokta" gerektirir -- weight decay'deki (21. ders) gibi çok azı yetersiz, çok fazlası zararlıdır. BatchNorm, her nöronun çıktısını batch boyunca ortalama 0, std 1 olacak şekilde normalize eder. Bu, kötü ağırlık ilklendirmesinin (20. ders) etkisini büyük ölçüde azaltır -- sinyal derinlikten bağımsız stabil kalır. Öğrenilebilir γ ve β parametreleri, ağın normalizasyonu gerekirse kısmen geri almasına izin verir. train() modunda batch istatistikleri, eval() modunda ise biriktirilen running_mean/running_var kullanılır. BatchNorm, çok küçük batch boyutlarında gürültülü olabilir -- bu durumda Layer normalization (24. ders) tercih edilebilir. LayerNorm, her örneği kendi özellikleri boyunca normalize eder -- BatchNorm'un aksine batch'teki diğer örneklere bakmaz. Aynı örnek, hangi batch'te olursa olsun LayerNorm'dan her zaman aynı sonucu alır. LayerNorm, running statistics tutmaz -- train() ve eval() arasında davranış farkı yoktur. Batch boyutu 1 bile olsa LayerNorm sorunsuz çalışır -- BatchNorm'un 23. dersteki kısıtlaması burada yoktur. CNN'lerde genelde BatchNorm, transformer'larda (NLP kategorisi) genelde LayerNorm tercih edilir -- bağlama bağlı bir seçim. Bir görüntü, bilgisayar için bir sayı ızgarasıdır (tensördür) -- "görsel" olması bu gerçeği değiştirmez. Gri tonlamalı görüntüler (H, W) şeklinde, RGB görüntüler (H, W, C) veya (C, H, W) şeklindedir. PyTorch "channels-first" ((C, H, W)) formatı bekler; NumPy/Pillow genelde "channels-last" ((H, W, C)) üretir. Piksel değerleri genelde [0,255]'ten [0,1]'e (veya standartlaştırılmış bir aralığa) normalize edilir. Bu format farkları, pratikte en sık karşılaşılan boyut/şekil hatalarının kaynağıdır. Görüntüleri düzleştirip tam bağlı katmanlara vermek, parametre sayısını devasa büyütür (tipik boyutlarda milyonlarca). Daha temel bir sorun: tam bağlı katman, bir örüntünün NEREDE olduğunu öğrenir, NE olduğunu değil. Aynı desen farklı bir konumda gösterildiğinde, tam bağlı ağ onu tanımayabilir -- notebook'ta doğruluk %100'den %55'e düştü. Bu iki sorun (parametre patlaması ve konum bağımlılığı) aynı kökten geliyor: uzamsal yapının göz ardı edilmesi. Konvolüsyon (27. ders), aynı filtreyi her konuma uygulayarak bu iki sorunu birlikte çözüyor. Konvolüsyon, bir çekirdeği girdinin üzerinde kaydırıp her konumda eleman-eleman çarpıp toplayan bir işlemdir. Farklı çekirdekler tamamen farklı özellikler çıkarır (kenar, bulanıklaştırma, keskinleştirme gibi). Çıkış (özellik haritası), dolgu olmadan girdiden küçüktür -- çekirdek boyutuna bağlı olarak. CNN'lerde çekirdek değerleri elle tasarlanmaz -- diğer ağırlıklar gibi geri yayılımla öğrenilir. AYNI çekirdeğin tüm konumlarda paylaşılması, 26. dersteki parametre patlaması ve konum bağımlılığı sorunlarını birlikte çözer. Stride, pencerenin her adımda kaç piksel kaydığıdır -- büyüdükçe çıkış küçülür. Padding, girdinin kenarlarına sıfır ekler -- çıkış boyutunu korumak (same padding) için kullanılır. Padding'in ikinci faydası: kenar piksellerin, merkez pikseller kadar "görülmesini" sağlamak. Çıkış boyutu formülü O = ⌊(W+2P-K)/S⌋+1, mimari tasarlarken hayati bir araçtır. stride=1 + same padding, en yaygın varsayılan konfigürasyondur. Pooling, bir pencere içindeki değerleri (öğrenilebilir parametre olmadan) tek bir sayıya indirger. MaxPool en belirgin özelliği yakalar ama gürültüye duyarlıdır; AvgPool genel eğilimi yansıtır ve daha dayanıklıdır. Pooling, boyutu küçültürken modelin toplam parametre sayısını artırmaz. Aynı havuzlama penceresi içindeki küçük konum kaymaları, pooling sonrası fark etmez -- yerel öteleme değişmezliği. MaxPool pratikte daha yaygın kullanılır; Global Average Pooling modern mimarilerde (31. ders) tam bağlı katmanların yerini alabilir. Tipik bir CNN, konvolüsyon+ReLU+pooling bloklarını tekrarlayıp sonunda tam bağlı katman+softmax ile biter. Konvolüsyon (same padding) ve ReLU boyutu değiştirmez; pooling boyutu küçültür. Derinleştikçe uzamsal boyut küçülür, kanal (özellik) sayısı artar. Erken katmanlar basit örüntüleri (kenar, doku), derin katmanlar soyut örüntüleri yakalar. Bu mimari iskelet, 31. derste göreceğimiz TÜM klasik CNN mimarilerinin (LeNet, ResNet) temelidir. CNN mimarileri 1998 (LeNet, 7 katman) ile 2015 (ResNet-152, 152 katman) arasında devasa derinleşti. Derin ağlarda kaybolan gradyan (5. ders), 2015'ten önce çok derin ağların eğitilmesini engelleyen temel sorundu. ResNet'in atlama (residual) bağlantısı, y = x + f(x) ile, gradyanın her zaman en az bir "doğrudan yol" üzerinden akmasını garanti eder. Notebook'ta 30 katmanlı bir ağda bu fikir, gradyanı sıfırdan 99.45'e taşıdı. Atlama bağlantıları bugün transformer'lar dahil neredeyse her modern mimarinin temel bir bileşenidir. Veri artırma, mevcut örneklere etiketi değiştirmeyen dönüşümler uygulayarak yapay olarak veri çeşitliliği yaratır. torchvision.transforms, çevirme, döndürme, kırpma gibi yaygın dönüşümleri hazır sunar. Notebook'ta rastgele kaydırma augmentation'ı, yeni pozisyonlardaki test doğruluğunu %60'tan %100'e çıkardı. Dönüşüm seçimi probleme bağlıdır -- etiketi değiştiren bir dönüşüm (örn. rakamlarda dikey çevirme) zararlıdır. Augmentation sadece eğitim verisine uygulanır; test verisi gerçek performansı ölçmek için orijinal kalmalıdır. Transfer öğrenme, önceden eğitilmiş bir modeli kendi (genelde küçük) problemine uyarlamaktır. requires_grad=False, bir parametreyi "dondurup" gradyan hesaplanmasını ve güncellenmesini engeller. Feature extraction: neredeyse tüm ağı dondurup sadece yeni bir sınıflandırıcı katmanı eğitmek. Fine-tuning: dondurmayı kısmen geri alıp bazı katmanları da probleme özgü şekilde eğitmek. Az veriyle feature extraction, daha fazla veriyle fine-tuning genelde daha iyi sonuç verir. Nesne tespiti, sınıflandırmadan farklı olarak hem "ne" hem "nerede" (sınırlayıcı kutu) sorularına cevap verir. IoU (kesişim/birleşim), iki kutunun ne kadar örtüştüğünü [0,1] arasında ölçer. Bir dedektör genelde aynı nesne için birden fazla üst üste binen kutu önerir. Non-Max Suppression, yüksek IoU'lu kutuları birleştirip her nesne için tek bir kutu bırakır. İki-aşamalı (Faster R-CNN) ve tek-aşamalı (YOLO, SSD) olmak üzere iki ana dedektör ailesi vardır. Semantik segmentasyon, görüntüdeki her piksele bir sınıf etiketi atar -- çıktı, girdiyle aynı çözünürlükte bir maskedir. Piksel doğruluğu, sınıf dengesizliğinde (baskın arka plan gibi) yanıltıcı olabilir. IoU ve Dice katsayısı, bu tuzağa düşmeyen, kesişim/birleşim tabanlı daha dürüst metriklerdir. Segmentasyon mimarileri, CNN'in küçülttüğü uzamsal boyutu girdi çözünürlüğüne geri büyütmelidir (upsampling). Semantik segmentasyon "hangi sınıf" sorusuna, örnek segmentasyon "hangi SPESİFİK nesne" sorusuna cevap verir. NLP, insan dilini bilgisayarların işleyebileceği sayısal temsillere çevirip anlam çıkarmayı hedefler. Kelimelerle doğrudan aritmetik işlem yapılamaz -- önce sayısal bir temsile ihtiyaç vardır. Bag-of-words (kelime sayma), en basit temsildir ama kelime SIRASINI tamamen kaybeder. Zıt anlamlı cümleler bile bag-of-words'te aynı vektörü üretebilir -- bu, kategorinin ele alacağı temel sorundur. Bu kategori, tokenization'dan büyük dil modellerine kadar, her biri bir öncekinin eksikliğini gideren bir fikir zincirini izler. Küçük harfe çevirme ve noktalama temizliği genelde güvenli, düşük riskli adımlardır. Durak kelime çıkarma RİSKLİDİR -- özellikle "değil", "hiç" gibi olumsuzlama kelimeleri anlamı tersine çevirebilir. Gövde bulma (stemming), bir kelimeyi köküne indirger ama Türkçenin zengin ek yapısında sıkça hata yapar. Aşırı gövdeleme, çekim eki OLMAYAN kelimelerin bile yanlışlıkla kırpılmasıdır. Doğru ön işleme adımları GÖREVE bağlıdır -- evrensel bir "doğru" ön işleme tarifi yoktur. Tokenization, metni modele verilecek parçalara (token) ayırma işlemidir. BPE, karakterlerden başlayıp en sık yan yana gelen çiftleri tekrar tekrar birleştirerek alt-kelime dağarcığı öğrenir. Sık geçen kelimeler tek token'a iner, nadir kelimeler karaktere yakın parçalanır. İngilizce ağırlıklı eğitilen tokenizer'lar, Türkçe kelimeleri 2-5 kat daha fazla token'a bölebilir. Bu fark, Türkçe kullanıcılar için gerçek bir hız ve maliyet dezavantajı yaratır. One-hot/bag-of-words vektörlerinde her kelime bağımsız bir eksendir -- farklı kelimelerin kosinüs benzerliği HER ZAMAN sıfırdır. Bu, anlamca yakın kelimelerin (kral/kraliçe) bile hiç ilişkisiz kelimeler (kral/masa) kadar "uzak" görünmesine yol açar. TF-IDF, belge karşılaştırma görevlerinde faydalı bir iyileştirmedir ama kelime ANLAMI benzerliğini çözmez. İhtiyaç duyulan şey: kelimeleri yoğun (dense), düşük boyutlu, anlamı geometrik olarak kodlayan vektörlere çevirmek. Bu, 5. dersin (Word Embedding) konusu -- öyle bir uzay ki "kral - erkek + kadın ≈ kraliçe" gibi aritmetik bile anlamlı olacak. Word embedding, kelimeleri, benzer bağlamlarda geçenlerin yakın olduğu yoğun vektörlere çevirir. Bu benzerlik, elle YAZILMAZ -- ortak-geçiş istatistiklerinden ORTAYA ÇIKAR. PPMI + SVD, GloVe'un ruhuna yakın, basit ama etkili bir embedding öğrenme yöntemidir. Embedding uzayı, sadece benzerliği değil, "kral→kraliçe" gibi YÖNLÜ ilişkileri de vektör aritmetiğiyle kodlar. Bu vektörler, 6-8. derste göreceğimiz RNN/LSTM gibi modellerin GİRDİSİNİ oluşturacak. RNN, bir diziyi tek tek işleyip her adımda bir gizli durumu (hafıza) günceller. h_t = tanh(W_ih·x_t + b_ih + W_hh·h_{t-1} + b_hh) formülü, her adımda AYNI ağırlıklarla uygulanır. Bu tekrarlayan yapı, RNN'i doğal olarak SIRAYA duyarlı yapar -- bag-of-words'ün çözemediği bir sorunu çözer. Ağırlıkların adımlar arası paylaşılması, RNN'i değişken uzunluktaki dizilere uygulanabilir kılar. RNN, sıralı veri işlemenin ilk derin öğrenme çözümüydü -- ama 8. derste ciddi sınırlarını göreceğiz. RNN, uzun dizilerde 5. DL Vision dersindeki kaybolan gradyan sorununu zaman içinde yaşar. LSTM, ayrı bir hücre durumu (cell state) ekleyerek, ResNet'in atlama bağlantısına benzer bir mantıkla gradyan akışını korur. Forget/input/output kapıları, hücre durumuna ne kadar bilginin girip çıkacağını 0-1 arası öğrenilebilir değerlerle kontrol eder. GRU, LSTM'in daha az kapılı (3 vs 4), daha az parametreli bir versiyonudur. LSTM/GRU, kaybolan gradyanı TAMAMEN değil, büyük ölçüde AZALTIR -- 8. derste bu kısmi çözümün sınırlarını göreceğiz. RNN/LSTM, tüm diziyi SABİT boyutlu tek bir vektöre sıkıştırmak zorunda -- bu bir darboğazdır. LSTM, kaybolan gradyanı ERTELER ama ORTADAN KALDIRMAZ -- yeterince uzun dizilerde aynı sorun geri döner. RNN/LSTM'in sıralı doğası (O(n) sıralı işlem), GPU paralelleşmesinden yararlanmayı engeller. Self-attention, hem sabit-uzunluklu bilgi yolu (O(1)) hem sabit sıralı işlem sayısı (O(1)) sunarak bu iki sorunu birlikte çözer. Bu iki sınır, "Attention is All You Need" makalesinin (18. ders) çıkış noktasıdır. Attention fikri, "aynı cümle vurguya göre farklı anlama gelir" sezgisini matematikselleştirir. Tüm ara durumları TEK bir vektöre sıkıştırmak yerine AYRI AYRI saklamak, 8. dersteki darboğazı çözer. Dikkat ağırlıkları = sorgu ile her durum arasındaki benzerliğin (nokta çarpım) softmax'ı; toplamları her zaman 1. Bağlam vektörü, bu ağırlıklarla alınan AĞIRLIKLI ORTALAMA -- her adımda İHTİYACA göre yeniden hesaplanır. Burada sorgu/anahtar vektörleri elle tasarlandı -- 10. derste bunların EĞİTİMLE nasıl öğrenildiğini (Q, K, V) göreceğiz. Self-attention'da HER token, diğer TÜM token'lar (kendisi dahil) için bir sorgu üretir -- dikkat dizinin İÇİNDE kurulur. Q (sorgu), K (anahtar), V (değer) AYNI gömmeden ÜÇ AYRI öğrenilmiş matrisle hesaplanır -- her biri farklı bir rol oynar. Dikkat matrisi = softmax(QKᵀ/√d_k) -- N×N boyutunda, HER token-token çiftinin ağırlığını taşır ve SİMETRİK DEĞİLDİR. √d_k ile ölçekleme, boyut büyüdükçe softmax satürasyonunu (ve gradyan kaybını) önler. Çıktı = ağırlıklar × V -- her token'ın YENİ, bağlamsallaştırılmış temsili. Self-attention'ın tüm adımları (Q·Kᵀ, ölçekleme, softmax, ağırlıklı toplam) TEK bir yeniden kullanılabilir fonksiyona sığar. Elle yazılan fonksiyon, torch.nn.functional.scaled_dot_product_attention ile 2.4e-07 farkla (pratikte sıfır) eşleşiyor -- sayısal doğrulama, ML mühendisliğinin standart pratiği. Nedensel (causal) maske, puanları softmax ÖNCESİ -∞ yaparak bir token'ın GELECEĞİ görmesini engeller. torch.tril ile üretilen alt üçgen matris, "sadece geçmişi gör" kuralını TEK satırda kodlar. Bu dikkat() fonksiyonu, 12. derste multi-head attention'ın YAPI TAŞI olacak. Tek bir dikkat başlığı, TEK bir ilişki türünü yakalamaya YETER -- bir cümlede genelde BİRDEN FAZLA ilişki türü vardır. Multi-head attention, D boyutunu h başlığa böler; her başlık KENDİ alt-uzayında BAĞIMSIZ bir Q/K/V projeksiyonuyla çalışır. Başlıkların çıktıları BİRLEŞTİRİLİR (concat) ve öğrenilen bir W_O matrisiyle tekrar d_model boyuta projekte edilir. Notebook'ta bir başlık coreference'ı (o→Kedi), diğeri eylem-konum ilişkisini (çıktı→masaya) AYNI ANDA yakaladı. Gerçek modellerde bu uzmanlaşma İNSAN tarafından tasarlanmaz -- EĞİTİMLE kendiliğinden ortaya çıkar. Self-attention, token'ların SIRASINA değil, SADECE içeriklerine bakar -- permütasyon DEĞİŞMEZDİR (kanıt: karıştır-geri-sırala testi, fark ~0). Sinüzoidal pozisyonel kodlama, her konuma SABİT, BENZERSİZ bir vektör atar ve gömmeye TOPLANIR. PE eklendikten sonra, token sırası SONUCU DEĞİŞTİRİR (kanıt: aynı test, fark 1.40). PE vektörleri arasındaki kosinüs benzerliği, konumlar arasındaki UZAKLIKLA (genelde) AZALIR -- göreli konum bilgisi taşır. Gerçek modern modeller (GPT, LLaMA) genelde ÖĞRENİLEN veya döndürme-tabanlı (RoPE) kodlama kullanır -- AYNI temel sorunu farklı şekilde çözerler. Layer norm, her örneği KENDİ özellik boyutları içinde normalize eder -- batch norm gibi örnekler ARASINDA değil, bu yüzden batch büyüklüğünden bağımsızdır. Artık bağlantı (y = x + AltKatman(x)), ResNet'teki (DL Görüntü) AYNI fikirdir -- backprop'ta gradyanın doğrudan akabileceği bir yol açar. Artık bağlantı OLMADAN, 50 katmanlık bir yığında gradyan 1.23e-06'ya çöküyor; VARKEN 448'de sağlıklı kalıyor. Artık bağlantı + layer norm BİRLİKTE, hem bilgiyi KORUYOR hem büyüklüğü SABİT (4.0) tutuyor. Orijinal makale "post-norm" kullandı; modern modeller genelde daha kararlı "pre-norm" tercih eder. FFN, DL Görüntü kategorisinden bildiğin 2 katmanlı bir MLP (Linear → GELU → Linear) -- yeni olan, HER token'a AYNI ağırlıklarla, bağımsız uygulanması. "Position-wise": tüm diziyi birden işlemek, her token'ı döngüyle tek tek işlemekle MATEMATİKSEL olarak özdeştir. Attention token'lar ARASINDA bilgi taşır; FFN taşımaz -- bir token değişince FFN'de diğerlerinin çıktısı HİÇ etkilenmez (fark tam 0). FFN'nin genişleme boyutu (d_ff, genelde 4×d_model) onu Transformer'ın parametre-ağır bileşeni yapar -- gerçek ölçekte attention'ın 2 katı parametre. Attention "nereye bakayım" sorusunu, FFN "gördüğümle ne yapayım" sorusunu cevaplar -- bir Transformer bloğu ikisini SIRAYLA tekrarlar. Encoder-decoder yapısı, kaynak diziyi (encoder) ve hedef diziyi (decoder) AYRI ele alır -- çeviri gibi "diziden diziye" görevler için tasarlanmıştır. Decoder'ın İKİ dikkat türü var: maskeli self-attention (kendi ürettiklerine bakar) ve çapraz dikkat (encoder çıktısına bakar). Çapraz dikkatte Q decoder'dan, K ve V encoder çıktısından gelir -- dikkat matrisi KARE OLMAK ZORUNDA DEĞİLDİR. Notebook'ta 'cat' üretilirken, model 'Kedi'ye 0.658 ağırlıkla bakarak çeviri karşılığını buldu. GPT sadece decoder, BERT sadece encoder kullanır -- her Transformer modelinin encoder VE decoder içermesi GEREKMEZ (18. ders). Bu ders, 10-15. dersteki TÜM parçaları (attention, FFN, layer norm, artık bağlantı) BİR ARAYA getirip GERÇEKTEN eğitti -- kayıp 1.17'den 0.0001'e indi. Eğitimde 'öğretmen zorlaması' kullanılır: model HER ZAMAN gerçek önceki token'larla beslenir, kendi tahminleriyle DEĞİL. Çıkarımda (inference) model KENDİ ürettiği token'ları kullanmak ZORUNDADIR -- bu, eğitime göre 7.3 kat daha YAVAŞTIR çünkü SIRALI olmak zorundadır. 'Maruz kalma önyargısı' (exposure bias), eğitimde hiç görülmeyen 'kendi hatasıyla besleme' durumunun çıkarımda YARATTIĞI riski ifade eder. Bu basit örnekte model hatadan hızla toparlandı -- ama bu, örüntünün aşırı redundant olmasından kaynaklanır; gerçek dilde durum daha zordur. GPT, encoder'ı ve çapraz dikkati TAMAMEN çıkarıp SADECE decoder blokları (maskeli self-attention + FFN) kullanır. Bu mimari, GPT'nin eşleştirilmiş veri yerine SADECE düz metinle eğitilebilmesini sağlar -- ölçeklenebilirliğin temel nedeni. GPT-2 ve sonrası, orijinal makalenin post-norm'u yerine pre-norm kullanır: LayerNorm, artık bağlantıdan ÖNCE uygulanır. Post-norm'da 10 katman sonra gradyan tam sıfıra çöküyor; pre-norm'da 100 katmanda bile sağlıklı -- bu, GPT'nin 96+ katmanlı olabilmesinin doğrudan nedeni. BERT, GPT'nin TERSİNİ yapar (sadece encoder) -- metin üretmez ama metni anlama görevlerinde güçlüdür. Bu ders, 9-18. derste tek tek kurduğumuz TÜM parçaları (attention, FFN, layer norm, artık bağlantı) BİRLEŞTİRİP GERÇEKTEN eğitti. Boru hattı: Gömme+PozKodlama -> N x [Maskeli Self-Attention -> Add&Norm -> FFN -> Add&Norm] -> Son Norm -> Linear+Softmax. Model, 'ABCAB' girdisinden sonra 'C'yi %99.99 olasılıkla tahmin etti -- eğitim verisindeki tutarlı örüntüyü GERÇEKTEN öğrendiğinin kanıtı. Her Transformer bloğu AYNI yapıyı paylaşır ama KENDİ ağırlıklarını öğrenir -- bloktan bloğa farklı dikkat örüntüleri ortaya çıkabilir. Gerçek büyük dil modelleri AYNI mimariyi çok daha büyük ölçekte (32-120 blok, binlerce boyut) çalıştırır. Bir dil modeli TEK bir şey yapar: P(sıradaki token | bağlam) olasılık dağılımını hesaplar. 9-19. dersteki TÜM mekanizmalar (attention, FFN, layer norm...), bu TEK dağılımı DOĞRU tahmin etmek içindi. Şaşırma (perplexity = exp(kayıp)), bir dil modelinin standart değerlendirme metriğidir -- V'ye yakın kötü, 1'e yakın (görülmemiş veride) iyi. Model, eğitimde görmediği bağlam uzunluklarında bile doğru tahmin yaparak GENEL bir kural öğrendiğini kanıtladı, ezber değil. Çeviri, özetleme, soru-cevaplama gibi görevler, doğru İSTEMLE 'sıradaki token' problemine çevrilebilir -- 6. kategorinin (Prompt Mühendisliği) temeli. Büyük dil modeli eğitimi ÜÇ aşamadan oluşur: ön eğitim (dil nasıl işler), ince ayar (belirli görev), hizalama (insan tercihleri). İnce ayar, YENİ görev ön eğitimle PAYLAŞTIĞI yapıya bağlı olarak POZİTİF transfer (anında düşük kayıp) VEYA NEGATİF transfer (sıfırdan eğitimden bile yavaş) gösterebilir. Bu dersteki BCA (aynı yön) örneği pozitif transferi, CBA (ters yön) örneği negatif transferi SAYILARLA kanıtladı. RLHF, insan tercihleriyle eğitilen bir ödül modelini pekiştirmeli öğrenmeyle (PPO) maksimize eder. DPO, AYNI tercih verisini TEK bir kayıp fonksiyonuna çevirerek ayrı ödül modeli/RL döngüsü ihtiyacını ORTADAN KALDIRIR. Bir dil modeli, bir sonraki token için TEK bir cevap değil, bir OLASILIK DAĞILIMI üretir. Açgözlü (greedy) çözme her zaman en olası token'ı seçer -- modelin belirsizliğini YOK SAYAR. Örnekleme (sampling), bu dağılımdan RASTGELE çeker -- 1000 denemede gerçek oran modelin öğrendiği olasılıklara YAKINSAR. Temperature, modeli DEĞİL, örnekleme dağılımının keskinliğini kontrol eder (1'in altı keskin, üstü düz). top-k SABİT sayıda token tutar; top-p (nucleus) KÜMÜLATİF olasılık kütlesine göre UYARLANABİLİR şekilde tutar -- pratikte top-p daha yaygın tercih edilir. Bir prompt, modele ulaşmadan ÖNCE tokenizasyondan geçer -- kelime sayısı ile token sayısı FARKLI şeylerdir. Tokenizer'ın eğitim verisinde SIK geçen kelimeler az token, NADİR/teknik kelimeler çok token alır. Model, tokenlardan bir sonraki token için bir OLASILIK DAĞILIMI hesaplar -- "anlama" değil, hesaplama. Bazı promptlar (factual sorular) NET bir dağılıma, bazıları (açık uçlu devamlar) GERÇEKTEN belirsiz bir dağılıma yol açar. Prompt mühendisliği, bu dağılımı istenen yöne kaydırma sanatıdır -- sonraki derslerin konusu budur. Her model, sabit bir bağlam penceresi (maksimum token) sınırına sahiptir. Pencere dolunca, en eski mesajlar (genelde sistem mesajı HARİÇ) sessizce düşer -- model onları bir daha görmez. Sohbet API'leri hafızasızdır: her yeni cevap için TÜM geçmiş yeniden gönderilir. Bu yüzden uzun bir sohbetin toplam maliyeti, mesaj sayısıyla DOĞRUSAL değil YAKLAŞIK KARESEL büyür. Özetleme ve RAG (11. ders) gibi teknikler, bu pencere sınırını YÖNETMEK için kullanılır. İyi bir prompt dört parçadan oluşur: GÖREV, BAĞLAM, KISIT, FORMAT. Bu parçalardan biri eksikse, model KENDİ varsayımıyla boşluğu doldurur -- bu varsayım seninkiyle ÖRTÜŞMEYEBİLİR. Yapılı bir prompt DAHA FAZLA token kullanır (bu dersteki örnekte 4.4 kat) -- ama bir netleştirme turundan genelde daha UCUZDUR. 2. dersteki karesel maliyet büyümesi nedeniyle, HER ek netleştirme turu orantısız derecede PAHALIDIR. Yapı, HER promptta değil, karmaşıklık ve belirsizlik riski arttıkça ÖNEM kazanır. Bir persona/rol eklemek, GÖREVİ değiştirmez -- modelin çıktı olasılık dağılımını, o role uygun bir TON ve KAYDA doğru kaydırır. Persona, modelin BİLGİ TABANINI genişletmez -- model, eğitiminde ne gördüyse onu bilir. Persona vermek TON ayarlama ve bakış açısı çerçeveleme için İYİ çalışır, ama uzmanlık "kazandırmak" için ETKİSİZDİR. 'Uzman' bir ton, YANLIŞ bilgiyi bile daha İKNA EDİCİ gösterebilir -- bu bir RİSKTİR (10. ders). Basit, teknik görevlerde persona genelde EK fayda sağlamadan SADECE token maliyeti ekler. Few-shot prompting, görev kuralını yazılı açıklama yerine birkaç (girdi, çıktı) örneğiyle gösterir. Model, bu örneklerden görevin ÖRÜNTÜSÜNÜ çıkarsar -- 20. dersteki (NLP kategorisi) genelleme bulgusuyla AYNI mekanizma. Her eklenen örnek, doğrudan token maliyetini artırır (bu dersteki örnekte 3.6x). Örnek sayısı arttıkça fayda AZALIR -- genelde 2-5 örnek çoğu görev için yeterlidir. Tutarlı ve ÇEŞİTLİ örnekler seçmek, modelin DOĞRU kuralı çıkarsaması için KRİTİKTİR. CoT, modelden doğrudan cevap yerine ARA ADIMLARI yazmasını ister. Bunun mimari nedeni: bir Transformer her token için SABİT hesaplama yapar -- CoT, karmaşık hesaplamayı ARDIŞIK, basit adımlara YAYAR. Bu dersteki örnekte CoT toplam maliyeti 2.1x artırdı -- FARKIN büyük kısmı çıktıdan (ara adımlardan) geldi. CoT çok-adımlı mantık/aritmetik görevlerinde en FAYDALI, tek-adımlı sorularda genelde GEREKSİZDİR. "Sadakatsizlik" (unfaithfulness): modelin yazdığı adımlar, gerçek iç süreci HER ZAMAN dürüstçe yansıtmayabilir. Serbest metin çıktısı, program tarafından GÜVENİLİR şekilde ayrıştırılamayabilir. 4 gerçekçi örnekten SADECE 1'i doğrudan json.loads() ile ayrıştırılabildi -- diğerleri markdown sarma, ekstra metin, veya sondaki virgül YÜZÜNDEN başarısız oldu. Sağlam bir ayrıştırıcı (temizleme adımlarıyla), başarı oranını 4/4'e çıkardı. En iyi strateji ÖNLEYİCİDİR: istemde net bir şema belirtmek (3. dersteki FORMAT parçası). Bazı API'ler, NLP kategorisinin 22. dersindeki top-k/top-p filtrelemesine benzer 'kısıtlı örnekleme' ile geçersiz JSON üretimini baştan engeller. Prompt iyileştirme üç adımlı bir döngüdür: ÖLÇ (net kriter tanımla), DEĞİŞTİR (tek bir şeyi değiştir), KARŞILAŞTIR (kritere göre puanla). Kriterler PROGRAMATİK OLARAK KONTROL EDİLEBİLİR olmalıdır -- "daha iyi görünüyor" ölçülemez. HER adımda SADECE TEK bir değişken değiştirilmeli -- aksi hâlde hangi değişikliğin işe yaradığı BELİRSİZLEŞİR. Bu dersteki örnekte, iki ayrı tek-değişken adımı puanı 1/3'ten 3/3'e çıkardı. 3-7. dersteki TÜM teknikler (persona, few-shot, CoT, format), bu döngüde test edilip TUTULAN ya da ATILAN hipotezlerdir. Olumsuzlama ("X yapma"), yüzeysel olarak "X yap" ile NEREDEYSE ÖZDEŞTİR (bu dersteki örnekte %86 token örtüşmesi) -- ama anlam TAM TERSTİR. Bu, 5. kategorinin (NLP) 1. dersindeki bag-of-words bulgusuyla AYNI ailededir: yüzey benzerliği, anlam benzerliği DEMEK DEĞİLDİR. Diğer yaygın kalıplar: çelişkili talimatlar, varsayılan bağlam, aşırı yükleme, belirsiz referanslar. Olumlu çerçeveleme ("sadece X yap"), olumsuzlamadan ("Y yapma") genelde daha GÜVENİLİRDİR. Bu kalıpları TANIMAK, 8. dersteki iyileştirme döngüsünü DAHA HEDEFLİ uygulamayı sağlar. Halüsinasyon, bir modelin yanlış bilgiyi doğru bilgiyle AYNI güvenle sunmasıdır. Bu, bir arıza değil -- softmax'ın "her zaman 1'e toplanan bir dağılım üretme" ZORUNLULUĞUNUN yapısal bir sonucudur. Gerçek bir modelle deneyde, eğitim dışı bir bağlamda ('AAAA') bile güven TAM %100 kaldı. En etkili azaltma yöntemi grounding (temellendirme) -- modeli VERİLEN bir kaynağa dayandırmak (11. ders, RAG). Model güveni yüksek olsa bile, yüksek riskli kararlarda İNSAN doğrulaması VAZGEÇİLMEZDİR. RAG üç adımdan oluşur: Getir (en ilgili belgeyi bul), Zenginleştir (bağlama ekle), Üret (bu bağlama dayanarak cevap ver). Getirme, kosinüs benzerliği (5. kategorideki AYNI formül) ile ölçülür -- bu dersteki örnekte doğru belge 0.422 benzerlikle bulundu. İlgisiz bir sorguda benzerlik skorları ÇOK DÜŞÜK kalır -- bu, "ilgili bilgi yok" sinyali olarak KULLANILMALIDIR. RAG, 10. dersteki halüsinasyon riskini AZALTIR ama TAMAMEN ORTADAN KALDIRMAZ. Gerçek sistemler, TF-IDF yerine genelde YOĞUN embedding'ler (5. kategori, 5. ders) kullanır -- eş anlamlı kelimeleri de yakalayabilmek için. Bir ajan, model çıktısını "araç çağrısı" olarak yorumlayıp GERÇEK bir fonksiyon çalıştıran, sonucu bağlama geri EKLEYEN bir sistemdir. ReAct döngüsü: Düşün -> Araç Seç -> Çalıştır -> Gözlemle -> (tekrarla) -> Son Cevap. 11. dersteki RAG, TEK araçlı (getirme) bir ajanın ÖZEL bir halidir. Araç girdilerini ASLA ham eval() gibi bir fonksiyona VERME -- kısıtlı bir ayrıştırıcı (AST) kullanmak, keyfi kod çalıştırma riskini kapatır. Uzun ajan döngüleri, 2. dersteki karesel maliyet büyümesini HIZLANDIRIR -- gerçek sistemler bir MAKSİMUM adım sayısı ve İNSAN onay noktaları içerir.