Dikkat edilmesi gereken önemli bir nokta da çapraz entropinin sınırlı bir kayıp olmamasıdır . Bu, çok yanlış bir tahminin potansiyel olarak kaybınızı "patlatmasını" sağlayabileceği anlamına gelir. Bu anlamda, son derece kötü bir şekilde sınıflandırılan ve kaybın patlamasına neden olan bir veya birkaç aykırı değer olması mümkündür, ancak aynı zamanda modeliniz hala veri kümesinin geri kalanında öğrenmektedir.
Aşağıdaki örnekte, test verilerinde bir aykırı değer bulunan çok basit bir veri kümesi kullanıyorum. 2 sınıf "sıfır" ve "bir" vardır.
Veri kümesi şöyle görünür:
Gördüğünüz gibi 2 sınıfın ayrılması son derece kolaydır: 0,5'in üzerinde sınıf "sıfır" dır. Ayrıca "sıfır" sınıfının ortasında sadece test setinde "bir" sınıfının tek bir aykırı değeri de vardır. Bu aykırı değer, kayıp fonksiyonu ile uğraşacağından önemlidir.
Bu veri kümesinde 1 gizli bir sinir ağı eğitiyorum, sonuçları görebilirsiniz:
Kayıp artmaya başlar, ancak doğruluk artmaya devam eder.
Örnekler başına kayıp fonksiyonunun bir histogramının çizilmesi sorunu açıkça göstermektedir: kayıp çoğu örnek için aslında çok düşüktür (0'da büyük çubuk) ve büyük bir kayıpla (17'de küçük çubuk) bir aykırı değer vardır. Toplam kayıp ortalama olduğundan, bir sette tüm puanlarda çok iyi performans göstermesine rağmen bu sette yüksek bir kayıp elde edersiniz.
Bonus: Veri ve model kodu
import tensorflow.keras as keras
import numpy as np
np.random.seed(0)
x_train_2 = np.hstack([1/2+1/2*np.random.uniform(size=10), 1/2-1.5*np.random.uniform(size=10)])
y_train_2 = np.array([0,0,0,0,0,0,0,0,0,0, 1,1,1,1,1,1,1,1,1,1])
x_test_2 = np.hstack([1/2+1/2*np.random.uniform(size=10), 1/2-1.5*np.random.uniform(size=10)])
y_test_2 = np.array([0,0,0,1,0,0,0,0,0,0, 1,1,1,1,1,1,1,1,1,1])
keras.backend.clear_session()
m = keras.models.Sequential([
keras.layers.Input((1,)),
keras.layers.Dense(3, activation="relu"),
keras.layers.Dense(1, activation="sigmoid")
])
m.compile(
optimizer=keras.optimizers.Adam(lr=0.05), loss="binary_crossentropy", metrics=["accuracy"])
history = m.fit(x_train_2, y_train_2, validation_data=(x_test_2, y_test_2), batch_size=20, epochs=300, verbose=0)
TL; DR
Kaybınız birkaç aykırı tarafından ele geçirilmiş olabilir, kayıp fonksiyonunuzun doğrulama setinizin bireysel örnekleri üzerindeki dağılımını kontrol edin. Ortalamanın etrafında bir değer kümesi varsa, o zaman aşırı uyuyorsunuz. Düşük çoğunluk grubunun üzerinde çok yüksek birkaç değer varsa, kaybınız aykırı değerlerden etkilenir :)