网络结构解读之inception系列二:GoogLeNet(Inception V1)
inception系列的开山之作,有网络结构设计的初期思考。
Going deeper with convolutions
motivations:
- 提高模型性能的最直接方式:1.加深(增加层)2.加宽(增加单层的神经元个数)
- 带来的两个弊端:1.大规模的参数易导致过拟合且需要更多的训练集 2.更多的计算资源消耗
- 解决基本思想是在fc层甚至conv层使用稀疏连接结构,原因是1.生物中神经网络是稀疏的.2Arora的实验说明了,优化大规模的稀疏神经网络时,可以通过分析激活值的统计特性和聚类相关性高的神经元来逐层构建一个最优网络。(block设计的来源)。3.Hebbian 原理:neurons that fire together,wire together(说明神经元相关性)
- 早期稀疏结构实现缺点,软硬件对非均匀的稀疏数据计算效率差,反倒是对密集矩阵(dense matrix)效率较高。
- 思考:有没有一种方法,既能保持网络结构的稀疏性,又能利用密集矩阵(卷积)的高计算性能。而相关文献表明可以将稀疏矩阵聚类为较为密集的子矩阵来提高计算性能
-
Inception最初原形:
第一作者Christian Szegedy,评估一个复杂的网络拓扑结构构建算法的假设输出,该网络试图逼近Arora提出的稀疏结构。
最初结构只是猜想,然而通过两轮的迭代后,获得了不错的结果。(实验证明有效) - naive inception module:
说明:1.1x1conv,用于对相关性高的神经元聚类 2.为了避免patch alignment问题,增加3X3,5X5(大感受野的聚类,这么设计更多的考虑是方便还不是必要性)3.Pool是cnn中有效的操作,因此也加入
- Naïve的问题,通道堆到后面会越来越多,借鉴NIN,1x1降维
作者说明,对一个压缩且密集的特征信息进行建模是很难的,所以只在必要时才压缩信号
- 考虑到目前计算条件,Inception置于较深层,浅层采用传统卷积
-
网络结构:
1.Block设计。2.Gap代替全连接。3.添加dropout(0.7)。4.辅助损失.(权重0.3,在inception 4a和4d的输出接,作用a增强底层特征差异性b增强梯度信号c提高正则化)
- 辅助loss:4a和4d
实验结果