BP算法和RNN_模型CNN-RNN-LSTM和GRU简介

987b90e2c08868e5b7781b94144f6add.png

深度学习自从2006年以后已经“火”了十多年了,目前大家看到的,最普遍的应用成果是在计算机视觉、语音识别和自然语言处理(NLP)。最近工业界也在努力地扩展它的应用场景,比如游戏、内容推荐和广告匹配等等。

深度模型架构分三种:

  1. 前向反馈网络:MLP,CNN;
  2. 后向反馈网络:stacked sparse coding, deconvolutional nets;
  3. 双向反馈网络:deep Boltzmann machines, stacked auto-encoders

卷积神经网络(Convolutional Neural Network, CNN) 应该是最流行的深度学习模型,在计算机视觉也是影响力最大的。下面介绍一下深度学习中最常用的CNN模型,以及相关的RNN模型,其中也涉及到著名的LSTM和GRU。


基本概念

计算神经生物学对构建人工神经元的计算模型进行了重要的研究。试图模仿人类大脑行为的人工神经元是构建人工神经网络的基本组成部分。基本计算元素(神经元)被称为节点(或单元),其接收来自外部源的输入,具有产生输出的一些内部参数(包括在训练期间学习的权重和偏差)。 这个单位被称为感知器。感知器的基本框图如下图所示。

图显示神经元的基本非线性模型,其中 1, 2, 3,... 是输入信号; 1, 2, 3,⋯ 是突触权重; 是输入信号的线性组合; φ(∙)是激活函数(例如sigmoid), 是输出。 偏移 与输出的线性组合器相加,具有应用仿射变换的效果,产生输出 。 神经元功能可以用数学表示如下:

c9c651205eb8dd56ccd312719ae4cbdc.png
神经元的基本模型

2e732853ad6c9a719ce65a7019d4fb0a.png

人工神经网络或一般神经网络由多层感知器(MLP)组成,其中包含一个或多个隐藏层,每层包含多个隐藏单元(神经元)。 具有MLP的NN模型如图所示。

aa43ad59709b5564fdd30b9dbceae506.png
带有MLP的NN模型

多层感知器输出

87e53f082f8d9a51251b09fef379d6ed.png

学习率(learning rate)是训练DNN的重要组成部分。它是训练期间考虑的步长,使训练过程更快。但是,选择学习率是敏感的。如果为η较大,网络可能会开始发散而不是收敛;另一方面,如果η选择较小,则网络需要更多时间收敛。此外它可能很容易陷入局部最小值。

有三种常用方法可用于降低训练期间的学习率:常数、因子和指数衰减。首先,可以定义一个常数ζ,基于定义的步长函数手动地降低学习率。 其次,可以在训练期间根据以下等式调整学习率:

7f3ba4c29a52bb70751602302bbeee8f.png

指数衰减的步进函数格式为:

8efee60e397861cb4faf83d1a172a856.png

梯度下降法是一阶优化算法,用于寻找目标函数的局部最小值。算法1解释了梯度下降的概念:

算法1 梯度下降

输入:损失函数ε,学习率η,数据集 , 和模型F(θ, )

输出:最小化ε的最优θ

重复直到收敛:

adc1d6f211c4b2e25c751eda62fcc20f.png

结束

由于训练时间长是传统梯度下降法的主要缺点,因此随机梯度下降(Stochastic Gradient Descent ,SGD)方法用于训练深度神经网络(DNN)。 算法2详细解释了SGD。

算法2 随机梯度下降

输入:损失函数ε,学习率η,数据集 , 和模型F(θ, )

输出:最小化ε的最优θ

重复直到收敛:

随机( , );

对于( , )的每批( i, i)做

870f2691f7a1f7e307e2c8ba29a57a70.png

结束

深度NN使用流行的反向传播(BP)算法和SGD 进行训练。 算法3给出了基本BP的伪代码。 在MLP的情况下,可以容易地用有向非循环图(directive acyclic graphs)这样的计算图来表示NN模型。DL的表示,如算法3所示,让一个单路径网络使用链规则有效地计算从顶层到底层的梯度。

