ResNet理论基础与具体实现(详细教程)

ResNet,深度残差网络,旨在解决深层网络训练效果退化问题。通过添加残差块,允许网络直接学习输入的残差,优化简单且避免梯度消失。本文详细介绍了ResNet的理论基础,包括残差表示法思想,并展示了不同结构的实验对比,以及最终的网络结构设计。此外,还提供了PyTorch源码,便于理解和实践。

论文地址:Deep Residual Learning for Image Recognition

Identity Mappings in Deep Residual Networks

pytroch源码地址:resnet

0x00 前言

ResNet是2015年就提出的网络结构,中文名字叫作深度残差网络,主要作用是图像分类。现在在图像分割、目标检测等领域都有很广泛的运用,另外值得一提的是Alpha Zero中也使用了这种网络。

我第一次看到这个网络时的第一映像就是 这不就是一个差分放大电路吗?(由于本人是学电路出生)后来我得知Kaiming He原先是学数学的,这就让我感觉很困惑了。可能这种种的问题,最后都是殊途同归吧!!!

我想如果各位读完全文的话,也会和我有一样的看法吧?

0x01 问题的引出

随着硬件的不断升级,我们可以使得原来很浅的网络不断的加深,但是这种做法随之而来就出现了这样的一个问题深层训练的效果反而不如浅层网络,也就是网络出现了退化。这个问题很大程度上归结为网络层数过深,梯度下降优化loss变得困难

作者为了解决上述问题,提出了这样一个结构:

是不是和我前面提到的差分放大电路很像?

0x02 解决退化问题

如上图所示,作者添加了一个identity结构,也就是将输入x和卷积后的输出F(x)相加。如果我们要学习的目标函数是H(x)的话。

当需要拟合的函数H(x)很复杂的时候,H(x)F(x)=H(x)-x近似等价,那么我们之前的学习目标H(x)就可以变成F(x)+x。为什么要这样的的做替换?因为F(x)的优化会比H(x)简单。为什么呢?这实际上是源自**残差表示法(Residual Representations)**的思想。

  • 在图像识别中,VLAD是一种由残差向量关于字典的编码表示,而Fisher Vector可以被定义为VLAD的概率版本,它们都是图像检索和分类的强大的浅层表示。对于向量化,编码残差向量比编码原始向量更有效。
  • 在低层次的视觉和计算机图形学中,为了解偏微分方程,一般使用的多网格法。就是将系统重新设计成多个尺度下的子问题,每个子问题负责一个较粗的和更细的尺度之间的残差解。多网格的另一种选择是分层基础的预处理,它依赖于在两个尺度之间表示残差向量的变量。研究表明,这些(转化成多个不同尺度的子问题,求残差解的)解决方案的收敛速度远远快于那些不知道残差的标准解决方案

我们把 H ( x ) = F ( x ) + x H(x)=F(x)+x H(x)=F(x)+x写成 y l = h ( x l ) + F ( x l , W l ) y_l=h(x_l)+F(x_l,W_l) yl=h(xl)+F(xl,Wl) x l + 1 = f ( y l ) x_{l+1}=f(y_l) xl+1=f(yl) f f f是激活函数)

那么如果 h ( x l ) = x l h(x_l)=x_l h(xl)=xl f ( y l ) = y l f(y_l)=y_l f(yl)=yl是恒等映射,那么上述公式表达为

  • x l + 1 = x l + F ( x l , W l ) x_{l+1}=x_l+F(x_l,W_l) xl+1=xl
评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值