🔄 Derin Öğrenme

Transfer Learning Nedir? Hazır Modeli Kendi Verinde Kullan

📅 5 Haziran 2026 ⏱ 9 dk okuma ✍ FM Analitik

Milyonlarca görüntü veya milyarlarca kelimeyle eğitilmiş bir modelin bilgisini, yalnızca birkaç bin örnekten oluşan kendi veri setinize aktarabilseydiniz? İşte transfer learning (aktarımlı öğrenme) tam da bunu mümkün kılar. Günümüzde bilgisayarlı görü ve doğal dil işleme alanlarındaki başarıların büyük çoğunluğu, sıfırdan eğitilmiş modellerden değil transfer learning yaklaşımından kaynaklanmaktadır.

Transfer Learning Ne Zaman Kullanılır?

Transfer learning, özellikle şu durumlarda son derece değerlidir:

  • Etiketli veri miktarı yetersizdir (yüzlerce veya birkaç bin örnek).
  • Hesaplama kaynakları sınırlıdır; büyük modeli sıfırdan eğitmek mümkün değildir.
  • Kaynak ve hedef görev arasında anlamlı bir benzerlik vardır (örn. genel görüntü sınıflandırma → tıbbi görüntü analizi).
  • Hızlı prototipleme gereklidir; başlangıç noktası olarak güçlü bir temel istenir.

Feature Extraction ve Fine-Tuning Farkı

Transfer learning iki temel stratejiye ayrılır:

Feature Extraction (Özellik Çıkarma): Önceden eğitilmiş modelin tüm katmanları dondurulur (weights güncellenmez). Modelin son katmanı kaldırılır ve yerine göreve özel yeni bir sınıflandırma başlığı eklenir. Yalnızca bu yeni başlık eğitilir. Eğitim çok hızlıdır; az veriyle bile iyi sonuçlar verir. Ancak model, hedef görevin özelliklerine tam olarak uyum sağlayamaz.

Fine-Tuning (İnce Ayar): Önce feature extraction aşaması tamamlanır, ardından önceden eğitilmiş modelin üst katmanlarının donması kaldırılır ve tüm ağ çok düşük bir learning rate ile yeniden eğitilir. Model, hedef görevdeki ince örüntüleri de öğrenebilir. Daha fazla veri ve hesaplama gerektirir; doğru uygulanmazsa önceden öğrenilen bilgi kaybolabilir (catastrophic forgetting).

İpucu: Az veriniz varsa (örn. <1000 örnek) yalnızca feature extraction yapın. Veri miktarı arttıkça (5000+) fine-tuning'e geçin. Fine-tuning sırasında learning rate'i 10–100 kat düşürün (örn. 1e-5) ve yalnızca üst katmanları açın; alt katmanlar genel özellikleri içerir ve genellikle değiştirilmemesi daha iyidir.

Önceden Eğitilmiş Modeller

ModelAlanEğitim VerisiKullanım Senaryosu
ResNet-50 / EfficientNetBilgisayarlı GörüImageNet (1.2M görüntü)Görüntü sınıflandırma, nesne tespiti
VGG16 / InceptionV3Bilgisayarlı GörüImageNetTıbbi görüntüleme, özellik çıkarma
BERT / RoBERTaDoğal Dil İşlemeWikipedia + BooksCorpusMetin sınıflandırma, NER, soru-cevap
GPT-2 / GPT-3Doğal Dil İşlemeWeb metni (milyarlarca kelime)Metin üretimi, özetleme
WhisperSes İşleme680K saatlik sesKonuşma tanıma, çeviri

Katman Dondurma (Layer Freezing)

Katman dondurma, önceden eğitilmiş modelin ağırlıklarını değişmez kılmak için kullanılır. Keras'ta bir katmanın trainable özelliği False yapılarak dondurulur. Genel kural şudur: alt katmanlar (ilk birkaç katman) kenar, doku, renk gibi genel özellikleri öğrenmiştir ve göreve bağımsız değer taşır; üst katmanlar ise daha göreve özgü özellikler içerir ve fine-tuning sırasında serbest bırakılabilir.

Domain Adaptation ve Az Veriyle Güçlü Model

Domain adaptation, kaynak ve hedef alan arasındaki dağılım farkını gidermeyi amaçlar. Örneğin genel görüntüler üzerinde eğitilmiş bir model, dermatoloji görüntüleri için kullanılacaksa renk dağılımı, boyut ve çözünürlük farkları model performansını etkileyebilir. Bu durumlarda domain-specific fine-tuning, data augmentation ve alan bilgisini yansıtan ön işleme adımları uygulanır.

Az veriyle çalışırken: veri artırma tekniklerini agresif biçimde uygulayın; düşük learning rate ve güçlü regularizasyon kullanın; yalnızca son 1–2 katmanı eğitime açın; mümkünse kaynak alana en yakın önceden eğitilmiş modeli seçin.

Python ile Uygulama: Keras ve HuggingFace

# --- Keras ile Görüntü Transfer Learning ---
from tensorflow.keras.applications import EfficientNetB0
from tensorflow.keras import layers, models

base_model = EfficientNetB0(
    weights='imagenet', include_top=False, input_shape=(224, 224, 3)
)
base_model.trainable = False  # Katmanları dondur

model = models.Sequential([
    base_model,
    layers.GlobalAveragePooling2D(),
    layers.Dense(256, activation='relu'),
    layers.Dropout(0.3),
    layers.Dense(num_classes, activation='softmax')
])
model.compile(optimizer='adam', loss='categorical_crossentropy')

# --- HuggingFace ile NLP Fine-Tuning ---
from transformers import AutoModelForSequenceClassification, Trainer, TrainingArguments

model = AutoModelForSequenceClassification.from_pretrained(
    'dbmdz/bert-base-turkish-cased', num_labels=2
)
training_args = TrainingArguments(
    output_dir='./results',
    num_train_epochs=3,
    per_device_train_batch_size=16,
    learning_rate=2e-5,
    weight_decay=0.01
)
trainer = Trainer(model=model, args=training_args,
                  train_dataset=train_ds, eval_dataset=val_ds)
trainer.train()

Kaynaklar

  • Pan, S. J., & Yang, Q. (2010). A Survey on Transfer Learning. IEEE Transactions on Knowledge and Data Engineering, 22(10), 1345–1359.
  • Devlin, J., Chang, M. W., Lee, K., & Toutanova, K. (2019). BERT: Pre-training of Deep Bidirectional Transformers for Language Understanding. NAACL-HLT, 4171–4186.

Az Veriyle Güçlü Model Kurmak İster misiniz?

Transfer learning ile görüntü, metin veya ses verinize özel model geliştirme konusunda uzman desteği alın.

Ücretsiz Danışmanlık Al