博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
ResNet残差网络学习小结
阅读量:2080 次
发布时间:2019-04-29

本文共 1008 字,大约阅读时间需要 3 分钟。

目录

残差网络是由何恺明大神提出的一种卷积神经网络,作者通过152层的残差网络获得2015年ImageNet图像分类和物体识别的冠军。

因为CNN能够提取low/mid/high-level的特征,网络的层数越多,意味着能够提取到不同level的特征越丰富。越深的网络提取的特征越抽象,越具有实际信息,所以深层网络一般都比浅层网络的效果好。比如VGG网络就是在AlexNet网络的基础上通过增加网络深度而大幅提高了网络的性能。

对于原来的神经网络,如果只是简单地增加深度,则容易出现梯度爆炸或者梯度消失的问题,这个问题的解决方法是使用正则层(Batch Normalization)。

但是对于较深层的神经网络会出现另外一个问题:退化问题。随着网络层数增加,训练集的准确率出现下降。推测退化问题可能是深层的网络并不好训练,分类器很难利用深层网络拟合同等函数。

残差网络的核心是利用跳跃连接(skip connection),它可以从某一层网络层获取激活,然后迅速反馈给另外一层,甚至是神经网络的更深层。

 ResNet是由残差块(residual block)构建的网络。

 

                                                 

上图是传统的神经网络,下图多了一条紫色道路,可以直接传到更深层的网络。

                                                

                                            

                                            

当然如果只学习恒等函数并不能提高神经网络的效果,不过如果这两个隐藏层单元学习到一些有用的东西,那么就比学习恒等函数效果更好。而对于不含有残差块的深度神经网络,当网络深度不断加深的时候,就算只是学习恒等函数的参数都变得十分困难,所以会出现退化问题,导致很多层最后的表现甚至出现更糟的情况。

换言之,普通深度神经网络如果深度太深,根据梯度下降算法,离输出层越远的隐含层的乘积项会越多(通常会越乘越小),导致这些层的神经元训练会越缓慢(如果计算机精度不够的话,可能还会变0)。而残差网络是在普通神经网络基础上,把两层或多层的神经元组成一个residual block,将输入block和从最后一层的输出相加再通过输出函数送进下一个block。这样的好处是,在梯度下降的计算上,偏导数变成了1+原来的乘积项,就不会因为越乘越小,而出现远离最终输出的那层隐含层调参缓慢或甚至无法调参的情况。

                                  

Ws矩阵可以是一个包含已学习到的参数的矩阵,也可以是一个填充了许多0的固定矩阵。

                                       

ResNet就是比普通的VGG多了残差块,通过跳跃连接。

 

参考资料:吴恩达老师的深度学习课程和部分网友的总结

转载地址:http://kekqf.baihongyu.com/

你可能感兴趣的文章
Flink示例——Window、EventTime、WaterMark
查看>>
Flink示例——State、Checkpoint、Savepoint
查看>>
Flink示例——Table、SQL
查看>>
HBase之Rowkey设计
查看>>
推荐算法——ALS模型算法分析、LFM算法
查看>>
Spark源码剖析——RpcEndpoint、RpcEnv
查看>>
Spark源码剖析——Master、Worker启动流程
查看>>
TensorFlow2 学习——MLP图像分类
查看>>
TensorFlow2 学习——CNN图像分类
查看>>
Spark源码剖析——SparkSubmit提交流程
查看>>
TensorFlow2 学习——RNN生成古诗词
查看>>
Spark源码剖析——SparkContext实例化
查看>>
基于阿里云的数据仓库架构设计
查看>>
Docker——安装、常用命令、生成镜像(Dockerfile)
查看>>
OpenCV学习——图像基础与几何变换
查看>>
OpenCV学习——图像特效
查看>>
Spark源码剖析——Action操作、runJob流程
查看>>
分布式——缓存一致性(Redis、MySQL)
查看>>
Gminer 配置参数
查看>>
Linux学习笔记——20170802
查看>>