现在我正在研究卷积神经网络。
为什么 CNN 必须具有固定的输入大小?
我知道有可能克服这个问题(使用完全卷积神经网络等......),我也知道这是由于放置在网络末端的完全连接层。
但为什么?我不明白全连接层的存在意味着什么,以及为什么我们被迫有一个固定的输入大小。
现在我正在研究卷积神经网络。
为什么 CNN 必须具有固定的输入大小?
我知道有可能克服这个问题(使用完全卷积神经网络等......),我也知道这是由于放置在网络末端的完全连接层。
但为什么?我不明白全连接层的存在意味着什么,以及为什么我们被迫有一个固定的输入大小。
我认为这个问题的答案是卷积层中的权重共享,而在全连接层中则没有。在卷积层中,您只训练内核,然后将其与该层的输入进行卷积。如果你让输入更大,你仍然会使用相同的内核,只是输出的大小也会相应增加。池化层也是如此。
因此,对于卷积层,可训练权重的数量(大部分)与输入和输出大小无关,但输出大小由输入大小决定,反之亦然。
在全连接层中,您训练权重以将输入的每个维度与输出的每个维度连接起来,因此如果您使输入更大,则需要更多的权重。但你不能只是制造新的重量,它们需要接受训练。
因此,对于全连接层,权重矩阵决定了输入和输出的大小。
由于 CNN 最终通常有一个或多个全连接层,因此对全连接层的输入维度有一个限制,这反过来又决定了最高卷积层的输入大小,而这反过来又决定了最高卷积层的输入大小确定第二高卷积层的输入大小,依此类推,直到到达输入层。
这实际上不是真的。CNN 不必具有固定大小的输入。可以构建可以处理可变长度输入的 CNN 架构。大多数标准 CNN 都是为固定大小的输入而设计的,因为它们包含的架构元素不能很好地推广到其他大小,但这不是固有的。
例如,标准 CNN 架构通常使用许多卷积层,然后是几个全连接层。全连接层需要固定长度的输入;如果您在大小为 100 的输入上训练了一个完全连接的层,然后没有明显的方法来处理大小为 200 的输入,因为您只有 100 个输入的权重,并且不清楚为 200 个输入使用什么权重。
也就是说,卷积层本身可以用于可变长度输入。卷积层有一个固定大小(比如 3x3)的卷积核,应用于整个输入图像。训练过程学习这个内核;您学习的权重决定了内核。一旦你学会了内核,它就可以用于任何大小的图像。所以卷积层可以适应任意大小的输入。当您跟随具有完全连接层的卷积层时,您会遇到可变大小输入的麻烦。
您可能想知道,如果我们使用全卷积网络(即只有卷积层而没有其他),那么我们是否可以处理可变长度输入?不幸的是,这并不那么容易。我们通常需要产生一个固定长度的输出(例如,每个类一个输出)。所以,我们需要某个层来将可变长度的输入映射到固定长度的输出。
幸运的是,文献中有这样做的方法。因此,可以构建可以处理可变长度输入的网络。例如,您可以对多种尺寸的图像进行训练和测试;或训练一种尺寸的图像并测试另一种尺寸的图像。有关这些架构的更多信息,请参见例如:
等等。
也就是说,这些方法还没有得到应有的广泛应用。许多常见的神经网络架构不使用这些方法,可能是因为更容易将图像调整为固定大小而不用担心这一点,也可能是因为历史惯性。
输入大小决定了神经网络的参数总数。在训练期间,模型的每个参数都专门“学习”信号的某些部分。这意味着一旦更改了参数的数量,就必须重新训练整个模型。这就是为什么我们不能让输入形状改变。
这是一个小型神经网络(图片链接):
因此,输入层和隐藏层之间有12 个权重。如果将输入大小从 3 更改为 4,则输入层和隐藏层之间的权重数量将增加到16。
因此,当您的输入样本不同时,模型中的权重数量也不同。但是,training Neural Network simple means updating weights
。那么,如果每个输入样本产生不同数量的权重,你将如何更新你的权重?
同样的逻辑也适用于卷积神经网络。