【NLP】 深度学习NLP开篇-循环神经网络(RNN)

深度学习笔记(四)——循环神经网络(Recurrent Neural Network, RNN) 阅读详情

从这篇文章开始,有三AI-NLP专栏就要进入深度学习了。本文会介绍自然语言处理早期标志性的特征提取工具-循环神经网络(RNN)。首先,会介绍RNN提出的由来;然后,详细介绍RNN的模型结构,前向传播和反向传播的过程;最后,讨论RNN的特点及其优劣势。

作者&编辑 | 小Dream哥

完整的NLP深度学习介绍,应该从反向传播(BP)开始,进而介绍深度神经网络(DNN),卷积神经网络(CNN)也是必不可少的内容。鉴于有三AI已经发布了大量的CV相关的文章,其中必有相关的介绍。所以,在NLP专栏就暂不介绍相关的内容了。如果有需要的同学,可以留言提出来。

1 引言:RNN

对于一些序列输入的信息,例如语音、语言等,不同时刻之间的输入存在相互的影响,需要一种模型能够“记忆”历史输入的信息,进而对整个序列进行完整的特征提取和表征。

循环神经网络(RNN)就是面对这样的需求提出来的,它能够“记忆”序列输入的历史信息,从而能够较好的对整个序列进行语义建模。

目前,RNN及其变种在NLP领域有着广泛的应用。语音识别、对话系统、机器翻译、情感分析等等领域,在产业界,RNN及其变种都是最主要的特征提取工具。

关于RNN的特性,这里先不做太多理论上的说明,等介绍完其结构、前向传播和反向传播后我们再来讨论。

基于篇幅的限制,本文会先介绍最基本的RNN模型结构和原理,LSTM会在下一篇文章中做详细的介绍。

2 RNN的结构

640?wx_fmt=png

如上图所示,是RNN的结构图。相较于CNN繁杂的卷积运算过程和复杂的网络层次,RNN的模型结构看上去相当的简洁。同样的,RNN模型的结构也分为输入层(Input Layer)、隐藏层(Hidden Layer)和输出层(Output Layer)。图中的箭头表示数据的流动,需要注意的是在隐藏层,有一个回流的箭头,这是这个箭头的作用,使得RNN具有了“记忆”的能力。

这样看,同学们可能还无法看清楚数据在RNN模型内到底是如何流动的。我们将RNN模型的单元按时间展开,如下图所示:

640?wx_fmt=png

图片来自:https://www.nature.com/articles/nature14539

可以看到,不同时刻的数据x_t与上一时刻的状态s_(t-1),从输入层输入,经过一系列运算(激活函数)之后,得到该时刻的状态s_t,s_t再经过矩阵运算得到该时刻的输出o_t,同时t时刻的状态s_t会传给下一时刻的输入层。

通过这种方式,任意时刻的序列输入都会包含前面所有时刻的状态信息,就实现了“记忆”的目的,实际就是一种残差的结构。

需要注意的是,这里所有的RNN结构单元是权重共享的,用大白话说,就是只有一个RNN单元。

下面我们来详细看看数据的流动过程,也就是RNN的正向传播与反向传播过程。

3 RNN的正向传播

RNN的正向传播过程,就是通过输入数据x_t,求该时刻的RNN单元状态(Cell State)s_t以及输出o_t的过程。

我们先来看s_t

640?wx_fmt=png

U和W是权重参数,f是激活函数,激活函数有sigmoid、relu以及tanh等。

o_t的计算过程为:

640?wx_fmt=png

V是权重参数,g是输出函数,因为通常是预测类别,所以一般是softmax。

4 RNN的反向传播

下面我们基于RNN的正向传播过程来介绍下RNN的反向传播过程。RNN的反向传播与DNN的反向传播的基本理论是一致的。差别在于,因为RNN是序列的输入,因此其反向传播是基于时间的,叫BPTT(Back PropagationThrough Time)。

与DNN一致,反向传播的过程其实就是更新参数U,W,V的过程。知道反向传播的同学应该知道,更新,W,V其实就是求梯度。

用L_t表示t时刻的模型损失,则输入完一个序列后的总损失值为:

640?wx_fmt=png

我们先来看参数V的更新,根据偏导公式,

640?wx_fmt=png

损失函数通常为交叉熵,因此,

640?wx_fmt=png

再来看看W和U的更新,像DNN的反向传播一样,我们引入一个中间变量,暂称之误差delta,t时刻的误差delta_t:

