瞎聊深度学习——一文了解各种循环神经网络

简介: 瞎聊深度学习——一文了解各种循环神经网络

循环神经网络的概念

在了解循环神经网络之前,你一定了解过前馈神经网络和卷积神经网络,循环神经网络相对于这两种网络来说可能要更有“个性”一些。循环神经网络的独特之处就在于它不仅考虑到了当前的输入,而且对前面输入的内容有记忆功能,可以说其他神经网络的隐藏层是无连接的,而循环神经网络的隐藏层之间是有连接的,隐藏层的输入不仅包含输入层的输出,同时也包含了上一时刻隐藏层的输出。


循环神经网络的结构如下图所示:


如图所示Xt代表输入,A便是隐藏层,由于隐藏层的输入要包含着上一时刻隐藏层的输出,也就构成了图中的循环结构,ht表示输出。


如果对于上图中表示的神经网络还是不能很好的理解,我们可以把它拆开来看:


拆开后可以认为是相同网络的多重叠加结构,每一个网络都把消息传给他的继承者。

具体的细节结构图如下所示:

image.png

参数说明如下:

xt:t时刻的输入

st:t时刻的隐藏状态

f:激活函数(一般用tanh和ReLu)

U,V,W:网络参数(和前馈网络有所不同,RNN共享同一组网络参数)

g:激活函数


BPTT算法

通过上面的细节结构图,我们可以得到RNN的前向传播过程,那RNN中的网络参数U,V,W又是怎么进行更新的呢

每一次的输出值Ot都会产生一个误差值Et,总的误差就可以表示为:

image.png

那么我们的损失函数可以用交叉熵损失函数或者平方差损失函数来表示。


由于神经网络需要考虑输入的时间顺序,所以在进行反向传播的时候我们也要考虑时间带来的影响,所以我们把这种由BP网络更改后的算法叫做Backpropagation Through Time(BPTT),该算法是将输出端的误差进行反向传递,并通过梯度下降法进行更新。


BPTT算法的推导可以参考:https://www.cnblogs.com/wacc/p/5341670.html


双向RNN(BRNN)的结构介绍

在传统的RNN中,我们只考虑到了当前输入的前一输入,即只考虑到了“上文”,并没有考虑到之后的内容。这样可能会造成错过一些重要的信息,使得我们得到的信息不够准确。双向RNN不仅从前往后(如下图黄色实箭头)保留该输入前面的输入的重要信息,而且从后往前(如下图黄色虚箭头)去保留该输入后面的输入的重要信息,然后基于这些重要信息进行预测该输入。双向RNN模型如下:

image.png

深层RNN(DRNN)的简单介绍

深层RNN网络是在RNN模型多了几个隐藏层,是因为考虑到当信息量太大的时候一次性保存不下所有重要信息,通过多个隐藏层可以保存更多的重要信息,正如我们看电视剧的时候也可能重复看同一集记住更多关键剧情。同样的,我们也可以在双向RNN模型基础上加多几层隐藏层得到深层双向RNN模型。

image.png

注:每一层循环体中参数是共享的,但是不同层之间的权重矩阵是不同的。


长短期记忆网络(LSTM)极其变体


LSTM是一种特殊的RNN,它能够学习长时间依赖。假设我们在看一个长约两个小时的电影,在看到一小时的时候,你可能只能回忆起10分钟之前的情节,这就是RNN所能带来的记忆功能,而LSTM可以看做是对这个记忆的升级版,虽然不能够记得所有的剧情,但是能过记忆从开始到现在的重要情节,这就是LSTM所带来的升级后的记忆功能。


下面通过对比标准RNN来讲解一下LSTM:


标准RNN:

可以看出标准RNN中重复的模块只包含了单一的层(tanh)。


LSTM:

从外形上来看的话,二者并没有什么不同,只不过LSTM的每个重复模块中含有四个层(每个黄色方块算一个层)。


