Optimizasyon Algoritmaları

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

🔩 Toplu Gradyan İnişi (Batch Gradient Descent)

Toplu gradyan inişinde, gradyan inişinin her yinelemesinde 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, tamamen rastgele bir veri setini alabilmemiz için önce veri kümesini karıştırmamız gerekir.

Rastgele örnek, global bir minimuma ulaşmaya yardımcı olur ve yerel bir minimumda takılıp kalmayı önler.

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

🔩 Mini-Toplu Gradyan İnişi (Mini Batch Gradient Descent)

  • Tek bir eğitim örneği yerine, örneklerin küçük bölümünün 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, momentumlu gradyan inişi, standart gradyan inişi algoritmasından daha hızlı yakınsar. Standart gradyan inişi 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 durumu 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şini 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

Last updated