Aracılığıyla paylaş


Toplu normalleştirme

BatchNormalization(input, scale, bias, runMean, runVariance, spatial,
                   normalizationTimeConstant = 0,
                   blendTimeConstant = 0, epsilon = 0.00001, useCntkEngine = true)

Parametreler

  • input toplu normalleştirme düğümünün girişidir
  • scale, öğrenilen bileşen düzeyinde ölçeklendirme faktörlerini (gammaaşağıdaki denklemde yer alan terim) tutan bir ParameterTensor'dır{}.
  • bias, öğrenilen yanlılıkları (betaterimi) tutan bir ParameterTensor'dır{}. scaleve bias olması durumunda çıkış konvolüsyon özellik eşlemelerinin spatial = false sayısı veya olması durumunda boyutlara input eşit olması gereken aynı boyutlara spatial = truesahip olmalıdır.
  • runMean , değerlendirme aşamasında kullanılan ve eğitim sırasında da kullanılabilecek çalışan ortalamadır. ve biasile aynı boyutlara scale sahip bir ParameterTensor{} geçirmeniz ve başlangıç değeri 0'ı learningRateMultiplier=0 ayarlamanız gerekir.
  • runVariance çalışan varyanstır. ile aynı şekilde runMeantemsil edilir.
  • spatial , bir minibatch içindeki her özellik için ortalama/var değerinin bağımsız olarak mı yoksa kıvrımlı katmanlar durumunda özellik eşlemesi başına mı hesaplandığını belirten bir bayraktır.
  • normalizationTimeConstant (varsayılan 0): toplu iş istatistiklerinin düşük geçişli filtrelenmiş bir sürümü olarak ortalama ve varyansın ortalamasını hesaplamaya yönelik zaman sabiti. Not: Varsayılan değer normalde istediğiniz gibi değildir.
  • blendTimeConstant (varsayılan 0): Çalışan istatistiklerle toplu tahminleri düzeltmeye olanak tanır
  • epsilon ters standart sapma hesaplanırken varyansa eklenen bir koşullayıcı sabitidir.
  • useCntkEngine (varsayılan: true): Yalnızca GPU cuDNN uygulamasını seçmek için false bunu olarak ayarlayın

Döndürülen değer

Toplu iş normalleştirilmiş input.

Description

BatchNormalization Kağıt Batch Normalleştirmesinde açıklanan tekniği uygular: İç Kovaryat Vardiyasını Azaltarak Derin Ağ Eğitimini Hızlandırma (Sergey Ioffe, Christian Szegedy). Kısacası, her çıkış (özellik) için her minibatch için katman çıkışlarını bağımsız olarak normalleştirir ve katmanın gösterimini korumak için benzeşim dönüşümü uygular. Diğer bir ifadeyle katman inputiçin:

m = mean (input)
var = variance (input)
inputNorm = (input - mean)/sqrt (epsilon + var)
output = gamma * inputNorm + beta

burada gamma ve beta eğitilebilir parametrelerdir.

mean ve variance eğitim verilerinden tahmin edilir. En basit durumda, bunlar eğitim sırasında geçerli minibatch'in ortalaması ve varyansıdır. Çıkarım olarak bunun yerine uzun vadeli bir tahmin kullanılır.

Uzun vadeli tahminler, minibatch istatistiklerinin düşük geçişli filtrelenmiş bir sürümüdür ve zaman sabiti (örneklerde) parametresi tarafından normalizationTimeConstant verilmiştir. değeri 0 üstel düzeltme olmayacağı anlamına gelir ve ortalama/varyans her zaman son görülen minibatch'e eşit olacaktır. Bu genellikle istenmeyen bir durumdur. Bunun yerine, burada birkaç bin değerinin kullanılması önerilir. Sarmalayıcı varsayılan BatchNormalizationLayer{} olarak 5000'e sahiptir.

Zaman sabitleri ve üstel düzeltme hakkında daha fazla bilgi için: https://en.wikipedia.org/wiki/Exponential_smoothing#Time_Constant

Minibatch istatistikleri gürültülü olabileceğinden CNTK eğitim sırasında map (maximum-a-posteriori) tahminini de kullanabilirsiniz. Burada çalışan uzun vadeli tahmin önceki gibi alınır. Öncekinin ağırlığı parametresi tarafından blendTimeConstant denetlenir. Ancak, bu şimdiye kadar denemelerimizde yararlı bulunmadı.

Çıkarım sırasında, CNTK her iki zaman sabitini de otomatik olarak ayarlayacağını unutmayın; böylece yalnızca var olan çalıştırma ortalaması kullanılır ve güncelleştirilmemiş olur. Kullanıcının gerek duyduğu açık bir eylem yoktur.

cuDNN uygulaması

Varsayılan olarak, bu işlev hem GPU'larla hem de CPU'larla çalışan bir CNTK uygulaması kullanır. Daha performanslı olan cuDNN uygulamasını kullanmayı seçebilirsiniz. Bununla birlikte, cuDNN uygulamasının tüm seçenekleri desteklemediğini ve eğitimin bir GPU gerektirdiğini unutmayın (ancak cuDNN uygulamasını seçseniz bile CNTK çıkarım için cpu öykünmesi sağlar).