神经网络的参数计算

神经网络的参数计算

理论上

  1. 卷积层:$K^2×C_i×C_o+C_o$
    其中K为卷积核大小,$C_i$为输入channel数,$C_o$为输出的channel数(也是filter的数量),算式的第二项是偏置项的参数量.

  2. BN层:$2×C_i其中C_i$为输入的channel数

  3. 全连接层:$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),能够应对输入的许多空间变化(翻转、平移等)。
pic1

注意一下global average pooling与 (local) average pooling之间的区别。对于10个66的feature map,global average pooling的输出是 101维的向量,average pooling的输出则是根据pool_size, strides, padding计算出来的10个feature map。某种程度上说,global average pooling只是average pooling的一个特例。

推荐阅读

https://zhuanlan.zhihu.com/p/57485819

-------------本文结束感谢您的阅读-------------