瓶颈结构倒残差结构是同一个结构吗

mobilenetv2中,因为是倒置残差,所以像瓶颈结构?这俩是一个结构吗,mobilenetv2也只有bottleneck这个模块,是这个bottleneck就包含了瓶颈结构+倒置残差?

img

不知道你这个问题是否已经解决, 如果还没有解决的话:
  • 这篇博客: 如何理解 MobileNet V2:线性激活 + 倒置残差模块 + 高效内存中的 Linear Bottlenecks 部分也许能够解决你的问题, 你可以仔细阅读以下内容或者直接跳转源博客中阅读:

    原文这部分讲得很学术了(感觉扣着读很爽2333)。

    不严谨地来讲,神经网络模型越深,表达能力越强,随着层深的增加,特征也会有变化。以视觉任务为例,网络的前几层可能都在提取一些最基础细碎的特征,比如边缘、颜色等,这些特征有点像积木中的基础零部件,使用这些特征可能可以组成任何图像。而到后面的网络层中,可能特征就会更像大一点的模块,演变成高级的语义的特征,比如“鼻子”。

    那么若以最初始的、常见的 3 个通道的 h w c 输入图像来讲,这张图像的全部信息都在这 h w c 的张量(论文叫 activation tensor)中了(好挤呀),那么这个 h w c 的张量空间中的特征密度一定是很大(当然也有一些冗余/不关注的信息),其他相对靠前的模型层也是类似的道理。

    对于任何这样一张输入图像,模型中的每一个 layer activation 形成一个 manifold of interest(感兴趣流形(好别扭~其实就是信息啦,tensor))。然后我们都知道线性变换可以认为是不损失原本维度空间中的信息的,而非线性变换就不一定了。而 Relu 这个激活函数吧,它 0 点左边是 0,右边才是线性变换,什么意思呢?就是但凡要经过 Relu 的信息,只要你有落在 0 以左的就被损失掉啦。

    说明:
    这个只能是 Relu 的特性,并不能算它的缺点,Relu 在很多情况下都是一个很好的非线性变换器,只是在 MobileNet 系列中有时候会帮倒忙。为什么呢?还记得 MobileNet V1 清爽地将卷积核的 h w 面与通道数拆开了吗?所以呀,MobileNet 的卷积是只在单个通道上的,那要是以常见输入图像来说,一共就 3 个通道,每个通道上的信息/特征都很稠密啊,这个时候直接用 Relu,0 点左边就给你扔了呀。所以对于 MobileNet 系列来说,它就一定会假定输入进来的是低维的/稠密的特征,你想分开,就先映射到高维再去分。

    那在模型的前几层就大幅度使用 Relu 是什么效果呢?就是豆子和豆荚皮儿还都混在一起呢,你非要让 Relu 帮你切一刀把豆豆分出来(太难了)。Relu 能怎么办,硬着头皮弄,损失很多豆子,还留下很多豆荚皮儿。

    那在 MobileNet 的情况下,应该怎么更合理地使用 Relu 呢?就是让豆子都去 0 的右边,然后再让 Relu 切出来,保留住这部分有效特征。那如何让豆子都去 0 的右边?又回到了很基础的问题,在一个低维空间中不好分或者不可分的时候,可以将其映射到高维空间中,然后再去高维空间中找到超平面分隔开就好了。对,就是把豆子豆荚皮儿一起高高地抛起来,豆荚皮儿会落下得更慢,在高度上豆子和豆荚皮儿就更容易分开了,这个时候用 Relu 把豆子和豆荚皮儿分开就好了。抛得越高越容易分开,从稠密的、不可分的低维空间映射到越高维的空间,就越能给 Relu 创造应用空间,留下的有效特征(豆子)就越多。

    总结一下,由于 Relu 的两点特性,即右边是线性变换 + 当感兴趣流形都在右边的时候就能保留全部信息(只是说保留全部的感兴趣特征向量哦),所以感兴趣流形(我觉得就是好的、有效的特征)应该在一个高维激活空间中的一个低维子空间中(对,记得站在 Relu 的右边线性激活区)。

    所以,我们可以通过加入线性瓶颈层(linear bottleneck)来拿到低维的感兴趣流形。也有类似的 report,就是在输入中拿掉 Relu 可以提升性能(因为在靠前的层中使用 Relu 会损失信息)。

    后文中就会使用这个瓶颈层,我们把中间层的深度和输入层的深度比例叫 expansion ratio。(就是升维那里到底升维到什么程度)

  • 以下回答来自chatgpt:

    回答:

    瓶颈结构和倒残差结构不是同一个结构。倒残差结构是在MobileNetV2中引入的,采用了Depthwise Separable Convolution的思想,先进行一个1x1的卷积进行通道的压缩,再进行一个Depthwise Convolution,最后再进行一个1x1的卷积扩张通道,这个过程中使用的是残差连接,即将输入和输出进行相加。 而瓶颈结构是为了解决深度网络中信息损失的问题而提出的,其主要思想是通过在卷积块中插入线性瓶颈层来捕获感兴趣流形,这个瓶颈结构包含了1x1卷积、3x3深度可分离卷积和1x1卷积三个卷积层,其中1x1卷积用于进行通道的压缩和扩张,3x3深度可分离卷积用于提取特征。这个结构中不包含残差连接。 由于倒置残差是一种残差连接的方式,而瓶颈结构中不包含残差连接,因此MobilenetV2采用了倒置残差结构的同时也采用了瓶颈结构。即在倒置残差的基础上,引入了瓶颈结构进行优化。

    因此,可以说MobilenetV2中的一个名为bottleneck的模块已经包含了瓶颈结构和倒置残差。


如果你已经解决了该问题, 非常希望你能够分享一下解决方案, 写成博客, 将相关链接放在评论区, 以帮助更多的人 ^-^