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)效率较高。
稀疏模型 将大量的冗余变量去除,只保留与响应变量最相关的解释变量,简化了模型的同时却保留了数据集中最重要的信息,有效地解决了高维数据集建模中的诸多问题。稀疏模型具有更好的解释性,便于数据可视化、减少计算量和传输存储。1996年Tibshirani把岭回归估计的L2范数罚正则化项替换为L1范数罚正则化项得到了Lasso(Least Absolute Shrinkage and Selection Operator, Lasso)。L1范数罚具有产生稀疏模型的能力,使用L1范数罚作为正则化项的Lasso具有变量选择功能和变量空间降维功能。实际上在Lasso之前已有能够产生稀疏解的非负绞刑估计 (nonnegative garrote estimator)和桥回归(bridge regression)模型被提出,但由于缺少高效的求解算法因而没有引起足够的重视,而自从Lasso这种稀疏模型以及可对其有效求解的LAR算法(Least Angle Regression, LAR)被提出后,稀疏模型才得到了广泛深入的研究,并在机器学习、数理统计和生物信息学等领域逐渐流行起来。
- 思考:有没有一种方法,既能保持网络结构的稀疏性,又能利用密集矩阵(卷积)的高计算性能。而相关文献表明可以将稀疏矩阵聚类为较为密集的子矩阵来提高计算性能
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
-
实验结果
-