当前位置:网站首页 > R语言数据分析 > 正文

resnet谁提出的(resnet的原理)



残差神经网络(ResNet)是由微软研究院的何恺明、张祥雨、任少卿、孙剑等人提出的。ResNet 在2015 年的ILSVRC(ImageNet Large Scale Visual Recognition Challenge)中取得了冠军。残差神经网络的主要贡献是发现了“退化现象(Degradation)”,并针对退化现象发明了 “快捷连接(Shortcut connection)”,极大的消除了深度过大的神经网络训练困难问题。神经网络的“深度”首次突破了100层、最大的神经网络甚至超过了1000层。

在这里插入图片描述

2.0 残差块

在这里插入图片描述

配合吴恩达深度学习视频中的图片进行讲解:

在这里插入图片描述

如图所示,Residual block就是将传送到上,其相加之后再进行激活得到。这一步骤称为"skip connection",即指跳过一层或好几层,从而将信息传递到神经网络的更深层。所以构建一个ResNet网络就是通过将很多这样的残差块堆积在一起,形成一个深度神经网络。

那么引入残差块为什么有效呢? 一个直观上的理解:

在这里插入图片描述

如图所示,假设我们给我们的神经网络再增加两层,我们要得到,我们通过增加一个残差块来完成。这时,如果我们应用了L2正则化,此时权重参数会减小,我们可以极端的假设,那么得到(因为使用的是ReLU激活函数,非负的值激活后为原来的值,已经经过ReLU激活过了,所以全为非负值)。这意味着,即使给神经网络增加了两层,它的效果并不逊色于更简单的神经网络。所以给大型的神经网络添加残差块来增加网络深度,并不会影响网络的表现。如果我们增加的这两层碰巧能学习到一些有用的信息,那么它就比原来的神经网络表现的更好。

论文中ResNet层数在34及以下和50及以上时采用的是不同的残差块。下面我们分别介绍:

2.1 ResNet-34

在这里插入图片描述

如上图所示是ResNet-34以下采用的残差块,我们将其称作BasicBlock

ResNet-34的网络结构如下:图中实线表示通道数没有变化,虚线表示通道数发生了变化。

在这里插入图片描述

其具体的网络结构如下表:

在这里插入图片描述

2.2 ResNet-50

在这里插入图片描述

如图所示是ResNet-50以上采用的残差块,我们将其称作Bottleneck,使用了1 × 1的卷积来进行通道数的改变,减小计算量。其具体的网络结构见上面的表。

  • 论文中的第一张图就表明了更深层的“plain”神经网络(即不用Residual Learning)的错误率在训练集和测试集上甚至比层数少的“plain”神经网络还要高,所以就引出了问题:训练很深的网络是一个很难的问题。
    在这里插入图片描述
  • 论文中的这张图就表明了,使用Residual Learning后训练更深层的神经网络效果会变得更好。

    在这里插入图片描述

  • 论文中处理残差连接中输入和输出不对等的解决方法:
    • 添加一些额外的0,使得输入和输出的形状可以对应起来可以做相加。
    • 输入和输出不对等的时候使用1 × 1的卷积操作来做投影(目前都是这种方法)
    • 所有的地方都使用1 × 1的卷积来做投影,计算量太大没必要
  • 论文最主要的是提出了residual结构(残差结构),并搭建超深的网络结构(突破1000层)
  • 使用了大量BN来加速训练(丢弃dropout)
  • 论文中对CIFAR10数据集做了大量实验验证其效果,最后还将ResNet用到了目标检测领域
 

主要注意点是:

  • BasicBlock(34层以下的残差块)中残差连接的方法,注意输入和输出的通道数,用1×1的卷积做好尺寸和维度对齐。
  • 使用_make_layer()函数批量生成残差块。

在控制台输出网络结构:

 

使用torchsummary来测试网络:

 
 

主要注意点是:

  • Bottleneck(50层以上残差块)中块与块直接连接的通道数问题。在BasicBlock中由于两个相同的块在连接的时候通道数是相同的,而Bottleneck中两个相同的块在连接的时候其通道数相差四倍。即下面这段代码:
     
  • 注意最后全连接的通道数,ResNet50以上的最后全连接的in_features为2048。
  • 注意在残差连接的时候,shortcut调整的维度一定要和输出维度对上,即下面这段代码:
     
  • 写代码的时候,要注意只有每一堆残差块结构中的第一个残差块的第一个卷积操作的stride为2,其余都为1,(除了第一堆残差块要维持尺度不变),即:
     

在控制台输出网络结构:

 

使用torchsummary来测试网络:

 
  • https://link.zhihu.com/?target=https%3A//arxiv.org/pdf/1512.03385.pdf
  • https://blog.csdn.net/m0_/article/details/
  • https://blog.csdn.net/m0_/article/details/
  • https://www.bilibili.com/video/BV1Bo4y1T7Lc/?spm_id_from=333.999.0.0&vd_source=c7eff3e10b79e23fb333bea49d
到此这篇resnet谁提出的(resnet的原理)的文章就介绍到这了,更多相关内容请继续浏览下面的相关推荐文章,希望大家都能在编程的领域有一番成就!

版权声明


相关文章:

  • swagger2配置security(swagger enable)2025-04-12 10:09:08
  • oracle查看锁表语句(oracle怎样查看锁表)2025-04-12 10:09:08
  • 华为模拟器路由器接口配置ip地址(华为模拟器rip路由配置)2025-04-12 10:09:08
  • 富文本编辑器图片上传(富文本编辑器粘贴word图片)2025-04-12 10:09:08
  • termux启动docker(termux启动kali命令)2025-04-12 10:09:08
  • hprof文件可以删除吗(hprof文件占用太多内存)2025-04-12 10:09:08
  • rang me up什么意思(rais me up什么意思)2025-04-12 10:09:08
  • redis哨兵连接数设置(redis哨兵keepalive)2025-04-12 10:09:08
  • uchar code seg啥意思(uchar code dis)2025-04-12 10:09:08
  • Qpainter图层用法(painter的图层)2025-04-12 10:09:08
  • 全屏图片