0Pricing
R Academy · Ders

Eğitim, Doğrulama ve Aşırı Öğrenmeyi Önleme

val_loss değerini izleyin, Dropout uygulayın ve erken durdurma için geri çağrımları kullanın.

Eğitim, Doğrulama ve Aşırı Öğrenmeyi Önleme, CoddyKit'te ücretsiz bir R Academy dersidir. Bu, 4 dersinin 4. dersidir. Aşağıdan dersin tamamını ücretsiz okuyabilir, sonra tarayıcıda yerleşik kod editörü ve 7/24 yapay zeka koçu ile uygulamalı olarak pratik yapabilirsin. Bu, R Academy öğrenme yolunun bir parçasıdır ve ilerlemeniz web ve CoddyKit uygulaması arasında senkronize olur. R Academy kursu toplamda 4 dersten oluşur.

Eğitim, Doğrulama ve Sınama Ayrımı

Derin öğrenme üç veri bölümünü gerektirir: eğitim (model parametreleri öğrenir), doğrulama (eğitim sırasında genelleştirmeyi izler ve hiperparametreleri ayarlar) ve sınama (son, tarafsız değerlendirme). fit() içindeki validation_split bağımsız değişkeni doğrulama kümesini otomatik olarak oluşturur.

# validation_split = 0.2 reserves last 20% as validation
history <- model |> fit(
  x_train, y_train,
  epochs           = 50,
  batch_size       = 32,
  validation_split = 0.2,
  verbose          = 0
)

# history contains train and val metrics per epoch
names(history$metrics)

Eğitim Geçmişi Nesnesi

fit() tarafından döndürülen nesne, günlüğe kaydedilen her ölçümün her dönem için bir girdisini içeren $metrics listesine sahiptir. Eğitim ve doğrulama eğrilerini yan yana görselleştirmek için plot(history) çağrısını kullanın. Ayrışan eğriler (eğitim iyileşirken doğrulamanın yatay seyretmesi) aşırı öğrenmeye işaret eder.

# Training loss and accuracy over epochs
head(history$metrics$loss)
head(history$metrics$val_loss)

# Plot training curves
plot(history)

# Or create a custom ggplot
library(ggplot2)
df <- data.frame(
  epoch    = seq_along(history$metrics$loss),
  train    = history$metrics$loss,
  val      = history$metrics$val_loss
)
ggplot(df, aes(epoch)) +
  geom_line(aes(y = train, colour = 'Train')) +
  geom_line(aes(y = val,   colour = 'Validation')) +
  labs(y = 'Loss', title = 'Training Curves')

Aşırı Öğrenmeyi Belirleme

Aşırı öğrenme, eğitim kaybı azalmaya devam ederken doğrulama kaybının artmaya başlamasıyla ortaya çıkar. Model, genellenebilir örüntüleri öğrenmek yerine eğitim verilerini ezberler. Belirtiler arasında eğitim ve doğrulama doğruluğu arasındaki büyük fark ile doğrulama kaybının belirgin bir en düşük noktadan sonra artması bulunur.

# Overfitting is visible in the history
# Example of overfitting signatures:
cat('Epoch 5  — Train loss: 0.12, Val loss: 0.18\n')
cat('Epoch 10 — Train loss: 0.06, Val loss: 0.21\n')
cat('Epoch 20 — Train loss: 0.02, Val loss: 0.31\n')

# The model should have stopped at epoch 5!
# Strategies: early stopping, dropout, regularisation, more data

callback_early_stopping()

callback_early_stopping(monitor, patience, restore_best_weights), izlenen ölçüm iyileşmeyi bıraktığında eğitimi durdurur. patience, son iyileşmeden sonra beklenecek dönem sayısıdır. En iyi dönemin ağırlıklarına otomatik olarak dönmek için restore_best_weights = TRUE ayarlayın.

early_stop <- callback_early_stopping(
  monitor              = 'val_loss',
  patience             = 10,        # wait 10 epochs
  restore_best_weights = TRUE       # rollback to best
)

history <- model |> fit(
  x_train, y_train,
  epochs           = 200,
  batch_size       = 32,
  validation_split = 0.2,
  callbacks        = list(early_stop),
  verbose          = 0
)

cat('Stopped at epoch:', length(history$metrics$loss))

callback_reduce_lr_on_plateau()

Eğitim durakladığında öğrenme oranını düşürmek ilerlemeyi çoğu zaman yeniden başlatır. callback_reduce_lr_on_plateau(monitor, factor, patience), izlenen ölçüm patience dönem boyunca iyileşmediğinde geçerli öğrenme oranını factor ile çarpar.

reduce_lr <- callback_reduce_lr_on_plateau(
  monitor  = 'val_loss',
  factor   = 0.5,    # halve the learning rate
  patience = 5,      # after 5 stagnant epochs
  min_lr   = 1e-6    # floor for learning rate
)

history <- model |> fit(
  x_train, y_train,
  epochs           = 100,
  batch_size       = 64,
  validation_split = 0.2,
  callbacks        = list(early_stop, reduce_lr),
  verbose          = 1
)

callback_model_checkpoint()

