深度学习(3)之经典神经网络模型整理:神经网络、CNN、RNN、LSTM
本文章总结以下经典的神经网络模型整理,大体讲下模型结构及原理…
如果想深入了解模型架构及pytorch实现,可参考我的Pytorch总结专栏 -> 划重点!!!Pytorch总结文章之目录归纳
经典神经网络模型整理
- 神经网络基础知识
- BP神经网络的概念
- 单个神经元的结构
- CNN模型汇总
- LeNet5 模型
- AlexNet 模型
- VGG模型
- Inception Net(GoogleNet)模型
- ResNet (残差网络)
- RNN模型(循环神经网络)
- 为什么需要RNN
- RNN结构
- LSTM(长短期记忆网络)模型
- GRU模型
- 计算重置门r~t~和候选状态
- 计算更新门z~t~和当前状态h~t~
神经网络基础知识
本周主要对于神经网络的相关知识进行了学习,本文先整理神经网络学习中所需的一些基础知识,而后整理了四个经典的神经网络模型以作记录。
BP神经网络的概念
单个神经元的结构
主要是通过对输入信号的加权求和加偏置(加权求和对应的w,偏置对应的b),然后通过通过激活函数引入非线性元素并将结果映射至0——1之间的数值(比如sigmoid函数)。具体见下图:
CNN模型汇总
LeNet5 模型
LeNet5 诞生于 1994 年,是最早的卷积神经网络之一,并且推动了深度学习领域的发展。自从 1988 年开始,在许多次成功的迭代后,这项由 Yann LeCun 完成的开拓性成果被命名为 LeNet5。
LeNet5 的架构基于这样的观点:(尤其是)图像的特征分布在整张图像上,以及带有可学习参数的卷积是一种用少量参数在多个位置上提取相似特征的有效方式。在那时候,没有 GPU 帮助训练,甚至 CPU 的速度也很慢。因此,能够保存参数以及计算过程是一个关键进展。这和将每个像素用作一个大型多层神经网络的单独输入相反。LeNet5 阐述了那些像素不应该被使用在第一层,因为图像具有很强的空间相关性,而使用图像中独立的像素作为不同的输入特征则利用不到这些相关性。
Lenet5特征能够总结为如下几点:
(1)卷积神经网络使用三个层作为一个系列:卷积、池化、非线性
(2)使用卷积提取空间特征
(3)使用映射到空间均值下采样
(4)双曲线(tanh)或s型(sigmoid)形式的非线性
(5)多层神经网络(MLP)作为最后的分类器
(6)层与层之间的稀疏链接矩阵避免大的计算成本
AlexNet 模型
VGG模型
来自牛津大学的 VGG 网络是第一个在各个卷积层使用更小的 3×3 过滤器(filter),并把它们组合作为一个卷积序列进行处理的网络。
这看来和 LeNet 的原理相反,其中是大的卷积被用来获取一张图像中相似特征。和 AlexNet 的 9×9 或 11×11 过滤器不同,过滤器开始变得更小,离 LeNet 竭力所要避免的臭名昭著的 1×1 卷积异常接近——至少在该网络的第一层是这样。但是 VGG 巨大的进展是通过依次采用多个 3×3 卷积,能够模仿出更大的感受野(receptive field)的效果,例如 5×5 与 7×7。这些思想也被用在了最近更多的网络架构中,如 Inception 与 ResNet。
总的来说,在网络设计思路上,VGGNet是继承了AlexNet的思路,以AlexNet为基础,尝试建立一个层次更多,深度更深的网络。其网络结构一样可以由8个层次所构成,也是5组卷积层,3层全连接层。最主要的区别在于,VGGNet的每个卷积层并不是只做一次卷积操作,而是连续卷积2~4次。具体结构上的差别见下表(包括其它网络结构和VGG16与VGG19):
VGG 网络使用多个 3×3 卷积层去表征复杂特征。注意 VGG-E 的第 3、4、5 块(block):256×256 和 512×512 个 3×3 过滤器被依次使用多次以提取更多复杂特征以及这些特征的组合。其效果就等于是一个带有 3 个卷积层的大型的 512×512 大分类器。这显然意味着有大量的参数与学习能力。但是这些网络训练很困难,必须划分到较小的网络,并逐层累加。这是因为缺少强大的方式对模型进行正则化,或者或多或少约束大量由于大量参数增长的搜索空间。
VGG-16和VGG-19的表现效果差不多,所以工业上还是用VGG-16的比较多
VGG用反复堆叠33的小型卷积核和22的最大池化层,通过不断加深网络结构来提升性能,VGGNet成功地构筑了16-19层的深度卷积网络。
VGG拓展性很强,迁移到其他图片数据上的泛化性非常好。
整个网络都是用同样大小的卷积核尺寸(33)和最大池化尺寸(22),可以用来提取特征。
用VGG的模型在domain specific的图像分类任务上进行再训练相当于提供了非常好的初始化权重
表一所示为VGGNet各级别的网络结构图,表2所示为每一级别的参数量,从11层的网络一直到19层的网络都有详尽的性能测试。虽然从A到E每一级网络逐渐变深,但是网络的参数量并没有增长很多,这是因为参数量主要都消耗在最后3个全连接层。前面的卷积部分虽然很深,但是消耗的参数量不大,不过训练比较耗时的部分依然是卷积,因其计算量比较大。这其中的D、E也就是我们常说的VGGNet-16和VGGNet-19。C很有意思,相比B多了几个1´1的卷积层,1´1卷积的意义主要在于线性变换,而输入通道数和输出通道数不变,没有发生降维。
VGGNet拥有5段卷积,每一段内有2~3个卷积层,同时每段尾部会连接一个最大池化层用来缩小图片尺寸。每段内的卷积核数量一样,越靠后的段的卷积核数量越多:64 – 128 – 256 – 512 – 512。
VGGNet在训练时有一个小技巧,先训练级别A的简单网络,再复用A网络的权重来初始化后面的几个复杂模型,这样训练收敛的速度更快。在预测时,VGG采用Multi-Scale的方法,将图像scale到一个尺寸Q,并将图片输入卷积网络计算。然后在最后一个卷积层使用滑窗的方式进行分类预测,将不同窗口的分类结果平均,再将不同尺寸Q的结果平均得到最后结果,这样可提高图片数据的利用率并提升预测准确率。同时在训练中,VGGNet还使用了Multi-Scale的方法做数据增强,将原始图像缩放到不同尺寸S,然后再随机裁切224´224的图片,这样能增加很多数据量,对于防止模型过拟合有很不错的效果。
实践中,作者令S在[256,512]这个区间内取值,使用Multi-Scale获得多个版本的数据,并将多个版本的数据合在一起进行训练。最终提交到ILSVRC 2014的版本是仅使用Single-Scale的6个不同等级的网络与Multi-Scale的D网络的融合,达到了7.3%的错误率。不过比赛结束后作者发现只融合Multi-Scale的D和E可以达到更好的效果,错误率达到7.0%,再使用其他优化策略最终错误率可达到6.8%左右,非常接近同年的冠军Google Inceptin Net。同时,作者在对比各级网络时总结出了以下几个观点。
(1)LRN层作用不大。
(2)越深的网络效果越好。
(3)1´1的卷积也是很有效的,但是没有3´3的卷积好,大一些的卷积核可以学习更大的空间特征。
Inception Net(GoogleNet)模型
看了前面的网络结构之后,我们会发现,他们越来越深,filter越来越多,参数越来越多。 似乎提高CNN的表现的方法就是堆叠更多的CONV、POOL层排成一列(我们称之为sequential model)就行了。
但我们也应该清楚,一味地增加层数、增加通道数(filters越多,输出图像的通道数就越多),会让我们的计算量急剧增加,模型变得过于复杂,从而更容易过拟合,这样反而会让模型的性能下降。
Inception Net不再是使用Sequential model,在结构上有了重大创新。
降维:一个1×1的filter去卷积,图像的长和宽都不会变化,同时,输出图像的channels数等于filters的个数。
通过使用1×1CONV,输出的通道数大大减少,这样,整个模型的参数也会大大减少。
上面这个部分,称为“Inception Module”,而Inception Network,就是由一个个的inception module组成的:
ResNet (残差网络)
CNN面临的一个问题就是,随着层数的增加,CNN的效果会遇到瓶颈,甚至会不增反降。这往往是梯度爆炸或者梯度消失引起的。
通过这种residual block,他们成功地搭建了一个拥有 152层的CNN
RNN模型(循环神经网络)
为什么需要RNN
普通的神经网络都只能单独的取处理一个个的输入,前一个输入和后一个输入是完全没有关系的。但是,某些任务需要能够更好的处理序列的信息,即前面的输入和后面的输入是有关系的。
比如,当我们在理解一句话意思时,孤立的理解这句话的每个词是不够的,我们需要处理这些词连接起来的整个序列; 当我们处理视频的时候,我们也不能只单独的去分析每一帧,而要分析这些帧连接起来的整个序列。
以nlp的一个最简单词性标注任务来说,将我 吃 苹果 三个单词标注词性为 我/n 吃/v 苹果/n。
那么这个任务的输入就是:
我 吃 苹果 (已经分词好的句子)
这个任务的输出是:
我/n 吃/v 苹果/n(词性标注好的句子)
对于这个任务来说,我们当然可以直接用普通的神经网络来做,给网络的训练数据格式了就是我-> 我/n 这样的多个单独的单词->词性标注好的单词。
但是很明显,一个句子中,前一个单词其实对于当前单词的词性预测是有很大影响的,比如预测苹果的时候,由于前面的吃是一个动词,那么很显然苹果作为名词的概率就会远大于动词的概率,因为动词后面接名词很常见,而动词后面接动词很少见。
所以为了解决一些这样类似的问题,能够更好的处理序列的信息,RNN就诞生了。
RNN结构
首先看一个简单的循环神经网络如,它由输入层、一个隐藏层和一个输出层组成:
如果把上面有W的那个带箭头的圈去掉,它就变成了最普通的全连接神经网络。x是一个向量,它表示输入层的值(这里面没有画出来表示神经元节点的圆圈);s是一个向量,它表示隐藏层的值(这里隐藏层面画了一个节点,你也可以想象这一层其实是多个节点,节点数与向量s的维度相同);
U是输入层到隐藏层的权重矩阵,o也是一个向量,它表示输出层的值;V是隐藏层到输出层的权重矩阵。
现在来看W是什么。循环神经网络的隐藏层的值s不仅仅取决于当前这次的输入x,还取决于上一次隐藏层的值s。权重矩阵 W就是隐藏层上一次的值作为这一次的输入的权重。
给出这个抽象图对应的具体图:
从上图就能够很清楚的看到,上一时刻的隐藏层是如何影响当前时刻的隐藏层的。
如果把上面的图展开,循环神经网络也可以画成下面这个样子:
现在看上去就比较清楚了,这个网络在t时刻接收到输入 xt之后,隐藏层的值是st,输出值是ot 。关键一点是,st的值不仅仅取决于xt,还取决于 st-1 。我们可以用下面的公式来表示循环神经网络的计算方法:
用公式表示如下:
RNN的总括图如下:
LSTM(长短期记忆网络)模型
GRU模型
GRU(Gated Recurrent Unit,门控循环单元网络)就是一种通过对LSTM的门机制进行改进从而比LSTM网络更简单的循环神经网络。
GRU网络对LSTM网络的改进有两个方面:
1、将遗忘门和输入门合并为一个门:更新门,此外另一门叫做重置门。
2、不引入额外的内部状态c,直接在当前状态ht和历史状态ht-1之间引入线性依赖关系。
GRU网络的结构如下图所示
接下来按输入数据xt和历史状态ht-1在GRU网络中流动的过程,来阐述GRU网络的工作流程。
计算重置门rt和候选状态
重置门rt用来控制候选状态的计算是否依赖于上一时刻的状态ht-1。
当前时刻的候选状态为:
计算更新门zt和当前状态ht
更新门zt用来控制当前状态ht需要从历史状态ht-1中保留多少信息,以及需要从候选状态中接收多少新信息。
然后计算出隐状态ht:
可以看到,当zt=0,rt=1时,隐状态ht为简单循环神经网络中的计算公式,GRU网络退化为简单循环神经网络。
此外,把求隐状态ht的公式整理如下,可以看到当前状态ht和历史状态ht-1之间存在线性关系,也存在非线性关系,在一定程度上可以缓解梯度消失问题。
深度学习(3)之经典神经网络模型整理:神经网络、CNN、RNN、LSTM相关推荐
- 经典神经网络模型整理
经典神经网络模型整理 神经网络基础知识 BP神经网络的概念 单个神经元的结构 CNN模型汇总 LeNet5 模型 AlexNet 模型 VGG模型 Inception Net(GoogleNet)模型 ...
- 采用keras深度学习框架搭建卷积神经网络模型实现垃圾分类,基于树莓派上进行实时视频流的垃圾识别源代码
一.项目概述 简介:该垃圾分类项目主要在于对各种垃圾进行所属归类,本次项目采用keras深度学习框架搭建卷积神经网络模型实现图像分类,最终移植在树莓派上进行实时视频流的垃圾识别. 前期:主要考虑PC端 ...
- 深度学习机器学习面试题——自然语言处理NLP,transformer,BERT,RNN,LSTM
深度学习机器学习面试题--自然语言处理NLP,transformer,BERT,RNN,LSTM 提示:互联网大厂常考的深度学习基础知识 LSTM与Transformer的区别 讲一下Bert原理,B ...
- 吴恩达深度学习笔记(109)-循环神经网络模型(RNN介绍)
https://www.toutiao.com/a6652926357133066755/ 2019-02-06 20:15:53 循环神经网络模型(Recurrent Neural Network ...
- 《繁凡的深度学习笔记》前言、目录大纲 一文让你完全弄懂深度学习所有基础(DL笔记整理系列)
<繁凡的深度学习笔记>前言.目录大纲 (DL笔记整理系列) 一文弄懂深度学习所有基础 ! 3043331995@qq.com https://fanfansann.blog.csdn.ne ...
- 深度学习中的经典基础网络结构(backbone)总结
深度学习中的经典基础网络结构总结 这篇文章从大的发展趋势介绍了下主干网络的发展,而在 CV 经典主干网络 (Backbone) 系列: 开篇 中主要是对一些比较经典的主干网络进行简单梳理. 1. 深度 ...
- 深度学习入门笔记(四):神经网络
专栏--深度学习入门笔记 推荐文章 深度学习入门笔记(一):机器学习基础 深度学习入门笔记(二):神经网络基础 深度学习入门笔记(三):感知机 深度学习入门笔记(四):神经网络 深度学习入门笔记(五) ...
- 深度学习入门笔记(五):神经网络的编程基础
欢迎关注WX公众号:[程序员管小亮] 专栏--深度学习入门笔记 声明 1)该文章整理自网上的大牛和机器学习专家无私奉献的资料,具体引用的资料请看参考文献. 2)本文仅供学术交流,非商用.所以每一部分具 ...
- 深度学习进入芯片领域,揭秘寒武纪神经网络处理器
深度学习进入芯片领域,揭秘寒武纪神经网络处理器 2016-03-16 19:34 原创 铁流 10条评论 就在全世界媒体的焦点锁定于谷歌AlphaGo连续3盘战胜李世石的同时,中国科学院计算技术研究所 ...
最新文章
- GoogleLog(GLog)源码分析
- 复习04统计学习方法(朴素贝叶斯算法Naive Bayes)---图片版
- tp5更新某字段加1_爱可生详解MySQL 8.0:索引特性1-函数索引
- python人工智能——机器学习——转换器与估计器
- 谁来执行Rebalance以及管理consumer的group呢?
- c语言for循环 wdtcn,MSP430F149的DS18B20C语言程序
- go语言csv文件的读取与写入
- Apache Nutch 1.6 发布
- 为什么你的网站没流量?做不大!让我来告诉你。
- 工具推荐:2016年最佳的15款Android黑客工具
- android上的单片机编程软件下载,AVR单片机编程软件(AVR_fighter)
- c/c++:双人对战五子棋源代码
- Barrett And Montgomery of Polynomials
- hello world (android studio DNK )
- win7计算机不支持此接口,Win7 "explorer.exe 不支持此接口"问题
- TP5 查询条件总结
- [瞎搞]Lucas定理证明
- RI-TRP-DR2B 32mm 玻璃应答器|CID载码体标签在半导体行业重复利用之检测方法
- PPT手写笔颜色修改
- Bootstrap日期控件,实现日期控件只选择不准输入效果
热门文章
- 通信算法之145:OFDM系统频偏(IFO/FFO)对频域信号影响
- oracle odp.net 11g,Oracle 11g客户端是否需要ODP.NET?
- 使用java语言基于SMTP协议手写邮件客户端
- css实现网页背景图片自适应
- 中国谷物烘干机市场运行分析与投资前景预测报告2022-2028年
- 如何理解“特征提取(Detect)、特征描述(Descriptor)、特征匹配(Match)”
- 获取level2行情接口API函数地址
- 灵活用工代发薪平台有什么风险 找第三方代发工资合法吗
- python金融衍生品_什么是金融衍生品,金融衍生品有哪些?
- 10种常用的软件架构模式