算法3 BP算法

输入:具有 层的网络,激活函数σ ,

隐藏层的输出

e265ce242cc2674fc25152f767e4877e.png

和网络输出

ef7d5334c25cf987180a961874ba6a96.png

计算梯度:

c2b45ec7b87194d0f03aea2901b334f2.png

0做

计算当前层的梯度:

e327fa8b882077bab49441c3ca77ae49.png

038c27827f5c89a1541079517c07d435.png

fd5c33786cb0e65c9ce14cb4f93caf70.png

应用梯度下降(GD)

反向传播(BP)梯度到下一层

3ff2cb607bf44a75dbabfcb57d02e929.png

结束

动量(Momentum)是一种有助于SGD加速训练的方法。它背后的主要思想是使用梯度的移动平均值,而不是仅使用梯度的当前实际值。其数学表达如以下等式:

ffdcdf9fe14b52756588358aebba5afb.png

这里γ是动量,η是第t轮训练的学习率。在训练期间使用动量的主要优点是防止网络卡在局部最小值。动量值为γ∈(0,1)。较高的动量值超过其最小值,可能使网络不稳定。通常γ设置为0.5,直到初始学习稳定,然后增加到0.9 或更高。

权重衰减(Weight decay)用于训练深度学习模型作为L2正则化方法,这有助于防止过度拟合网络和模型泛化。 F(θ, )的L2正则化可以定义为:

9b6f6e12ff5dcf6534eb47594b5a3700.png

bfe680031fc8a48eba8c16f440f32d3c.png

权重 的梯度是

cebe7fee44a2e5360aad7ef24638e2d3.png

其中 = 0.0004。

批处理归一化(BN)通过输入样本移位来减少内部协方差,从而加速DL过程。这意味着输入被线性转换为零均值和单位方差。对于白化的输入,网络收敛速度更快,并且在训练期间表现出更好的正则化,这对整体精度有影响。由于数据白化是在网络外执行的,在模型训练期间不会产生白化的影响。在深度递归神经网络(RNN),第n层的输入是第n-1层的组合,不是原始特征输入。随着训练的进行,归一化或白化的效果分别降低,这导致梯度消失(vanishing gradient)问题。这可能会减慢整个训练过程并导致饱和(saturation)。为了更好地训练,BN应用于深度神经网络的内部层。这种方法确保了理论上和基准测试(benchmarks)实验中更快的收敛。在BN中,一层的特征独立地归一化为均值零和方差1。BN的算法在算法4中给出。

算法4 BN

输入:小批量(mini-batch)x值: = { 1,2,3......, }

输出:{yi = BNγ,β(xi)}

86a30ccc70bad35f9e13fd51ca54ca43.png

激活函数如下:如图所示

8219962971784b70912a7a963d88d177.png
(a)sigmoid (b)双曲正切

d7eaa99df9fdbd2d24e76ea167c4750b.png
(c)ReLU

421b1f6673ceba2c12093689f8e5a0f4.png
(d)Leaky ReLU (e)Exponential Linear Unit (ELU)
  1. Sigmoid

08685971b4e9a0cddbfc5f6839debfbb.png
  1. TanH

9fc9e18bfbaf1fa685325c02f6a90e8e.png
  1. Rectified Linear Unit (ReLU): y = max(x,0)
  2. Leaky ReLU: y = max(x,ax)
  3. Exponential Linear Unit (ELU):

0f90b1abec6ccde60f8cf23bd2ad0af0.png

卷积神经网络(CNN)

如图显示了一个CNN的整体架构,包括两个主要部分:特征提取和分类器。在特征提取层,网络的每一层都接收来自其前一层的输出作为其输入,并将其输出作为输入传递给下一层。 这个CNN架构由三种类型层组合而成:卷积(convolution),最大池化(max-pooling)和分类(classification)。在网络的低层和中层有两种类型的层:卷积层和最大池化层。偶数层用于卷积,奇数层用于最大池化操作。卷积和最大池化层的输出节点组合成为一个2D平面,叫特征图(feature map)。一个层的每个平面通常由前层一个或多个平面的组合导出。平面的节点连接到前一层每个连接平面的小区域。卷积层的每个节点通过卷积运算从输入图像中提取特征。CNN的整体架构包括输入层、多个交替的卷积层和最大池化层、一个全连接层和一个分类层。