callback_model_checkpoint(filepath, save_best_only), her dönemin sonunda model ağırlıklarını diske kaydeder (veya save_best_only = TRUE ile yalnızca başarım iyileştiğinde kaydeder). Bu, eğitim çökmelerine karşı koruma sağlar ve eğitim en iyi noktayı aştıktan sonra da sürse bile en iyi modeli yüklemenize olanak tanır.

checkpoint <- callback_model_checkpoint(
  filepath       = '/tmp/best_model.h5',
  monitor        = 'val_accuracy',
  save_best_only = TRUE,
  mode           = 'max',      # higher accuracy = better
  verbose        = 1
)

history <- model |> fit(
  x_train, y_train,
  epochs           = 100,
  batch_size       = 32,
  validation_split = 0.2,
  callbacks        = list(early_stop, reduce_lr, checkpoint)
)

# Reload best model
best_model <- load_model_hdf5('/tmp/best_model.h5')

validation_data ve validation_split

validation_split, eğitim verilerinizin son yüzde N'lik bölümünü alır. Verileriniz sıralıysa (ör. zaman serisi), bu işlem yanlı sonuç verir. Bunun yerine rastgele, katmanlı bir bölmeden önceden oluşturulmuş doğrulama kümesini sağlamak için validation_data = list(x_val, y_val) kullanın.

# Manually create a random validation split
set.seed(42)
val_idx  <- sample(nrow(x_train), size = 0.2 * nrow(x_train))
x_val    <- x_train[val_idx, ]
y_val    <- y_train[val_idx, ]
x_tr     <- x_train[-val_idx, ]
y_tr     <- y_train[-val_idx, ]

history <- model |> fit(
  x_tr, y_tr,
  epochs         = 50,
  batch_size     = 32,
  validation_data = list(x_val, y_val),  # explicit val set
  callbacks      = list(early_stop)
)

Yığın Boyutunun Etkisi

Yığın boyutu, önemli bir eğitim hiperparametresidir. Daha küçük yığınlar gradyan tahminlerine daha fazla gürültü katar (düzenlileştirme görevi görür) ve genelleştirmeye yardımcı olur. Daha büyük yığınlar daha hızlıdır; ancak daha keskin ve daha az genellenebilir en düşük noktalara yakınsayabilir. Yaygın değerler: 32, 64, 128. Önce 32'yi deneyin.

# Compare training with different batch sizes
for (bs in c(32, 128, 512)) {
  set_weights(model, init_weights)  # reset
  h <- model |> fit(
    x_train, y_train,
    epochs           = 20,
    batch_size       = bs,
    validation_split = 0.2,
    verbose          = 0
  )
  cat('Batch:', bs, '| Val Acc:',
      tail(h$metrics$val_accuracy, 1), '\n')
}

Öğrenme Oranı Isındırması

Çok küçük bir öğrenme oranıyla başlayıp ilk birkaç dönem boyunca bunu kademeli olarak artırmak (ısındırma), özellikle büyük modeller veya küçük veri kümeleri için eğitimi kararlı hâle getirebilir. Özel bir LearningRateScheduler geri çağırması bu düzeni etkinleştirir.

# Custom learning rate schedule with warmup
lr_schedule <- function(epoch, lr) {
  if (epoch < 5) {
    return(lr * (epoch + 1) / 5)  # warmup
  } else if (epoch < 30) {
    return(lr)                     # constant
  } else {
    return(lr * 0.95)              # decay
  }
}

lr_callback <- callback_learning_rate_scheduler(lr_schedule)

history <- model |> fit(
  x_train, y_train,
  epochs     = 50,
  callbacks  = list(lr_callback, early_stop),
  validation_split = 0.2
)

Düzenlileştirme Özeti

Sağlam bir derin öğrenme modeli için birden çok düzenlileştirme tekniği birlikte kullanılmalıdır:

  • Dropout: eğitim sırasında nöronları rastgele sıfırlar.
  • Ağırlık çürümesi (L2): kayıp içinde büyük ağırlıkları cezalandırır.
  • Erken durdurma: model aşırı öğrenmeden önce eğitimi durdurur.
  • Veri çoğaltma: eğitim kümesinin boyutunu yapay olarak artırır.
  • Yığın normalizasyonu: etkinleşmeleri kararlı hâle getirir ve ortak değişken kaymasını azaltır.
model <- keras_model_sequential(input_shape = c(784)) |>
  layer_dense(512, use_bias = FALSE,
              kernel_regularizer = regularizer_l2(1e-4)) |>
  layer_batch_normalization() |>
  layer_activation('relu') |>
  layer_dropout(0.4) |>
  layer_dense(256, kernel_regularizer = regularizer_l2(1e-4)) |>
  layer_batch_normalization() |>
  layer_activation('relu') |>
  layer_dropout(0.3) |>
  layer_dense(10, activation = 'softmax')

model |> compile('adam', 'categorical_crossentropy', 'accuracy')

Eğitim Eğrilerini Çizme

