fqlb

导航

< 2025年3月 >
23 24 25 26 27 28 1
2 3 4 5 6 7 8
9 10 11 12 13 14 15
16 17 18 19 20 21 22
23 24 25 26 27 28 29
30 31 1 2 3 4 5
统计
 

论文地址:https://arxiv.org/pdf/1512.03385v1.pdf

引言

作为一篇发表于2015年的文章,至今我们仍在深度卷积神经网络中用到ResNet,作为一个神经网络初学者,我觉得很有必要去阅读一下这篇文章。
在ResNet发表之前,深层神经网络的训练非常困难,而且会遇到当网络层级超过一定界限之后,神经网络的精度出现下降的情况。而通过残差学习(residual learning)的方式,使得训练网络的层数可以变得更深并且获得更好的精度。ResNet在ImageNet数据集上训练到了152层并且具有更低的复杂度,并且成功赢下了ILSVRC 2015。同时,在COCO数据集上,仅仅通过将cnn的主干网络替换成了残差网络就能将性能提高28%,并且赢下了ILSVRC & COCO 2015,这充分证明了ResNet的潜力。

ResNet实现背景与原理

  • 背景:

    随着神经网络的加深,会出现梯度消失或者梯度爆炸的问题,一般情况下,为了解决这个问题,一是要调整权重的初始化,二是加入一些正则化层(normalization)用来校验每个层的输 出,使之回到标志正态分布。但是即使使用这种方法仍会出现精度下降的问题。

    Kaiming He等人发现,使用SGD,增加几个恒等映射层(identity mapping)却不能得到输入等于输出的结果,反而精度有所下降,这是不应该出现的结果。故而残差网络的出现就是为 了解决identity mapping 这个问题。

  • ResNet的具体原理:

    1. ResNet结构设计:
    对于已知目标函数H(x) = x,通过定义一个残差: f(x) = H(x) - x,只让新加的网络层去学习残差f(x),然后让新加的网络层的输出结果为f(x) + x。通过将残差与输入分离,进行学习的方法,使得残差网络更容易学习与输入无关的、更一般的特征。
    这里举一个例子说明残差网络的作用:F 是求和前的网络映射,H 是求和后的网络映射,设将5映射至5.1,加入残差前H(x) = 5.1,加入残差后f(x) = H(x) - x = 0.1,对于两种不 同方法,加入残差后映射f增加了100%,而加入残差前映射f仅增加2%。显然残差的加入使得权重的调整更容易。

    参考知乎贴子:https://www.zhihu.com/question/53224378/answer/159102095

    2. 对于输入输出不同维度的处理
    (1)增加一些额外的零,使得输入输出的维度相同,此方法不需要引入额外参数。
    (2)通过 1 x 1 的卷积完成通道数的增加,为了不改变高和宽,选择步幅为2的方式执行。

    3. 不同层数的ResNet网络架构:

    由上图中我们可以看到ResNet采取了两种结构:

    (1)第一种为普通的残差块,仅做两次3x3的卷积

    (2)第二种为bottleneck结构,对于输入通道数较高的情况,我们的计算复杂度会急速增加,可以增加一个1x1的卷积投影使其回到低维,再进行3x3的卷积操作,最后再投影回原维度从而降低计算复杂度。

本人为深度学习神经网络小白一枚,有任何错误欢迎指出。

posted on   一笑wn  阅读(145)  评论(0编辑  收藏  举报
相关博文:
阅读排行:
· 全程不用写代码,我用AI程序员写了一个飞机大战
· DeepSeek 开源周回顾「GitHub 热点速览」
· 记一次.NET内存居高不下排查解决与启示
· MongoDB 8.0这个新功能碉堡了,比商业数据库还牛
· .NET10 - 预览版1新功能体验(一)
 
点击右上角即可分享
微信分享提示