当前位置: 首页 > news >正文

RNN模型及NLP应用(3/9)——Simple RNN 模型

声明:

       本文基于哔站博主【Shusenwang】的视频课程【RNN模型及NLP应用】,结合自身的理解所作,旨在帮助大家了解学习NLP自然语言处理基础知识。配合着视频课程学习效果更佳。

材料来源:【Shusenwang】的视频课程【RNN模型及NLP应用】

视频链接:

RNN模型与NLP应用(3/9):Simple RNN模型_哔哩哔哩_bilibili


一、学习目标 

1. 了解什么是Simple RNN 模型

2.清楚Simple RNN 模型的底层逻辑

3.如何用编程实现一个Simple RNN 模型


 二、RNN 

【小提示】现在的NLP自然语言处理很少用到RNN模型了。在数据集较大的情况下大家普遍用的都是transformer(后续会讲到),本节课让我们先从RNN开始学习。


RNN可以用来处理时序数据

 可以处理这种多对一、多对多的数据


这是一个简单的RNN模型示意图: 

【运作原理】

RNN模型会将一段文字从第一个字一个一个读取到最后一个子,并且读一个记忆一个。就像h_0记录了输入X_0的信息,h_1记录了X_0和X_1的信息,以此类推:h_t记录了从X_0到X_t的所有文字信息。

【注意】

更新h时需要用到一个参数矩阵A。整个RNN模型只需要用到一个参数矩阵A。


三、Simple RNN

1.我们来看一下Simple RNN是如何将X_t与h_t-1构成h_t的。

 如图:

h_t 是由参数矩阵A×(X_t与h_t-1的整合矩阵),再经过tanh函数的季激活最终得到的一个矩阵。

h_t的维度就是参数矩阵A的行数。

A参数矩阵的列数是(X_t与h_t-1的整合矩阵)的维度即行数。

这个过程可以这样的理解:

【思考】为什么要使用tanh函数?

因为h_100=A**100×h_0,那么当A的最大特征值为0.9时A**100会无限接近于0,则新的h_100也是一个无限接近于0的数。这种现象类似于我们一开始学习深度学习时学到的梯度消失。

同理,当A最大特征值为1.2时,则A**100就会变得非常的大,也类似于我们一开始学习深度学习时学到的梯度爆炸。


2.A参数矩阵的总参数

Total #parameter: shape(h)× [shape(h)+shape(x)]


四、代码实现Simple RNN


 【应用示例】示例为上节课所讲的电影评论

搭模型:

(1)设置h的维度为32、X的维度为32【这里二者维度相等,但通常二者不相等】

(2)将评论进行词划分,分别被标记为X_0、X_1...X_t.

(3)最后用sigmoid()函数将h_t化成一个(0,1)的值,用来判断电影评价的好与坏

(4)我选择只输出h_t,其他的h删除不显示,你也可以选择都显示


代码:【王树森老师所用框架为tensorflow,但作者我更喜欢用pytorch】

①vocabulary词汇表大小为10000

②embedding_dim词向量维度为32,即X维度=32

③word_num每个电影评论有500个单词

④state_dim状态向量为32,即h维度=32

⑤Sequential:可以将神将网络按顺序搭建起来

⑥embedding层:输出为20×8的矩阵,每条电影评论选取20个单词,每个单词词向量是8维的

⑦SimpleRNN层:”return_sequence=False“意思是我只输出最后一个状态向量h

⑧Dense全连接层:输出一个(0,1)之间的一个数,来判别评论是正面的还是负面的

⑨Summary:模型概要

参数数量:

 32×(32×32)即此公式——>shape(h)× [shape(h)+shape(x)]

最后面内个+32是Dence层偏移量的数量

编译并拟合模型:

 epoches=3这是Early stopping操作,在深度学习中我们同时还与其一同了解了dropout操作,二者都是为了防止模型过拟合

最后测试数据:

【思考】如果我想使用h_0到h_t的所有数据的话,那么你就需要再添加一个Flatten层,将所有的h压缩为一个向量,然后再使用sigmoid函数激活。

这时需要将下面代码中的return_sequence=False改为True即可


五、Simple RNN的缺点: 

        Simple RNN 只长短期记忆,只擅长short term denpendence(短程依赖关系),不擅长long term dependence(长程依赖关系)。当语句数量很长时,Simple RNN则无法对下一个词做出准确预测,

下一节课我们会讲到LSTM模型,它可以满组long term denpendence (长程依赖关系)


 六、总结

 (1)RNN是一种神经网络,但是他不同于全连接层网络和卷积神经网络,它适用于文本、语音、时序等数据

 

 (2)状态向量h_t中包含了之前所有的x信息

 (3)RNN记忆比较短,他会忘记很久之前的输入X,

http://www.dtcms.com/a/107314.html

相关文章:

  • ngx_vslprintf
  • 【LLM基础】DeepSpeed基础知识
  • count查询详解
  • 【FPGA】状态机思想回顾流水灯
  • Google Gemini 2.0 网页抓取真丝滑
  • Golang的文件处理优化策略
  • STM32F103C8T6单片机硬核原理篇:讨论GPIO的基本原理篇章1——只讨论我们的GPIO简单输入和输出
  • [Lc6_记忆化搜索] 不同路径 | 解决智力问题 | 有序三元组中的最大值
  • Ansible内置模块之systemd
  • 【区块链+ 房产建筑】山东省建筑产业互联网平台 | FISCO BCOS 应用案例
  • 【Linux】文件系统知识梳理:从磁盘硬件到文件管理
  • C++IO流类库
  • 单元测试原则之——不要模拟值对象 (1)
  • SIMD技术:定义、与AI的关联及推理加速
  • HarmonyOS-ArkUI Rcp模块类关系梳理
  • Flask+Vue构建图书管理系统及Echarts组件的使用
  • 使用SpringBoot + Thymeleaf + iText实现动态PDF导出
  • pollinations 一个免费文生图、声音、文网站
  • PhotoShop学习05
  • springcloud configClient获取configServer信息失败导致启动configClient注入失败报错解决
  • 安徽京准:GPS北斗卫星校时服务器助力大数据云计算
  • 《Linux内存管理:实验驱动的深度探索》大纲
  • 项目练习:若依系统二次开发中,某些情况下,v-hasPermi不适合的解决办法
  • DoDAF科普
  • Python入门(5):异常处理
  • 蓝桥杯练习:对称二叉树
  • 全国产FMC子卡-16bit 8通道2.4G
  • Leetcode 6207 -- DP | 思维 | 双指针
  • catch-all路由
  • 数据结构初阶: 顺序表的增删查改