İçeriğe geç
Educora
Üniversite25 dk36 / 42

Makine öğrenmesinin temel kavramları

Makine öğrenmesi türleri, öznitelikler ve etiketler, verinin bölünmesi, kayıp fonksiyonları, gradyan inişi, aşırı öğrenme ve yanlılık–varyans dengesi; çalıştırılabilir NumPy örnekleriyle.

Kendini test et
Bu derste öğreneceklerin
  • Denetimli, denetimsiz ve pekiştirmeli öğrenmeyi ayırt etmek, öznitelik ve etiket kavramlarını açıklamak
  • MSE ve çapraz entropi kayıplarını elle ve NumPy ile hesaplamak
  • Gradyan inişiyle doğrusal regresyon modeli eğitmek ve öğrenme oranının etkisini açıklamak
  • Eğitim ve doğrulama kayıplarına bakarak aşırı ve eksik öğrenmeyi teşhis etmek

Bakü'deki bir dairenin fiyatını alanına, oda sayısına ve semtine göre tahmin eden bir program yazman gerektiğini düşün. Bütün kuralları elle yazmak imkânsızdır: “semt Nesimi ise ve alan 80 m²'den büyükse...” gibi koşulların sonu gelmez. Makine öğrenmesi başka bir yol sunar: bilgisayara satılmış binlerce dairenin örneğini veririz, o da kuralı verilerden kendisi öğrenir. Bu ders, modülün tamamının matematiksel temelidir: sinir ağları, CNN'ler ve transformerlar hep bunun üzerine kuruludur.

Tanım
Makine öğrenmesi

Bir programın bir görevdeki başarısı, seçilen bir ölçütle ölçüldüğünde deneyimle, yani veriyle birlikte artıyorsa programın öğrendiği söylenir. Model parametreleri olan bir fonksiyondur; öğrenme ise bu parametrelerin veriye göre seçilmesidir.

Öğrenme türleri, öznitelikler ve etiketler

Her örnek bir öznitelik (feature) vektörü x ile tanımlanır: bir daire için alan, oda sayısı, kat. Tahmin etmek istediğimiz büyüklük etikettir (label) y: fiyat. n örnek ve d öznitelik olduğunda veri, n × d boyutlu bir X matrisi ve n uzunluğunda bir y vektörü olarak saklanır. Etiket bir sayıysa görev regresyon, bir sınıfsa (spam / spam değil) sınıflandırma adını alır.

TürVeriAmaçÖrnek
Denetimli öğrenme(x, y) çiftleriyeni bir x için y'yi tahmin etmekdaire fiyatı, spam filtresi, röntgende hastalık tespiti
Denetimsiz öğrenmeyalnızca x, etiket yokverideki yapıyı bulmakmüşterileri gruplara ayırmak (kümeleme), boyut indirgeme
Pekiştirmeli öğrenmeortamla etkileşim ve ödüllertoplam ödülü en büyük yapmakoyun oynayan bir ajan, yürümeyi öğrenen bir robot

Verinin bölünmesi: eğitim, doğrulama ve test kümeleri

Bir modelin gerçek sınavı, hiç görmediği verilerdir. Bu yüzden veriyi rastgele karıştırıp üç parçaya böleriz (tipik oran 70/15/15 ya da 80/10/10):

  • Eğitim kümesi — parametreler yalnızca bu veriyle öğrenilir.
  • Doğrulama kümesi — hiperparametreleri (öğrenme oranı, model boyutu) seçmek ve eğitimi ne zaman durduracağımıza karar vermek için.
  • Test kümesi — en sonda, bir kez: modelin gerçek dünyadaki başarısının yansız bir tahmini.
Python
import numpy as np

rng = np.random.default_rng(42)
idx = rng.permutation(10)
train, val, test = idx[:6], idx[6:8], idx[8:]
print('train:', train)
print('val:  ', val)
print('test: ', test)
▸ Beklenen çıktı
train: [5 6 0 7 3 2]
val:   [4 9]
test:  [1 8]
10 örneğin indekslerini karıştırıp 60/20/20 oranında bölüyoruz. Tohum (seed) sabit olduğu için bölme her seferinde aynı çıkar.

