神经网络的参数计算
理论上
卷积层:$K^2×C_i×C_o+C_o$
其中K为卷积核大小,$C_i$为输入channel数,$C_o$为输出的channel数(也是filter的数量),算式的第二项是偏置项的参数量.BN层:$2×C_i其中C_i$为输入的channel数
全连接层:$T_i×T_o+T_o$,$T_i$为输入向量的长度,$T_o$为输出向量的长度,其中第二项围殴偏置项参数量.(不过目前的全连接层已经逐步被Global Average Pooling层取代了)
Global average pooling是什么?
最早用于卷积神经网络中,global average pooling用于替代全连接层。Global average pooling就是平均所有的feature map,然后将平均后的feature map喂给softmax进行分类。
为什么用来替代全连接层?有什么优势?
全连接层比较容易过拟合,影响整个模型的泛化能力,dropout的引入部分解决了dense layer的过拟合问题。global average pooling的优势在于只是平均,没有参数。其使用了卷积层+dense layer,很难解释从loss back-propagate回去的是什么,更像是一个黑盒子,而global average用简单的average建立起了feature map和category之间的联系,简单来说,以手写体识别的分类问题为例,就是每个类别仅仅对应一个feature map,每个feature map内部求平均,10个feature map就变成了一个10维向量,然后输入到softmax中。全连接层过于依赖dropout来避免过拟合,而global average pooling可以看做是一种结构化正则,即对多个feature map的空间平均(spatial average),能够应对输入的许多空间变化(翻转、平移等)。