为什么卷积层可以“代替”全连接层?
卷积和全连接的区别大致在于:卷积是局部连接,计算局部信息;全连接是全局连接,计算全局信息。(但二者都是采用的点积运算)
但如果卷积核的kernel_size和输入feature maps的size一样,那么相当于该卷积核计算了全部feature maps的信息,则相当于是一个 的全连接。
在全连接层上,相当于是 (其中 是输入的维度, 是输出的维度)的全连接,其计算是通过一次导入到内存中计算完成;如果是在最后一个feature maps上展开后进行的全连接,这里若不进行展开,直接使用 的卷积核代替,则相当于是 的全连接(这里的 就是feature maps展开的向量大小,也就是卷积核的大小 ),使用 个卷积核则可以相当于 的全连接层。
但用卷积层代替全连接层的方式,其卷积核的计算是并行的,不需要同时读入内存中,所以使用卷积层的方式代替全连接层可以加开模型的优化。
为什么不能用卷积层代替全连接层的方式,使得模型处理不同大小的输入?
因为卷积层的运算是通过卷积核,说到底也就是点积运算,是需要事先设定参数的大小。
但如果这种操作用于处理不同size的输入,则实际上每次训练时,该层的参数size是不一样的,也就是模型不能得到训练。
虽然使用卷积层代替全连接层来处理不同大小输入的模型在整个流程上看起来没什么问题,但根本上,该模型是不能得到良好训练的。(从代替的那层卷积层开始,其后的每一层得到的输入分布其实是一直在变化的,所以波动会比较大。)