2-5 谷歌 Inception 网络简介

谷歌 Inception 网络简介( Inception network motivation)

构建卷积层时,你要决定过滤器的大小究竟是 1×1, 3×3 还是 5×5,或者要不要添加池化层。而 Inception 网络的作用就是代替你来决定,虽然网络架构因此变得更加复杂,但网络表现却非常好。

例如,这是你 28×28×192 维度的输入层, Inception 网络或 Inception 层的作用就是代替人工来确定卷积层中的过滤器类型,或者确定是否需要创建卷积层或池化层:

如果使用 1×1 卷积,输出结果会是 28×28×#(某个值),假设输出为 28×28×64,并且这里只有一个层

如果使用 3×3 的过滤器,那么输出是 28×28×128。然后我们把第二个值堆积到第一个值上,为了匹配维度,我们应用 same 卷积,输出维度依然是 28×28,和输入维度相同,即高度和宽度相同。

如果用 5×5 过滤器或许会更好,输出变成 28×28×32,我们再次使用 same 卷积,保持维度不变。

或许你不想要卷积层,那就用池化操作,得到一些不同的输出结果,我们把它也堆积起来,这里的池化输出是 28×28×32。为了匹配所有维度,我们需要对最大池化使用 padding,它是一种特殊的池化形式,因为如果输入的高度和宽度为 28×28,则输出的相应维度也是

28×28。然后再进行池化, padding 不变,步幅为 1。

有了这样的 Inception 模块,你就可以输入某个量,因为它累加了所有数字,这里的最终输出为 32+32+128+64=256。 Inception 模块的输入为 28×28×192,输出为 28×28×256。这就是 Inception 网络的核心内容。

基本思想是 Inception 网络不需要人为决定使用哪个过滤器或者是否需要池化,而是由网络自行确定这些参数,你可以给网络添加这些参数的所有可能值,然后把这些输出连接起来,让网络自己学习它需要什么样的参数,采用哪些过滤器组合。

但是,Inception 层有一个问题,就是计算成本比较高:

这是一个 28×28×192 的输入块,执行一个 5×5 卷积,它有 32 个过滤器,输出为 28×28×32。

我们来计算这个 28×28×32 输出的计算成本,它有 32 个过滤器,因为输出有 32 个通道,每个过滤器大小为 5×5×192,输出大小为 28×28×32,所以你要计算 28×28×32 个数字。对于输出中的每个数字来说,你都需要执行 5×5×192 次乘法运算,所以乘法运算的总次数为每个输出值所需要执行的乘法运算次数( 5×5×192)乘以输出值个数( 28×28×32),把这些数相乘结果等于 1.2 亿( 120422400)。即使在现在,用计算机执行 1.2 亿次乘法运算,成本也是相当高的。

这里还有另外一种架构,其输入为 28×28×192,输出为 28×28×32。其结果是这样的,对于输入层,使用 1×1 卷积把输入值从 192 个通道减少到 16 个通道。然后对这个较小层运行5×5 卷积,得到最终输出。请注意,输入和输出的维度依然相同,输入是 28×28×192,输出是 28×28×32。

应用 1×1 卷积,过滤器个数为 16,每个过滤器大小为×1×192,这两个维度相匹配(输入通道数与过滤器通道数), 28×28×16 这个层的计算成本是,输出 28×28×192 中每个元素都做 192 次乘法,用 1×1×192 来表示,相乘结果约等于 240万。

万。240 万只是第一个卷积层的计算成本,第二个卷积层的计算成本。输出28×28×32,对每个输出值应用一个 5×5×16 维度的过滤器,计算结果为 1000 万。所以所需要乘法运算的总次数是这两层的计算成本之和,也就是 1204 万。计算成本从 1.2 亿下降到了原来的十分之一。所需要的加法运算与乘法运算的次数近似相等,所以我只统计了乘法运算的次数。

如果你在构建神经网络层的时候,不想决定池化层是使用 1×1, 3×3 还是 5×5的过滤器,那么 Inception 模块就是最好的选择。我们可以应用各种类型的过滤器,只需要把输出连接起来。

posted @ 2018-11-06 21:49  刘-皇叔  阅读(2223)  评论(0编辑  收藏  举报