Kayıp fonksiyonları

Modelin ne kadar yanıldığını tek bir sayıyla ölçmemiz gerekir; bu sayıyı kayıp fonksiyonu L verir. Öğrenme, kaybı en küçük yapan parametreleri aramaktır. Regresyonda genellikle ortalama karesel hata, sınıflandırmada ise çapraz entropi kullanılır.

MSE = (1/n) · ∑ᵢ₌₁ⁿ (yᵢ − ŷᵢ)²MSE = (1/n) · ∑ᵢ₌₁ⁿ (yᵢ − ŷᵢ)²
burada:
  • nörnek sayısı
  • yᵢi. örneğin gerçek değeri (etiket)
  • ŷᵢmodelin tahmini

Ortalama karesel hata (mean squared error). Kare alma, büyük hataları çok daha ağır cezalandırır; birimi etiketin biriminin karesidir.

CE = −∑ₖ₌₁ᴷ yₖ · ln pₖ = −ln pₜ
burada:
  • Ksınıf sayısı
  • yₖk sınıfı doğruysa 1, değilse 0 (one-hot)
  • pₖmodelin k sınıfına verdiği olasılık
  • pₜdoğru sınıfın olasılığı

Çapraz entropi (cross-entropy). İki sınıf için: BCE = −[y · ln p + (1 − y) · ln(1 − p)]. Doğru sınıfın olasılığı 1'e yaklaştıkça kayıp 0'a yaklaşır.

Örnek 1: kayıpları elle hesaplayalım

a) Gerçek değerler y = (3; 5; 2,5), tahminler ŷ = (2,5; 5; 3,5). MSE'yi bul.
b) Bir görüntü sınıflandırıcısı “kedi, köpek, kuş” sınıfları için p = (0,7; 0,2; 0,1) olasılıklarını verdi. Resimde kedi varsa ve kuş varsa çapraz entropiyi bul.

Çözümü göster
a) Hatalar: 0,5; 0; −1. Kareleri: 0,25; 0; 1. Toplam 1,25.
MSE = 1,25 / 3 ≈ 0,4167.
b) Kedi: CE = −ln 0,7 ≈ 0,357 — model emindi ve haklı çıktı, kayıp küçük.
Kuş: CE = −ln 0,1 ≈ 2,303 — doğru sınıfa yalnızca %10 verilmiş, kayıp 6 kattan fazla büyük.
Python
import numpy as np

y = np.array([3.0, 5.0, 2.5])
y_hat = np.array([2.5, 5.0, 3.5])
mse = np.mean((y - y_hat) ** 2)
print(f'MSE = {mse:.4f}')

p = np.array([0.7, 0.2, 0.1])
print(f'CE (true class 0) = {-np.log(p[0]):.4f}')
print(f'CE (true class 2) = {-np.log(p[2]):.4f}')
▸ Beklenen çıktı
MSE = 0.4167
CE (true class 0) = 0.3567
CE (true class 2) = 2.3026

Gradyan inişi ve öğrenme oranı

Sisli bir dağdan indiğini düşün: uzağı göremiyorsun ama ayağının altındaki eğimi hissediyorsun. En dik iniş yönünde küçük bir adım atıyor ve bunu tekrarlıyorsun. Gradyan ∇L, kaybın en hızlı arttığı yönü gösterir; bu yüzden onun tersine gideriz. Adımın uzunluğunu öğrenme oranı η belirler.

θ ← θ − η · ∇L(θ)
burada:
  • θmodelin tüm parametreleri (ağırlıklar ve sapmalar)
  • ηöğrenme oranı, genellikle 0,0001–0,1
  • ∇L(θ)gradyan: kaybın her parametreye göre kısmi türevlerinden oluşan vektör

Gradyan inişinin güncelleme kuralı. Her tekrar bir adımdır; eğitim kümesinden bir kez tam geçişe epok (dönem) denir.

