深度学习(自然语言处理)RNN、LSTM、TextCNN
目录
0 前言:
1.从RNN到LSTM
1.1 RNN
1.2 LSTM模型
1.2.1遗忘门(forget gate)
1.2.2 输入门
1.2.3 输出门
1.3 使用循环神经网络模型
2 textCNN
2.1 需要解决的问题:
2.2 TEXT CNN模型
2.3 TextCNN实现:
参考文献
- 文章来源:忆_恒心(CSDN)
0 前言:
自然语言处理中,RNN、LSTM和TextCNN的学习基本上是躲不开的,这些基本的模型需要有一个比较清晰的了解,这对后面做对比实验的时候会有很多的帮助。
本篇文章的目的就是帮助读者分析从RNN到LSTM在到textCNN的应用过程。
1.从RNN到LSTM
RNN 与DNN.CNN不同,它能处理序列问题.
常见的序列问题:
- 一段段连续的语音
- 一段段连续的手写文字
- 一条句子等等。
这些序列长短不一,又比较难拆分成一个个独立的样本来训练
RNN就是假设我们的样本是基于序列的。
1.1 RNN
比如这么一个例子:
”我” “吃” “苹果“ 词性与前个词语有很大的关系,所以RNN可以解决
BPTT(back-propagation through time)算法是常用的训练RNN的方法,其实本质还是BP算法,只不过RNN处理时间序列数据,所以要基于时间反向传播,故叫随着时间反向传播。
激活函数: tanh 函数的收敛速度要快于 sigmoid 函数,而且梯度消失的速度要慢于 sigmoid 函数
利用BPTT算法训练网络时容易出现梯度消失的问题,当序列很长的时候问题尤其严重,因此上面的RNN模型一般不能直接应用。而较为广泛使用的是RNN的一个特例LSTM。
标准的RNN中,重复的模块只有一个非常简单的结构,例如一个tanh层
1.2 LSTM模型
LSTM 同样是这样的结构,但是重复的模块的结构更加复杂。不同于 单一神经网络层,整体上除了 h 在随时间流动,细胞状态 c 也在随时间流动。细胞状态(cell) c 就代表着长期记忆,而状态 h 代表了短期记忆。
从上图中可以看出,在每个序列索引位置 t 时刻向前传播的除了和RNN一样的隐藏状态 ht ,还多了另一个隐藏状态,如图中上面的长横线。这个隐藏状态我们一般称为细胞状态(Cell State),记为 Ct 。如下图所示:
LSTM 有通过精心设计的称作为“门”的结构来去除或者增加信息到细胞状态的能力
1.2.1遗忘门(forget gate)
顾名思义,是控制是否遗忘的
输出一个在 0 到 1 之间的数值,这个数值决定要遗忘多少历史信息。1 表示“完全保留”,0 表示“完全舍弃”。
1.2.2 输入门
输入门(input gate)负责处理当前序列位置的输入,1.从RNN到LSTM被存放在细胞状态中。
1.2.3 输出门
当为0时,门完全关闭,当为1时,门完全打开。输入门控制这当前输入值有多少信息流入到当前的计算中,遗忘门控制着历史信息中有多少信息流入到当前计算中
1.3 使用循环神经网络模型
- 在这个模型中,每个词先通过嵌⼊入层得到特征向量量。
- 然后,我们使⽤用双向循环神经⽹网络对特征序列进⼀步编码得到序列列信息。
- 最后,我们将编码的序列信息通过全连接层变换为输出。
具体来说,我们可以将双向长短期记忆(LSTM)在最初时间步和最终时间步的隐藏状态连结,作为特征序列的表征传递给输出层分类。
在下⾯面实现的 BiRNN 类中,
- Embedding 实例即嵌⼊入层,
- LSTM 实例例即为序列列编码的隐藏层,
- Linear实例例即⽣生成分类结果的输出层。
2 textCNN
简单的一个维度的时间序列 ---- 循环神经网络RNN
一维图像,用一维卷积神经网络来捕捉临近词之间的关联-----TextCNN
2.1 需要解决的问题:
多输入通道的一维互关运算---单输⼊入通道的\二维互相关运算。
时序最大池化(一维全局最大池化)
- TextCNN的计算
2.1.1 多输入通道的一维互关运算
实现代码
注意:
torch.stack()
在自然语言处理和卷及神经网络中, 通常为了保留–[序列(先后)信息] 和 [张量的矩阵信息] 才会使用stack。
https://blog.csdn.net/xinjieyuan/article/details/105205326
2.1.2 时序最大池化
(max-over-pooling)假设输⼊入包含多个通道,各通道由不不同时间步上的数值组成,各通道的输出即,该通道所有时间步中最大的数值.通过普通的池化实现全局池化
2.2 TEXT CNN模型
计算主要分为以下几步:
定义多个一维卷积,并对输入分别做卷积运算----可以使用⼀维卷积来表征时序数据
对输出的所有通道分别做时序最大化,再将这些输出值连接为向量
通过全连接层将连接后的向量变换为有关各类别的输出。(同时采DROUPT层正则化,前向传播的时候)
其实比较清晰的话,还是参考论文下面的图片
2.3 TextCNN实现:
训练并评价模型
注意:关于nn.CrossEntroyLoss交叉熵的理解
https://blog.csdn.net/geter_CS/article/details/84857220
小结:
- 可以使⽤用⼀维卷积来表征时序数据。
- 多输入通道的⼀维互相关运算可以看作单输⼊入通道的⼆维互相关运算。
- 时序最⼤大池化层的输⼊入在各个通道上的时间步数可以不同。
- textCNN主要使⽤用了⼀维卷积层和时序最⼤大池化层
参考文献
Bi-LSTM网络:https://www.cnblogs.com/jiangxinyang/p/10208163.html
动手学习深度学习
深度学习之RNN到LSTM:https://www.cnblogs.com/jiangxinyang/p/9362922.html
TextCNN:https://www.cnblogs.com/callyblog/p/8535767.html
pytorch损失函数之nn.CrossEntropyLoss()、nn.NLLLoss():https://blog.csdn.net/geter_CS/article/details/84857220
深度学习(自然语言处理)RNN、LSTM、TextCNN相关推荐
- [深度学习] Pytorch中RNN/LSTM 模型小结
目录 一 Liner 二 RNN 三 LSTM 四 LSTM 代码例子 概念介绍可以参考:[深度学习]理解RNN, GRU, LSTM 网络 Pytorch中所有模型分为构造参数和输入和输出构造参数两 ...
- [深度学习] 自然语言处理---Transformer原理(一)
<Attention Is All You Need>是Google在2017年提出的一篇将Attention思想发挥到极致的论文.该论文提出的Transformer模型,基于encode ...
- [深度学习] 自然语言处理 --- Self-Attention(一) 基本介绍
[深度学习] 自然语言处理 --- Self-Attention(一) 基本介绍_小墨鱼的专栏-CSDN博客https://zengwenqi.blog.csdn.net/article/detail ...
- 深度学习时间序列预测:LSTM算法构建时间序列单变量模型预测大气压( air pressure)+代码实战
深度学习时间序列预测:LSTM算法构建时间序列单变量模型预测大气压( air pressure)+代码实战 长短期记忆(Long short-term memory, LSTM)是一种特殊的RNN,主 ...
- 【NAACL2021】Graph4NLP:图深度学习自然语言处理(附ppt)
来源:专知本文约1500字,建议阅读5分钟 最新图深度学习在自然语言处理应用的概述报告,不可错过! 深度学习已经成为自然语言处理(NLP)研究的主导方法,特别是在大规模语料库中.在自然语言处理任务中, ...
- [深度学习] 自然语言处理 --- Bert开发实战 (Transformers)
本文主要介绍如果使用huggingface的transformers 2.0 进行NLP的模型训练 除了transformers,其它兼容tf2.0的bert项目还有: 我的博客里有介绍使用方法 [ ...
- 浅谈深度学习:了解RNN和构建并预测
浅谈深度学习:了解RNN和构建并预测 总包含文章: 一个完整的机器学习模型的流程 浅谈深度学习:了解RNN和构建并预测 浅谈深度学习:基于对LSTM项目LSTM Neural Network for ...
- 浅谈深度学习:基于对LSTM项目`LSTM Neural Network for Time Series Prediction`的理解与回顾
浅谈深度学习:基于对LSTM项目LSTM Neural Network for Time Series Prediction的理解与回顾#### 总包含文章: 一个完整的机器学习模型的流程 浅谈深度学 ...
- 【CS224n】2斯坦福大学深度学习自然语言处理课程笔记——词向量、词义和神经分类器
Natural Language Processing with Deep Learning 课程笔记2 1. 词向量和word2vec 2. 优化基础知识 3. 我们能否通过计数更有效地抓住词义的本 ...
- 深度学习时间序列预测:LSTM算法构建时间序列单变量模型预测空气质量(PM2.5)+代码实战
深度学习时间序列预测:LSTM算法构建时间序列单变量模型预测空气质量(PM2.5)+代码实战 # 导入需要的包和函数: from __future__ import print_function im ...
最新文章
- 说说身边产品的用户体验
- Attachment assignment block里选择的文件是如何传到application server
- mpu 配置内存空间_ARM存储器之:存储保护单元MPU
- 工作篇-佛山三水恒大-2020.11.13
- python基础编码规范_Python语言的基本语法和编码规范.doc
- 上接扩展GridView控件(10) - 自定义分页样式
- java map 教程_Map和Set
- 2015轻院校赛 H五子棋
- 【吐血推荐】什么是领域驱动设计?DDD?
- 具有深度沉浸能力的人更能有所成就
- 常识-就怕你不知道一条
- mysql查询出当前年份的12个月
- android三级联动、四级联动(地区选择)
- webapi框架搭建-创建项目(三)-webapi owin
- foxmail7导入导出数据
- 使用Junit测试 RESTful
- ISIS的邻居建立详解
- Win7 的屏幕截图
- 使用迅雷从官网下载VSCode最新安装包
- TP5 接口 前面拼接 当前域名