Keras Loss Fonksiyonları

Buse Yaren Tekin
Operations Management Türkiye
3 min readFeb 7, 2021

Categorical Cross-Entropy Loss, Binary Cross-Entropy Loss ve MSE Loss

Merhaba! Haydi bugün biraz daha derinlere inelim şu sinir ağlarının, ne dersiniz? İlk olarak kayıp fonksiyonlarının neden kullanıldığını ve daha sonra ne anlamlara geldiklerini hep birlikte öğrenelim. Bir de şunu söylemeden geçemeyeceğim. Oluşturduğumuz projelerde kullanacağımız hiperparametreler ile değişimi çok güzel yakalayabiliriz. Bu sebeple beklentinin üstünde bir doğruluk oranı yine bu parametrelerin oluşmasından geçmektedir.

Kayıp Fonksiyonu (Loss Function) Nedir?

Öncelikle sizlere amaç fonksiyonundan bahsetmek istiyorum. Buna İngilizce tabiri ile seslenmek daha doğru olur. Objective function, oluşturduğumuz veya kullandığımız optimizasyon algoritmalarında var olan aday çözümleri değerlendirmek için kullandığımız bir fonksiyon türüdür. Aslına bakarsanız optimizasyon algoritmasının olmazsa olmazıdır.

🏋🏻‍♀️ Şimdi ise kayıp fonksiyonuna geçiyoruz. Adından da anlaşılacağı üzere burada bir kaybımız mevcut, yani bizim için negatif bir sonuç doğurmakta. Oluşturduğumuz sinir ağlarında doğruluğun yükselmesi için oluşan bu hata oranını en aza indirgemek istemekteyiz. İşte bazı geçerli sebeplerden kaynaklanan bu hata oranları optimizasyon algoritmalarındaki objective function olarak düşünülebilir. Yani bizim amaç fonksiyonumuz burada bir şekilde kayıp fonksiyonuna dönüşmektedir. Loss function, bir şekilde hedefimize zarar vermektedir. Bu sebeple kayıp değerini olabildiğince düşük tutmaya çalışıyoruz.

Küçültmek veya maksimize etmek istediğimiz işleve amaç fonksiyonu veya ölçüt denir. En aza indirdiğimizde, buna maliyet fonksiyonu, kayıp fonksiyonu veya hata fonksiyonu da diyebiliriz.

— Page 82, Deep Learning, 2016.

Not olarak şunu da eklemek istiyorum, seçimler tamamen bize aittir. Bu sebeple hangi işlev üzerinde çalışacağımıza iyi karar vermemiz gerekmektedir. Bunun ile ilgili güzel bir söz ekliyorum 👇🏻

Bu nedenle, işlevin tasarım hedeflerimizi sadık bir şekilde temsil etmesi önemlidir. Kötü bir hata işlevi seçer ve tatmin edici olmayan sonuçlar elde edersek, aramanın amacını kötü bir şekilde belirlememiz için hata bizimdir.

— Page 155, Neural Smithing: Supervised Learning in Feedforward Artificial Neural Networks, 1999.

Hangi Kayıp Fonksiyonu Kullanılır?

🪄 Kayıp fonksiyonunun seçimi, oluşturduğunuz YSA katmanlarındaki çıktıyı bile etkilemektedir. Bu sebeple tasarımı doğru yapmamız gerekiyor.

🪄 Seçilecek kayıp fonksiyonunu iyi değerlendirebilmemiz için problemimizi iyi tanımamız gerekmektedir. Örneğin bir regresyon problemi söz konusu ise genellikle mean_square_error fonksiyonu kullanıldığını bilmeliyiz. Tabiki bu fonksiyonların da çeşitli seçenekleri mevcut. Bunları seçebilmemiz için gelin sizlerle Keras’ın dokümantasyonuna gidelim.

Image by Ref[3]

🧚🏼‍♂️ Gördüğümüz gibi çok fazla kayıp fonksiyonunın sınıf ve fonksiyon olarak seçeneği mevcut ve olay tamamen bize kalmış durumdadır. Aynı metotların sınıf ve fonksiyon özellikleri mevcut olarak verilmiş. Hemen bir fonksiyon örneği açarak olayı biraz daha koda dokundurmak istiyorum.

Buna başka bir örnek olarak ise compile( ) metodunu örnek verebiliriz. Burada oluşturduğumuz yapı aslında CNN modelinin compile edilmesinden geçiyor. Optimizasyon algoritması olarak SGD yani Stokastik Gradyan Düşümü kullanılırken kayıp fonksiyonu olarak ise MeanSquaredError kullanılmaktadır.

Bir başka kayıp fonksiyonumuz ise categorical_crossentropy oluyor. Kendisi benim çok yakından tanıdığım bir fonksiyondur. Fonksiyonumuzu class olarak da kullanabiliyoruz modelin içerisinde de kullanmamız mümkün. Ancak öncelikle birazcık tanıyalım kendilerini.

Keras’a ait orijinal dokümantasyonda şöyle bahsediliyor:

Etiketler ve tahminler arasındaki çapraz entropi kaybını hesaplar.

Peki biraz daha açalım mı ne demek istediğini? İki veya daha fazla etiket sınıfı olduğunda bu çapraz entropi kaybı fonksiyonunu kullanmamız gerektiği söyleniyor. Aşağıda bu loss fonksiyonunun Class olarak yüklenmiş halini bulabilirsiniz.

🖇 Örneğin Fashion MNIST verilerini düşünelim. Bu verileri incelediğimizde 10 kategoriden oluştuğunu göreceğiz. Yani birden fazla kategori sayısı mevcut olduğunda bu kayıp fonksiyonunu kullanmamız daha akıllıca olacaktır.

Peki ya modeli oluşturduğumuzda kullanmak istersek nasıl bir kod yazmamız gereklidir?

📥 Sonuç olarak çok sınıflı sınıflandırma problemlerinde bu fonksiyonu kullanabiliyoruz. Şimdi ise sırada inceleyeceğimiz son kayıp fonksiyonu var. Tabiki ikili sınıflandırmalarda sıkça kullandığımız Binary Cross-Entropy!

binary_crossentropy kayıp fonksiyonu bir örneği iki sınıftan birisine ait olarak sınıflandırdığımız problemlerde kullanılmaktadır. Örneğin bir görüntünün kedi veya köpek olduğunu belirlememiz gerekiyor. Bu aşamada devreye bu kayıp fonksiyonu giriyor. Örneğin köpek ise 1, kedi ise 0 olarak işaretleyebiliyor.

Şimdi biraz da kodlamasına göz atalım, ne dersiniz?

Yukarıda BinaryCrossentropy sınıfını görmekteyiz. Sınıf yapısı olarak kullanabileceğimiz gibi aşağıda yer alan yapıyı da modelimizin içine yükleyebiliriz.

🎉Böylelikle tf.keras API kullanılarak modelimizin içerisinde kayıp fonksiyonumuzu da kullanmış olduk.

Bir sonraki yazımda ise derin öğrenme alanında yapay sinir ağlarını eğitirken kayıp fonksiyonunu nasıl seçeceğimizi anlatacağım. Takipte kalın ✨

KAYNAKLAR

  1. https://machinelearningmastery.com/loss-and-loss-functions-for-training-deep-learning-neural-networks/
  2. https://machinelearningmastery.com/how-to-choose-loss-functions-when-training-deep-learning-neural-networks/
  3. https://keras.io/api/losses/

--

--