| |
|
开发:
C++知识库
Java知识库
JavaScript
Python
PHP知识库
人工智能
区块链
大数据
移动开发
嵌入式
开发工具
数据结构与算法
开发测试
游戏开发
网络协议
系统运维
教程: HTML教程 CSS教程 JavaScript教程 Go语言教程 JQuery教程 VUE教程 VUE3教程 Bootstrap教程 SQL数据库教程 C语言教程 C++教程 Java教程 Python教程 Python3教程 C#教程 数码: 电脑 笔记本 显卡 显示器 固态硬盘 硬盘 耳机 手机 iphone vivo oppo 小米 华为 单反 装机 图拉丁 |
-> 人工智能 -> Resnet原理以及更改学习率的实验效果 -> 正文阅读 |
|
[人工智能]Resnet原理以及更改学习率的实验效果 |
本文将简单讲述resnet的原理以及实验结果。 论文名称:Deep Residual Learning for Image Recognition 这一篇论文可以算的上是神经网络的最经典的论文了,resnet的结构十分容易实现,而且效果非常的好,几乎之后所有的GAN里面神经网络结构都有resnet的身影。 目录 1.网络原理首先论文指出了一个让人比较疑惑的问题,较深的网络训练效果不如浅的网络如下图 上图中56层的网络无论是训练错误率还是测试的错误率都是比20层的多,由此可见简单的增加网络的深度并不能提高训练的精度,引起此现象并不是因为过拟合造成的,而是因为反向传播导数的关系。 论文中给出了解决的方法那就是残差网络,结构如下图。 网络结构很简单就是H(x)=F(x)+x 其中x是输入,F(x)是经过卷积层的输出,两者相加(特征图方面的相加不是进行cat操作)就是最终的输出。这个公式也可以换个角度去理解:假如没有残差网络的话我直接使用x放入卷积层中进行计算来得到H(x),如果加入残差网络也就是resnet的话,x进入神经网络得到F(x)也就等同与H(x)-x,在与x相加得到H(x)。 至于这个结构为什么会有效果,李沐老师也给出了数学的证明如下图。 ?首先y是当前卷积层的输入,与y*=g(f(x))是经过卷积之后的结果,y**是两者相加的结果,之后进行反向求导的话可以看出来y**的导数等于y的导数加上y*的导数,而且y*的导数也和y的导数有关,也就是说如果经过卷积层的导数很小的话,对网络起不到更新的作用,但是我加入了输入的导数,也就保证了我的网络导数会一直存在,而不会出现导数消失的情况。这也就是resnet为什么会好用的原理,就是保证网络反向传播的时候导数一直会存在。 2.网络结构网络结构如下图 ?首先论文给出了5种结构层数如上图所示 1.50层以上的网络与18和34层的结构略微不同。 2.34层的参数量是18层的两倍,但是50层参数量几乎和34层的相同,是因为用了不同的结构。 3.图中的乘2或者乘4是代表这有几个相同的块,块的内容如下图所示。 ?左边的是18和34的块就是两个简单卷积层构成,右边的是层数高的网络使用的也就是50层以上,简单介绍一下,加入当前x有256个特征图,为了减少运算,我先使用1*1的卷积层来把通道数降下来,在用3*3的卷积层进行计算,在使用一个1*1的卷积层在还原到256个通道。很明显34和50层的网络进行对比,计算量确实大幅度减少。 3.实验结果?首先左边的图是没有加入resnet的网络,右面是加入resnet的网络。 1.一开始的训练损失大于测试损失,可能是数据造成的。 2.18层的网络是34层的子结构,在加了不是太多层的情况下,我觉得34的效果应该好于18层的?但是加入了残差之后34反而比18的效果好。论文也指出在训练更多轮也会有这个问题,有可能是因为调参的问题。 3.加入残差之后收敛速度变快了,验证了文章的说法学习F(X)比直接学H(X)容易一些。 4.两次比较快的下降是因为更改了学习率。 总结: 1.未加入resnet的神经网络18层好于34层,加入resnet的网络34好于18层。 2.加入resnet18和不加入resnet18效果差不多,但是未加入resnet18的网络效果出奇的好。 4.更改学习率对网络的影响接下来是本人做的一些实验,首先是学习率改变的方法使用的方法是:等间隔调整学习率 StepLR。举个例子在实验中前60轮的学习率是0.1,之后设置一个参数gamma=0.2,在60到120轮的学习率是0.1*gamma=0.02,在120到150轮就是0.02*gamma=0.004以此类推,之后轮数和gamma都是自己提前设置的。接下来就是实验结果。未加入resnet的网络简称plain。用的是cifar-100数据集。 resnet34(更改学习率的训练损失) resnet34(测试正确精度) ? ?resnet34(未改变学习率) ?resnet34(精度) ? ?resnet18(改变学习率) ? ?resnet18(不改变学习率) ? ?plain18 ? ?plain34 ? ?上面是自己做的实验,与论文结果基本相同,但是注意一点训练损失下降并不是因为改变了学习率损失才会下降,我的意思就是说,假如有可能一开始就用小学习率比如0.004或者0.0008可能也会达到相同的效果,只不过会比较慢罢了。 |
|
|
上一篇文章 下一篇文章 查看所有文章 |
|
开发:
C++知识库
Java知识库
JavaScript
Python
PHP知识库
人工智能
区块链
大数据
移动开发
嵌入式
开发工具
数据结构与算法
开发测试
游戏开发
网络协议
系统运维
教程: HTML教程 CSS教程 JavaScript教程 Go语言教程 JQuery教程 VUE教程 VUE3教程 Bootstrap教程 SQL数据库教程 C语言教程 C++教程 Java教程 Python教程 Python3教程 C#教程 数码: 电脑 笔记本 显卡 显示器 固态硬盘 硬盘 耳机 手机 iphone vivo oppo 小米 华为 单反 装机 图拉丁 |
360图书馆 购物 三丰科技 阅读网 日历 万年历 2024年11日历 | -2024/11/26 5:28:42- |
|
网站联系: qq:121756557 email:121756557@qq.com IT数码 |