caffe詳解之歸一化層

LRN 參數配置

layer {
 name: "norm1"
 type: "LRN"
 bottom: "conv1"
 top: "norm1"
 lrn_param {
   local_size: 5
   alpha: 0.0001
   beta: 0.75
 }
}

LRN說明

示意圖

公式

意義

LRN操作主要目的是在深度上進行平滑操作,使得數據在深度層面上有一定的聯繫。

應用

LRN層是在AlexNet網絡中提出來的,但是因爲其計算的複雜度和後期的效果並不理想,在後面的網絡中基本上拋棄的LRN的歸一化方法。

Batch Norm 參數配置

layer {
   bottom: "conv1"
   top: "conv1"
   name: "bn_conv1"
   type: "BatchNorm"
   batch_norm_param {
       use_global_stats: true
   }
}

layer {
   bottom: "conv1"
   top: "conv1"
   name: "scale_conv1"
   type: "Scale"
   scale_param {
       bias_term: true
   }
}
message BatchNormParameter {
 // 如果爲真,則使用保存的均值和方差,否則採用滑動平均計算新的均值和方差。
 // 該參數缺省的時候,如果是測試階段則等價爲真,如果是訓練階段則等價爲假。
 optional bool use_global_stats = 1;

 // 滑動平均的衰減係數,默認爲0.999
 optional float moving_average_fraction = 2 [default = .999];

 // 分母附加值,防止除以方差時出現除0操作,默認爲1e-5
 optional float eps = 3 [default = 1e-5];
}

Batch Norm 說明

公式

意義

在深度神經網絡的訓練過程中,先前層參數的調整會導致之後每一層輸入值的分佈發生變化,這種現象會使得模型的訓練變得複雜。因爲分佈均勻且統一的數據往往更加容易使得算法訓練出高準確率的模型Batch Norm主要借鑑的是白化的思想,目的是將數據儘量維持在方差爲1,均值爲0的分佈上。因爲數據的總量十分龐大,我們無法計算出整個數據集的均值與方差,因此採用Batch的思想,分塊的進行白化處理Batch Norm的精華體現在最後一個公式上,白化之後進行拉伸與平移,也就是對數據分佈進行修正。並且拉伸與平移的係數是通過訓練得到的,這樣,我們將batch在整個數據集的整體分佈狀態也學習了出來,防止以偏概全!下圖可以清晰的看出,加入Batch Norm使得每一層的數據更夠有效且均勻的傳遞到下一層中去。

應用

Batch NormResNet網絡和Inception-v2Inception-v3Inception-v4中均有用到。


參考

批標準化 (Batch Normalization)

 


發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章