卷积层可以学习计算输入数据的标准差吗?
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 大小发生变化时,卷积层可以有更多的参数。
假设我们有一些输入数据、真实标签和神经网络。然后我们使用这些数据和标签来训练模型并得到一些结果。
出于某种原因,我们发现与其使用原始数据作为输入,不如计算数据的局部标准差并将其作为输入可以获得更好的结果。这是计算局部标准偏差的示例,它来自 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 大小发生变化时,卷积层可以有更多的参数。