4110a7d3db874c06038cee516e032906.png
CNN

更高级的特征来自从较低层传播的特征。随着特征传播到最高层或级别,特征的维度减小分别取决于卷积和最大池化操作的内核大小。然而,为了确保分类准确性,通常增加特征图的数量代表更好的输入图像特征。CNN的最后一层输出作为全连接网络的输入,该网络称为分类层。前馈神经网络已被用作分类层。

相对于最终神经网络权重矩阵的维度,期望数量的特征选择在分类层中作为输入。然而,就网络或学习参数而言,全连接层是昂贵的。有几种技术,包括平均池化和全局平均池化,作全连接网络的替代方案。在顶部分类层中softmax层计算相关类别的得分。分类器选最高分输出相关类别。

  • 卷积层

在此层,先前层的特征图与可学习的内核进行卷积。内核的输出经过线性或非线性激活函数,例如sigmoid、双曲正切(hyperbolic tangent)、softmax,整流线性(rectified linear)和标识(identity)函数,生成输出特征图。 每个输出特征图可以与多个输入特征图组合。 总的来说,有

7e97f909dbd10629c8ac6a43cb3a6a90.png

其中 是当前层输出, -1是前一层输出, 是当前层内核, 是当前层的偏差。 代表选择的输入地图。对于每个输出图,给出了附加偏差 。 但是,输入图将与不同的内核进行卷积生成相应的输出图。

  • 池化层

亚采样层对输入图执行下采样操作,这通常称为池化层。在此层中,输入和输出特征图的数量不会更改。例如,如果有 输入映射,那么将会有完全 输出映射。 由于下采样操作,输出图每个维度大小都减小,这取决于下采样掩码大小。例如:如果使用2×2下采样内核,则所有图像输出维度将是相应输入图像维度的一半。该操作可以表述为

add3c7d5c55e89c83437e4d9820ee0ad.png

在该层中主要执行两种类型的操作:平均池化或最大池化。 在平均池化方法,函数通常总结来自前一层的特征图的N×N个补丁并选择平均值。在最大池化,从特征图的N×N个补丁中选择最高值。因此,输出地图尺寸减少n次。特殊情况下,输出图乘以一个标量。已经有一些替代的亚采样层,例如分数最大池化(fractional max pooling)层和带卷积的亚采样。

  • 分类层

这是全连接层,根据前面卷积层提取的特征计算每个类的得分。最终的层特征图表示为一组标量数值的矢量,这些标量值传递到全连接层。全连接前馈神经层作为softmax分类层。

在CNN的反向传播(BP)中,全连接层按照全连接神经网络(FCNN)的方法更新。在卷积层和其前一层之间对特征图执行全卷积运算来更新卷积层的滤波器。如图显示了输入图像的卷积和亚采样等基本操作。

d0e6f16022de20a08d55a2402fae77c7.png
卷积和池化
  • 网络参数和内参需求

计算参数的数量是衡量深度学习模型复杂性的重要指标。输出特征图的大小

=( - )/ +1

其中 是指输入特征图的尺寸, 是指滤波器或感受野(receptive field)的尺寸, 是指输出特征图的尺寸, 代表步幅(stride)。填充(padding)通常在卷积应用,以确保输入和输出特征图具有相同的尺寸。填充尺寸取决于内核的大小。填充的行数和列数如下:

=( - 1)/ 2

这里 是填充尺寸, 是内核维度。有几个标准考虑来比较模型。但是,大多数情况下会考虑网络参数的数量和内存需求。 第 层的参数( )量计算按以下等式:

=( × × -1)×

如果偏移与权重参数相加,则上述等式可重写:

=( ×( +1)× -1)×

