Batch Normalization 技术出现在各种模型中
关于 Batch Normalization 层在模型中的位置,有人说放在激活函数前结果好,有人说放在激活函数后比较好
最合适的确定方式就是在实验过程中进行确定(这同样也是令人无奈的结论)
通过以下实验进行一个简单讨论:
模型:一个4层的神经网络(num_features -> 128 -> 64 -> 32 -> 2),激活函数 LeakyReLU,损失函数交叉熵,
需要讨论的 BatchNorm1d 的应用:(1)放在激活函数前;(2)放在激活函数后;(3)不使用
实验一:一个二分类生物数据,约700个特征,100个样本,近似平衡,10次10倍交叉验证,full batch,epoch为100次,学习率1e-3
(1)激活函数前
(2)激活函数后
(3)不使用
在此数据上,将Batch Normalization 放在激活函数前,与不使用相比,可以少量提高性能
实验二:一个二分类生物数据,近似平衡,训练集越600样本,验证集约400样本,约200特征,full batch,学习率{1e-3,1e-4}和epoch{100, 200, 300, 400, 500}进行网格搜索,取最好结果
(1)激活函数前
(2)激活函数后
(3)不使用
在此数据上,不使用Batch Normalization技术反而更好
因此,实际问题需要额外讨论。