Toplu normalleştirme, Sergey Ioffe ve Christian Szegedy'nin 2015 tarihli makalesi olan Toplu Normalleştirme: Dahili Değişken Değişimini Azaltarak Derin Ağ Eğitimini Hızlandırma tarafından tanıtıldı .
Toplu normalleştirme, katman çıktılarını ortalama 0 ve varyans 1 olacak şekilde ölçeklendirir. Çıkışlar, ağı daha hızlı eğitecek şekilde ölçeklenir. Ayrıca, zayıf parametre başlatma nedeniyle sorunları da azaltır.
Normalleştirmenin veya özellik ölçeklendirmenin öğrenme sürecini hızlandırabileceğini biliyoruz. Toplu normalizasyonun ardındaki sezgiler benzerdir. Toplu normalleştirme, gizli birimler için de aynı şeyi yapar.
Neden toplu kelime? Çünkü mevcut partideki değerleri normalleştirdi. Bunlara bazen toplu iş istatistikleri denir .
Spesifik olarak, parti normalizasyonu , parti ortalamasını çıkararak ve parti standart sapmasına bölerek önceki bir katmanın çıktısını normalleştirir .
Bu, öğrenme sürecini hızlandırmak ve bir çözüme yakınsamak için yapılan özellik ölçeklendirmeye çok benzer.
Toplu normalizasyondan bahsederken etrafa saçılmış süslü bir kelime duymuş olabilirsiniz, bu iç kovaryans değişimidir . X'i y'ye eşleyen bir işlevi öğrenen bir ağ düşünün. İç kovaryans kayması, x girdisinin dağılımındaki değişikliği ifade eder. Bir değişiklik olursa, ağımız yeterince verimli olmayacak ve genelleme yapamayacaktır. Bu yüzden her yerde eğitmek zorunda kalacağız.
Kovaryans değişimini anlamak için bu örneği düşünün. Kahverengi köpek resimlerini tespit etmek için bir ağ eğitirsek ve daha sonra bu ağı renkli köpek resimleri içeren verilere uygulamayı bitirirseniz, iyi performans gösteremez ve yeniden eğitmemiz gerekir. Girdi dağılımındaki bu değişiklik kovaryans kaymasıdır. Peki toplu normalleştirme burada nasıl yardımcı olur?
Girişlerin her katmana dağılımı aynıysa, ağ verimlidir. Toplu normalleştirme, dahili kovaryans kaymasıyla mücadele etmek için katman girdilerinin dağılımını standartlaştırır. Gizli birimlerin kayma miktarını kontrol eder.
ΜB olarak adlandırılan her katmanın ortalama değerini alıyoruz . Bu, tüm x_i katman değerlerinin toplamının tüm m değerlerinin ortalamasına bölünmesiyle hesaplanır .
Daha sonra σ²B varyansını şu şekilde hesaplıyoruz:
1. Her değerin sapması olan her değerden μB'yi çıkarıyoruz ve sapmanın karesi için kareyi oluşturuyoruz
2. Bunu her bir değer için yapmanın sonuçlarını toplayın, ardından ortalama veya ortalama kare sapmayı elde etmek için m değerlerinin sayısı .
Daha sonra standart sapmayı ortalama kare sapmanın ve kökün altındaki epsilonun toplamı olarak buluruz. Epsilon, 0,001 kadar küçük sabit bir değerdir. Bu, sıfıra bölünme durumlarından kaçınmak ve varyansı artırmak için eklenir.
Varyanstaki artış nasıl yardımcı olur?
Bir popülasyonun varyansı, tipik olarak o popülasyondan alınan herhangi bir numunenin varyanstan daha fazladır, özellikle de değerlerin popülasyon dağılımının zirvesine yakın olduğu küçük örneklem büyüklüğünde, bu nedenle varyansı her parti için biraz artırmak, hesaba katın.
Artık ortalama ve standart sapmayı hesapladığımıza göre, aşağıdaki gibi normalleştirebiliriz.
Normalleştirilmiş değerler daha sonra γ ile çarpılır ve β ile eklenir. Bunlar, normalleştirilmiş değerlerin daha da ölçeklendirilmesine hizmet eden öğrenilebilir parametrelerdir. Nihai toplu normalleştirilmiş değer aşağıdaki gibidir:
Toplu normalleştirme, aktivasyon işlevinden önce ve sonra uygulanabilir. Bununla birlikte, araştırma, aktivasyon işlevinden önce uygulandığında en iyisini gösterir.
PyTorch'ta, doğrusal çıktılarda toplu normalleştirme uygulamak için BatchNorm1d'yi ve evrişimli katmanlardan filtrelenmiş görüntüler olması durumunda 2D çıktılar için BatchNorm2d'yi kullanabilirsiniz .
Sinir ağlarına uygulandığında toplu normalleştirme, girdileri gizli katmanlara normalleştirerek daha iyi sonuçlar verir. Eğlenceli gerçek, toplu normalizasyonun VGG'den sonra tanıtılmasıdır, bu nedenle VGG, ImageNet'te daha iyi sonuçlar için toplu normalleştirme ile geliştirilebilir. Gradyanları yok etmeden veya patlatmadan daha yüksek öğrenme oranlarını kullanma yeteneği de umut vericidir. Toplu normalleştirmenin çözdüğü sorunları not ettikten sonra, umarım şimdi aynı şeyi daha iyi anlarsınız.
Bilinç nedir? Yüzyıllardır filozofların ve bilim adamlarının kafasını karıştıran bir sorudur. Bazıları bunun bedenlerimizden bağımsız olarak gerçekten anlayamadığımız geçici bir şey olduğunu söylüyor.
Yasal Uyarı: Bu makale yalnızca eğitim amaçlıdır. Kimseyi web sitelerini, özellikle de bu tür eylemlere karşı hüküm ve koşulları olabilecek web mülklerini kazımaya teşvik etmiyoruz.
Torchvision kitaplığının sezgisel bir anlayışı - temel bilgilerden ileri düzeye (Bölüm 1/3) Torchvision nedir? Torchvision, PyTorch ile el ele giden bir Bilgisayar Görüşü kütüphanesidir. Verimli Görüntü ve Video dönüşümleri için yardımcı programlara, yaygın olarak kullanılan bazı önceden eğitilmiş modellere ve bazı veri setlerine sahiptir (torchvision PyTorch ile birlikte gelmez, ayrı olarak kurmanız gerekecektir.
Torchvision kitaplığının sezgisel bir şekilde anlaşılması - 14 görsel dönüşüm örneğiyle (Bölüm 2/3) Bölüm 1 için (torchvision'daki modüllere giriş), lütfen aşağıdaki bağlantıyı ziyaret edin. Bu makalede, veri kümesi (görüntüler) yüklendikten hemen sonra bir dizi halinde gerçekleştirilebilen basit görüntü dönüştürme işlevlerini deneyeceğiz.
Grafik Sinir Ağları (GNN'ler), grafik verilerinden öğrenmek için standart bir araç kutusu olarak ortaya çıktı. GNN'ler, içerik önerisi veya ilaç keşfi gibi farklı alanlarda yüksek etkili sorunlar için iyileştirmeler sağlayabilir.
Bir önceki yazımda, blob algılama ve bağlantılı bileşenlere dayalı olarak ilgilenilen nesneleri nasıl tanımlayacağımızı öğrendik. Bununla birlikte, belirli ilgi çekici nesneleri görüntülerimizden ayırmamız gereken zamanlar olacaktır.