Doğrusal regresyonda ŷᵢ = w · xᵢ + b ve L = MSE'dir. Zincir kuralıyla (ŷᵢ − yᵢ)² ifadesinin w'ye göre türevi 2(ŷᵢ − yᵢ) · xᵢ, b'ye göre türevi ise 2(ŷᵢ − yᵢ) olur. Tüm örnekler üzerinden ortalama alırsak:

∂L/∂w = (2/n) · ∑ᵢ (ŷᵢ − yᵢ) · xᵢ ∂L/∂b = (2/n) · ∑ᵢ (ŷᵢ − yᵢ)∂L/∂w = (2/n) · ∑ᵢ (ŷᵢ − yᵢ) · xᵢ ∂L/∂b = (2/n) · ∑ᵢ (ŷᵢ − yᵢ)
burada:
  • w, bdoğrunun eğimi (ağırlık) ve sabit terimi (sapma)
  • ŷᵢ − yᵢi. örnekteki hata
Örnek 2: gradyan inişinde bir adım

Model ŷ = w · x, tek örnek (x = 2, y = 6), başlangıç w = 1, L = (ŷ − y)². η = 0,1 ve η = 0,3 için bir adım at ve yeni kaybı bul.

Çözümü göster
ŷ = 2, L = (2 − 6)² = 16.
dL/dw = 2(ŷ − y) · x = 2 · (−4) · 2 = −16.
η = 0,1: w = 1 − 0,1 · (−16) = 2,6; ŷ = 5,2; L = 0,64 — kayıp 25 kat azaldı.
η = 0,3: w = 1 + 4,8 = 5,8; ŷ = 11,6; L = 31,36 — minimumun (w = 3) üzerinden atladık ve kayıp arttı!
Burada L(w) = 4(w − 3)², ikinci türevi 8'dir; karesel bir kayıpta iniş yalnızca η < 2/8 = 0,25 olduğunda yakınsar.

Şimdi aynı fikri 50 sentetik noktaya uygulayalım. Veri, y = 3x + 4 doğrusuna gürültü eklenerek üretildi; model w ve b'yi hiçbir şey bilmeden, sıfırdan başlayarak bulmalı. Kodu çalıştır; kayıp grafiği otomatik olarak gösterilecek.

Python
import numpy as np
import matplotlib.pyplot as plt

rng = np.random.default_rng(42)
x = rng.uniform(0, 5, size=50)
y = 3 * x + 4 + rng.normal(0, 1, size=50)

w, b, lr = 0.0, 0.0, 0.05
losses = []
for epoch in range(500):
    error = (w * x + b) - y
    losses.append(np.mean(error ** 2))
    dw = 2 * np.mean(error * x)
    db = 2 * np.mean(error)
    w -= lr * dw
    b -= lr * db
    if epoch % 100 == 0:
        print(f'epoch {epoch:3d}  loss {losses[-1]:.4f}')

print(f'w = {w:.3f}, b = {b:.3f}')
plt.plot(losses)
plt.yscale('log')
plt.xlabel('epoch')
plt.ylabel('MSE loss')
plt.show()
▸ Beklenen çıktı
epoch   0  loss 158.9249
epoch 100  loss 0.6019
epoch 200  loss 0.5740
epoch 300  loss 0.5735
epoch 400  loss 0.5735
w = 3.024, b = 3.769
Model w ≈ 3,02 ve b ≈ 3,77 buldu. Bunlar tam olarak 3 ve 4 değil, çünkü bu 50 gürültülü nokta için en iyi doğru (en küçük kareler çözümü) budur; kayıp da 0'a değil, gürültü düzeyine yaklaşır.

Uygulamada gradyan her adımda verinin tamamı üzerinden değil, B boyutunda küçük bir mini yığın (mini-batch, örneğin B = 32) üzerinden hesaplanır. Buna stokastik gradyan inişi (SGD) denir: adımlar daha gürültülü ama çok daha ucuzdur; gürültü bazen kötü yerel minimumlardan kaçmaya bile yardım eder.

Aşırı öğrenme, eksik öğrenme ve yanlılık–varyans dengesi

