卷积层可以学习计算输入数据的标准差吗?

Can convolution layer learn to calculate the standard-deviation of the input data?

假设我们有一些输入数据、真实标签和神经网络。然后我们使用这些数据和标签来训练模型并得到一些结果。

出于某种原因,我们发现与其使用原始数据作为输入,不如计算数据的局部标准差并将其作为输入可以获得更好的结果。这是计算局部标准偏差的示例,它来自 here:

h = 1;                      % for half window size of 3
x = [4 8 1 1 1 7 9 3];      % input signal
N = length(x);              % length of the signal

o = ones(1, N);             % array for output
for i = 1 : N
  % calculate standard deviation using the built-in std command
  % for the current window
  o(i) = std(x(max(1, i - h) : min(N, i + h)));
end

所以,我的问题是:不是自己计算局部标准差,是否可以使用卷积层,让模型自己学习执行这样的操作?

如果我们不能通过使用单个卷积层来做到这一点,我们可以通过使用更复杂的模型来做到这一点吗?

如果我们能做到这一点,那么我还有一个问题:为什么模型不能自己学习执行批量归一化操作?为什么现在的人还需要手动添加batch normalization层?

我对 google 做了一些研究,这是我得到的一些东西。虽然我还是有点困惑:

https://matlabtricks.com/post-20/calculate-standard-deviation-case-of-sliding-window

提前致谢!

批量归一化在标准归一化之后平移和重新缩放张量。您问题中的 link 只是提供了一种有效进行标准规范化的方法。

从统计学的角度来看,标准归一化降低了输入张量的自由度 (dof),而批归一化中的两个可学习参数又加回了这两个自由度。目前还不清楚你如何想出一个具有两个参数 (dof) 的卷积层来执行类似批量归一化的操作,因为当 window 大小发生变化时,卷积层可以有更多的参数。