Transfer Learning Nedir? Hazır Modeli Kendi Verinde Kullan
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
| Model | Alan | Eğitim Verisi | Kullanım Senaryosu |
|---|---|---|---|
| ResNet-50 / EfficientNet | Bilgisayarlı Görü | ImageNet (1.2M görüntü) | Görüntü sınıflandırma, nesne tespiti |
| VGG16 / InceptionV3 | Bilgisayarlı Görü | ImageNet | Tıbbi görüntüleme, özellik çıkarma |
| BERT / RoBERTa | Doğal Dil İşleme | Wikipedia + BooksCorpus | Metin sınıflandırma, NER, soru-cevap |
| GPT-2 / GPT-3 | Doğal Dil İşleme | Web metni (milyarlarca kelime) | Metin üretimi, özetleme |
| Whisper | Ses İşleme | 680K saatlik ses | Konuş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