【发布时间】:2019-06-27 03:22:47
【问题描述】:
我有一个结构松散地接近 AlexNet 的 CNN,见下文:
Convolutional Neural Network structure:
100x100x3 Input image
25x25x12 Convolutional layer: 4x4x12, stride = 4, padding = 0
12x12x12 Max pooling layer: 3x3, stride = 2
12x12x24 Convolutional layer: 5x5x24, stride = 1, padding = 2
5x5x24 Max pooling layer: 4x4, stride = 2
300x1x1 Flatten layer: 600 -> 300
300x1x1 Fully connected layer: 300
3x1x1 Fully connected layer: 3
显然,只有最大池化层和卷积层,数字将接近 0 和无穷大,具体取决于权重的负数。我想知道有什么方法可以解决这个问题,因为我想避免大量使用。
由此产生的一个问题是,如果您在最后一层使用 sigmoid。将 sigmoid 的导数视为s(x)*(1-s(x))。较大的数字将不可避免地使 sigmoid 的值变为 1,因此您会注意到在 back prop 上,您有 1*(1-1),这显然不太好。
所以我想知道有什么方法可以尝试保持较低的数字。
用 python 标记,因为这是我在其中实现的。我使用了自己的代码。
【问题讨论】:
-
您使用 sigmoid 有什么特别的原因吗?这有助于解释概念,但 ReLU 在实践中更为常见。为避免梯度消失和爆炸,请查看批量规范。
-
我没有使用 sigmoid,我只是举例说明为什么大数字可能会成为问题。好的,我确实认为批量规范是最好的方法,只是想确保
-
请记住,随着批量变小,批量标准化会变得困难,这在图像中很常见。如果您有小批量,您可能需要查看 group norm。
-
小有多小?
-
当batch size低于12左右时,Group norm开始有更好的表现。参见本文图1:arxiv.org/abs/1803.08494
标签: python conv-neural-network backpropagation