0

0

GoogLeNet系列解读「建议收藏」

蓮花仙者

蓮花仙者

发布时间:2025-07-23 10:06:37

|

548人浏览过

|

来源于php中文网

原创

大家好,很高兴再次与大家见面,我是你们的朋友全栈君。

本文将为您详细介绍著名的网络结构GoogLeNet及其扩展版本,重点在于理解其背后的思想,而不是单纯关注结构本身。

GoogLeNet Inception V1

Motivation

随着深度学习和神经网络的迅猛发展,人们的关注点不再仅仅局限于更强大的硬件、更大的数据集和更大的模型,而是更加注重新的想法、新的算法以及模型的改进。通常,提升网络性能最直接的方法是增加网络的深度和宽度,但这意味着大量参数的增加。然而,大量参数容易导致过拟合,并大大增加计算量。

文章认为,解决上述两个缺点的根本方法是将全连接甚至一般的卷积转化为稀疏连接。一方面,现实中的生物神经系统的连接是稀疏的;另一方面,有文献表明:对于大规模稀疏的神经网络,可以通过分析激活值的统计特性和对高度相关的输出进行聚类来逐层构建一个最优网络。这表明,臃肿的稀疏网络可以不失性能地被简化。虽然数学证明有严格的条件限制,但Hebbian准则有力地支持了这一观点:“一起激活,一起连接”。

早些时候,为了打破网络的对称性和提高学习能力,传统的网络使用了随机稀疏连接。然而,计算机软硬件在处理非均匀稀疏数据时的计算效率较差,因此在AlexNet中重新启用了全连接层,以更好地优化并行计算。

因此,现在的问题是有没有一种方法,既能保持网络结构的稀疏性,又能利用密集矩阵的高计算性能。大量文献表明,可以将稀疏矩阵聚类为较为密集的子矩阵来提高计算性能,基于此,论文提出了名为Inception的结构来实现这一目的。

Architectural Details

Inception结构的主要思路是如何用密集成分来近似最优的局部稀疏结构。作者首先提出了如下基本结构:

GoogLeNet系列解读「建议收藏」

对上图进行如下说明:

  1. 采用不同大小的卷积核意味着不同大小的感受野,最后拼接意味着不同尺度特征的融合;
  2. 卷积核大小采用1、3和5,主要是为了方便对齐。设定卷积步长stride=1后,只要分别设定pad=0、1、2,卷积后便可以得到相同维度的特征,这些特征可以直接拼接在一起;
  3. 文章指出,许多地方都表明pooling非常有效,因此Inception中也嵌入了pooling;
  4. 网络越到后面,特征越抽象,每个特征所涉及的感受野也更大,因此随着层数的增加,3×3和5×5卷积的比例也应增加。

然而,使用5×5的卷积核仍然会带来巨大的计算量。为此,文章借鉴了NIN,采用1×1卷积核进行降维。例如:上一层的输出为100x100x128,经过具有256个输出的5×5卷积层后(stride=1,pad=2),输出数据为100x100x256。其中,卷积层的参数为128x5x5x256。如果上一层输出先经过具有32个输出的1×1卷积层,再经过具有256个输出的5×5卷积层,最终的输出数据仍为100x100x256,但卷积参数量已经减少为128x1x1x32 + 32x5x5x256,大约减少了4倍。

具体改进后的Inception Module如下图:

GoogLeNet系列解读「建议收藏」

GoogLeNet

GoogLeNet的整体结构如下图:

GoogLeNet系列解读「建议收藏」

对上图进行如下说明:

  1. 显然,GoogLeNet采用了模块化的结构,方便增添和修改;
  2. 网络最后采用了average pooling来代替全连接层,灵感来自NIN,事实证明可以将TOP1 accuracy提高0.6%。但实际在最后还是加了一个全连接层,主要是为了方便以后大家进行微调;
  3. 虽然移除了全连接层,但网络中依然使用了Dropout;
  4. 为了避免梯度消失,网络额外增加了2个辅助的softmax用于向前传导梯度。文章中提到这两个辅助分类器的loss应该加一个衰减系数,但在caffe中的模型中并未添加任何衰减。此外,实际测试时,这两个额外的softmax会被去掉。

下图是一个较为清晰的结构图:

GoogLeNet系列解读「建议收藏」

Conclusion