下面具体来讲解一下LSTM中每个部件的作用。

LSTM的核心思想是细胞状态,直接在整个链上运行,只有一些少量的线性交互,信息在链上流动保持不变会很容易。


LSTM的主要结构由“门”构成,门可以用来选择让信息通过或者不通过(就像门电路一个原理),LSTM中的门主要包含一个sigmoid函数和一个pointwise乘法操作。


我们都知道sigmoid的输出范围是0-1,利用该函数作为门就可以很好的控制有多少信息可以通过,0代表没有信息可以通过,1代表所有的信息都可以通过,LSTM中一共用下面的三个门来表述各种状态。


遗忘门


该门放在整个模块的最前端,该门用来决定我们丢弃掉什么信息,该门用h_t_-_1h_t_-_1和xtxt作为输入,在C_t_-_1C_t_-_1单元输出一个介于0和1之间的数,0代表完全遗忘,1代表完全保留。


输入门


输入门是要决定单元中要存储何种信息,它由两个部分组成。首先一个sigmoid函数决定着我们要更新哪些值,其次一个tanh函数创建一个新的候选向量C˜tC~t,可以加入状态机中,下一步将结合两者(遗忘门和输出门)产生状态的更新。


状态更新


这一步主要是将旧的状态C_t_-_1C_t_-_1更新成CtCt。这里把旧的状态乘以ftft,用来遗忘我们在遗忘门中决定忘记的信息,紧接着加上it∗C˜tit∗C~t。这就是新的候选值,然后我们再根据决定更新状态的程度来设置缩放系数。


输出门


更新了状态之后,我们就要决定最终的输出了,首先用一个Sigmoid函数来决定输出细胞状态的哪个部分,接着用tanh处理细胞状态(将状态映射到-1和1之间),最后将其与Sigmoid门的输出值相乘,从而输出最终的值。


举个例子:在语言模型中,因为就看到了一个 代词,可能需要输出与一个 动词 相关的信息。例如,可能输出是否是代词、是单数还是负数,这样如果是动词的话,我们也知道动词需要进行的词形变化。


LSTM变体

(一)第一种变体是增加了窥视孔连接(peephole connection),也就是让门电路也接受细胞状态的输入。


(二)第二种变体是使用了配对遗忘与输入门,与之前分别决定遗忘与添加信息不同,我们同时决定两者,只有我们需要输入一些内容的时候我们才会忘记,只有当早前信息被忘记之后我们才会输入。


(三)GRU是一个更好的变体,该模型将输入门和遗忘门组合成了一个单独的“更新门”,同时合并了细胞状态和隐含状态,也做了一下其他的修改,最终的模型比标准的 LSTM 模型要简单,是当前非常流行的变体。






