# 2.5 谷歌 Inception 网络简介（Inception network motivation）

**Inception**网络或**Inception**层的作用是代替人工来确定卷积层中的过滤器类型，或者确定是否需要创建卷积层或池化层

[![](https://github.com/fengdu78/deeplearning_ai_books/raw/master/images/99f8fc7dbe7cd0726f5271aae11b9872.png)](https://github.com/fengdu78/deeplearning_ai_books/blob/master/images/99f8fc7dbe7cd0726f5271aae11b9872.png)

基本思想是**Inception**网络在单层网络上可以使用多个不同尺寸的filters，进行same convolutions，把各filter下得到的输出拼接起来。还可以将CONV layer与POOL layer混合，同时实现各种效果，但是要注意使用same pool。Inception Network不需要人为决定使用哪个过滤器或者是否需要池化，它使用不同尺寸的filters并将CONV和POOL混合起来，将所有功能输出组合拼接，再由神经网络本身去学习参数并选择最好的模块

Inception Network在提升性能的同时，会带来计算量大的问题：

[![](https://github.com/fengdu78/deeplearning_ai_books/raw/master/images/27894eae037f4fd859d33ebdda1cac9a.png)](https://github.com/fengdu78/deeplearning_ai_books/blob/master/images/27894eae037f4fd859d33ebdda1cac9a.png)

乘法运算的总次数为每个输出值所需要执行的乘法运算次数（5×5×192）乘以输出值个数（28×28×32），结果等于1.2亿。

[![](https://github.com/fengdu78/deeplearning_ai_books/raw/master/images/5b3df2904b9d8dc51bd99ccb45ac9f5b.png)](https://github.com/fengdu78/deeplearning_ai_books/blob/master/images/5b3df2904b9d8dc51bd99ccb45ac9f5b.png)

为此，引入1x1 Convolutions来减少计算量，对于输入层，使用1×1卷积把输入值从192个通道减少到16个通道。然后对这个较小层运行5×5卷积，得到最终输出

[![](https://github.com/fengdu78/deeplearning_ai_books/raw/master/images/1fec66d984a3c8c47ff459775d411e71.png)](https://github.com/fengdu78/deeplearning_ai_books/blob/master/images/1fec66d984a3c8c47ff459775d411e71.png)

把该1x1 Convolution称为“瓶颈层”（bottleneck layer），瓶颈层是网络中最小的部分，即先缩小网络，然后再扩大

引入bottleneck layer之后，第一个卷积层计算成本：1×1×192×输出28×28×16，相乘结果约等于240万，第二个卷积层的计算成本是：28×28×32×5×5×16，计算结果为1000万，总次数是1204万，计算成本从1.2亿下降到了原来的十分之一

[![](https://github.com/fengdu78/deeplearning_ai_books/raw/master/images/7d160f6eab22e4b9544b28b44da686a6.png)](https://github.com/fengdu78/deeplearning_ai_books/blob/master/images/7d160f6eab22e4b9544b28b44da686a6.png)

总结：

* 如果在构建神经网络层的时候，不想决定池化层是使用1×1，3×3还是5×5的过滤器，**Inception**模块是最好的选择。可以应用各种类型的过滤器，只需要把输出连接起来
* 计算成本问题，通过使用1×1卷积来构建瓶颈层，大大降低计算成本

只要合理构建瓶颈层，既可以显著缩小表示层规模，又不会降低网络性能，从而节省了计算