640?wx_fmt=png

我们的目标是要得到一个递推公式,用delta_(t+1)来表示delta_t,注意这里激活函数用的是tanh函数。

640?wx_fmt=png

最后时刻的误差可以表示为:

640?wx_fmt=png

这样就可以通过delta_T一步一步得到所有时刻的误差。

那么,怎么通过误差得到W和U的梯度呢?

640?wx_fmt=png

640?wx_fmt=png

罗列了一大堆的公式,肯定有同学看花了眼。公式推导有不明白的地方,没有关系,我们暂且先放下,后面再慢慢的思考,最重要的是理解反向传播时,梯度更新的思想和技巧。下面我带着大家总结一下这个过程,相信你能获益匪浅。

1.正向传播,求得所有时刻的x_t,o_t,s_t

2. 根据梯度公式,求V的梯度

3. 求得T时刻的误差delta_T

4.根据误差的递推公式,求得所有时刻的误差delta_1,delta_2,...,delta_T

5. 根据梯度公式,和上述误差值求得W的梯度

6. 根据梯度公式,和上述误差值求得U的梯度

7. 更新权重参数

总结

上文详细讲述了RNN的模型结构及其正向和反向传播过程。


RNN虽然理论上可以很漂亮的解决序列数据的训练,但是它也像DNN一样有梯度消失的问题,当序列很长的时候问题尤其严重。虽然同选择合适的激活函数等方法能够一定程度的减轻该问题。但人们往往更青睐于使用RNN的变种。

因此,上面的RNN模型一般都没有直接应用的领域。在语音识别,对话系统以及机器翻译等NLP领域实际应用比较广泛的是基于RNN模型的变种。

读者们可以留言,或者加入我们的NLP群进行讨论。感兴趣的同学可以微信搜索jen104,备注"加入有三AI NLP群"。

下期预告:应用广泛的LSTM

知识星球推荐

640?wx_fmt=png

小Dream哥新开了一个知识星球,在那里更系统的介绍NLP的知识。你可以提出你的疑问,小Dream哥和多位大咖都可以为你解答,感兴趣的同学就扫码加入吧。


转载文章请后台联系

侵权必究

640?wx_fmt=png

640?wx_fmt=png

640?wx_fmt=png

往期精选

循环神经网络(RNN) 在之前学习了全连接神经网络(DNN)模型,网络结构都是从输入层到隐含层再到输出层,层与层之间是全连接或部分连接的,但每层之间的节点是无连接的。 一、神经网络基础 神经网络可以当做是能够拟合任意函数的黑盒子,只要训练数据足够,给定特定的x,就能得到希望的y,结构图如下: 将神经网络模型训练好之后,在输入层给定一个x,通过网络之后就能够在输出层得到特定的y,那么既然有了这么强大的模型,为什么还需要RNN(循环神经网络)呢? 二、为什么需要RNN(循环神经网络) 考虑这样一个问题,如果要预测句子的下一个单词是什么 阅读详情

相关推荐

循环神经网络(RNN)算法详解

原因很简单,思考一个问题,如果输入模型的数据有且仅有“hello”这一个信息的时候,模型能输出“world”的可能性微乎其微,因为语言的特点是只有结合上下文信息才能做出准确的预测。模型会输出一个概率分布,表示各个词作为下一个词的概率。(3)Bi-RNN(Bidirectional Recurrent Neural Network):Bi-RNN 是一种能够同时考虑过去和未来的信息的 RNN 变体模型,它由两个RNN模块组成,一个是正向RNN,另一个是反向RNN,最终输出是正向和反向RNN输出的拼接。

极光喵的博客 5164

NLP:循环神经网络

循环神经网络(RNN)是一种强大的序列建模工具,能够处理时间序列中的复杂关系。虽然存在梯度消失和长距离依赖等问题,但通过如 LSTM 和 GRU 等变种,RNN 已经能够在多个领域(包括自然语言处理、语音识别等)取得显著的效果。RNN 的适用性使其成为深度学习中的重要组成部分。

Wei_sx的博客 1118

【NLP】NLP基础之RNN循环神经网络

输出张量 包含RNN在输入序列的每个时间步的输出。形状:(seq_len, batch, num_directions * hidden_size) 或 (batch, seq_len, num_directions * hidden_size)(如果 batch_first=True)。它是基于当前时间步输入和先前隐藏状态计算的RNN层的激活输出。

m0_37697141的博客 931

