一些概念知识学习:

端到端(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网络学习相关推荐

  1. ResNet网络学习笔记。

    ResNet网络学习 看b站 霹雳吧啦Wz 的视频总结的学习笔记! 视频的地址 大佬的Github代码 1.ResNet详解 ResNet 网络是在2015年由微软实验室提出,斩获当年 ImageNe ...

  2. python 网页爬虫作业调度_第3次作业-MOOC学习笔记:Python网络爬虫与信息提取

    1.注册中国大学MOOC 2.选择北京理工大学嵩天老师的<Python网络爬虫与信息提取>MOOC课程 3.学习完成第0周至第4周的课程内容,并完成各周作业. 4.提供图片或网站显示的学习 ...

  3. Linux+javaEE学习笔记之Linux网络环境配置

    Linux+javaEE学习笔记之Linux网络环境配置 网络知识简单介绍: Ip地址是:IP地址是IP协议提供的一种统一的地址格式,它为互联网上的每一个网络和每一台主机分配一个逻辑地址,以此来屏蔽物 ...

  4. 数通学习笔记1 - 数据通信网络基础

    数通学习笔记1 - 数据通信网络基础 数据通信网络基础 数通学习笔记1 - 数据通信网络基础 前言 一.通信与网络 1. 什么是通信.什么是网络通信? 2. 信息传递过程 3. 数据通信网络 二.网络 ...

  5. Neutron学习笔记2-- Neutron的网络实现模型

    Neutron学习笔记2-- Neutron的网络实现模型 Neutron的三类节点 计算节点 网络节点 控制节点 Neutron将在这三类节点中进行部署,Neutron在各个计算节点,网络节点中运行 ...

  6. 学习笔记之——基于深度学习的图像超分辨率重建

    最近开展图像超分辨率( Image Super Resolution)方面的研究,做了一些列的调研,并结合本人的理解总结成本博文~(本博文仅用于本人的学习笔记,不做商业用途) 本博文涉及的paper已 ...

  7. 梅科尔工作室-Django学习笔记(二次学习)(3)

    本次学习的是如何用django实现前端鸿蒙OS登录 下面介绍一下本次的操作过程. 1.首先创立MySQL数据并将数据库导入到django当中 其中:导入数据库的操作: 2.配置urls 对应新建的pe ...

  8. 【学习笔记】Pytorch深度学习—Batch Normalization

    [学习笔记]Pytorch深度学习-Batch Normalization Batch Normalization概念 `Batch Normalization ` `Batch Normalizat ...

  9. (Python入门)学习笔记二,Python学习路线图

    (Python入门)学习笔记二,Python学习路线图 千里之行始于足下,谋定而后动,冰冻三尺非一日之寒.之所以说这三句话,就是对于下面整理的路线图,即不让自己感觉路途的遥远而感到达到巅峰神界的遥遥无 ...

最新文章

  1. hadoop搭建在Ubuntu16.04上
  2. COM线程模型的行为
  3. go语言笔记——append底层实现和Cpp vector无异,只是有返回值,double后返回了新的vector地址而已...
  4. 鸿蒙发布官网,鸿蒙发布在即,高情商似乎也非常重要
  5. 我已经写了48年代码了,我感觉我还能写下去
  6. 算法专题(1)-信息学基本解题流程!
  7. P3302-[SDOI2013]森林【主席树,LCA,启发式合并】
  8. JavaSE简单实现多线程聊天
  9. 逆波兰式数学表达式求解
  10. 看面试题感觉生疏的知识点
  11. jQuery 1.6 源码学习(七)——core.js[7]之实用工具方法(Utilities)
  12. Eclipse @override报错解决
  13. PR视频剪辑软件教程
  14. 云开发地铁路线图小程序源码和配置教程
  15. 如何注册电子邮箱账号,教你创建email邮箱账号
  16. C语言编程>第十六周 ④ 请补充fun函数,该函数的功能是将字符串str中的小写字母都改为对应的大写字母,其它字符不变。
  17. ggplot2_ `scale_xxx()`标度调整
  18. HOW UNREAL RENDERS A FRAME
  19. 基于数据库的代码自动生成工具,生成JavaBean、生成数据库文档、生成前后端代码等(TableGo v7.4.0版)
  20. torch.sigmoid、torch.nn.Sigmoid和torch.nn.functional.sigmoid的区别

热门文章

  1. Java多线程之Exchanger
  2. 《计算机程序的构造和解释》阅读笔记:准备(3)【python3简单实现lisp解释器(3)】
  3. 快速原型设计工具(Axure)元件库导入
  4. C语言字符串使用指南
  5. 路径规划——CH算法
  6. 并发编程-初级之认识并发编程
  7. 相机视野拉伸,设置相机的Field Of View改变视野的大小
  8. 辅助驾驶事故频发,背后直指“决策安全模型”和驾驶员行为
  9. FFmpeg —— librtmp的安装(linux)
  10. telephony 总篇