这里第 层的参数总数记为 , 是输出特征图的总数, -1是输入特征图或通道的总数。 例如,假设第 层具有 -1 = 32个输入特征图, = 64个输出特征图,并且滤波器大小为 = 5,在这种情况下,该层的偏移参数总数为

=(5×5×33)× 64 = 528,000

因此,第 层操作所需的内存大小( )可以表示为

=( × × )


递归神经网络(RNN)

RNN是唯一的,它允许随时间推移在一系列向量上进行操作。如图示意所示。

4ef1b1ee760886c5014adb625174c3f8.png
RNN基本架构

在Elman架构中,使用隐层的输出和隐层的正常输入一起作为输入。 另一方面,Jordan网络中输出单元的输出作为隐藏层的输入。相反地Jordan使用输出单元的输出同时作为自身和隐藏层的输入。 在数学上,可以表达为:

Elman网络

h = h( h + hh −1 + h)

= ( h + )

Jordan网络

h = h( h + h −1 + h)

= ( h + )

其中 是输入向量, h 是隐层向量, 是输出向量, wu是权重矩阵,b是偏移向量。

循环允许信息从网络的一个步骤传递到下一个步骤。 可以将递归神经网络视为同一网络的多个副本,每个网络将消息传递给后继者。下图显示了如果循环展开(unroll the loop)会发生什么。

9a43ca9c5ca8ad67c97b4fef55061600.png
展开的RNN

RNN方法的主要问题是梯度消失。


LSTM(Long Short Term Memory)

长短时记忆(LSTM,Long Short Term Memory)的关键思想是单元(cell)状态,如图水平线贯穿的顶部。LSTM将信息移除或添加到单元状态(cell state),称为门(gates):输入门( ),忘记门( )和输出门( )可以定义为如下公式:

e5c0992748c4b12992dc10041b1c27c7.png
LSTM

fdf74c456168d48071d5a020e0152a4f.png

dcee4e227defdcb984efb7d4e9e6eeea.png

a6897d3d128132af0b8092e2ce754457.png

35e20fbba7732f82a26557cac8009092.png

d04e50e8de1eda6a2c0dc1e073937e05.png

60394f53a05ff9adc6f243b5158ea383.png

LSTM模型在时间信息处理中很受欢迎。 大多数包含LSTM模型的论文都有一些微小的差异。


Gated Recurrent Unit (GRU)

门控递归单元(Gated Recurrent Unit,GRU) 也来自LSTMs。GRU受欢迎的主要原因是计算成本和模型的简单性,如图所示。在拓扑、计算成本和复杂性方面,GRU是比标准LSTM更轻的RNN版。 该技术将遗忘门(forget gates)和输入门(input gates)组合成单个“更新门(update gate)”,并将单元状态、隐藏状态以及一些其他变化合并。更简单的GRU模型越来越受欢迎。数学上GRU可以用表示如下公式:

74dc01a1a9502487751537ecff549ee8.png
GRU

d12e8aabecfccfa2e5c4e298cbb32413.png

fe3a542034392876187eb4d0231983eb.png

eb5dfb16663e0cc7d28c26aecb678b3e.png

5cd02bcec66a1c3c9fcde8c807a5703a.png

GRU需要较少的网络参数,这使模型更快。 另一方面,如果有足够的数据和计算能力,LSTM可以提供更好的性能。


参考文献

  1. https://skymind.ai/wiki/lstm
  2. http://colah.github.io/posts/2015-08-Understanding-LSTMs/
  3. http://karpathy.github.io/2015/05/21/rnn-effectiveness/
  4. M Z Alom et al,“The History Began from AlexNet: A Comprehensive Survey on Deep Learning Approaches”,arXiv 1803.01164,2018

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/561293.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

电脑向linux服务器传输文件,windows如何通过ssh工具向linux服务器上传和下载文件?...

这个是很简单的。我用win10和kali给你举例子。kali自带了ssh,只不过我们需要开启它。kali下运行ps -e | grep ssh,你会发现已经有了ssh。只是没有启动,启动方法是/etc/init.d/ ssh start。如果你的linux机器不是kali,就先apt-get …

