我正在使用caffe,详细的pycaffe来创建我的神经元网络。我注意到我必须使用BatchNormLayer来获得积极的结果。我使用Kappa-Score作为结果矩阵。 我现在已经在网络中看到了BatchNorm-Layers的几个不同位置。但是我也遇到了ScaleLayer,它不在Layer Catalog中,但经常被BatchNorm Layer提到
您是否总是需要在BatchNorm之后放置ScaleLayer - Layer以及它有什么作用?
答案 0 :(得分:3)
通常,您将无法从与批量标准化并列的比例图层中获益。每个都是线性变换。在BatchNorm进行转换以使新分布的均值为0且方差为1时,Scale将整个范围压缩为指定的间隔,通常为[0,1]。由于它们都是线性变换,如果你按顺序进行,第二个将完全撤消第一个的工作。
他们对异常值的处理也有所不同。考虑一组数据:十个值,每个值为-1和+1。 BatchNorm根本不会改变它:它已经具有均值0和方差1.为了保持一致性,让我们为Scale,[-1,1]指定相同的间隔,这也是一个受欢迎的选择。
现在,添加一个异常值,比如99。比例将设置转换为范围[-1,1],以便现在有五个-1.00值,一个+1.00值(前一个99)和五个值-0.96(以前为+1)。
BatchNorm担心平均标准偏差,而不是最大值和最小值。新的意思是+9; S.D.是28.48(将所有内容舍入到2位小数)。这些数字将被缩放为大约五个值-.35和-28,以及一个值3.16
一个缩放是否比另一个缩放更好地取决于分布的偏斜和分散。我更喜欢BatchNorm,因为它倾向于在分布的密集区域中更好地区分。
答案 1 :(得分:3)
来自Ioffe&的最初batch normalization paper Szegedy:"我们确保插入网络中的转换可以代表身份转换。"如果没有BatchNorm图层之后的Scale图层,那么情况并非如此,因为Caffe BatchNorm图层没有可学习的参数。
我从Deep Residual Networks git repo学到了这一点;在免责声明和已知问题下见第6项。