GoogLeNet是谷歌团队为参加ILSVRC 2014比赛而精心准备的。为了达到最佳性能,除了使用上述网络结构外,还进行了大量辅助工作,包括训练多个模型求平均、裁剪不同尺度的图像进行多次验证等。详细内容可参阅文章的实验部分。

本文的主要想法是通过构建密集的块结构来近似最优的稀疏结构,从而达到提高性能而不大量增加计算量的目的。GoogLeNet的caffemodel大小约50M,但性能却非常优异。

GoogLeNet Inception V2

Woy AI
Woy AI

通过 Woy.ai AI 导航站发现 2024 年顶尖的 AI 工具!

下载

由于GoogLeNet的出色表现,得到了许多研究人员的学习和使用,因此谷歌团队对其进行了进一步的发掘和改进,产生了升级版本的GoogLeNet。这一节介绍的版本记为V2,文章为:《Rethinking the Inception Architecture for Computer Vision》。

Introduction

自2014年以来,构建更深的网络逐渐成为主流,但模型的增大也使计算效率越来越低。在这里,文章试图找到一种方法,在扩大网络的同时又尽可能地发挥计算性能。

在GoogLeNet V1出现的同时期,性能与之接近的大概只有VGGNet了,并且二者在图像分类之外的许多领域都得到了成功的应用。但相比之下,GoogLeNet的计算效率明显高于VGGNet,大约只有500万参数,仅相当于AlexNet的1/12(GoogLeNet的caffemodel大约50M,而VGGNet的caffemodel则超过600M)。

GoogLeNet的表现很好,但如果想要通过简单地放大Inception结构来构建更大的网络,则会立即提高计算消耗。此外,在V1版本中,文章也没有给出关于构建Inception结构注意事项的清晰描述。因此,在文章中,作者首先给出了一些已经被证明有效的用于放大网络的通用准则和优化方法。这些准则和方法适用但不局限于Inception结构。

General Design Principles

以下准则来源于大量的实验,因此包含一定的推测,但实际证明基本都是有效的。

  1. 避免表达瓶颈,特别是在网络靠前的地方。信息流在前向传播过程中显然不能经过高度压缩的层,即表达瓶颈。从input到output,feature map的宽和高基本都会逐渐变小,但不能一下子就变得很小。例如,刚开始就使用kernel = 7, stride = 5显然不合适。此外,输出的维度channel一般会逐渐增多(每层的num_output),否则网络会很难训练。(特征维度并不代表信息的多少,只是作为一种估计的手段)

  2. 高维特征更易处理。高维特征更易区分,会加快训练。

  3. 可以在低维嵌入上进行空间汇聚而无需担心丢失很多信息。例如,在进行3×3卷积之前,可以对输入先进行降维而不会产生严重的后果。假设信息可以被简单压缩,那么训练就会加快。

  4. 平衡网络的宽度与深度。

上述这些准则并不能直接用来提高网络质量,而仅用来在大环境下作指导。

Factorizing Convolutions with Large Filter Size

大尺寸的卷积核可以带来更大的感受野,但也意味着更多的参数,例如5×5卷积核参数是3×3卷积核的25/9=2.78倍。为此,作者提出可以用2个连续的3×3卷积层(stride=1)组成的小网络来代替单个的5×5卷积层(保持感受野范围的同时又减少了参数量),如下图所示:

GoogLeNet系列解读「建议收藏」

然后就会有两个疑问:

  1. 这种替代会造成表达能力的下降吗?后面有大量实验可以表明不会造成表达缺失;

  2. 3×3卷积之后还要再加激活吗?作者也做了对比试验,表明添加非线性激活会提高性能。

从上面来看,大卷积核完全可以由一系列的3×3卷积核来替代,那么能不能分解得更小一点呢?文章考虑了nx1卷积核。如下图所示的替代3×3卷积:

GoogLeNet系列解读「建议收藏」

于是,任意nxn的卷积都可以通过1xn卷积后接nx1卷积来替代。实际上,作者发现,在网络的前期使用这种分解效果并不好,只有在中度大小的feature map上使用效果才会更好(对于mxm大小的feature map,建议m在12到20之间)。

总结如下图:

GoogLeNet系列解读「建议收藏」

(1) 图4是GoogLeNet V1中使用的Inception结构; (2) 图5是用3×3卷积序列来代替大卷积核; (3) 图6是用nx1卷积来代替大卷积核,这里设定n=7来应对17×17大小的feature map。该结构正式用在GoogLeNet V2中。

未完待续---

