学习笔记1 - ResNet网络学习
一些概念知识学习:
端到端(end-to-end):指的是输入是原始数据,输出是最后结果。
非端到端的输入端不是直接的原始数据,而是在原始数据中提取的特征。在以前是由手工提取图像的一些关键特征,称为降维,再利用提取好的特征进行实验。而随着数据量的增多,特征提取的复杂性增高,于是有了端到端网络,从原始数据中自己学习到特征。
梯度消失/爆炸(vanishing/exploding gradients):
1)梯度消失 由于前面的层比后面的层梯度变化更小,故变化更慢,从而导致梯度消失的问题。
2)梯度爆炸 由于权值过大,前面的层比后面层梯度变化过快,引起梯度爆炸问题。
详细推导:https://www.cnblogs.com/DjangoBlog/p/7699664.html
论文Deep Residual Learning for Image Recognition学习总结:
以下是我看了论文以及看了一些其他人的理解之后自己的理解。
根据之前的学习,一般认为深度学习网络越深,各个特征会不断的经过线性非线性的综合计算,其表现能力越强,准确率越高,错误率越低。但论文中提出问题:
1)随着网络深度的增加,会遇到梯度消失/爆炸的问题,这个问题通过标准初始化和中间标准化层(BN)在很大程度上已经解决。
2)退化问题:随着网络深度的增加,准确率达到饱和,然后迅速下降。意外的是,这种下降并不是由过拟合(在训练集上表现的很好,但在测试集上很差)引起的,并且在适当的深度模型上添加更多的层会导致更高的训练误差。
文中通过引入深度残差学习框架来解决退化问题。我们明确地将层变为学习关于层输入的残差函数,而不是学习未参考的函数。
作者希望在有网络退化问题的情况下,不求加深度能提高准确性,至少让深度网络实现和浅层网络一样的性能,即让深度网络后面的层至少实现恒等映射的作用,并提出了residual模块来帮助网络实现恒等映射。
1、残差学习Residual Learning
设堆叠层的第一层的输入为x,H(x)为这几个堆叠层要拟合的基础映射,之前学习的一般网络会直接通过训练来学习H(x)的表达。
但论文中提出的残差学习是让这些层近似残差函数F(x):=H(x)-x,即学习输入和输出之间的残差。则原始函数变为H(x)=F(x)+x。
Q:残差学习为何能解决网络加深,但准确率下降的问题?
A:假设该残差学习模型是最优的,则训练很容易将残差映射优化到0,相当于只剩下x自身映射,后面所有增加的网络会沿着identity mapping传输,而不具备特征提取能力。即使增加深度,也不会影响网络性能,网络也会一直处于最优的状态。
2、快捷恒等映射Identity Mapping by Shortcuts
含有两种映射:1)identity mapping:x恒等映射;2)residual mapping 残差映射F(x):=H(x)-x
从残差学习的构建块可以看到有两层,残差函数的具体形式应为:F=W2σ(W1x),其中σ表示ReLU。F+x操作通过快捷连接和各个元素相加来执行,相加后经过ReLU处理。
这两种映射是沿通道维度相加的,当x与F维度相同,则直接相加;当x与F维度不同时,文中提到了两种方式:1)将x相对F缺失的通道直接补零从而使其能够对齐相加;2)是通过使用1x1的conv来表示Ws映射从而使得最终输入与输出的通道达到一致的方式,即投影快捷连接。
3、网络架构
文中提出三种网络
1、VGG-19网络
2、简单网络(为与文中提出的ResNet网络形成对比):该网络一共34层,卷积层主要使用3x3滤波器,当特征图尺寸减半时,滤波器数量加倍,以便保持每层的时间复杂度。网络最终输入全局平均池化层(不使用全连接层是为了减少大量参数)和具有softmax的1000维全连接层。
3、ResNet:对比简单网络插入快捷连接,每两层为一个残差学习构建块,实线代表输入和输出具有相同维度,虚线代表维度不同(通过前面提到的两种方式改变)。
训练方法:
输入图像:较短的边在[256,480]之间随机采样,用于尺度增强。从图像或其水平翻转中随机采样224×224裁剪图像,并逐像素减去均值,使用标准颜色增强。
在每个卷积之后和激活之前,我们采用批量归一化(BN)。初始化权重,从零开始训练所有网络。使用批次大小为256的SGD方法。学习速度从0.1开始,当误差稳定时学习率除以10。使用的权重衰减为0.0001,动量为0.9。
对于18、34、50、101、152层简单/残差网络的具体体系结构如上图,可以看到各层输入、输出尺寸大小,每层卷积的滤波器、通道数以及网络结构。残差网络只是在对应简单网络的基础上对每对3×3滤波器添加快捷连接。同时可以看到50、101、152层ResNet为节省计算时间提出将构建块修改为瓶颈设计。
该瓶颈设计主要目的是,1x1卷积将256维通道降为64通道,下面的1x1卷积将256维通道进行恢复,3×3层就成为具有较小输入/输出维度的瓶颈。
同时文中还对比了投影快捷连接(增加维度)的三种方式,发现投影快捷连接对于解决退化问题并不是至关重要的。
实验结果:
34层简单网络具有比18层简单网络更高的误差,但34层ResNet(27.88)top-1错误率低于18层ResNet(25.03)。
ResNet-34显示出较低的训练误差,并且可以泛化到验证数据。这表明退化问题得到了很好的解决。并且能更快的收敛。
学习笔记1 - ResNet网络学习相关推荐
- ResNet网络学习笔记。
ResNet网络学习 看b站 霹雳吧啦Wz 的视频总结的学习笔记! 视频的地址 大佬的Github代码 1.ResNet详解 ResNet 网络是在2015年由微软实验室提出,斩获当年 ImageNe ...
- python 网页爬虫作业调度_第3次作业-MOOC学习笔记:Python网络爬虫与信息提取
1.注册中国大学MOOC 2.选择北京理工大学嵩天老师的<Python网络爬虫与信息提取>MOOC课程 3.学习完成第0周至第4周的课程内容,并完成各周作业. 4.提供图片或网站显示的学习 ...
- Linux+javaEE学习笔记之Linux网络环境配置
Linux+javaEE学习笔记之Linux网络环境配置 网络知识简单介绍: Ip地址是:IP地址是IP协议提供的一种统一的地址格式,它为互联网上的每一个网络和每一台主机分配一个逻辑地址,以此来屏蔽物 ...
- 数通学习笔记1 - 数据通信网络基础
数通学习笔记1 - 数据通信网络基础 数据通信网络基础 数通学习笔记1 - 数据通信网络基础 前言 一.通信与网络 1. 什么是通信.什么是网络通信? 2. 信息传递过程 3. 数据通信网络 二.网络 ...
- Neutron学习笔记2-- Neutron的网络实现模型
Neutron学习笔记2-- Neutron的网络实现模型 Neutron的三类节点 计算节点 网络节点 控制节点 Neutron将在这三类节点中进行部署,Neutron在各个计算节点,网络节点中运行 ...
- 学习笔记之——基于深度学习的图像超分辨率重建
最近开展图像超分辨率( Image Super Resolution)方面的研究,做了一些列的调研,并结合本人的理解总结成本博文~(本博文仅用于本人的学习笔记,不做商业用途) 本博文涉及的paper已 ...
- 梅科尔工作室-Django学习笔记(二次学习)(3)
本次学习的是如何用django实现前端鸿蒙OS登录 下面介绍一下本次的操作过程. 1.首先创立MySQL数据并将数据库导入到django当中 其中:导入数据库的操作: 2.配置urls 对应新建的pe ...
- 【学习笔记】Pytorch深度学习—Batch Normalization
[学习笔记]Pytorch深度学习-Batch Normalization Batch Normalization概念 `Batch Normalization ` `Batch Normalizat ...
- (Python入门)学习笔记二,Python学习路线图
(Python入门)学习笔记二,Python学习路线图 千里之行始于足下,谋定而后动,冰冻三尺非一日之寒.之所以说这三句话,就是对于下面整理的路线图,即不让自己感觉路途的遥远而感到达到巅峰神界的遥遥无 ...
最新文章
- hadoop搭建在Ubuntu16.04上
- COM线程模型的行为
- go语言笔记——append底层实现和Cpp vector无异,只是有返回值,double后返回了新的vector地址而已...
- 鸿蒙发布官网,鸿蒙发布在即,高情商似乎也非常重要
- 我已经写了48年代码了,我感觉我还能写下去
- 算法专题(1)-信息学基本解题流程!
- P3302-[SDOI2013]森林【主席树,LCA,启发式合并】
- JavaSE简单实现多线程聊天
- 逆波兰式数学表达式求解
- 看面试题感觉生疏的知识点
- jQuery 1.6 源码学习(七)——core.js[7]之实用工具方法(Utilities)
- Eclipse @override报错解决
- PR视频剪辑软件教程
- 云开发地铁路线图小程序源码和配置教程
- 如何注册电子邮箱账号,教你创建email邮箱账号
- C语言编程>第十六周 ④ 请补充fun函数,该函数的功能是将字符串str中的小写字母都改为对应的大写字母,其它字符不变。
- ggplot2_ `scale_xxx()`标度调整
- HOW UNREAL RENDERS A FRAME
- 基于数据库的代码自动生成工具,生成JavaBean、生成数据库文档、生成前后端代码等(TableGo v7.4.0版)
- torch.sigmoid、torch.nn.Sigmoid和torch.nn.functional.sigmoid的区别