Eğitim ve doğrulama ölçümlerini her zaman yan yana görselleştirin. İyi eğitilmiş bir modelde her iki eğri de birbirine yakın kalarak aynı noktaya yakınsamalıdır. Eğriler ayrışıyorsa düzenlileştirme ekleyin veya model kapasitesini azaltın. Her iki eğri de yüksek kayıpta yataylaşıyorsa model yetersiz öğreniyordur.

# Detailed training curve plot
df <- data.frame(
  epoch = seq_along(history$metrics$loss),
  train_loss = history$metrics$loss,
  val_loss   = history$metrics$val_loss,
  train_acc  = history$metrics$accuracy,
  val_acc    = history$metrics$val_accuracy
)

par(mfrow = c(1, 2))
plot(df$epoch, df$train_loss, type = 'l', col = 'blue',
     xlab = 'Epoch', ylab = 'Loss', main = 'Loss')
lines(df$epoch, df$val_loss, col = 'red')
legend('topright', c('Train', 'Val'), col = c('blue','red'), lty=1)

plot(df$epoch, df$train_acc, type = 'l', col = 'blue',
     xlab = 'Epoch', ylab = 'Accuracy', main = 'Accuracy')
lines(df$epoch, df$val_acc, col = 'red')

Hızlı Kontrol

callback_early_stopping() içinde restore_best_weights = TRUE ayarlamak ne yapar?

Eğitim ve Aşırı Öğrenmeye Genel Bakış

Eğitim, Doğrulama ve Aşırı Öğrenmeyi Önleme konusundan temel çıkarımlar:

  • Eğitim sırasında genelleştirmeyi izlemek için validation_split veya validation_data kullanın.
  • plot(history), eğitim eğrilerini görselleştirir; ayrışan eğriler aşırı öğrenmeye işaret eder.
  • callback_early_stopping(patience, restore_best_weights=TRUE), eğitimi en uygun dönemde durdurur.
  • callback_reduce_lr_on_plateau(), ilerleme durakladığında öğrenme oranını azaltır.
  • callback_model_checkpoint(save_best_only=TRUE), en iyi modeli diske kaydeder.
  • Sağlam bir eğitim için dropout, L2 düzenlileştirmesi, yığın normalizasyonu ve veri çoğaltmayı bir arada kullanın.
# Best practice training setup
callbacks <- list(
  callback_early_stopping(
    monitor = 'val_loss', patience = 15,
    restore_best_weights = TRUE
  ),
  callback_reduce_lr_on_plateau(
    monitor = 'val_loss', factor = 0.5, patience = 5
  ),
  callback_model_checkpoint(
    '/tmp/best.h5', monitor = 'val_accuracy',
    save_best_only = TRUE
  )
)

model |> fit(
  x_train, y_train,
  epochs = 200, batch_size = 64,
  validation_split = 0.2,
  callbacks = callbacks, verbose = 0
)

Sıkça Sorulan Sorular

“Eğitim, Doğrulama ve Aşırı Öğrenmeyi Önleme” dersi ücretsiz mi?

Evet — “Eğitim, Doğrulama ve Aşırı Öğrenmeyi Önleme” dersin tüm metni burada web'de ücretsiz olarak okunabilir. Etkileşimli olarak pratik yapmak (yerleşik kod editörü ve 7/24 yapay zeka koçu) ve R Academy kursunun geri kalanını açmak için CoddyKit PRO'ya yükselt. R Academy kursu toplamda 4 dersten oluşur.

“Eğitim, Doğrulama ve Aşırı Öğrenmeyi Önleme” dersinde ne öğreneceğim?

val_loss değerini izleyin, Dropout uygulayın ve erken durdurma için geri çağrımları kullanın. R Academy ile uygulamalı kodu tarayıcıda doğrudan çalıştırarak pratik yaparsın ve 7/24 yapay zeka koçu dersi çalışırken sorularını yanıtlar.

R Academy öğrenmeye başlamak için deneyim gerekli mi?

Önceden deneyim gerekmez. CoddyKit'te R Academy, başlangıçtan ileri seviyeye kadar yapılandırıldığı için buradan başlayabilir veya başından başlayıp kendi hızında ilerleme yapabilirsin. Bu, 4 dersinin 4. dersidir.

“Eğitim, Doğrulama ve Aşırı Öğrenmeyi Önleme” dersi ne kadar sürer?

Çoğu CoddyKit dersi yaklaşık 5–10 dakika sürer. Her biri kısa ve etkileşimli olduğu için sabit ilerleme yaparsın ve web ile uygulama arasında tam olarak bıraktığın yerden devam edebilirsin.

Bu R Academy dersinde kod yazıp çalıştırabilir miyim?

Evet. Her R Academy dersi yerleşik bir kod editörü içerir, bu sayede tarayıcıda gerçek kod yazıp çalıştırabilir ve anlık yapay zeka geri bildirimi alırsın — yerel kurulum gerekli değildir.

Bu kursun tüm dersleri

  1. R'de Keras ve TensorFlow Kurulumu
  2. Sıralı Modeller Oluşturma
  3. Evrişimli Sinir Ağlarının Temelleri
  4. Eğitim, Doğrulama ve Aşırı Öğrenmeyi Önleme
← R Academy Sayfasına Dön