参考文献: Sanjeev Arora, Aditya Bhaskara, Rong Ge, and Tengyu Ma. Provable bounds for learning some deep representations. CoRR, abs/1310.6343, 2013. Min Lin, Qiang Chen, and Shuicheng Yan. Network in network. CoRR, abs/1312.4400, 2013.

发布者:全栈程序员栈长,转载请注明出处:https://www.php.cn/link/6465f369dc088bc31009cf92a541b28b 原文链接:https://www.php.cn/link/c8377ad2a50fb65de28b11cfc628d75c

热门AI工具

更多
DeepSeek
DeepSeek

幻方量化公司旗下的开源大模型平台

豆包大模型
豆包大模型

字节跳动自主研发的一系列大型语言模型

通义千问
通义千问

阿里巴巴推出的全能AI助手

腾讯元宝
腾讯元宝

腾讯混元平台推出的AI助手

文心一言
文心一言

文心一言是百度开发的AI聊天机器人,通过对话可以生成各种形式的内容。

讯飞写作
讯飞写作

基于讯飞星火大模型的AI写作工具,可以快速生成新闻稿件、品宣文案、工作总结、心得体会等各种文文稿

即梦AI
即梦AI

一站式AI创作平台,免费AI图片和视频生成。

ChatGPT
ChatGPT

最最强大的AI聊天机器人程序,ChatGPT不单是聊天机器人,还能进行撰写邮件、视频脚本、文案、翻译、代码等任务。

相关专题

更多
堆和栈的区别
堆和栈的区别

堆和栈的区别:1、内存分配方式不同;2、大小不同;3、数据访问方式不同;4、数据的生命周期。本专题为大家提供堆和栈的区别的相关的文章、下载、课程内容,供大家免费下载体验。

435

2023.07.18

堆和栈区别
堆和栈区别

堆(Heap)和栈(Stack)是计算机中两种常见的内存分配机制。它们在内存管理的方式、分配方式以及使用场景上有很大的区别。本文将详细介绍堆和栈的特点、区别以及各自的使用场景。php中文网给大家带来了相关的教程以及文章欢迎大家前来学习阅读。

601

2023.08.10

golang map内存释放
golang map内存释放

本专题整合了golang map内存相关教程,阅读专题下面的文章了解更多相关内容。

77

2025.09.05

golang map相关教程
golang map相关教程

本专题整合了golang map相关教程,阅读专题下面的文章了解更多详细内容。

40

2025.11.16

golang map原理
golang map原理

本专题整合了golang map相关内容,阅读专题下面的文章了解更多详细内容。

67

2025.11.17

java判断map相关教程
java判断map相关教程

本专题整合了java判断map相关教程,阅读专题下面的文章了解更多详细内容。

47

2025.11.27

Golang channel原理
Golang channel原理

本专题整合了Golang channel通信相关介绍,阅读专题下面的文章了解更多详细内容。

261

2025.11.14

golang channel相关教程
golang channel相关教程

本专题整合了golang处理channel相关教程,阅读专题下面的文章了解更多详细内容。

351

2025.11.17

JavaScript浏览器渲染机制与前端性能优化实践
JavaScript浏览器渲染机制与前端性能优化实践

本专题围绕 JavaScript 在浏览器中的执行与渲染机制展开,系统讲解 DOM 构建、CSSOM 解析、重排与重绘原理,以及关键渲染路径优化方法。内容涵盖事件循环机制、异步任务调度、资源加载优化、代码拆分与懒加载等性能优化策略。通过真实前端项目案例,帮助开发者理解浏览器底层工作原理,并掌握提升网页加载速度与交互体验的实用技巧。

23

2026.03.06

热门下载

更多
网站特效
/
网站源码
/
网站素材
/
前端模板

精品课程

更多
相关推荐
/
热门推荐
/
最新课程
550W粉丝大佬手把手从零学JavaScript
550W粉丝大佬手把手从零学JavaScript

共1课时 | 0.4万人学习

尚硅谷JavaScript高级视频教程
尚硅谷JavaScript高级视频教程

共48课时 | 14.9万人学习

关于我们 免责申明 举报中心 意见反馈 讲师合作 广告合作 最新更新
php中文网:公益在线php培训,帮助PHP学习者快速成长!
关注服务号 技术交流群
PHP中文网订阅号
每天精选资源文章推送

Copyright 2014-2026 https://www.php.cn/ All Rights Reserved | php.cn | 湘ICP备2023035733号