✨ Optimizasyon Algoritmaları

Hızlı ve iyi optimizasyon algoritmalarına sahip olmak tüm işin verimliliğini hızlandırabilir ✨

🔩 Bölümlü Gradyan İnişi (Batch Gradient Descent)

Bölümlü gradyan inişinde, gradyan inişinin her yinelemesi için maliyet fonksiyonunun gradyanını hesaplamak için tüm veri kümesini kullanırız ve ardından ağırlıkları güncelleriz.

  • Tüm veri kümesini hesaplamada kullandığımızdan dolayı gradyanın yakınsaması yavaştır.

🎩 Stokastik Gradyan İnişi (SGD)

Stokastik Gradyan İnişi'nde, gradyanı hesaplamak ve ağırlıkları her bir yinelemeyle güncellemek için tek bir veri noktası veya örnek kullanıyoruz, önce tamamen rastgele bir veri setini alabilmemiz için önce veri kümesini karıştırmamız gerekir.

Rastgele örnek, global bir minimumda bulunmamızda yardımcı olur ve yerel bir minimumda sıkışıp kalmaktan kurtarır.

  • Büyük bir veri kümesi için öğrenme çok daha hızlı ve yakınsama çok hızlı 🚀

🔩 Mini-Bölümlü Gradyan İnişi (Mini Batch Gradient Descent)

  • Tek bir eğitim örneği yerine, örneklerin küçük bölümü kullanıldığı bir Stokastik Gradyan İnişinin bir varyasyonudur.

  • Yaygın olarak kullanılır, daha hızlı yakınsar ve daha stabildir

  • Bölüm büyüklüğü veri kümesine bağlı olarak değişebilir

1 ≤ batch-size ≤ m, batch-size bir hiper-parametredir ❗

🔃 Karşılaştırma

  • Çok büyük batch-size (m veya m'ye yakın):

    • Her yineleme için çok uzun

  • Çok küçük batch-size (1 veya 1'e yakın)

    • Vektörleştirme hızını kaybetme

  • Ne çok büyük ne çok küçük batch-size

    • Vektörleştirme yapabiliriz

    • Her yineleme için iyi hız

    • En hızlı (en iyi) öğrenme 🤗✨

🚩 Batch-Size Seçmek İçin Kurallar

  • Küçük bir veri kümesi için (m ≤ 2000) ➡ bölümlü gradyan inişi kullan

  • Tipik mini batch-size: 64, 128, 256, 512, 1024'e kadar

  • mini batch-size CPU / GPU belleğine sığdığından emin ol

mini batch-size 2 kuvveti olarak seçmek daha iyidir (daha hızlı) (bellek sorunları nedeniyle) 🧐

🔩 Momentumlu Gradyan İnişi (Gradient Descent with Momentum)

Hemen hemen her zaman, gradient descent with momentum standart gradient descent algoritmasından daha hızlı yakınsar. Standart gradient descent algoritmasında, algoritmayı yavaşlatan bir yönde daha büyük ve başka bir yönde daha küçük adımlar atmamızdır 🤕

Bu momentumun geliştirebileceği şeydir, salınımı bir yönde kısıtlar, böylece algoritmamız daha hızlı yakınsayabilir. Ayrıca, y yönünde atılan adımların sayısı sınırlı olduğu için daha yüksek bir öğrenme hızı belirleyebiliriz 🤗

Aşağıdaki resim daha iyi anlatmaktadır: 🧐

Formül:

vdW=βvdW+(1β)dWv_{dW} = \beta v_{dW }+ (1-\beta)dW

vdb=βvdb+(1β)dbv_{db} = \beta v_{db }+ (1-\beta)db

W=WαvdWW = W -\alpha v_{dW}

b=bαvdbb = b -\alpha v_{db}

Daha iyi anlamak için:

Momentumlu gradyan inişinde, gradyan inişii hızlandırmaya çalışırken şunu söyleyebiliriz:

  • Türevler hızlandırıcıdır

  • v'ler hızdır

  • β sürtünmedir

🔩 RMSprop En İyileyicisi

RMSprop optimizer, momentumlu gradyan inişi algoritmasına benzer. RMSprop en iyileyicisi salınımları dikey yönde kısıtlar. Bu nedenle, öğrenme hızımızı artırabiliriz ve algoritmamız yatay doğrultuda daha hızlı yaklaşırken daha büyük adımlar atabilir.

RMSprop ve gradyan inişi arasındaki fark, gradyanlarım nasıl hesaplandığıdır, RMSProp gradyanları aşağıdaki formülle hesaplar:

SdW=βSdW+(1β)dW2S_{dW} = \beta S_{dW} + (1-\beta)dW^2

Sdb=βSdb+(1β)db2S_{db} = \beta S_{db} + (1-\beta)db^2

W=WαdWSdWW = W -\alpha\frac{dW}{\sqrt{S_{dW}}}

b=bαdbSdbb = b -\alpha\frac{db}{\sqrt{S_{db}}}

✨ Adam En İyileyicisi

Açılımı: ADAptive Moment estimation

Günümüzde yaygın olarak kullanılan algoritmadır, Adam, RMSprop ve Stokastik Gradyan İnişi'nin momentum ile bir kombinasyonu olarak görülebilir. RMSprop gibi öğrenme hızını ölçeklendirmek için kare gradyanları kullanır ve momentum ile SGD gibi gradyan yerine gradyanın hareketli ortalamasını kullanarak momentumdan yararlanır.

Özetle: Adam = RMSProp + GD with momentum + bias correction

vdW=β1vdW+(1β1)dWv_{dW}=\beta_1v_{dW}+ (1-\beta_1)dW

vdb=β1vdb+(1β1)dbv_{db}=\beta_1v_{db}+ (1-\beta_1)db

SdW=β2SdW+(1β2)dW2S_{dW}=\beta_2S_{dW}+ (1-\beta_2)dW^2

Sdb=β2Sdb+(1β2)db2S_{db}=\beta_2S_{db}+ (1-\beta_2)db^2

vdWcorrected=vdW1β1tv^{corrected}_{dW}=\frac{v_{dW}}{1-\beta^t_1}

vdbcorrected=vdW1β1tv^{corrected}_{db}=\frac{v_{dW}}{1-\beta^t_1}

SdWcorrected=SdW1β2tS^{corrected}_{dW}=\frac{S_{dW}}{1-\beta^t_2}

Sdbcorrected=Sdb1β2tS^{corrected}_{db}=\frac{S_{db}}{1-\beta^t_2}

W=WαvdWcorrectedSdWcorrected+ϵW = W-\alpha \frac{v^{corrected}_{dW}}{\sqrt{S^{corrected}_{dW}}+\epsilon}

b=bαvdbcorrectedSdbcorrected+ϵb = b-\alpha \frac{v^{corrected}_{db}}{\sqrt{S^{corrected}_{db}}+\epsilon}

😵😵😵

👩‍🏫 Hiper-parametrelerin Seçimi (önerilen değerler)

  • α: ayarlanması gerekiyor

  • β1: 0.9

  • β2: 0.999

  • ε: 10810^{-8}

🌞 Yazının Aslı

🧐 Referanslar