NLP算法(三)- 循环神经网络

1 背景 在解决文本相关的任务时,各单词之间在语义上是有关联的。 若直接使用全连接层等线性模型,则会丢失各单词之间的联系。 CNN模型虽然可以构建相邻单词的联系,但受限于窗口大小,该模型仅能建立有限邻近单词之间的联系。 因此,一种新的模型被提出,期望能改进上述两种模型的缺陷,既能建立单词之间的联系,同时使单词的信息可以传递到更远的位置。这一模型便是循环神经网络。 迄今为止,主要有3种循环神经网络模型被提出,分别是RNN、LSTM、GRU,下面我们将依次展开讨论。 2 RNN RNN模型结构如下所示,该模

anycall201的博客 1036

【自然语言处理(NLP)】从零实现循环神经网络RNN、Pytorch实现循环神经网络RNN

【自然语言处理(NLP)】从零实现循环神经网络RNN、Pytorch实现循环神经网络RNN

专注上位机开发、机器视觉、机器学习、嵌入式软硬件开发 1万+

【学习体会】Lighttools8.4.0:简单光学系统实例

添加球型光源(SphereSource)和表面接收器: 对光线模拟的参数进行设置: 光线追踪-模拟输入 要追踪的光线总数,决定模拟的准确度,总数越多,准确度越高,当然耗时更多 预览光线数量是模拟之后可以看到的示意光线(黑线),一般是100~1000,随意设置 点击,开始模拟: (模拟结果) 如果光线太多,则会出现,可以看到剩余时间 照度分析: 分析-照度显示-光栅图表 ...

LeonJin的博客 1万+

rnn按时间展开_RNN结构理解和双向、深层RNN

前言本文首先介绍了为什么使用RNN及其与DNN的区别,然后详细讲解了RNN的结构和它的计算公式。最后简单介绍了双向RNN及深层双向RNN的结构和计算公式。为什么用RNN?DNN和CNN无法对时间序建模,上一层神经元的输出只能传递给下一层神经元。而在循环神经网络(RNN)中,神经元的输出在下一时刻是可以传递给自身的,可以对时间序列建模。很多任务的时间序列信息很重要,即一个样本中前后输入的信息是有关联...

weixin_39604897的博客 659

PX4笔记系列(二)vtol_att_control中的tiltrotor解析

update_vtol_state() 注释:采用两段切换的简单逻辑来进行过渡 当切换过渡开关后,飞机将会开始倾转动力,逐渐加速,当飞机获得足够速度后动力将会完全打到向前的位置。对于过渡返回阶段动力则是简单地倾转回来。 如果(不在向前过渡指令下): 当前vtol飞行模式: 1、旋翼模式 无操作 2、固定翼模式 令vtol飞行模式切换到过渡返回模式 3、P1过渡模式 进入过渡失败安全返回至旋翼模式 4、P2过渡模式 进入过渡失败安全返回至旋翼模式 5、过渡返回模式 记录过渡返回时间=当前时间-过渡开始

hypersonicss的博客 1881

长短时记忆神经网络python代码_python调用tensorflow.keras搭建长短记忆型网络(LSTM)——以预测股票收盘价为例...

程序简介程序调用tensorflow.keras搭建了一个简单长短记忆型网络(LSTM),以上证指数为例,对数据进行标准化处理,输入5天的'收盘价', '最高价','最低价','开盘价',输出1天的'收盘价',利用训练集训练网络后,输出测试集的MAE长短记忆型网络(LSTM):是一种改进之后的循环神经网络,可以解决RNN无法处理长距离的依赖的问题。程序/数据集下载代码分析导入模块、路径# -*- ...

weixin_39983404的博客 739

Circos图审美拯救计划:用TBtools复刻Nature级共线性分析图谱

本文针对Circos图在共线性分析中的审美提升问题,提供了一套基于TBtools的完整优化方案。通过构建和谐的色彩体系、精细控制信息层布局以及模仿顶刊构图逻辑,详细讲解了如何从配色、透明度、标签显示到高级参数设置,将默认图表升级为具有高级学术美感的Nature级图谱,助力研究者提升论文图表质量。

cherry的博客 911

Unity3D 集成 SQLite 数据库实战:从零搭建到数据可视化

