【王树森】RNN模型与NLP应用(5/9):多层RNN、双向RNN、预训练(个人向笔记)

Stacked RNN(多层RNN)

1. 原理

多个全连接层可以堆叠,多个卷积层也可以堆叠。同理:RNN也可以堆叠形成多层RNN。
如下图所示:对于每一个时刻的输出 h t h_t ht,它既会作为下一个时刻的输入,也会作为下一层RNN的输入。
在这里插入图片描述
第二层同理:
在这里插入图片描述
最终最后一层RNN的最后一个 h t h_t ht 即为模型的输出:
在这里插入图片描述

2. 代码实现

加入多层LSTM,其中除最后一层的LSTM,把其他层的return_sequences置为True,因为需要它们作为下一层RNN的输入。
在这里插入图片描述
模型参数: 其中32为特征向量维度,这里不一定每一层的维度都为32,纯属巧合
在这里插入图片描述
模型效果: 与之前的普通LSTM变化不大,原因在于Embedding层的参数太多了,没有足够多的数据把Embedding训练好导致过拟合,加再多的LSTM层也无济于事


Bidirectional RNN

之前提到RNN和人的阅读习惯类似,从左往右读。人在阅读过程中在脑中记录信息,而RNN在状态向量 h t h_t ht 中记录信息。而对RNN来说,从前往后阅读和从后往前阅读差别并不大。
因此:

  • 可以想到可以从两个方向分别训练RNN,两者不共享参数,也不共享状态。
  • 两条RNN各自输出自己的状态向量,然后把这两个向量作concatenation,
  • 还可以堆叠双向RNN,原理和上面提到的类似,把concatenation后的向量作为下一层的输入即可
  • 如果不进行堆叠,则舍弃 y y y 。只保留最后的两个 h t h_t ht 即可,对它们作concatenation作为输出
    在这里插入图片描述
    双向RNN一般情况下都会比普通的RNN效果好,原因是:
  • 无论是Simple RNN还是LSTM都或多或少会遗忘前面的信息
  • 从左往右的RNN最后会遗忘掉偏左边的信息,从右往左的RNN最后会遗忘掉偏右边的信息,这两者正好形成了互补

代码实现

导入Bidirectional即可实现双向RNN,这里是单层的实现
在这里插入图片描述
参数:
在这里插入图片描述
模型效果: 还是没有太大的改进,原理同上——Embedding层的参数太多了,没有足够多的数据把Embedding训练好导致过拟合,改进LSTM效果不佳


Pretrain

预训练在深度学习中非常常用,比如卷积神经网络。如果网络太大而训练数据不够大,那么可以在ImageNet等大数据上做预训练,好处在于:

  • 有良好的初始化
  • 避免过拟合

而我们训练RNN的时候是同理的,如下图所示,我们的Embedding层有32w个参数,而我们只有2w个样本。我们的模型太大而训练数据太少就容易导致过拟合
在这里插入图片描述
固我们可以得出解决办法:对Embedding层作预训练

具体方法

  1. 让模型在一个大的数据集上作预训练。最好是在情感分析上的数据集上进行预训练,两个任务越相似,预训练效果越好。训练的神经网络可以是任意的,即不是RNN都行
  2. 只保留这个网络的Embedding层和模型参数,然后用我们自己的RNN网络
  3. 训练我们自己的RNN,参数都是随机初始化的,而Embedding参数的已经训练好的,把它固定住,只训练其他层
    在这里插入图片描述

Summary

想要RNN模型的效果好,关注以下几个点:

  • Simple RNN和LSTM是两种不同的RNN,用LSTM肯定比用Simple RNN好
  • 尽量用双向RNN
  • 当堆叠的层足够大时,多层RNN的效果可能会比单层好
  • 当数据小而模型大时,考虑预训练Embedding层

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

如若内容造成侵权/违法违规/事实不符,请联系一条长河网进行投诉反馈,一经查实,立即删除!

相关文章

ElasticSearch学习笔记(三)RestClient操作文档、DSL查询文档、搜索结果排序

文章目录 前言5 RestClient操作文档5.4 删除文档5.4 修改文档5.5 批量导入文档 6 DSL查询文档6.1 准备工作6.2 全文检索查询6.3 精准查询6.4 地理坐标查询6.5 复合查询6.5.1 相关性算分6.5.2 布尔查询 7 搜索结果处理7.1 排序7.1.1 普通字段排序7.1.2 地理坐标排序 前言 Elast…

Git 下载安装使用基本教程

一、下载 Git,并安装 Git for Windows, 无脑安装。安装完,鼠标右键,会看到这两个东西。 二、Gitee操作 新建仓库 初始化 readme 文件 点击克隆 复制地址 右键 git clone 第一次会需要你输入账号密码 输入后拉取成功。 把想要上传…

【安全生产】叉车安全带报警器有哪些特点?

叉车安全带报警器是用于防止在叉车发生猛烈碰撞或紧急制动时,司机不与方向盘、挡风玻璃等发生二次碰撞或抛出车外,从而造成的严重伤害的一种叉车安全装置、配件。 很多司机在开叉车时经常有不系安全带的习惯,有很多不负责任的人会认为&#…

PHP一键发起灵活定制多功能投票小程序系统源码

​一键发起,灵活定制 —— 多功能投票小程序 🚀【开篇:告别繁琐,投票新体验】🚀 还在为组织投票活动而头疼不已吗?繁琐的流程、有限的选项、难以统计的结果...这些都将成为过去式!今天&#x…

MyPrint打印设计器(六)svg篇-直线

