Derin sinir ağlarını eğitmek, sönüm veya patlayan gradyanlar ile iç değişken kayması (internal covariate shift) nedeniyle zorlu olabilir. Bu etkenler, eğitim sürecini ciddi ölçüde yavaşlatabilir ve ağın etkin biçimde öğrenmesini engelleyebilir. Neyse ki, bu sorunları normalleştirme teknikleriyle ele alabiliriz.
Birçok normalleştirme tekniği olsa da, batch normalization en popüler olanlardan biridir ve pek çok derin öğrenme mimarisinde standart bir bileşen haline gelmiştir. Daha hızlı yakınsamaya, eğitim istikrarına ve daha iyi genelleme performansına katkı sağlar.
Bu eğitici yazıda batch normalizationı, nasıl çalıştığını matematiksel olarak ve TensorFlow ile Keras kullanarak nasıl uygulayacağınızı açıklayacağız.
Normalleştirme, girdi verilerini standartlaştırmayı amaçlayan, makine öğrenmesinde kritik bir ön işleme adımdır.
Min-maks ölçekleme, z-puanı normalleştirme ve log dönüşümü gibi çeşitli teknikler, özellikleri tutarlı bir aralığa veya dağılıma yeniden ölçeklemek için yaygın biçimde kullanılır. Bu teknikler aykırı değerlerin etkisini azaltmaya, yakınsamayı iyileştirmeye ve özellikler arasında adil bir karşılaştırma sağlamaya yardımcı olur.
Girdi verilerinin normalleştirilmesi, tüm özelliklerin öğrenme sücine eşit ölçüde katkı sağlamasını temin ettiği için etkili model eğitimi açısından esastır. Normalleştirme olmadan, daha büyük ölçeklere veya varyanslara sahip özellikler, optimizasyon sücini baskın hale getirerek altın düzeyde model performansına yol açabilir.
Normalleştirme, tüm özellikleri benzer bir ölçeğe getirerek modelin veriden anlamlı desenler ve ilişkiler öğrenmesine olanak tanır.
Derin sinir ağlarını eğitmek, yakınsamayı ve genellemeyi engelleyebilecek birçok zorluk sunar:
İç değişken kayması: Girdi verisi birden çok katmandan geçerken aktivasyonların dağılımı değişebilir; bu da modelin uyum sağlamasını ve etkili öğrenmesini zorlaştırır.
Sönüm ve patlayan gradyanlar: Derin ağlar, geri yayılım sırasında gradyanların çok küçük veya çok büyük hale gelmesi nedeniyle etkili ağırlık güncellemelerini engelleyen sorunlar yaşayabilir.
Başlangıç değerlerine duyarlılık: Başlangıç ağırlıkları eğitimi önemli ölçüde etkiler; kötü başlatma yavaş yakınsamaya hatta eğitim başarısızlığına yol açabilir.
Batch normalization, her mini-batch içindeki aktivasyonları normalleştirerek bu zorlukları ele alır; eğitim sücini istikrarlılaştırır ve model performansını iyileştirir.
Batch Normalization Nedir?
Batch normalization, derin sinir ağlarının eğitimi sırasında bir mini-batch içindeki bir katmanın aktivasyonlarını normalleştiren bir tekniktir.
Mini-batch içinde her özellik için aktivasyonların ortalaması ve varyansı hesaplanır; ardından bu istatistikler kullanılarak aktivasyonlar normalleştirilir.
Normalleştirilen aktivasyonlar, öğrenilebilir parametrelerle ölçeklenir ve kaydırılır; böylece model, en uygun aktivasyon dağılımına uyum sağlayabilir.
Batch Normalization genellikle bir katmanın doğrusal dönüşümünden (örn. tam bağlantılı katmandaki matris çarpımı veya evrişimli katmandaki konvolüsiyon işlemi) sonra ve doğrusal olmayan aktivasyon fonksiyonundan (örn. ReLU) önce uygulanır.
Batch normalizationın temel bilesenleri şunlardır:
Mini-batch istatistikleri: Mini-batch içinde her özellik için aktivasyonların ortalaması ve varyansı hesaplanır.
Normalleştirme: Aktivasyonlar, mini-batch ortalaması çıkarılıp mini-batch standart sapmasına bölünerek normalleştirilir.
Ölçekleme ve kaydırma: Öğrenilebilir parametreler (γ ve β), normalleştirilen aktivasyonları ölçeklemek ve kaydırmak için devreye sokulur; böylece model, en uygun aktivasyon dağılımını öğrenebilir.
Neden Batch Normalization Kullanılır?
Derin sinir ağlarını eğitirken karşılaştığımız zorluklardan biri iç değişken kaymasıdır. Bu, önceki katmanlardaki ağırlıklar güncellendikçe bir katmanın aktivasyon (dıkış) dağılımının eğitim boyunca değişmesiyle ortaya çıkar. Bu kayma eğitimi zorlaştırabilir ve yavaşlatabilir.
Batch normalization, her mini-batch içindeki aktivasyonları normalleştirerek bu kaymayı azaltır ve sonraki katmanlara girdi olacak değerleri daha istikrarlı ve tutarlı hale getirir.
Aktivasyonların normalleştirilmesi, daha yüksek öğrenme oranlarıyla daha hızlı yakınsamayı sağlar ve modeli başlatma seçimlerine karşı daha az duyarlı kılar.
Ayrıca, modelin belirli aktivasyon desenlerine bağımlılığını azaltarak aşırı uyumun önüne geçmeye yardımcı olan bir düzenleme etkisi de sağlar.
Bu faydaların bileşimi, batch normalizationı daha sağlam derin öğrenme modelleri eğitmek için güçlü bir araç haline getirir. Daha sağlam modeller oluşturma hakkında daha fazla bilgi edinmek için şu Makine Öğrenmesi İzleme Kavramları kursuna göz atın.
Batch Normalizationın Ardındaki Matematik
Artık batch normalizationın “neden”ini anladığımıza göre, “nasıl”ına dalalım.
Batch normalization, eğitim ve çıkarım aşamalarında farklı çalışır; bu nedenle her aşamanın ardındaki matematiği açıklayalım.
Eğitim sırasında batch normalization
Normalleştirme adımı ile başlayalım. Önce bir mini-batch içindeki her özellik için ortalama ve varyansı hesaplarız. Ortalama ve varyans için kullanabileceğimiz formüller şunlardır.
Daha sonra aktivasyonları normalleştirmek için bu ortalama ve varyansı kullanırız. Burada ε (küçük epsilon) sayısal istikrar için eklenen küçük bir sabittir:
Normalleştirme adımı tamamlandıktan sonra ölçekleme ve kaydırma adımına geçeriz. Öğrenilebilir γ ve β parametrelerini kullanarak normalleştirilen aktivasyonları şu formülle kaydırırız:
Bu parametreler, modelin en uygun aktivasyon dağılımını öğrenmesine olanak tanır.
Çıkarım sırasında batch normalization
Çıkarımda, batch istatistikleri (ortalama ve varyans) eğitim sırasında hesaplanan hareketli (running) istatistiklerle değiştirilir. Bu hareketli istatistikler genellikle momentum faktörü ile güncellenen bir hareketli ortalama ile tutulur.
Hareketli ortalama ve varyansı hesaplamak için, çalışma hızını (güncelleme oranını) kontrol eden momentum faktörü α içeren şu iki formülü kullanabiliriz:
Hareketli ortalama ve varyans model parametreleri olarak saklanır ve çıkarım sırasında normalleştirme için kullanılır. Eğitim sırasında öğrenilen ölçekleme ve kaydırma parametreleri (γ ve β) de çıkarımda kullanılır.
Sıradaki adım, TensorFlow kullanarak batch normalizationı nasıl uygulayacağımızı öğrenmek.
TensorFlow’da Batch Normalization
Gerekli kütüphaneleri içe aktararak başlayalım:
import tensorflow as tf
from tensorflow import kerasAltyapı:
Sonra, 60.000 eğitim ve 10.000 test el yazısı rakam görüntüsünden oluşan MNIST veri kümesini yükleyelim. Veri kümesini keras.datasets.mnist.load_data() fonksiyonuyla yükleyip eğitim verisi (x_train, y_train) ve test verisi (x_test, y_test) olarak ayırıyoruz:
# Load the MNIST dataset(x_train, y_train),(x_test, y_test)= keras.datasets.mnist.load_data()Altyapı:
Veriyi ön işlemek için şu adımları izliyoruz:
Eğitim ve test görüntülerini (num_samples, 28, 28, 1) şekline dönüştürüyoruz; burada num_samples görüntü sayısıdır ve her görüntü tek kanallı 28x28 gri tonlamalıdır.
Piksel değerlerini 255.0'a bölerek 0 ile 1 arasına ölçekliyoruz.
Eğitim ve test etiketlerini keras.utils.to_categorical() ile kategorik formata (one-hot) dönüştürüyoruz.
# Preprocess the data
x_train = x_train.reshape((60000,28,28,1))/255.0# Reshape and normalize training images
x_test = x_test.reshape((10000,28,28,1))/255.0# Reshape and normalize test images
y_train = keras.utils.to_categorical(y_train)# Convert training labels to categorical format
y_test = keras.utils.to_categorical(y_test)# Convert test labels to categorical formatAltyapı:
Şimdi model mimarisini tanımlama adımına geçiyoruz. Bunun için şu adımları izliyoruz:
keras.Sequential API’sini kullanarak mimariyi katmanları ardışık biçimde yığacak şekilde tanımlıyoruz.
Model, özellik çıkarımı için evrişim katmanları (Conv2D) ve aktivasyonları normalleştirmek için batch normalization katmanları (BatchNormalization) içerir.
MaxPooling2D ile özellik haritalarını aşağı örnekliyoruz.
Yoğun katmanlara geçmeden önce özellik haritalarını (Flatten) düzleştiriyoruz.
Son yoğun katman, 10 sınıfa karşılık gelen 10 birimli ve softmax aktivasyonlu.
# Define the model architecture
model = keras.Sequential([
keras.layers.Conv2D(32,(3,3), activation='relu', input_shape=(28,28,1)),
keras.layers.BatchNormalization(),
keras.layers.Conv2D(64,(3,3), activation='relu'),
keras.layers.BatchNormalization(),
keras.layers.MaxPooling2D((2,2)),
keras.layers.Flatten(),
keras.layers.Dense(128, activation='relu'),
keras.layers.BatchNormalization(),
keras.layers.Dense(10, activation='softmax')])Altyapı:
Sonraki adımda, .compile() yöntemiyle modeli derleyip iyileştirici, kayıp fonksiyonu ve değerlendirme ölçütünü belirtiyoruz. şunları kullanıyoruz:
İyileştirme için Adam (özellik 'adam').
Çok sınıflı sınıflandırma olduğu için kayıp fonksiyonu olarak kategorik çapraz entropi ('categorical_crossentropy').
Model performansını ölçmek için doğruluk ('accuracy') metriği.
# Compile the model
model.compile(optimizer='adam',
loss='categorical_crossentropy',
metrics=['accuracy'])Altyapı:
Sonra, modeli .fit() yöntemiyle eğitelim:
Eğitim verisini (x_train, y_train), batch boyutunu, epoch sayısını ve doğrulama verisini (x_test, y_test) belirtiriz.
batch_size, her gradyan güncellemesi başına örnek sayısını belirler.
epochs parametresi, modelin tüm eğitim verisi üzerinden kaç kez geçeceğini belirtir.
Doğrulama verisi, eğitim sırasında görülmeyen veride model performansını değerlendirmek için kullanılır.
# Train the model
model.fit(x_train, y_train, batch_size=128, epochs=5, validation_data=(x_test, y_test))Altyapı:
Bu adımları izleyip mimariye batch normalization katmanlarını dahil ederek, MNIST veri kümesi üzerinde aktivasyonların normalleştirilmesinden ve geliştirilmiş eğitim istikrarından yararlanarak modeli verimli biçimde eğitiriz.
Artık batch normalization ve uygulamasını öğrendiğimize göre, sağladığı faydaları inceleyelim.
Uygulama Öncelikleri
Şimdi, derin öğrenme mimarilerinde batch normalization uygulamasına daha derinlemesine bakalım.
Sinir ağı mimarilerinde konumlandırma
Batch normalization katmanları, ağ içinde stratejik olarak yerleştirildiğinde en etkilidir. Tipik olarak doğrusal dönüşümden (konvolüsiyon veya tam bağlantılı katmanlar) sonra ve doğrusal olmayan aktivasyon fonksiyonundan önce konumlandırılırlar.
Evrişimsel ağlarda bu, her konvolüsiyon katmanından sonra ve aktivasyon fonksiyonundan önce batch normalization yerleştirmeye tekabül eder.
Benzer şekilde, tam bağlantılı ağlarda, her gizli katmanın doğrusal dönüşümlerinden sonra ve aktivasyon fonksiyonundan önce batch normalization eklemek yaygındır.
Batch Normalization katmanlarının konumu, modelimizin performansını ve eğitim dinamiklerini etkileyebilir. Her bir mimari için en iyi yapılandırmayı bulmak için denemeler gerekebilir.
Batch boyutunun etkisi
Eğitimde kullanılan batch boyutu, batch normalizationın etkinliğini etkileyebilir. Daha büyük batch boyutları, batch istatistiklerinin (ortalama ve varyans) daha doğru tahminlerini sağlar; bu da daha iyi normalleştirme ve daha istikrarlı eğitim anlamına gelir.
Ancak batch boyutunu artırmak, bellek tüketimini ve hesaplama gereksinimlerini de artırır; bu da mevcut donanım kaynaklarına bağlı olarak kısıt oluşturabilir.
Batch boyutunu hesaplama olanaklarıyla dengelerken, normalleştirme için batch istatistiklerinin güvenilir kalmasını sağlamak önemlidir.
Düzenleme etkileri ve yansımaları
Batch normalization, mini-batch istatistiklerinin neden olduğu gürültü nedeniyle doğal olarak bir düzenleme etkisi sağlar. Batch istatistiklerinin getirdiği stokastiklik, bir düzenleme biçimi gibi davranır; aşırı uyumu azaltır ve genellemeyi iyileştirir.
Ancak bu düzenleme etkisi, dropout veya L2 düzenleme gibi diğer düzenleme teknikleriyle etkileşebilir.
Batch normalization kullanırken, farklı düzenleme yöntemleri arasındaki etkileşimi göz önünde bulundurup aşırı düzenlemeden veya performansın azalmasından kaçınacak şekilde ayarlamalar yapmak gerekir.
Batch normalization kullanırken doğrulama verisi üzerindeki performansı izleyerek ve denemeler yaparak doğru düzenleme dengesini bulabilirsiniz.
Batch Normalizationın Sınırlamaları ve Zorlukları
Batch normalization kullanışlı bir teknik olsa da farkında olmamız gereken bazı sınırlamalar ve zorluklar vardır.
Evrişimsiz mimarilerde batch normalization
Batch Normalization ilk olarak evrişimsel sinir ağları (CNN) için tasarlanmıştır ve özellikle bu alanda başarılı olmuştur.
Ancak, yinelemeli sinir ağları (RNN) veya transformerlar gibi evrişimsiz mimarilerde etkinliği sınırlı olabilir.
RNN’lerin ardışık doğası ve transformerlardaki dikkat mekanizmaları, batch normalization uygulamasını daha zor hale getirebilir.
Layer normalization veya instance normalization gibi alternatif normalleştirme teknikleri bu mimariler için daha uygun olabilir.
Küçük batch boyutları ve çıkarım sırası performansı
Batch normalization, aktivasyonları normalleştirmek için eğitim sırasında hesaplanan batch istatistiklerine dayanır. Batch boyutu küçük olduğunda, bu istatistikler daha az güvenilir olabilir ve normalleştirme sürecine gürültü veya istikrarsızlık katabilir.
Bu durum, özellikle bellek kısıtları nedeniyle batch boyutu azaltıldığında, alt düzeyde performansa veya eğitim güçlüklerine yol açabilir.
Çıkarım sırasında batch normalization, eğitim sırasında hesaplanan hareketli istatistikleri kullanır; bu istatistikler tekil örneklerin veya küçük batchlerin istatistiklerini tam olarak yansıtmayabilir. Bu da eğitim ve çıkarım dağılımları arasında uyumsuzluğa yol açarak model performansını etkileyebilir.
Batch normalizationın eksileri ve takasları
Batch normalization, batch istatistiklerinin hesaplanması ve normalleştirme işlemi nedeniyle eğitim sırasında ek hesaplama yükü getirir. Bu yük, özellikle büyük modeller veya veri kümeleşleri için bellek gereksinimlerini ve eğitim süresini artırabilir.
Batch normalization, normalleştirme süreci önemli bilgileri bozabilecek veya anlamlı farklılıkları kaldırabilecek veri türleri veya görevler için uygun olmayabilir.
Örneğin, segmentasyon veya konumlandırma gibi ince ayrıntılar ya da hassas uzamsal bilginin söz konusu olduğu görevlerde batch normalization istenmeyen etkilere sahip olabilir.
Batch Normalizationın düzenleyici etkisi bazen dropout gibi diğer düzenleme teknikleriyle beklenmedik şekillerde etkileşebilir; bu da dikkatli ayarlama ve değerlendirme gerektirir.
Batch Normalizationın Sınırlamaları Nasıl Aşılır
Sınırlama ve zorluklara rağmen batch normalization, derin öğrenmede yaygın ve etkili bir teknik olmaya devam ediyor. Araştırmacılar ve uygulayıcılar, bu sorunları ele almanın ve orijinal formülasyonu iyileştirmenin yollarını keşfetmeyi sürdürüyor.
Batch normalization sınırlamalarını azaltmak için bazı yaklaşımları düşünelim:
Uyarlamalı batch normalization: Bu teknik, her örneğin özelliklerine göre batch istatistiklerini ayarlar ve küçük batch boyutlarıyla ilgili sorunları hafifletmeye yardımcı olur.
Sanal batch normalization: Bu yöntem, birden fazla batch’ten örnekler içeren sanal bir batch kullanarak normalleştirme istatistiklerini hesaplar; böylece normalleştirmenin istikrarı ve güvenilirliği artar.
Hibrit normalleştirme teknikleri: Batch normalizationı, layer normalization veya instance normalization gibi diğer yöntemlerle birleştirmek, belirli mimari veya görevlere özgü sınırlamaları ele almaya yardımcı olabilir.
Batch Normalizationın Türevleri ve Genleşmeleri
Şimdi, batch normalizationın doğurduğu olası zorlukları azaltmak için de kullanabileceğimiz farklı türev ve genleşmelerine bakalım.
Layer normalization
Layer normalization, batch boyutu yerine, bir katman içinde tüm kanallar genelindeki aktivasyonlar üzerinde çalışır.
Aktivasyonları, batch içindeki her bir örnek için hesaplanan ortalama ve varyansa göre normalleştirir.
Layer normalization, özellikle yinelemeli sinir ağları (RNN) ve batch boyutunun küçük veya değişken olduğu senaryolarda kullanışlıdır.
Group normalization
Group normalization, kanalları gruplara böler ve normalleştirme istatistiklerini her grup içinde hesaplar.
Bir alt kanal kümesini birlikte normalleştirerek layer normalization ile batch normalization arasında bir denge kurar.
Group normalization, bellek kısıtlı ortamlarda veya yüksek çözünürlüklü görüntüler işlenirken olduğu gibi batch boyutunun kısıtlı olduğu durumlarda etkilidir.
Instance normalization
Instance normalization, batch içindeki her bir örneğin her kanalına ayrı ayrı normalleştirme uygular.
Stil transferi ve görüntü üretimi gibi, içeriği normalleştirirken stili korumanın amaçlandığı görevlerde yaygın biçimde kullanılır.
Instance normalization, bu tür uygulamalarda üretilen görüntülerin kalite ve istikrarının artmasını sağladığı gösterilmiştir.
Özellikle batch boyutu küçük olduğunda, batch istatistikleri ile popülasyon istatistikleri arasındaki uyumsuzluğu gidermeyi amaçlar.
Batch renormalization, eğitimi istikrarlılaştırır ve sınırlı batch boyutlarının söz konusu olduğu durumlarda modelin genelleme becerisini iyileştirir.
Weight normalization
Weight Normalization, bir sinir ağının ağırlıklarının büyüklüğü ile yönünü ayrıştıracak şekilde yeniden parametreleştiren bir tekniktir.
Ağırlıkları, Öklid normlarına bölerek normalleştirir ve öğrenilebilir bir ölçek parametresi tanıtır.
Weight normalization, Batch Normalization ile birlikte veya alternatif bir normalleştirme yöntemi olarak kullanılabilir.
Bazı durumlarda optimizasyon probleminin koşullarını iyileştirdiği ve yakınsamayı hızlandırdığı gösterilmiştir.
Batch normalizationın bu türev ve genleşmeleri, belirli zorlukları ele almak ve derin öğrenme modellerinin eğitimini ve performansını iyileştirmek için ek araçlar sunar. Her türevin gücülü ve dikkat edilmesi gereken yanları vardır; hangisinin kullanılacağı, görevin özel gereksinimlerine, model mimarisine ve mevcut hesaplama kaynaklarına bağlıdır.
Sonuç
Batch normalization, derin öğrenmede kritik bir teknik haline gelmiş ve derin sinir ağlarının eğitimi için önemli faydalar sunmaktadır.
Aktivasyonları mini-batch’ler içinde normalleştirerek iç değişken kaymasını azaltabilir, yakınsamayı iyileştirip genellemeyi güçlendirebiliriz. Yolun başındaki veya junior bir veri profesyoneli olarak şunları aklınızda tutun:
Eğitim istikrarını ve performansı artırmak için derin öğrenme modellerinize Batch Normalization katmanları ekleyin.
Batch normalization katmanlarının konumlandırmasıyla denemeler yapın ve model performansınızdaki etkisini izleyin.
Projelerinizde en etkin yöntemlerden yararlanmak için normalleştirme tekniklerindeki güncel araştırma ve gelişmeleri takip edin.
Makine öğrenmesi mühendisi olmak isterseniz, şu 12 derslik kariyer yolunu değerlendirin: Machine Learning Engineer.
Ben bir veri bilimi içerik yazarıyım. YZ/ML/DS konuları etrafında içerik üretmeyi seviyorum. Ayrıca yeni YZ araçlarını keşfediyor ve onlar hakkında yazıyorum.
Algoritmalar, sistem tasarımı ve davranışsal senaryoları kapsayan bu temel sorularla teknik mülakat sürecine hakim olun. Uzman cevapları, kod örnekleri ve kanıtlanmış hazırlık stratejileri edinin.
Git deponuzu temiz tutmak için .gitignore’u nasıl kullanacağınızı öğrenin. Bu eğitim; temelleri, yaygın kullanım durumlarını ve başlamanıza yardımcı olacak pratik örnekleri kapsar!
Yapay zekanın temellerini keşfedin, yapay zekayı işinizde etkili bir şekilde kullanmayı öğrenin ve dinamik yapay zeka dünyasında yolunuzu bulmak için ChatGPT gibi modellere dalın.
Derin sinir ağlarını eğitmek, sönüm veya patlayan gradyanlar ile iç değişken kayması (internal covariate shift) nedeniyle zorlu olabilir. Bu etkenler, eğitim sürecini ciddi ölçüde yavaşlatabilir ve ağın etkin biçimde öğrenmesini engelleyebilir. Neyse ki, bu sorunları normalleştirme teknikleriyle ele alabiliriz.
Birçok normalleştirme tekniği olsa da, batch normalization en popüler olanlardan biridir ve pek çok derin öğrenme mimarisinde standart bir bileşen haline gelmiştir. Daha hızlı yakınsamaya, eğitim istikrarına ve daha iyi genelleme performansına katkı sağlar.
Bu eğitici yazıda batch normalizationı, nasıl çalıştığını matematiksel olarak ve TensorFlow ile Keras kullanarak nasıl uygulayacağınızı açıklayacağız.
Keras kullanarak sinir ağlarının temellerini öğrenmek isterseniz, şu Python’da Derin Öğrenmeye Giriş kursuna göz atın.
Makine Öğrenmesinde Normalleştirme Nedir?
Normalleştirme, girdi verilerini standartlaştırmayı amaçlayan, makine öğrenmesinde kritik bir ön işleme adımdır.
Min-maks ölçekleme, z-puanı normalleştirme ve log dönüşümü gibi çeşitli teknikler, özellikleri tutarlı bir aralığa veya dağılıma yeniden ölçeklemek için yaygın biçimde kullanılır. Bu teknikler aykırı değerlerin etkisini azaltmaya, yakınsamayı iyileştirmeye ve özellikler arasında adil bir karşılaştırma sağlamaya yardımcı olur.
Girdi verilerinin normalleştirilmesi, tüm özelliklerin öğrenme sücine eşit ölçüde katkı sağlamasını temin ettiği için etkili model eğitimi açısından esastır. Normalleştirme olmadan, daha büyük ölçeklere veya varyanslara sahip özellikler, optimizasyon sücini baskın hale getirerek altın düzeyde model performansına yol açabilir.
Normalleştirme, tüm özellikleri benzer bir ölçeğe getirerek modelin veriden anlamlı desenler ve ilişkiler öğrenmesine olanak tanır.
Genel olarak normalleştirme hakkında bilgi edinmek isterseniz, şu Makine Öğrenmesinde Normalleştirme Nedir eğitici yazısına bakın.
Derin Öğrenmede Eğitim Zorlukları
Derin sinir ağlarını eğitmek, yakınsamayı ve genellemeyi engelleyebilecek birçok zorluk sunar:
Batch normalization, her mini-batch içindeki aktivasyonları normalleştirerek bu zorlukları ele alır; eğitim sücini istikrarlılaştırır ve model performansını iyileştirir.
Batch Normalization Nedir?
Batch normalization, derin sinir ağlarının eğitimi sırasında bir mini-batch içindeki bir katmanın aktivasyonlarını normalleştiren bir tekniktir.
Mini-batch içinde her özellik için aktivasyonların ortalaması ve varyansı hesaplanır; ardından bu istatistikler kullanılarak aktivasyonlar normalleştirilir.
Normalleştirilen aktivasyonlar, öğrenilebilir parametrelerle ölçeklenir ve kaydırılır; böylece model, en uygun aktivasyon dağılımına uyum sağlayabilir.
Kaynak: Yintai Ma ve Diego Klabjan.
Batch Normalization genellikle bir katmanın doğrusal dönüşümünden (örn. tam bağlantılı katmandaki matris çarpımı veya evrişimli katmandaki konvolüsiyon işlemi) sonra ve doğrusal olmayan aktivasyon fonksiyonundan (örn. ReLU) önce uygulanır.
Batch normalizationın temel bilesenleri şunlardır:
Neden Batch Normalization Kullanılır?
Derin sinir ağlarını eğitirken karşılaştığımız zorluklardan biri iç değişken kaymasıdır. Bu, önceki katmanlardaki ağırlıklar güncellendikçe bir katmanın aktivasyon (dıkış) dağılımının eğitim boyunca değişmesiyle ortaya çıkar. Bu kayma eğitimi zorlaştırabilir ve yavaşlatabilir.
Batch normalization, her mini-batch içindeki aktivasyonları normalleştirerek bu kaymayı azaltır ve sonraki katmanlara girdi olacak değerleri daha istikrarlı ve tutarlı hale getirir.
Aktivasyonların normalleştirilmesi, daha yüksek öğrenme oranlarıyla daha hızlı yakınsamayı sağlar ve modeli başlatma seçimlerine karşı daha az duyarlı kılar.
Ayrıca, modelin belirli aktivasyon desenlerine bağımlılığını azaltarak aşırı uyumun önüne geçmeye yardımcı olan bir düzenleme etkisi de sağlar.
Bu faydaların bileşimi, batch normalizationı daha sağlam derin öğrenme modelleri eğitmek için güçlü bir araç haline getirir. Daha sağlam modeller oluşturma hakkında daha fazla bilgi edinmek için şu Makine Öğrenmesi İzleme Kavramları kursuna göz atın.
Batch Normalizationın Ardındaki Matematik
Artık batch normalizationın “neden”ini anladığımıza göre, “nasıl”ına dalalım.
Batch normalization, eğitim ve çıkarım aşamalarında farklı çalışır; bu nedenle her aşamanın ardındaki matematiği açıklayalım.
Eğitim sırasında batch normalization
Normalleştirme adımı ile başlayalım. Önce bir mini-batch içindeki her özellik için ortalama ve varyansı hesaplarız. Ortalama ve varyans için kullanabileceğimiz formüller şunlardır.
Daha sonra aktivasyonları normalleştirmek için bu ortalama ve varyansı kullanırız. Burada ε (küçük epsilon) sayısal istikrar için eklenen küçük bir sabittir:
Normalleştirme adımı tamamlandıktan sonra ölçekleme ve kaydırma adımına geçeriz. Öğrenilebilir γ ve β parametrelerini kullanarak normalleştirilen aktivasyonları şu formülle kaydırırız:
Bu parametreler, modelin en uygun aktivasyon dağılımını öğrenmesine olanak tanır.
Çıkarım sırasında batch normalization
Çıkarımda, batch istatistikleri (ortalama ve varyans) eğitim sırasında hesaplanan hareketli (running) istatistiklerle değiştirilir. Bu hareketli istatistikler genellikle momentum faktörü ile güncellenen bir hareketli ortalama ile tutulur.
Hareketli ortalama ve varyansı hesaplamak için, çalışma hızını (güncelleme oranını) kontrol eden momentum faktörü α içeren şu iki formülü kullanabiliriz:
Hareketli ortalama ve varyans model parametreleri olarak saklanır ve çıkarım sırasında normalleştirme için kullanılır. Eğitim sırasında öğrenilen ölçekleme ve kaydırma parametreleri (γ ve β) de çıkarımda kullanılır.
Sıradaki adım, TensorFlow kullanarak batch normalizationı nasıl uygulayacağımızı öğrenmek.
TensorFlow’da Batch Normalization
Gerekli kütüphaneleri içe aktararak başlayalım:
Sonra, 60.000 eğitim ve 10.000 test el yazısı rakam görüntüsünden oluşan MNIST veri kümesini yükleyelim. Veri kümesini
keras.datasets.mnist.load_data()fonksiyonuyla yükleyip eğitim verisi(x_train, y_train)ve test verisi(x_test, y_test)olarak ayırıyoruz:Veriyi ön işlemek için şu adımları izliyoruz:
(num_samples, 28, 28, 1)şekline dönüştürüyoruz; buradanum_samplesgörüntü sayısıdır ve her görüntü tek kanallı 28x28 gri tonlamalıdır.keras.utils.to_categorical()ile kategorik formata (one-hot) dönüştürüyoruz.Şimdi model mimarisini tanımlama adımına geçiyoruz. Bunun için şu adımları izliyoruz:
keras.SequentialAPI’sini kullanarak mimariyi katmanları ardışık biçimde yığacak şekilde tanımlıyoruz.Conv2D) ve aktivasyonları normalleştirmek için batch normalization katmanları (BatchNormalization) içerir.MaxPooling2Dile özellik haritalarını aşağı örnekliyoruz.Flatten) düzleştiriyoruz.Sonraki adımda,
.compile()yöntemiyle modeli derleyip iyileştirici, kayıp fonksiyonu ve değerlendirme ölçütünü belirtiyoruz. şunları kullanıyoruz:'adam').'categorical_crossentropy').'accuracy') metriği.Sonra, modeli
.fit()yöntemiyle eğitelim:(x_train, y_train), batch boyutunu, epoch sayısını ve doğrulama verisini(x_test, y_test)belirtiriz.batch_size, her gradyan güncellemesi başına örnek sayısını belirler.epochsparametresi, modelin tüm eğitim verisi üzerinden kaç kez geçeceğini belirtir.Bu adımları izleyip mimariye batch normalization katmanlarını dahil ederek, MNIST veri kümesi üzerinde aktivasyonların normalleştirilmesinden ve geliştirilmiş eğitim istikrarından yararlanarak modeli verimli biçimde eğitiriz.
Artık batch normalization ve uygulamasını öğrendiğimize göre, sağladığı faydaları inceleyelim.
Uygulama Öncelikleri
Şimdi, derin öğrenme mimarilerinde batch normalization uygulamasına daha derinlemesine bakalım.
Sinir ağı mimarilerinde konumlandırma
Batch normalization katmanları, ağ içinde stratejik olarak yerleştirildiğinde en etkilidir. Tipik olarak doğrusal dönüşümden (konvolüsiyon veya tam bağlantılı katmanlar) sonra ve doğrusal olmayan aktivasyon fonksiyonundan önce konumlandırılırlar.
Evrişimsel ağlarda bu, her konvolüsiyon katmanından sonra ve aktivasyon fonksiyonundan önce batch normalization yerleştirmeye tekabül eder.
Benzer şekilde, tam bağlantılı ağlarda, her gizli katmanın doğrusal dönüşümlerinden sonra ve aktivasyon fonksiyonundan önce batch normalization eklemek yaygındır.
Batch Normalization katmanlarının konumu, modelimizin performansını ve eğitim dinamiklerini etkileyebilir. Her bir mimari için en iyi yapılandırmayı bulmak için denemeler gerekebilir.
Batch boyutunun etkisi
Eğitimde kullanılan batch boyutu, batch normalizationın etkinliğini etkileyebilir. Daha büyük batch boyutları, batch istatistiklerinin (ortalama ve varyans) daha doğru tahminlerini sağlar; bu da daha iyi normalleştirme ve daha istikrarlı eğitim anlamına gelir.
Ancak batch boyutunu artırmak, bellek tüketimini ve hesaplama gereksinimlerini de artırır; bu da mevcut donanım kaynaklarına bağlı olarak kısıt oluşturabilir.
Batch boyutunu hesaplama olanaklarıyla dengelerken, normalleştirme için batch istatistiklerinin güvenilir kalmasını sağlamak önemlidir.
Düzenleme etkileri ve yansımaları
Batch normalization, mini-batch istatistiklerinin neden olduğu gürültü nedeniyle doğal olarak bir düzenleme etkisi sağlar. Batch istatistiklerinin getirdiği stokastiklik, bir düzenleme biçimi gibi davranır; aşırı uyumu azaltır ve genellemeyi iyileştirir.
Ancak bu düzenleme etkisi, dropout veya L2 düzenleme gibi diğer düzenleme teknikleriyle etkileşebilir.
Batch normalization kullanırken, farklı düzenleme yöntemleri arasındaki etkileşimi göz önünde bulundurup aşırı düzenlemeden veya performansın azalmasından kaçınacak şekilde ayarlamalar yapmak gerekir.
Batch normalization kullanırken doğrulama verisi üzerindeki performansı izleyerek ve denemeler yaparak doğru düzenleme dengesini bulabilirsiniz.
Batch Normalizationın Sınırlamaları ve Zorlukları
Batch normalization kullanışlı bir teknik olsa da farkında olmamız gereken bazı sınırlamalar ve zorluklar vardır.
Evrişimsiz mimarilerde batch normalization
Batch Normalization ilk olarak evrişimsel sinir ağları (CNN) için tasarlanmıştır ve özellikle bu alanda başarılı olmuştur.
Ancak, yinelemeli sinir ağları (RNN) veya transformerlar gibi evrişimsiz mimarilerde etkinliği sınırlı olabilir.
RNN’lerin ardışık doğası ve transformerlardaki dikkat mekanizmaları, batch normalization uygulamasını daha zor hale getirebilir.
Layer normalization veya instance normalization gibi alternatif normalleştirme teknikleri bu mimariler için daha uygun olabilir.
Küçük batch boyutları ve çıkarım sırası performansı
Batch normalization, aktivasyonları normalleştirmek için eğitim sırasında hesaplanan batch istatistiklerine dayanır. Batch boyutu küçük olduğunda, bu istatistikler daha az güvenilir olabilir ve normalleştirme sürecine gürültü veya istikrarsızlık katabilir.
Bu durum, özellikle bellek kısıtları nedeniyle batch boyutu azaltıldığında, alt düzeyde performansa veya eğitim güçlüklerine yol açabilir.
Çıkarım sırasında batch normalization, eğitim sırasında hesaplanan hareketli istatistikleri kullanır; bu istatistikler tekil örneklerin veya küçük batchlerin istatistiklerini tam olarak yansıtmayabilir. Bu da eğitim ve çıkarım dağılımları arasında uyumsuzluğa yol açarak model performansını etkileyebilir.
Batch normalizationın eksileri ve takasları
Batch normalization, batch istatistiklerinin hesaplanması ve normalleştirme işlemi nedeniyle eğitim sırasında ek hesaplama yükü getirir. Bu yük, özellikle büyük modeller veya veri kümeleşleri için bellek gereksinimlerini ve eğitim süresini artırabilir.
Batch normalization, normalleştirme süreci önemli bilgileri bozabilecek veya anlamlı farklılıkları kaldırabilecek veri türleri veya görevler için uygun olmayabilir.
Örneğin, segmentasyon veya konumlandırma gibi ince ayrıntılar ya da hassas uzamsal bilginin söz konusu olduğu görevlerde batch normalization istenmeyen etkilere sahip olabilir.
Batch Normalizationın düzenleyici etkisi bazen dropout gibi diğer düzenleme teknikleriyle beklenmedik şekillerde etkileşebilir; bu da dikkatli ayarlama ve değerlendirme gerektirir.
Batch Normalizationın Sınırlamaları Nasıl Aşılır
Sınırlama ve zorluklara rağmen batch normalization, derin öğrenmede yaygın ve etkili bir teknik olmaya devam ediyor. Araştırmacılar ve uygulayıcılar, bu sorunları ele almanın ve orijinal formülasyonu iyileştirmenin yollarını keşfetmeyi sürdürüyor.
Batch normalization sınırlamalarını azaltmak için bazı yaklaşımları düşünelim:
Batch Normalizationın Türevleri ve Genleşmeleri
Şimdi, batch normalizationın doğurduğu olası zorlukları azaltmak için de kullanabileceğimiz farklı türev ve genleşmelerine bakalım.
Layer normalization
Layer normalization, batch boyutu yerine, bir katman içinde tüm kanallar genelindeki aktivasyonlar üzerinde çalışır.
Aktivasyonları, batch içindeki her bir örnek için hesaplanan ortalama ve varyansa göre normalleştirir.
Layer normalization, özellikle yinelemeli sinir ağları (RNN) ve batch boyutunun küçük veya değişken olduğu senaryolarda kullanışlıdır.
Group normalization
Group normalization, kanalları gruplara böler ve normalleştirme istatistiklerini her grup içinde hesaplar.
Bir alt kanal kümesini birlikte normalleştirerek layer normalization ile batch normalization arasında bir denge kurar.
Group normalization, bellek kısıtlı ortamlarda veya yüksek çözünürlüklü görüntüler işlenirken olduğu gibi batch boyutunun kısıtlı olduğu durumlarda etkilidir.
Instance normalization
Instance normalization, batch içindeki her bir örneğin her kanalına ayrı ayrı normalleştirme uygular.
Stil transferi ve görüntü üretimi gibi, içeriği normalleştirirken stili korumanın amaçlandığı görevlerde yaygın biçimde kullanılır.
Instance normalization, bu tür uygulamalarda üretilen görüntülerin kalite ve istikrarının artmasını sağladığı gösterilmiştir.
Batch renormalization
Batch renormalization, normalleştirme sürecine ek düzeltme terimleri ekleyerek batch normalizationı genişletir.
Özellikle batch boyutu küçük olduğunda, batch istatistikleri ile popülasyon istatistikleri arasındaki uyumsuzluğu gidermeyi amaçlar.
Batch renormalization, eğitimi istikrarlılaştırır ve sınırlı batch boyutlarının söz konusu olduğu durumlarda modelin genelleme becerisini iyileştirir.
Weight normalization
Weight Normalization, bir sinir ağının ağırlıklarının büyüklüğü ile yönünü ayrıştıracak şekilde yeniden parametreleştiren bir tekniktir.
Ağırlıkları, Öklid normlarına bölerek normalleştirir ve öğrenilebilir bir ölçek parametresi tanıtır.
Weight normalization, Batch Normalization ile birlikte veya alternatif bir normalleştirme yöntemi olarak kullanılabilir.
Bazı durumlarda optimizasyon probleminin koşullarını iyileştirdiği ve yakınsamayı hızlandırdığı gösterilmiştir.
Batch normalizationın bu türev ve genleşmeleri, belirli zorlukları ele almak ve derin öğrenme modellerinin eğitimini ve performansını iyileştirmek için ek araçlar sunar. Her türevin gücülü ve dikkat edilmesi gereken yanları vardır; hangisinin kullanılacağı, görevin özel gereksinimlerine, model mimarisine ve mevcut hesaplama kaynaklarına bağlıdır.
Sonuç
Batch normalization, derin öğrenmede kritik bir teknik haline gelmiş ve derin sinir ağlarının eğitimi için önemli faydalar sunmaktadır.
Aktivasyonları mini-batch’ler içinde normalleştirerek iç değişken kaymasını azaltabilir, yakınsamayı iyileştirip genellemeyi güçlendirebiliriz. Yolun başındaki veya junior bir veri profesyoneli olarak şunları aklınızda tutun:
Makine öğrenmesi mühendisi olmak isterseniz, şu 12 derslik kariyer yolunu değerlendirin: Machine Learning Engineer.