本文详细介绍了在Unity3D项目中集成SQLite数据库的完整实战流程。从SQLite的轻量、稳定、易用特性讲起,逐步指导开发者完成环境配置、驱动集成、C#脚本编写(涵盖连接、建表、增删改查),并进阶演示了数据模型封装与在Unity UI中实现数据可视化的方法。最后提供了多线程访问、路径差异、性能优化等关键避坑指南,帮助开发者构建可靠高效的本地数据管理方案。

weixin_29291069的博客 95

深度学习NLP开篇-循环神经网络(RNN)

从这篇文章开始,有三AI-NLP专栏就要进入深度学习了。本文会介绍自然语言处理早期标志性的特征提取工具-循环神经网络(RNN)。首先,会介绍RNN提出的由来;然后,详细介绍RNN的模型结...

weixin_40920183的博客 372

Gephi新手必看:如何用Excel整理CSV数据快速生成网络图(附模板)

本文为Gephi新手提供了一份从Excel数据整理到生成专业网络图的完整指南。详细讲解了如何构建规范的节点表和边表CSV文件,并导入Gephi进行可视化分析。通过实战案例,帮助读者快速掌握利用Excel整理数据、规避常见错误,并运用布局算法与视觉编码,将复杂关系数据转化为直观的网络洞察。

weixin_28487433的博客 394

「NLP」 深度学习NLP开篇-循环神经网络(RNN)

https://www.toutiao.com/a6714260714988503564/ 从这篇文章开始,有三AI-NLP专栏就要进入深度学习了。本文会介绍自然语言处理早期标志性的特征提取工具-循环神经网络(RNN)。首先,会介绍RNN提出的由来;然后,详细介绍RNN的模型结构,前向传播和反向传播的过程;最后,讨论RNN的特点及其优劣势。 作者 | 小Dream哥 编辑 | 言有三 ...

喜欢打酱油的老鸟 769

如何用Timer模型处理多变量时间序列?附完整代码示例

本文深入解析了如何运用清华大学的Timer模型处理多变量时间序列预测任务。通过一个完整的智能工厂设备监控实战案例,详细介绍了从数据预处理、模型构建、训练调优到预测可视化的全流程,并提供了可运行的完整代码示例,帮助开发者掌握这一强大的时序分析工具。

weixin_29243063的博客 251

【SWAT】SWAT中预定义河网及流域

平原圩区没有明显的海拔差异。DEM中包含的地形信息无法定义河段的位置和水文连接,SWAT模型Watershed Delineator中提供两种方法,帮助用户输入流域拓扑信息。第一种方法,“Burn-in”和手动绘制河段和子流域边界。首先,使用“Burn-in”功能导入数字河道网络(DCN),并根据DEM和DCN绘制河流和子流域。然后在ArcGIS中编辑“流域”和“河段”层,可以调整位置、范围和水文连接。第二种方法,可以手动绘制或重新编辑河流和子流域,预定义河网及流域。

```On Earth, Be Water, By Coding``` 3277

rnn按时间展开_深度学习NLP开篇循环神经网络(RNN)