python bar图_python使用matplotlib绘图 — barChart | 学步园

matplotlib是python最著名的绘图库,它提供了一整套和matlab相似的命令API,十分适合交互式地进行制图。而且也可以方便地将它作为绘图控件,嵌入GUI应用程序中。它的文档相当完备,并且Gallery页面中有上百幅缩略图,打开之…

python random randint_python中random.randint(1,100)随机数中包不包括1和100

展开全部 在python中的random.randint(a,b)用于生成一个2113指定范围内的整数。5261其中参数a是下4102限&#xff0c;1653参数b是上限&#xff0c;生成的随机数n: a < n < b。 print random.randint(12, 20) #生成的随机数n: 12 < n < 20 print random.randint(20,…

curaengine linux编译,CuraEngine开源程序解读

8种机械键盘轴体对比本人程序员&#xff0c;要买一个写代码的键盘&#xff0c;请问红轴和茶轴怎么选&#xff1f;meshmesh中主要定义了关于三角形网格三个类和这三个类的一些成员函数&#xff0c;分别是MeshVertex&#xff0c;MeshFace以及Mesh。全局变量const int类型的全局变…

python docx库安装_详解python中docx库的安装过程

python中docx库的简介 python-docx包&#xff0c;这是一个很强大的包&#xff0c;可以用来创建docx文档&#xff0c;包含段落、分页符、表格、图片、标题、样式等几乎所有的word文档中能常用的功能都包含了&#xff0c;这个包的主要功能便是用来创建文档&#xff0c;相对来说用…

创新固定资产管理方式:易点易动集成企业微信的全新解决方案

在当今竞争激烈的商业环境中&#xff0c;高效的固定资产管理对于企业的成功至关重要。然而&#xff0c;传统的资产管理方式往往繁琐、容易出错&#xff0c;并且缺乏实时性和准确性。为了解决这些挑战&#xff0c;易点易动与企业微信进行了集成合作&#xff0c;推出了一种全新的…

python删除重复元素_Python-删除列表中重复元素的方法

原博文 2017-12-21 17:07 − 1.set()方法 x [1,2,3,4,5,1] y list(set(x)) print(y) [1, 2, 3, 4, 5] 2. x [b,c,d,b,c,a,a] y {}.fromkeys(x).ke... 相关推荐 2019-09-28 21:13 − Python python是一种跨平台的计算机程序设计语言&#xff0c;是一种面向对象的动态类型语…

linux内核提取ret2usr,Linux内核漏洞利用技术详解 Part 2

前言在上一篇文章中&#xff0c;我们不仅为读者详细介绍了如何搭建环境&#xff0c;还通过一个具体的例子演示了最简单的内核漏洞利用技术&#xff1a;ret2usr。在本文中&#xff0c;我们将逐步启用更多的安全防御机制&#xff0c;即SMEP、KPTI和SMAP&#xff0c;并逐一解释它们…

raid5坏了一块盘怎么办_机械硬盘的坏道处理——屏蔽之

分享一次处理硬盘坏道的经历。打算写的让小白也能照着葫芦画葫芦。机械硬盘的阿喀琉斯之踵无疑是坏道。倘若一块硬盘出现了坏道怎么办&#xff1f;当然是即刻备份资料更换新硬盘。毫无疑问&#xff0c;二手硬盘几乎都是被榨干的状态&#xff0c;活生生地一副论斤卖的样子。当然…

linux 嵌入式 交叉 环境搭建 实验原理,实验三 嵌入式Linux开发环境的搭建

南京邮电大学通达学院实 验 报 告实验 实验三题目 嵌入式Linux开发环境的搭建 课程名称 嵌入式驱动开发实验 学院 专业 班 实验者学号同做者学号 08002210 姓名 毛骏超 同做者学号 08002225 姓名 陈超/ 嵌入式应用开发实验成绩 评定一、实验目的1.掌握嵌入式交叉编译环境的搭建…

insert into select 优化_数据库优化总结

