对于ResNet残差网络的理解和思考

       增加网络层数却导致更大的误差, 如下图。 这种deep plain net收敛率十分低下。原因:观察这张图可以看出,训练过程中两者的下降模式是差不多的,只不过56-layer的图像更“高”。也就是起点不好:初始化的时候,他需要生成56层随机数,输入x在经过那么多层以后不知道被扭曲成什么样了,结果能好吗?至于随着训练次数的增加,还是不能提高准确率,是因为这个系统太复杂了。每一层微小的变动,集合起来就是大的变动,层数少不明显,层数多了以后,想降低错误率就变得很困难。第二个原因:层数过多,丢失的信息也越多。图片在经过多层卷积的采样后在较深的网络层上会出现一些奇怪的现象,就是明明是不同的图片类别,但是却产生了看上去比较近似的对网络的刺激效果。这种差距的减小也就使得最后的分类效果不会太理想。第三个原因:因为网络深度太大所以残差传播的过程在层与层之间求导的过程中会进行相乘叠加,一个小于1或一个大于1的数字在经过150层的指数叠加就会变得很大或者很小,我们自己手算一下也能算出来,0.8的150次方大约是2.9 x 10-15 ,1.2的150次方大约是7.5 x 1011,这两种情况都是极为严重的灾难,任何一种都会导致训练劳而无功。(引用自:点击打开链接

       层数增加是否会使得局部极小值变多?我的分析是:不会。我们先考虑函数的复合问题。两个变量x,y。f(x)是有最小值的,比如x^2.y也是这样的。那么f(x,y)=x^2+y^2也是有最小值的。如果f(x)=x^3,那么再复合就有不止一个极小值。卷积层所代表的函数不会是类似x^3那种弯了几道弯的,顶多类似于x^2这种,只拐一个弯。所以即使多层复合也不会使得局部极小值变多。这样就说明,如果梯度、学习率处理的够好,训练出结果还是有希望的。

        ResNet完整的结构、训练的目标是什么?很多文章只讲“残差”的那一块,blocks,看完也不知道怎么写代码,我只能自己专门找完整的代码读一遍。ResNet前面那么多层全是卷积,一直卷到最后把一张图片卷成了1*1那么小的图片,一共有num_classes张,也可以再接softmax层,这就是输出了。训练过程还是和一般的CNN一样,梯度下降。

       关于训练过程,很多文章总是集中于讨论残差的目标是 f(x)=0 ,难道那么大的网络就是为了训练出恒等函数来,然后被跨越的那几个卷积层都没什么用,反正都是 0 ?在理解网络工作原理时,与其专注于残差,还不如理解为跨层连接是为了增强有用的特征。在一个Block内,f(x) 传来的精细化特征与 x 传来的粗略特征相互补充。对于无用特征,反向传播的过程中,f(x) 那条通路会降低它们的影响,这样到最后一层全连接层或者平均池,这些无用特征会被过滤掉。x 被一路原封不动的传递到接近输出层,这样其是很低效,有些特征在浅层已经确定没用的就该尽早过滤掉,也许在网络中间加几个全连接层效果会更好。但是ResNet现在效果已经很好了,没有人愿意再研究了。其实GoogleLeNet 中间的辅助分类节点就有这个意思。

       关于训练,我觉得可以先把前几层拿出来训练,错误率降低以后再加上中间几层,就是一部分一部分的训练,逐渐扩大效果会更好。

       这篇文章讲的较好,有数学推导:点击打开链接

       泛化问题:我认为深度可以提高准确率,却降低了泛化能力。使用更多的卷积核,降低深度,泛化会更好。

       网络中有一点要注意,就是不停的正则化,来让计算可以进行下去。
  • 2
    点赞
  • 5
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值