从这篇文章开始,有三AI-NLP专栏就要进入深度学习了。本文会介绍自然语言处理早期标志性的特征提取工具-循环神经网络(RNN)。首先,会介绍RNN提出的由来;然后,详细介绍RNN的模型结构,前向传播和反向传播的过程;最后,讨论RNN的特点及其优劣势。作者&编辑 | 小Dream哥完整的NLP深度学习介绍,应该从反向传播(BP)开始,进而介绍深度神经网络(DNN),卷积神经网络(C...

weixin_39637920的博客 278

Spring AI Alibaba实战训练营-14基于A2A协议智能体应用开发指南

本文介绍了基于A2A协议的智能体应用开发流程,主要包括客户端和服务端两个模块的实现。关键技术包括A2A通信协议、Nacos服务发现、Spring AI Alibaba框架和DashScope通义千问API。开发步骤涵盖环境准备(JDK17、Maven、Nacos)、项目创建、依赖配置(重点引入spring-ai-alibaba相关组件)以及Nacos和DashScope的核心配置。整个系统架构采用客户端通过Nacos发现服务端Agent,再调用阿里云AI服务的模式,实现了AI能力的解耦与复用。

program哲学 506

深度学习05-RNN循环神经网络

循环神经网络(Recurrent Neural Network,RNN)是一种具有循环连接的神经网络结构,被广泛应用于自然语言处理、语音识别、时序数据分析等任务中。相较于传统神经网络,RNN的主要特点在于它可以处理序列数据,能够捕捉到序列中的时序信息。RNN的基本单元是一个循环单元(Recurrent Unit),它接收一个输入和一个来自上一个时间步的隐藏状态,并输出当前时间步的隐藏状态。在传统的RNN中,循环单元通常使用tanh或ReLU等激活函数。

liaomin416100569的专栏 2万+

RU DOS版、EFI版32bit/64bit BIOS常用工具

DOS版、EFI版的RU工具,可用来查看IO、MEM、PCI、SMBIOS等资源。亲测在EFI SHELL下可用。

android 蓝牙通讯demo

android 下蓝牙通讯demo,实现了发现蓝牙,使能蓝牙,通过蓝牙发送消息。

深度学习之RNN循环神经网络(理论+图解+Python代码部分)

目录 前言 一、普通神经网络 二、循环神经网络 1.前向传播 2.反向传播算法BPTT 3.自然语言处理之RNN  4.梯度问题 4.1梯度爆炸 4.2梯度消失: 5.Keras建立RNN模型进行IMDb情感分析的Python代码 前言 前段时间实验室人手一本《Deep Learning》,本文章结合这本圣经和博客上各类知识以及我自己的理解和实践,针对RNN循环神经网络作出...

huacha__的博客 3万+

文档:亲测可用解决vnc灰屏,黑屏,鼠标大黑叉情况

主要解决vnc-viewer灰屏,黑屏,鼠标大黑叉等现象,详细见文档。

【自然语言处理(NLP)】循环神经网络RNN

循环神经网络(Recurrent Neural Network,RNN)是一类特殊的人工神经网络,它适合处理序列数据,在自然语言处理、语音识别等领域应用广泛。下面从结构原理、特点、存在的问题及应用场景等方面详细介绍。

专注上位机开发、机器视觉、机器学习、嵌入式软硬件开发 1万+

【NLP】循环神经网络--RNN学习.day3

循环神经网络(Recurrent Neural Network, RNN)是一种用于处理序列数据的深度学习模型。与传统的静态神经网络相比,RNN 可以有效处理输入数据的时间序列特性。这使得 RNN 在处理自然语言处理(NLP)、时间序列预测、音频处理等任务时非常有效。以下是对 RNN 的详细解释。

alb3117149013的博客 1406

循环神经网络(RNN)简介与应用

循环神经网络(Recurrent Neural Networks,简称RNN)是深度学习中用于处理序列数据的一类神经网络。本文将介绍RNN的基本概念、原理、以及在不同领域的应用,并附带一些具体的代码实例,以便更好地理解和应用这一强大的序列模型。

是我的博客 5095

【自然语言处理(NLP)】双向循环神经网络(Bidirectional Recurrent Neural Network,Bi - RNN)原理和实现

双向循环神经网络(Bidirectional Recurrent Neural Network,Bi - RNN)是循环神经网络(RNN)的一种拓展形式,在处理序列数据时具有独特优势,以下是对它的详细介绍: ## 结构特点 双向循环神经网络由两个方向相反的循环层构成,一个按时间顺序正向处理序列数据(前向RNN),另一个则逆向处理(后向RNN)。在每个时间步,这两个循环层都分别计算各自的隐藏状态,然后将它们的结果进行合并(如拼接或相加等),作为该时间步的最终隐藏状态输出。这种结构使得模型在处理当前时刻的信息

专注上位机开发、机器视觉、机器学习、嵌入式软硬件开发 1万+

RNN循环神经网络

​ 目录 一、RNN出现的意义 二、引入 —— 语言模型 三、RNN原理 四、RNN的应用以及不足 五、RNN代码实现 六、经典RNN变体 七、双向循环神经网络(BRNN) 一、RNN出现的意义 我们所熟悉的CNN,它的输出都是只考虑前一个输入的影响而不考虑其它时刻输入的影响(即只能单独去处理一个又一个的输入) 但是, 对于一些与时间先后有关的, 一序列的信息(即前后输入是有关系的),比如进行文档前后文内容的预测等等, 这时候CNN的效果

tt丫的博客 4092
上一篇: 【NLP】有三AI NLP知识星球来了,仅此一家别无分店
下一篇: 【GAN优化】一览IPM框架下的各种GAN
言有三
言有三 领域专家: 人工智能技术领域 领域专家: 人工智能技术领域
博客等级 码龄15年 3635粉丝 976原创
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

当前余额3.43元 前往充值 >
需支付:10.00元
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

言有三

三人行必有AI

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付元
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值