svg-二阶贝塞尔曲线 介绍一款强大的svg操作库,能够通过简单的代码,实现svg绘制与操纵,实现拖拽等功能 代码仓库 在线体验 代码仓库:github 代码仓库:gitee 实战项目:MyPrint 操作简单,组件丰富…

notepad++将换行替换成空

将多行里的换行置为一行,例如将下面的6行置为3行 crrlH打开替换框, 替换目标为【,\r\n】,替换成空,勾选循环查找和 正则表达式,全部替换即可。 替换后的效果

【AI】Pytorch_模型构建

建议点赞收藏关注!持续更新至pytorch大部分内容更完。 本文已达到10w字,故按模块拆开,详见目录导航。 整体框架如下 数据及预处理 模型及其构建 损失函数及优化器 本节目录 模型线性回归逻辑回归LeNetAlexNet 构建模块组织复杂网络初始化网络…

中国各地级市的海拔标准差

海拔标准差是衡量地理测量准确性的重要指标,它通过计算特定地点的海拔测量值与平均海拔之间的偏差来评估数据的可靠性。较小的标准差意味着测量结果较为一致,而较大的标准差则可能指出数据的波动性或测量误差。 计算方法 海拔标准差的计算遵循以下公式…

【pycharm-乱码】简单记录一下都有哪些涉及编码

控制台 路径:setting-》general-》console setting-》editor-》file encodings 路径:setting-》editor->file and code templates #!/user/bin/env python3 # -*- coding: utf-8 -*-setting->tools->ssh terminal

新款14 英寸和16英寸MacBook Pro开始组装生产

据 DigiTimes 报道,苹果的供应链已于 8 月开始批量生产搭载 M4 Pro 和 M4 Max 芯片的下一代 14 英寸和 16 英寸 MacBook Pro 机型。这意味着笔记本电脑的组装工作很可能已经开始。 此信息与显示行业分析师 Ross Young 的说法相符,他声称下一代 14 英寸和…

Edge资源占用优化:调整浏览器设置与关闭自动更新检查

最近,作者在学习过程中,打开任务管理器的时候注意到,即使没有打开浏览器,edge依然有着内存占用较高的情况: 于是就在网上收集了一些后台调优的方法,如果各位朋友有更多优化浏览器资源占用的方法&#xff0c…

智能优化特征选择|基于鲸鱼WOA优化算法实现的特征选择研究Matlab程序(KNN分类器)

智能优化特征选择|基于鲸鱼WOA优化算法实现的特征选择研究Matlab程序(KNN分类器) 文章目录 一、基本原理原理流程举个例子总结 二、实验结果三、核心代码四、代码获取五、总结 智能优化特征选择|基于鲸鱼WOA优化算法实现的特征选择研究Matlab程序&#x…

【Linux系统】线程的同步 生产消费模型

同步 同步概念 同步:在保证数据安全的前提下,让线程能够按照某种特定的顺序访问临界资源,从而有效避免饥饿问题,叫做同步 竞态条件:因为时序问题,而导致程序异常,我们称之为竞态条件。在线程场…

[OpenCV] 数字图像处理 C++ 学习——13Canny边缘检测 附完整代码

文章目录 前言1.理论基础(1)高斯模糊平滑图像(GaussianBlur)(2)计算图像梯度(Sobel/Scharr)(3)非极大值抑制 (Non-maximum Suppression)(4)双阈值检测 (Double Threshold)(5)边缘跟踪(通过滞后处理) 2.代码实现3.完整代码 前言 Canny 边缘检测(高斯滤波…

django学习入门系列之第十点《django中数据库操作--创建与删除表》

文章目录 django创建与删除表开始创建表创建指令新增表删除表删除列新增列修改报错提示语言总结 往期回顾 django创建与删除表 删除表 创建表 修改表 操作目录 开始创建表 class text_into(models.Model):name models.CharField(max_length32)password models.CharField…

Electron快速上手

什么是Electron 一款应用广泛的跨平台的桌面应用开发框架。Electron的本质是结合了 Chromium 与Node.js。使用HTML、CSS、JS 等Web技术构建桌面应用程序。 .vue,.tsx,.less,.ts也可以使用 Electron 流程模型 主进程是纯node环境,可以访问__dirname,fs模块等&#…

DDD设计方法-3-仓储,封装持久化数据

前情提要:一共包含 如下六篇文章(篇幅精简,快速入门) 1、初识DDD 2、聚合、实体、值对象 3、仓储,封装持久化数据 4、端口和适配器 5、领域事件 6、领域服务,实现约定 DDD设计方法-3-仓储,封装…

绿联充电宝怎么样?深度测评西圣、绿联、倍思磁吸充电宝!

在如今这个电子设备不离手的时代,充电宝成为了我们生活中不可或缺的伙伴。而磁吸充电宝以其便捷的使用方式和时尚的外观,更是受到了众多消费者的青睐,今天,我们将对西圣、绿联、倍思这三个品牌的磁吸充电宝进行深度测评&#xff0…

Three之材质Material

本文目录 前言一、基础材质1.1 特点及属性1.2 代码1.3 效果 二、标准材质2.1 特点及属性2.2 代码及效果 三、深度材质四、法向材质五、朗伯材质六、Phong式材质七、粒子材质八、 着色器材质九、其他材质 前言 Three.js中的材质(Material)是独立于物体顶点…

Anthropic Claude Artifacts,克劳德聊天机器人如何简化代码编程

最近有一位8岁的小男孩,没有任何编程经验,却成功创建了一个网页游戏。他利用了Claude AI和Cursor来生成代码,这充分展示了人工智能在简化编程和创作过程中的巨大潜力。前几天还能看见一个8岁的女孩用生成式人工智能Cursor ai工具可以搭建出一…