第一部分&#xff1a;SQL语句优化1、尽量避免使用select *&#xff0c;使用具体的字段代替*&#xff0c;只返回使用到的字段。2、尽量避免使用in 和not in&#xff0c;会导致数据库引擎放弃索引进行全表扫描。SELECT * FROM t WHERE id IN (2,3)SELECT * FROM t1 WHERE usernam…

.npy文件_python——文件读写

一&#xff1a;Python中读写文件的方法1.open&#xff08;&#xff09;函数open(file,moder,buffering-1,encodingNone,errorsNone,newlineNone,closefdTrue,openerNone)file &#xff1a; 是一个 path-like object&#xff0c;表示将要打开的文件的路径&#xff0c;可以是绝对…

react native loading动画_React高级进阶指南

懒加载React.lazy函数能让你像渲染常规组件一样处理动态引入(的组件)。 Suspense加载指示器为组件做优雅降级。 fallback属性接受任何在组件加载过程中你想展示的 React 元素。const OtherComponent React.lazy(() > import(./OtherComponent));function MyComponent() { r…

在一起计时器_古典计时器简介之一 qqtimer

可持续水文的路子又多了一条。在这一系列古典计时器中&#xff0c;qqtimer的地位有些特殊&#xff0c;因为现在还有不少人使用它&#xff0c;而之后要介绍的其他计时器已经基本没啥人用了。有两位最知名的WR日常练习的计时器都是它。首先是Feliks Zemdegs&#xff0c;虽然他已经…

管理节点连接不上sql节点_质量成本管理:成本控制、成本分析、费用使用流程与节点说明...

关注【本头条号】更多关于制度、流程、体系、岗位、模板、方案、工具、案例、故事、图书、文案、报告、技能、职场等内容&#xff0c;弗布克15年积累免费与您分享&#xff01;阅读导航→01 质量成本控制流程与节点02 质量成本分析流程与节点03 质量费用使用控制流程与节点质量部…

springmvc工作流程_SpringMVC工作原理

买了好多书&#xff0c;但是没有一本是看完的&#xff0c;这是看完的第一本书&#xff0c;虽然页数不多、技术早就用了老多遍了&#xff0c;还是总结一下吧&#xff01;一、MVC模式MVC是 model、view、和controller的缩写&#xff0c;分别代表web应用程序中的三种职责&#xff…

sql查找一个范围的值_销售需求丨查找问题

BOSS&#xff1a;茶&#xff0c;那个&#xff0c;什么茶来着&#xff1f;&#xff08;递过一杯茶...&#xff09;BOSS&#xff1a;&#xff1f;&#xff01;&#xff01;不是这个&#xff0c;我是说那个白茶啊&#xff01;白茶&#xff1a;......&#xff08;懵&#xff09;咋滴…

pandas输出到excel_学Python还不会处理Excel数据?带你用pandas玩转各种数据处理

开场白以前学习 Python 的 pandas 包时&#xff0c;经常到一些 excel 的论坛寻找实战机会。接下来我会陆续把相关案例分享出来&#xff0c;还会把其中的技术要点做详细的讲解。本文要点&#xff1a;使用 xlwings &#xff0c;如同 vba 一样操作 excel使用 pandas 快速做透视表注…

cadence设计运算放大器_21.比较器的原理与特性,它与运算放大器的本质区别总结归纳...

1.电压比较器的工作原理电压比较器&#xff0c;顾名思义&#xff0c;就是两个输入端的其中一个作为基准&#xff0c;另外一个与基准作比较&#xff0c;输出只存在高电平和低电平两种状态。通过电压比较器&#xff0c;可以将模拟信号转变为数字信号。输入引脚的电位 > -输入引…

插入排序最优_排序专题插入排序

今天开始&#xff0c;我计划用几篇专题来集中练习下有关排序的算法&#xff0c;排序算法是算法中最基础的算法了&#xff0c;所以这部分我们是要尽可能的全都掌握了。排序算法最常见的有如下几种&#xff1a;插入排序(Insertion Sort)选择排序(Selection Sort)希尔排序(Shell S…