Çok basit bir model verideki örüntüyü yakalayamaz; buna eksik öğrenme (underfitting) denir. Çok karmaşık bir model ise örüntüyle birlikte rastgele gürültüyü de ezberler: eğitim hatası neredeyse sıfırdır ama yeni verideki hatası büyüktür; buna aşırı öğrenme (overfitting) denir. Aşağıdaki kod, sin(2πx) fonksiyonundan alınmış 15 gürültülü noktaya farklı dereceli polinomlar uydurur:

Python
import numpy as np
from numpy.polynomial import Polynomial

rng = np.random.default_rng(1)
x_train = np.sort(rng.uniform(0, 1, 15))
x_val = np.sort(rng.uniform(0, 1, 15))
f = lambda x: np.sin(2 * np.pi * x)
y_train = f(x_train) + rng.normal(0, 0.2, 15)
y_val = f(x_val) + rng.normal(0, 0.2, 15)

for deg in [1, 3, 9, 12]:
    model = Polynomial.fit(x_train, y_train, deg)
    train_mse = np.mean((model(x_train) - y_train) ** 2)
    val_mse = np.mean((model(x_val) - y_val) ** 2)
    print(f'degree {deg:2d}: train {train_mse:.3f}, validation {val_mse:.3f}')
▸ Beklenen çıktı
degree  1: train 0.264, validation 0.235
degree  3: train 0.032, validation 0.037
degree  9: train 0.008, validation 1.894
degree 12: train 0.005, validation 67.532
Derece 1 eksik öğreniyor (iki kayıp da büyük). Derece 3 en iyisi. Derece 9 ve 12'de eğitim kaybı düşmeye devam ederken doğrulama kaybı patlıyor.
E[(y − f̂(x))²] = Bias[f̂(x)]² + Var[f̂(x)] + σ²
burada:
  • f̂(x)rastgele bir eğitim kümesiyle eğitilmiş modelin tahmini
  • Biasyanlılık: modelin fazla basit varsayımlarından doğan ortalama hata
  • Varvaryans: tahminin belirli eğitim kümesine ne kadar bağlı olduğu
  • σ²verideki giderilemeyen gürültü

MSE'nin yanlılık–varyans ayrışımı. Model karmaşıklaştıkça yanlılık azalır, varyans artar; en iyi model toplamı en küçük yapar.

Eğitim kaybıDoğrulama kaybıTeşhisNe yapmalı
yüksekyüksekeksik öğrenme (yüksek yanlılık)daha büyük model, yeni öznitelikler, daha uzun eğitim
düşükçok daha yüksekaşırı öğrenme (yüksek varyans)daha çok veri, düzenlileştirme, erken durdurma, daha basit model
düşükona yakıniyi uyumtest kümesinde bir kez değerlendir
J(θ) = L(θ) + λ · ∑ⱼ θⱼ²
burada:
  • λdüzenlileştirme gücü (doğrulama kümesiyle seçilen bir hiperparametre)
  • ∑ⱼ θⱼ²ağırlıkların karelerinin toplamı; büyük ağırlıkları cezalandırır

L2 düzenlileştirme (weight decay): model daha “pürüzsüz” fonksiyonları tercih eder ve gürültüyü ezberlemeye daha az yatkın olur.

Önemli noktalar

  • Denetimli öğrenme (x, y) çiftlerinden öğrenir: etiket sayıysa regresyon, sınıfsa sınıflandırmadır.
  • Eğitim kümesi parametreler, doğrulama kümesi hiperparametreler içindir; test kümesine yalnızca en sonda bakılır.
  • Regresyonda MSE = (1/n)∑(y − ŷ)², sınıflandırmada çapraz entropi CE = −ln pₜ kullanılır.
  • Gradyan inişi: θ ← θ − η · ∇L; η çok büyükse kayıp artar, çok küçükse öğrenme sürünür.
  • Eğitim kaybı düşük, doğrulama kaybı yüksekse aşırı öğrenme; ikisi de yüksekse eksik öğrenme vardır.

Kendini test et

10 soru. Her doğru cevap XP kazandırır.

1 / 10
Hangi görev denetimli bir regresyondur?