共用方式為


Batch正規化

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

參數

  • input 是批次正規化節點的輸入
  • scaleParameterTensor {},可保留下列方程式中 (學習的元件調整因數 gamma) 。
  • bias一個 ParameterTensor {},可保留學習的偏差 (beta 字詞) 。 scalebias 必須有相同的維度,如果 spatial = false 為 ,或輸出卷積特徵對應 spatial = true 的數目,則必須等於 input 維度。
  • runMean 是評估階段期間所使用的執行平均值,也可能在定型期間使用。 您必須傳遞與 和 bias 相同維度 scaleParameterTensor {}、初始值 0 和 learningRateMultiplier=0 設定。
  • runVariance 是執行中的變異數。 其表示方式與 runMean 相同。
  • spatial 是旗標,指定是否要獨立計算迷你批次中每個特徵的平均值/var,或者,如果是卷積圖層,則為每個特徵對應計算平均數/var。
  • normalizationTimeConstant (預設 0) :計算平均數和變異數平均值和變異數的執行時間常數,作為批次統計資料的低傳遞篩選版本。 注意:預設值通常不是您想要的。
  • blendTimeConstant (預設 0) :允許使用執行中的統計資料來平滑批次估計
  • epsilon 是計算反向標準差時新增至變異數的空調常數。
  • useCntkEngine (預設值:true) :將此設定為 false 以選取僅限 GPU 的 cuDNN 實作

傳回值

批次正規化 input

描述

BatchNormalization實作檔Batch正規化中所述的技術:藉由減少內部共變數移位 (Sergey Ioffe、) 來加速深度網路訓練。 簡單地說,它會針對每個輸出 (功能個別標準化每個迷你批次的圖層輸出) ,並套用 affine 轉換來保留圖層的表示。 也就是說,針對圖層 input

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

其中 gammabeta 是可訓練的參數。

meanvariance 是從定型資料估計而來。 在最簡單的案例中,它們是定型期間目前迷你批次的平均值和變異數。 在推斷中,會改用長期估計值。

長期估計值是迷你批次統計資料的低傳遞篩選版本,而參數所 normalizationTimeConstant 指定範例中的時間常數 () 。 值 0 表示不會有指數平滑,而且執行平均/變異數一律等於 最後一個看到迷你批次的值。 這通常是不想要的。 相反地,建議您在這裡使用數千個值。 包裝 BatchNormalizationLayer{} 函式的預設值為 5000。

如需時間常數和指數平滑的詳細資訊: https://en.wikipedia.org/wiki/Exponential_smoothing#Time_Constant

因為迷你批次統計資料可能很雜訊,CNTK也允許在定型期間使用 MAP (maximum-a-posteriori) 估計值,其中執行的長期估計值會被視為先前的。 先前的權數是由 blendTimeConstant 參數所控制。 不過,在我們的實驗中,目前尚未發現這很有用。

請注意,在推斷期間,CNTK會自動設定這兩個時間常數,以便只使用現有的執行平均數,而且不會更新。 使用者不需要明確的動作。

cuDNN 實作

根據預設,此函式會使用可搭配 GPU 和 CPU 運作的CNTK實作。 您可以選擇使用 cuDNN 實作,其效能更高。 不過請注意,cuDNN 實作不支援所有選項,而且定型需要 GPU (CNTK,但即使您選取 cuDNN 實作) ,仍會提供 CPU 模擬以進行推斷。