Regularization
Düzenlileştirme, bir modelin gürültüyü ezberlemek yerine genelleme yapması için eğitim sırasında modeli kısıtlar. L1, L2, ağırlık çürümesi, dropout ve erken durdurma.
Düzenlileştirme, yeni verilerdeki hatayı azaltmayı amaçlayan modelin eğitilme biçimindeki herhangi bir değişikliktir; bu, eğitim verilerindeki hatası artsa bile geçerlidir. Modelin yeterli kapasiteye sahip olup gördüğü örneklerdeki gürültüyü ve tuhaflıkları ezberlediği aşırı öğrenmeye karşı koyar. Düzenlileştirme; büyük ağırlıkları cezalandırarak, gürültü ekleyerek, veriyi çeşitlendirerek veya eğitimi erken durdurarak modelin etkin karmaşıklığını sınırlar. Yanlılık-varyans açısından bakıldığında, varyanstaki daha büyük bir azalma karşılığında biraz ek yanlılığı kabul eder.
L1 ve L2 Cezaları#
Klasik biçimde, kayıp fonksiyonuna ağırlıklara yönelik bir ceza eklenir: toplam kayıp = veri kaybı + λ × ceza. L2 düzenlileştirme, ağırlıkların kareleri toplamını (Σw²) cezalandırır; bu da her ağırlığı büyüklüğüyle orantılı biçimde sıfıra yaklaştırır ve doğrusal modellerde ridge regresyonu olarak adlandırılır. L1 düzenlileştirme, ağırlık değerlerinin mutlak değerleri toplamını cezalandırır; sabit kuvveti birçok ağırlığı tam olarak sıfıra indirir. Bu nedenle, lasso olarak da bilinen L1 cezalı doğrusal regresyon, aynı zamanda özellik seçimi işlevi görür. Elastik ağ her ikisini birleştirir. scikit-learn'de alpha olarak adlandırılan ceza gücü λ bir hiperparametredir: çok küçük olursa model hâlâ aşırı öğrenir, çok büyük olursa yetersiz öğrenir. Sinüs dalgasından alınan 12 gürültülü noktaya uydurulmuş 9. derece bir polinom, her iki başarısızlık durumunu da gösterir:
import numpy as np
from sklearn.linear_model import Ridge
from sklearn.pipeline import make_pipeline
from sklearn.preprocessing import PolynomialFeatures
rng = np.random.default_rng(0)
# 12 noisy training points from a sine wave, plus clean test points
x_train = rng.uniform(0, 1, (12, 1))
y_train = np.sin(2 * np.pi * x_train[:, 0]) + rng.normal(0, 0.2, 12)
x_test = np.linspace(0, 1, 200)[:, None]
y_test = np.sin(2 * np.pi * x_test[:, 0])
# The same degree-9 polynomial, fit with a growing L2 penalty on its coefficients
for alpha in (0.0, 1e-4, 1e-2, 1.0):
model = make_pipeline(PolynomialFeatures(9), Ridge(alpha=alpha)).fit(x_train, y_train)
train_mse = np.mean((model.predict(x_train) - y_train) ** 2)
test_mse = np.mean((model.predict(x_test) - y_test) ** 2)
weight_norm = np.linalg.norm(model[-1].coef_)
print(f"alpha {alpha:g}: train MSE {train_mse:.4f}, test MSE {test_mse:.4f}, |w| {weight_norm:.1f}")Ceza olmadan polinom gürültüye göre kıvrılır: katsayı normu yaklaşık 425.000'e ulaşır, eğitim hatası 0,0148 ve test hatası 0,1859 olur. 0,0001 cezası katsayı normunu 20,8'e düşürür ve test hatasını on bir kat azaltarak 0,0170'a indirirken eğitim hatasını 0,0334'e yükseltir. Alfa 1 olduğunda ceza baskın hâle gelir ve model, 0,3998 test hatasıyla yetersiz öğrenir.
Sinir Ağlarında Ağırlık Azaltma ve Dropout#
Sinir ağlarında L2 düzenlileştirme genellikle ağırlık azaltma biçimini alır: her güncellemede her ağırlık, kendi değerinin küçük bir oranı kadar küçültülür. Standart stokastik gradyan inişi için ikisi eşdeğerdir. Adam gibi uyarlamalı eniyileyicilerde gradyana eklenen bir L2 terimi, Adam'ın parametre başına ölçeklendirmesine bölünür; bu nedenle büyük gradyanlara sahip ağırlıklar çok az düzenlileştirilir. Ayrıştırılmış ağırlık azaltma bunun yerine küçültmeyi doğrudan uygular ve ortaya çıkan AdamW eniyileyicisi, Transformer modellerinde standart tercihtir.
Dropout katmanı, her eğitim adımında her birimin çıktısını p olasılığıyla sıfırlar ve geriye kalan çıktıları 1/(1 − p) ile ölçeklendirir. Böylece ağ herhangi bir birime bağımlı olamaz ve etkili biçimde, ağırlıkları paylaşan çok sayıda seyreltilmiş alt ağı eğitir. Çıkarım sırasında tüm birimler etkin kalır. İlk deneylerde, gizli birimler için 0,5 düşürme olasılığının çok çeşitli ağ ve görevlerde ideale yakın olduğu görüldü.
Ultralytics YOLO eğitimi her ikisini de sunar: varsayılan değeri 0,0005 olan weight_decay, yalnızca evrişim ve doğrusal katman ağırlıklarına uygulanır; bias'ları ve normalleştirme katmanı parametrelerini atlar. Varsayılan değeri 0,0 olan dropout ise YOLO26 sınıflandırma modellerinin son doğrusal katmanından hemen önce etki eder.
from ultralytics import YOLO
# Önceden eğitilmiş bir YOLO26n sınıflandırma modelini yükle
model = YOLO("yolo26n-cls.pt")
# Sınıflandırma başlığında dropout ve daha güçlü ağırlık azaltma kullanarak eğit
results = model.train(data="mnist160", epochs=10, dropout=0.2, weight_decay=0.001)Diğer Düzenlileştirme Teknikleri#
- Veri artırma: Yansıtma, kırpma, ölçeklendirme, renk kaydırmaları ve mozaik, eğitim görüntülerinin çeşitliliğini artırır; böylece model her nesneyi ham veri kümesindekinden çok daha fazla koşulda görür.
- Etiket yumuşatma: One-hot sınıflandırma hedeflerini biraz yumuşatılmış hedeflerle değiştirir; böylece model logitlerini aşırı güvenli değerlere itmekten vazgeçer.
- Örtük düzenlileştirme: Küçük partilerle eğitimin gradyan gürültüsü ve parti normalleştirmenin partiden partiye değişen gürültüsü, açık bir terim olmaksızın düzenlileştirme sağlar.
Erken durdurma, eğitim süresini sınırlayarak düzenlileştirme yapar. Her epoch sonrasında modeli doğrulama verileri üzerinde puanlar ve sabır olarak adlandırılan belirli sayıda epoch boyunca puan iyileşmediğinde durur; o ana kadarki en iyi ağırlıkları korur:
Düzenlileştirme ve İlgili Terimler#
- Normalleştirme: Eğitimi hızlandırmak ve kararlı hâle getirmek için girdileri veya aktivasyonları yeniden ölçeklendirir. Parti normalleştirme yalnızca yan etki olarak düzenlileştirme sağlar.
- Hiperparametre ayarlama: λ, dropout olasılığı ve sabır gibi düzenlileştirme ayarlarının yanı sıra diğer tüm hiperparametreler için uygun değerleri arar.
- Model toplulukları: Bağımsız olarak eğitilmiş birkaç modelin tahminlerinin ortalamasını alarak varyansı azaltır. Dropout, tek bir ağ içinde böyle bir topluluğu yaklaşık olarak oluşturur: eğitim sırasında üstel sayıda seyreltilmiş alt ağdan örnekler alır ve test sırasında tüm birimler etkin durumdayken tam ağı çalıştırmak, tüm tahminlerin ortalamasını yaklaşık olarak verir.










