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şidirscale
, öğrenilen bileşen düzeyinde ölçeklendirme faktörlerini (gamma
aşağıdaki denklemde yer alan terim) tutan bir ParameterTensor'dır{}.bias
, öğrenilen yanlılıkları (beta
terimi) tutan bir ParameterTensor'dır{}.scale
vebias
olması durumunda çıkış konvolüsyon özellik eşlemelerininspatial = false
sayısı veya olması durumunda boyutlarainput
eşit olması gereken aynı boyutlaraspatial = true
sahip olmalıdır.runMean
, değerlendirme aşamasında kullanılan ve eğitim sırasında da kullanılabilecek çalışan ortalamadır. vebias
ile aynı boyutlarascale
sahip bir ParameterTensor{} geçirmeniz ve başlangıç değeri 0'ılearningRateMultiplier=0
ayarlamanız gerekir.runVariance
çalışan varyanstır. ile aynı şekilderunMean
temsil 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ırepsilon
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çinfalse
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 input
iç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).