相关文章
|
13天前
|
机器学习/深度学习 人工智能 算法
猫狗宠物识别系统Python+TensorFlow+人工智能+深度学习+卷积网络算法
宠物识别系统使用Python和TensorFlow搭建卷积神经网络,基于37种常见猫狗数据集训练高精度模型,并保存为h5格式。通过Django框架搭建Web平台,用户上传宠物图片即可识别其名称,提供便捷的宠物识别服务。
167 55
|
23天前
|
机器学习/深度学习 人工智能 算法
【宠物识别系统】Python+卷积神经网络算法+深度学习+人工智能+TensorFlow+图像识别
宠物识别系统,本系统使用Python作为主要开发语言,基于TensorFlow搭建卷积神经网络算法,并收集了37种常见的猫狗宠物种类数据集【'阿比西尼亚猫(Abyssinian)', '孟加拉猫(Bengal)', '暹罗猫(Birman)', '孟买猫(Bombay)', '英国短毛猫(British Shorthair)', '埃及猫(Egyptian Mau)', '缅因猫(Maine Coon)', '波斯猫(Persian)', '布偶猫(Ragdoll)', '俄罗斯蓝猫(Russian Blue)', '暹罗猫(Siamese)', '斯芬克斯猫(Sphynx)', '美国斗牛犬
129 29
【宠物识别系统】Python+卷积神经网络算法+深度学习+人工智能+TensorFlow+图像识别
|
10天前
|
机器学习/深度学习 算法 数据安全/隐私保护
基于yolov4深度学习网络的公共场所人流密度检测系统matlab仿真,带GUI界面
本项目使用 MATLAB 2022a 进行 YOLOv4 算法仿真,实现公共场所人流密度检测。通过卷积神经网络提取图像特征,将图像划分为多个网格进行目标检测和识别,最终计算人流密度。核心程序包括图像和视频读取、处理和显示功能。仿真结果展示了算法的有效性和准确性。
54 31
|
17天前
|
机器学习/深度学习 算法 信息无障碍
基于GoogleNet深度学习网络的手语识别算法matlab仿真
本项目展示了基于GoogleNet的深度学习手语识别算法,使用Matlab2022a实现。通过卷积神经网络(CNN)识别手语手势,如"How are you"、"I am fine"、"I love you"等。核心在于Inception模块,通过多尺度处理和1x1卷积减少计算量,提高效率。项目附带完整代码及操作视频。
|
20天前
|
机器学习/深度学习 算法 数据安全/隐私保护
基于深度学习网络的宝石类型识别算法matlab仿真
本项目利用GoogLeNet深度学习网络进行宝石类型识别,实验包括收集多类宝石图像数据集并按7:1:2比例划分。使用Matlab2022a实现算法,提供含中文注释的完整代码及操作视频。GoogLeNet通过其独特的Inception模块,结合数据增强、学习率调整和正则化等优化手段,有效提升了宝石识别的准确性和效率。
|
22天前
|
机器学习/深度学习 人工智能 自然语言处理
深入理解深度学习中的卷积神经网络(CNN)##
在当今的人工智能领域,深度学习已成为推动技术革新的核心力量之一。其中,卷积神经网络(CNN)作为深度学习的一个重要分支,因其在图像和视频处理方面的卓越性能而备受关注。本文旨在深入探讨CNN的基本原理、结构及其在实际应用中的表现,为读者提供一个全面了解CNN的窗口。 ##
|
23天前
|
机器学习/深度学习 人工智能 算法
深度学习入门:用Python构建你的第一个神经网络
在人工智能的海洋中,深度学习是那艘能够带你远航的船。本文将作为你的航标,引导你搭建第一个神经网络模型,让你领略深度学习的魅力。通过简单直观的语言和实例,我们将一起探索隐藏在数据背后的模式,体验从零开始创造智能系统的快感。准备好了吗?让我们启航吧!
61 3
|
1月前
|
机器学习/深度学习 自然语言处理 语音技术
Python在深度学习领域的应用,重点讲解了神经网络的基础概念、基本结构、训练过程及优化技巧
本文介绍了Python在深度学习领域的应用,重点讲解了神经网络的基础概念、基本结构、训练过程及优化技巧,并通过TensorFlow和PyTorch等库展示了实现神经网络的具体示例,涵盖图像识别、语音识别等多个应用场景。
58 8
|
1月前
|
机器学习/深度学习 人工智能 自然语言处理
深度学习中的卷积神经网络(CNN): 从理论到实践
本文将深入浅出地介绍卷积神经网络(CNN)的工作原理,并带领读者通过一个简单的图像分类项目,实现从理论到代码的转变。我们将探索CNN如何识别和处理图像数据,并通过实例展示如何训练一个有效的CNN模型。无论你是深度学习领域的新手还是希望扩展你的技术栈,这篇文章都将为你提供宝贵的知识和技能。
185 7
|
29天前
|
机器学习/深度学习 自然语言处理 算法
深入理解深度学习中的卷积神经网络(CNN)
深入理解深度学习中的卷积神经网络(CNN)
39 1