【论文阅读总结】inception v2_v3总结
重新思考计算机视觉的Inception架构
- 1.摘要
- 2.简介
- 2.1 以往模型问题
- 2.2 问题缓解
- 2.3 问题解决出现的问题
- 2.4 有效的一般原则和优化思想
- 3.一般设计原则
- 3.1 设计原则1【避免代表性瓶颈(不能过度降维)】
- 3.2 设计原则2【特征越多,收敛越快】
- 3.3 设计原则3【卷积之前使用1*1卷积降维】
- 3.4 设计原则4【平衡网络的宽度和深度】
- 4.大滤波器尺寸的分解卷积
- 4.1分解成更小的卷积
- 4.1.1小滤波器问题
- 4.1.3 问题解决【小滤波器代替大滤波器】
- 4.1.4 替换问题思考
- 4.2 空间因子分解成不对称卷积
- 4.2.1分解 新思想
- 5.辅助分类器的效用
- 6.有效减小网格尺寸
- 6.1池化操操作改进
- 7.Inception_v2
- 8.Inception v3
- 9.通过标签平滑的模型正则化【大致理解】
- 9.1 one-hot编码设置标签问题
- 9.2 标签平滑正则化
- 10.阅读总结
- 论文链接:
- https://arxiv.org/pdf/1512.00567.pdf
- 视频链接:
- 【子豪兄】精读人工智能经典论文 inception v3
1.摘要
- 卷积网络是最先进的计算机视觉解决方案的核心,适用于各种各样的任务。非常深度的卷积网络开始成为主流,在各种基准测试【图像分类,物体检测等】中产生了巨大收益。
- 增加模型大小和计算成本为大多数任务的质量立即提高(只要为训练提供足够的标记数据),但计算效率和低参数计数仍然是需要优化的因素。
- 在这里,我们正在探索扩大网络的方法,目的是通过适当的卷积分解和积极的正则化尽可能有效地利用增加的计算。
2.简介
- 深度卷积架构中的架构改进可以用于提高大多数其他计算机视觉任务的性能,这些任务越来越依赖于高质量的学习视觉特征。此外,网络质量的改善为卷积网络带来了新的应用领域。
2.1 以往模型问题
- VGGNet具有架构简单的引人注目的特点,但这需要很高的成本:评估网络需要大量的计算。
- GoogLeNet的Inception架构也被设计成即使在内存和计算预算的严格限制下也能很好地执行。
- 例如,GoogleNet只使用了500万个参数,与使用6000万个参数的前身AlexNet相比,减少了12倍。此外,VGGNet采用的参数比AlexNet多约3倍。
- Inception的计算成本也远低于VGGNet或其更高性能的后继者。这使得在需要以合理的成本处理大量数据的大数据场景或内存或计算能力固有有限的场景(例如在移动视觉设置中)中利用Inception网络变得可行。
2.2 问题缓解
- 通过对目标内存使用、应用专门的解决方案,或者通过计算技巧优化某些操作的执行,可以缓解部分问题。
- 然而,这些方法增加了额外的复杂性。此外,这些方法也可以用于优化Inception架构,再次扩大效率差距。
2.3 问题解决出现的问题
- 结构复杂性,不容易更改结构
- Inception体系结构的复杂性使得对网络进行更改变得更加困难。如果简单地扩展架构,很大一部分计算收益可能会立即损失。此外,GoogLeNet并没有提供关于导致GoogLeNet架构的各种设计决策的促成因素的清晰描述。这使得它很难适应新的用例,同时保持其效率。
- 例如,如果认为有必要增加某些inception风格模型的容量,那么将所有滤波器组大小的数量增加一倍的简单转换将导致计算成本和参数数量增加4倍。在许多实际情况下,这可能是不合理的,特别是如果相关的收益是适度的。
2.4 有效的一般原则和优化思想
- 本文中,我们使用了对有效地扩展卷积网络有用的一般原则和优化思想,尽管我们的原则并不局限于Inception类型的网络,但是在这种情况下,它们更容易观察到,因为Inception风格构建块的一般结构足够灵活,可以自然地合并那些约束。
- 这是通过大量使用Inception模块的降维和并行结构实现的,这允许减轻结构更改对附近组件的影响。尽管如此,这样做仍然需要谨慎,因为应该遵守一些指导原则来保持模型的高质量
3.一般设计原则
- 设计原则
- 原则的效用是推测性的,未来将需要更多的实验证据来评估其准确性和有效性领域。但是,对这些原则的严重偏离往往会导致网络质量的恶化,而当检测到这些偏离时,修复情况会导致总体上的架构改进。
- 注意:
- 不遵守原则:效果一定不好;
- 遵守原则:效果不一定提升但是效果不会太差。
- 尽管这些原则可能是有意义的,但使用它们来提高网络的质量并不是一件简单的事情。我们的想法是只在模棱两可的情况下明智地使用它们。
3.1 设计原则1【避免代表性瓶颈(不能过度降维)】
- 避免代表性瓶颈,特别是在网络的早期。
- 就是在网络前期,进行卷积时,不要使用太大的卷积核,导致数据降维【压缩】严重,使数据没有原来的代表能力。
- 前馈网络可以用从输入层到分类器或回归器的无环图表示。这为信息流定义了一个明确的方向。
- 对于将输入与输出分开的任何切割,都可以访问通过该切割的信息量。应该避免极端压缩带来的瓶颈。
- 一般来说,在最终的输出层之前,表示式的大小应该从输入逐渐减小到输出。从理论上讲,信息内容不能仅通过表示的维数来评估,因为它抛弃了相关结构等重要因素;维度仅仅提供了信息内容的粗略估计。
3.2 设计原则2【特征越多,收敛越快】
- 高维表示更容易在网络中本地处理。
- 在卷积网络中增加增加非线性激活变换可以获得更多的解纠缠特征【同类更容易分开】。由此产生的网络将训练得更快。
- 例如:增加非线性变换,使猫的特征更容易分在一起,狗的特征更容易分在一起。猫狗的特征相关性也不大。
3.3 设计原则3【卷积之前使用1*1卷积降维】
- 空间聚合可以在较低维度的嵌入中完成,而不会在表示能力上有太多或任何损失。
- 例如,在执行更分散的(例如3 × 3)卷积之前,可以在空间聚集之前降低输入表示的维数,而不会产生严重的不利影响。
- 我们假设,其原因是相邻单元之间的强相关性导致在降维过程中的信息损失要少得多,如果输出用于空间聚合上下文。考虑到这些信号应该是容易压缩的,降维甚至可以促进更快的学习。
3.4 设计原则4【平衡网络的宽度和深度】
- 深度:模型深度,层数
- 宽度:卷积核数量,维度
- 通过平衡每级滤波器的数量和网络深度,可以达到网络的最佳性能。
- 同时增加网络的宽度和深度可以提高网络的质量。
- 如果两者并行增加,则可以达到恒定计算量的最佳改进。
- 因此,计算预算应该在网络的深度和宽度之间以平衡的方式分配。
4.大滤波器尺寸的分解卷积
- GoogLeNet网络的大部分原始收益来自于大量使用降维。这可以看作是一种计算效率高的卷积因式分解的特殊情况。
- 例如,一个1 × 1卷积层后面跟着一个3 × 3卷积层的情况。
- 在视觉网络中,附近激活的输出是高度相关的。我们预期它们的激活可以在聚合之前减少,应该会导致局部相似特征更容易表达【卷积之前降维,激活就少了】
- 我们探索了在各种设置下分解卷积的其他方法,特别是为了提高解决方案的计算效率。
- 由于Inception网络是完全卷积的,每激活一次就算一次矩阵点积。任何计算成本的降低都会导致参数数量的减少。这意味着,通过适当的因式分解,我们可以得到更多解纠缠的参数,从而获得更快的训练。
- 我们可以使用节省的计算量和内存来增加我们网络的过滤器库大小,同时保持我们在一台计算机上训练每个模型副本的能力。
4.1分解成更小的卷积
4.1.1小滤波器问题
- 小滤波器尺寸表达能力不好
- 具有更大空间滤波器(例如5 × 5或7 × 7)的卷积在计算方面往往是不成比例的昂贵。
- 例如,设输入滤波器个数为m,输出特征图个数为n。
5*5
滤波器计算成本是3*3
的 2.78倍。
n u m b e r 5 = m ∗ 5 ∗ 5 ∗ n = 25 m n n u m b e r 3 = m ∗ 3 ∗ 3 ∗ n = 9 m n n u m b e r 5 n u m b e r 3 = 25 m n 9 m n = 2.78 \begin{aligned} number_5= m*5*5*n=25mn\\ number_3= m*3*3*n=9mn\\ \frac{number_5}{number_3}=\frac{25mn}{9mn}=2.78 \end{aligned} number5=m∗5∗5∗n=25mnnumber3=m∗3∗3∗n=9mnnumber3number5=9mn25mn=2.78
- 例如,设输入滤波器个数为m,输出特征图个数为n。
- 5 × 5滤波器可以捕获早期层中较远的单元激活之间的信号之间的依赖关系,因此滤波器尺寸的减小对表达能力付出巨大代价。【相邻单元具有强相关性,大的卷积核可以更好的提取相关性信息】
- 具有更大空间滤波器(例如5 × 5或7 × 7)的卷积在计算方面往往是不成比例的昂贵。
4.1.3 问题解决【小滤波器代替大滤波器】
- 使用多层小滤波器代替大滤波器
- 我们放大5×5卷积的计算图,看到每个输出看起来像一个完全连接的小网络,在其输入上滑动5×5卷积核。
- 我们构造一个视觉网络,似乎自然利用了平移不变性和取代完全连接组件由两层回旋的体系结构:
- 第一层3×3卷积,第二个完全连接层的3×3输出网格的第一层。
- 发现:滑动这个小型网络输入激活网格可以归结为:两层3×3卷积替换一层5×5卷积得到,并且明显地减少了参数计数
- 结论:在相同的输入大小和输出深度下,可以用更少参数的多层网络来代替
5*5
卷积。【figure5代替figure4】- 例如:使用2层
3*3
的卷积核代替一层5*5
卷积核,参数少了0.28%- 设输入特征图个数为C,输出特征图个数也为C
n u m b e r 3 = 2 ∗ ( 3 ∗ 3 ∗ C ∗ C ) = 18 C 2 n u m b e r 5 = 5 ∗ 5 ∗ C ∗ C = 25 C 2 n u m b e r 3 n u m b e r 5 = 18 C 2 25 C 2 = 0.72 1 − 0.72 = 0.28 \begin{aligned} number_3&=2*(3*3*C*C) \\&=18C^2\\ number_5&=5*5*C*C \\&=25C^2\\ \frac{number_3}{number_5}&=\frac{18C^2}{25C^2}=0.72\\ 1-0.72&=0.28 \end{aligned} number3number5number5number31−0.72=2∗(3∗3∗C∗C)=18C2=5∗5∗C∗C=25C2=25C218C2=0.72=0.28
- 设输入特征图个数为C,输出特征图个数也为C
- 例如:使用2层
4.1.4 替换问题思考
- 问题:
- 这种替换是否会导致表达性的损失?
- 如果我们的主要目标是分解计算的线性部分,使用2层
3*3
卷积代替一层5*5
卷积,是否第一层不适用非线性激活,保持线性激活?
- 实验结果:
- 在分解的所有阶段,使用线性激活效果总是不如非线性激活。
- 将这种增益归因于网络可以学习的增强的变化空间,特别是使用batch-normalize输出激活。
- 当对
1*1
卷积使用线性激活时,可以看到类似的效果。
4.2 空间因子分解成不对称卷积
- 上述结果表明,滤波器大于3 × 3卷积并不常用,因为它们总是可以简化为3 × 3卷积序列【就是大卷积都可以用多层小卷积代替】
4.2.1分解 新思想
- 是否应该把它们分解成更小的,例如2 × 2卷积。
- 事实证明:通过使用不对称卷积(例如n × 1),可以得到比2 × 2更好的结果。
- 例如,使用3 × 1卷积,然后使用1 × 3卷积,相当于滑动一个具有与3 × 3卷积中相同接收域的两层网络。
- 如果输入和输出滤波器的数量相等,对于相同数量的输出滤波器,两层解决方案要便宜33%。相比之下,将一个3 × 3卷积分解为两个2 × 2卷积只节省11%的计算量
- 理论上,我们认为可以用1 × n的卷积来代替任何n × n的卷积。随着n的增长,节省的计算成本显著增加。
- 因式分解在早期层上效果不佳,但在中等网格尺寸上(在m × m特征图上,12<m<20)有非常好的结果。在这个层面上,通过使用1 × 7卷积和7 × 1卷积可以获得非常好的结果。
5.辅助分类器的效用
- 最初使用辅助分类器动机:将有用的梯度推到较低的层,使它们立即有用,并通过解决非常深的网络中的梯度消失问题来提高训练期间的收敛性。Lee等认为辅助分类器促进更稳定的学习和更好的收敛。
- 发现辅助分类器在训练早期并没有提高收敛性:
- 在两个模型达到高精度之前,有侧头和没有侧头的网络的训练过程看起来几乎相同。
- 在训练接近尾声时,有辅助分支的网络的准确率开始超过没有辅助分支的网络,并达到一个稍高的平台。
- 在网络的不同阶段使用两个侧头。下辅助分支的移除对网络的最终质量没有任何不利影响。即这些分支有助于进化低级特征,很可能是错误的。
- 我们认为辅助分类器充当正则器。如果侧分支是batch-normalize或dropout层,则网络的主分类器性能更好,这一事实支持了这一点。这也为 batch normalization作为正则器的猜想提供了一个微弱的支持证据。
6.有效减小网格尺寸
6.1池化操操作改进
- 传统的卷积网络使用池化操作来减小特征映射的网格大小(容易得到瓶颈)。为了避免表示瓶颈,在应用最大或平均池之前,网络过滤器的激活维度将被扩展。
- 例如:通过k个过滤器
d
∗
d
d*d
d∗d网格,得到2k过滤器的
d
2
∗
d
2
\frac{d}{2}*\frac{d}{2}
2d∗2d网格。
-
方法一:使用stride-1【步长为1】,卷积核数为2k卷积,再池化。
- 缺点: 整体参数为 2 d 2 k 2 2d^2k^2 2d2k2,参数量太大
-
方法二:先池化,在卷积。
- 缺点(违背原则1):会产生表征瓶颈,导致表达性较差的网络。
-
方法三:
- 使用另一种变体,在去除表征瓶颈的同时进一步降低计算成本。我们可以使用两个平行的stride 2块😛 and C。P是池化层(平均池化或最大池化)的激活,它们都是stride 2的过滤器组
- 使用另一种变体,在去除表征瓶颈的同时进一步降低计算成本。我们可以使用两个平行的stride 2块😛 and C。P是池化层(平均池化或最大池化)的激活,它们都是stride 2的过滤器组
-
7.Inception_v2
- Inception_v2:从上面的点连接起来,并提出了一个新的架构。注意,我们已经将传统的7 × 7卷积分解为3个3 × 3卷积。
- 每个模块的输出大小是下一个模块的输入大小。用0填充标记卷积,用于保持网格大小。0填充也用于那些不减少网格大小的Inception模块中。所有其他层都不使用填充。选择不同的滤波器组大小以遵守原则4。
- 只要遵守原则,网络的质量对于变化是相对稳定的。虽然我们的网络有42层,但我们的计算成本只比GoogLeNet高2.5左右,效率仍然比VGGNet高得多。
- inception块图
8.Inception v3
- inception_v3在inception_v2基础上加上了辅助分类器
- 辅助分类器
9.通过标签平滑的模型正则化【大致理解】
- 我们提出了一种机制:通过估计训练过程中标签退出的边缘效应来正则化分类器层。
- 最大似然估计求损失函数
- 相关博文
- 推导线性回归损失函数MSE
- 分类与回归梯度下降公式推导
- 相关博文
9.1 one-hot编码设置标签问题
- 交叉熵损失函数公式
L o s s = − ∑ k = 1 k l o g ( p ( k ) ) q ( k ) \begin{aligned} Loss &=-\sum_{k=1}^{k}log(p(k))q(k) \end{aligned} Loss=−k=1∑klog(p(k))q(k) - 一个真实标签, q ( y ) = 1 , q ( k ) = 0 q(y)=1,q(k)=0 q(y)=1,q(k)=0,当 k ≠ y k\neq y k=y
- 根据one-hot编码,当k = y时等于1,否则为0【正标签为1,副标签为0】。
- 根据交叉熵损失函数,当k=y时,才有损失,其他的副标签都为0,因为q(k)=0。
- 但是实际中这个并不合理,模型会为了最小化损失,把正确标签的概率值最大化(可能会正无穷),这并不是实际的损失,对模型学习效果不好。模型中有很多相似特征,不应该把相似的物体损失全部设为0
- 导致2个问题
- 它可能会导致过拟合:如果模型学会为每个训练示例将完全概率分配给正标签,则不能保证泛化。【为了损失小,将正标签设置很大】
- 降低了模型的适应能力:它鼓励最大的logit和其他所有logit之间的差异变得很大,这与有界的梯度相结合,降低了模型的适应能力。直观地说,这是因为模型对自己的预测过于自信。【梯度下降太快】
9.2 标签平滑正则化
- 我们提出了一种机制来鼓励模型变得不那么自信。虽然如果目标是最大化训练标签的对数可能性,这可能不是理想的,但它确实使模型正则化并使其更具适应性。
- 设置平滑参数 ξ \xi ξ
- 对于一个具有ground-truth标签y的训练示例,我们替换标签分布
q
(
k
∣
x
)
=
δ
k
,
y
q(k|x) = \delta _{k,y}
q(k∣x)=δk,y
- 它是原始真实分布q(k|x)和固定分布u(k)的混合,权重为 1 − ξ 1−\xi 1−ξ和 ξ \xi ξ。
- 这可以看作是得到的标签k的分布如下:
- 首先,将其设置为groundtruth标签k = y;然后,用概率 ξ \xi ξ将k替换为从分布u(k)中抽取的样本。我们建议使用标签上的先验分布u(k)。在我们的实验中,我们使用均匀分布 u ( k ) = 1 K u(k) = \frac{1}{K} u(k)=K1
- 这种基本真相标签分布的变化称为标签平滑正则化(label-smoothing regularization, LSR)
- LSR实现了防止最大的logit变得比所有其他logit大得多的预期目标。
- LSR实现了防止最大的logit变得比所有其他logit大得多的预期目标。
- 事实上,如果这种情况发生,那么一个q(k)将趋于1,而所有其他q(k)将趋于0。这将导致与 q ′ ( k ) q^{'}(k) q′(k)的交叉熵很大,因为与 q ( k ∣ x ) = δ k , y q(k|x) = \delta _{k,y} q(k∣x)=δk,y不同,所有 q ′ ( k ) q^{'}(k) q′(k)都有一个正的下界
- 因此,LSR等价于用一对这样的损失 H ( q , p ) H(q, p) H(q,p)和 H ( u , p ) H(u, p) H(u,p)来代替一个交叉熵损失 H ( q , p ) H(q, p) H(q,p)。
- 第二个损失惩罚了预测标签分布p与先验u的偏差,其相对权重为
u
(
k
)
=
ξ
1
−
ξ
u(k) = \frac{\xi}{1-\xi}
u(k)=1−ξξ。这个偏差可以等效地用KL散度来捕捉,因为
H
(
u
,
p
)
=
D
K
L
(
u
∣
∣
p
)
+
H
(
u
)
H(u, p) = D_{KL}(u||p) + H(u)
H(u,p)=DKL(u∣∣p)+H(u),而H(u)是固定的。当u是均匀分布时,H(u, p)是对预测分布p与均匀分布的不同程度的度量,这也可以通过负熵−H§来测量(但不是等效的);我们还没有试验过这种方法。
- 结论:在我们的ImageNet实验中,K = 1000个类,我们使用u(K) = 1/1000和 ξ = 0.1 \xi=0.1 ξ=0.1。对于ILSVRC 2012,我们发现top-1误差和top-5误差的绝对改善均为0.2%左右。
10.阅读总结
- 深度学习主要问题就是深度与宽度问题
- 增加深度,会导致计算量增大,引入大滤波器尺寸的分解卷积
- 思考可以使用更小的卷积或不对称卷积,引入空间因子分解成不对称卷积
- 卷积后池化容易得到瓶颈,卷积前池化违背原则2,引入stride-2滤波器
- 损失函数会侧重于正确标签,导致模型学习能力变差,引入标签平滑正则化
- 将大滤波器尺寸的分解卷积,空间因子分解成不对称卷积,stride-2滤波器结合,得到inception_v2
- 将inception_v2添加辅助分类器,得到inception_v3
- 注意:模型设计需要遵守四大设计原则,上文3所述