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 Norm
在ResNet
網絡和Inception-v2
、Inception-v3
、Inception-v4
中均有用到。
參考