RNN模型及NLP应用(5/9)——多层RNN、双向RNN、预训练

声明:

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

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

视频链接:

RNN模型与NLP应用(5/9):多层RNN、双向RNN、预训练_哔哩哔哩_bilibili


一、学习目标

1.了解什么是多层RNN、双向RNN、预训练

2.学会代码实现多层RNN、双向RNN、预训练

3.2.清楚这三种RNN模型的底层逻辑


 二、多层RNN、双向RNN、预训练

1.多层RNN

将RNN堆叠起来构成深度RNN神经网络,以下为示意图:

神经网络每一步都会更新状态h,每一个状态向量h都有两个copies,一个输出,一个用来传给下一节点。这一层输出的h,用于上一层的输入。以此类推,第二层的状态向量一个用来传给下一个时间点,另一个用来作为第三层的输入。

最后一层的ht是最终的输出。


代码实现:

       上图中红色方框标记处:用了三个LSTM层,第一层return_sequence=true,第一层LSTM的输出需要作为第二层的输入;第二层return_sequence=true,第二层LSTM的输出需要作为第三层的输入,而第三层return_sequence=flase,第三层LSTM的输出为最终输出。


2.双向RNN

训练两条RNN,一条从左往右输出,一条从右往左输出。

同一个输入X同时输给两条RNN,两条RNN互相独立,互不影响。

如果有多条RNN,那么将最上面的内一行的y作为输入再传给下一条RNN。

最后只取左右两边的ht和ht',如下图:

代码实现:

要实现双向RNN,则需要导入Bidirectional层,然后在标准的LSTM外套一个Bidirectional层即可


3.预训练

预训练在深度学习中非常常用,比如在训练卷积神经网络中,如果网络足够大,但数据集不够大,

这时候你就可以在Imagenet(大规模的注释图像数据库)上做预训练,这样可以让神经网络有更好的初始化,也可以避免overfitting(过拟合)

训练RNN的时候也是这个道理

       如上图所示,这个RNN模型的embedding层有320000个参数,那么在数据集很小的情况下,该模型很可能会产生过拟合。

那么RNN预训练具体是这么做的:

    【首先】要找到一个足够大的数据集,可以是情感芬妮下的数据集,也可以是其他类型的数据,但是任务最好是接近原来情感分析的任务,最好是学出来的词向量带有正面或负面的情感词。两个任务越相似,预训练出来的transform(表现)就会越好。这个神经网络的结构是什么样的都可以,只要他有embedding层就行。

     【其次】就是要在大数据集上训练这个神经网络,训练好后把上面的层丢掉,只保留eembedding层和训练好的模型参数

【最后】再搭建我们自己的RNN模型

       新的RNN层和全连接层的参数都是随机初始化的,而下面的embedding层是预训练出来的,要把embedding层固定住,不要训练embedding层


三、总结

①能用SimpleRNN的情况下,肯定可以用LSTM,LSTM的效果要比Simple RNN好,因此我们应该都用LSTM

②提升RNN效果的方式之一就是使用双向RNN,双向RNN比单向的训练效果好。

③多层RNN的容量比单层大,如果训练数据比较多,那么多层的RNN训练效果比单层的好

④RNN的embedding层中参数往往都很多,那么在数据集较小的情况下,训练可能会出现over fitting(过拟合),因为我们就需要在大数据集上先进行预训练。

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

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

【3.软件工程】3.4 原型及相关模型

软件开发模型进化论:从原型驱动到混合模型的完整指南 🔄 一、模型进化关系全景图 #mermaid-svg-GcOFjt54gUs4oPeu {font-family:"trebuchet ms",verdana,arial,sans-serif;font-size:16px;fill:#333;}#mermaid-svg-GcOFjt54gUs4oPeu .error-i…

硬件与软件的边界-从单片机到linux的问答详解

硬件与软件的边界——从单片机到 Linux 设备驱动的问答详解 在嵌入式开发和操作系统领域,经常会有人问: “如果一个设备里没有任何代码,硬件是不是依然会工作?例如,数据收发、寄存器数据存储、甚至中断触发&#xff…

玛卡巴卡的k8s知识点问答题(七)

25. 说明 Job 与 CronJob 的功能 Job 功能: 用于运行一次性任务(批处理任务),确保一个或多个 Pod 成功完成任务后退出。 适用于数据处理、备份、测试等场景,任务完成后 Pod 不会自动重启。 特点: 任务…

【NLP 51、一些LLM模型结构上的变化】

目录 一、multi-head 共享 二、attention结构 1.传统的Tranformer结构 2.GPTJ —— 平行放置的Transformer结构 三、归一化层位置的选择 1.Post LN: 2.Pre-LN【目前主流】: 3.Sandwich-LN: 四、归一化函数选择 1.传统的归一化函数 LayerNorm …

VS+Qt配置QtXlsx库实现execl文件导入导出(全教程)

一、配置QtXlsx 1.1 下载解压QtXlsxWriter(在github下载即可) 网址:https://github.com/dbzhang800/QtXlsxWriter 1.2 使用qt运行 点击qtxlsx.pro运行QtXlsxWriter 选择DesktopQt51211MSVC201564bit编译器(选择自己本地电脑qt…

Golang的文件处理优化策略

Golang的文件处理优化策略 一、Golang的文件处理优化策略概述 是一门效率高、易于编程的编程语言,它的文件处理能力也非常强大。 在实际开发中,需要注意一些优化策略,以提高文件处理的效率和性能。 本文将介绍Golang中的文件处理优化策略&…

自学-C语言-基础-数组、函数、指针、结构体和共同体、文件

这里写自定义目录标题 代码环境:?问题思考:一、数组二、函数三、指针四、结构体和共同体五、文件问题答案: 代码环境: Dev C ?问题思考: 把上门的字母与下面相同的字母相连,线不能…

VMware+Ubuntu+VScode+ROS一站式教学+常见问题解决

目录 一.VMware的安装 二.Ubuntu下载 1.前言 2.Ubuntu版本选择 三.VMware中Ubuntu的安装 四.Ubuntu系统基本设置 1.中文更改 2.中文输入法更改 3. 辅助工具 vmware tools 五.VScode的安装ros基本插件 1.安装 2.ros辅助插件下载 六.ROS安装 1.安装ros 2.配置ROS…

PostgreSQL pg_repack 重新组织表并释放表空间

pg_repack pg_repack是 PostgreSQL 的一个扩展,它允许您从表和索引中删除膨胀,并可选择恢复聚集索引的物理顺序。与CLUSTER和VACUUM FULL不同,它可以在线工作,在处理过程中无需对已处理的表保持独占锁定。pg_repack 启动效率高&a…

5G_WiFi_CE_射频输出功率、发射功率控制(TPC)和功率密度测试

目录 一、规范要求 1、法规目录: (1)RF Output Power (2)Transmit Power Control (TPC) (3)Power Density 2、限值: 二、EIRP测试方法 (1)测试条件 (2&#xff…

扫描线离散化线段树解决矩形面积并-洛谷P5490

https://www.luogu.com.cn/problem/P5490 题目描述 求 n n n 个四边平行于坐标轴的矩形的面积并。 输入格式 第一行一个正整数 n n n。 接下来 n n n 行每行四个非负整数 x 1 , y 1 , x 2 , y 2 x_1, y_1, x_2, y_2 x1​,y1​,x2​,y2​,表示一个矩形的四个…

Java项目之基于ssm的简易版营业厅宽带系统(源码+文档)

项目简介 简易版营业厅宽带系统实现了以下功能: 此营业厅宽带系统利用当下成熟完善的SSM框架,使用跨平台的可开发大型商业网站的Java语言,以及最受欢迎的RDBMS应用软件之一的Mysql数据库进行程序开发。实现了营业厅宽带系统基础数据的管理&…

从入门到入土,SQLServer 2022慢查询问题总结

列为,由于公司原因,作者接触了一个SQLServer 2022作为数据存储到项目,可能是上一任的哥们儿离开的时候带有情绪,所以现在项目的主要问题就是,所有功能都实现了,但是就是慢,列表页3s打底,客户很生气,经过几周摸爬滚打,作以下总结,作为自己的成长记录。 一、索引问题…

PDF处理控件Aspose.PDF教程:在Python、Java 和 C# 中旋转 PDF 文档

您是否希望快速轻松地在线旋转PDF文档?无论您需要修复文档的方向还是只想重新排列页面,本指南都能满足您的需求。有简单的方法可以解决此问题 - 无论您喜欢在线工具还是编程解决方案。 在本指南中,我们将向您展示如何免费在线旋转 PDF&#…

编译原理:first集和follow

一、First 集(首符号集) 定义: 对于符号(非终结符或终结符)或符号串,First 集是该符号串能够推导出的所有可能开头的终结符的集合。若符号串可以推导出空串(ε),则 ε 也…

python实现简单fast-cgi服务,对接到nginx

python代码 import socket import struct import threading# FastCGI 头格式(8 字节) FCGI_HEADER_FORMAT "!BBHHBx" FCGI_VERSION 1 FCGI_TYPE_BEGIN_REQUEST 1 FCGI_TYPE_PARAMS 4 FCGI_TYPE_STDIN 5 FCGI_TYPE_STDOUT 6 FCGI_TYPE_E…

vue开始时间小于等于结束时间,且开始时间小于等于系统时间,时间格式:年月日时分

// 日期配置 export const DATA_CONFIGS [{itemKey: "startDate",startDateKey: "startDate",endDateKey: "endDate",isStart: true,},{itemKey: "endDate",startDateKey: "startDate",endDateKey: "endDate",is…

PyCharm 下载与安装教程:从零开始搭建你的 Python 开发环境

PyCharm 是一款专为 Python 开发设计的集成开发环境(IDE),它提供了强大的代码编辑、调试、版本控制等功能,是 Python 开发者的必备工具之一。如果你是初学者,或者正在寻找一款高效的开发工具,这篇文章将帮助…

Qt线程等待条件QWaitCondition

Qt 线程等待条件 概念 Qt提供了QWaitCondition类实现“等待条件”式的线程控制方法,它让线程阻塞在等待条件的地方,直到条件满足后才继续执行下去。也就是说,QWaitCondition可以使一个线程在满足一定条件时通知其他多个线程,使它…

RAG 和 RAGFlow 学习笔记

一、RAG(检索增强生成) 1. RAG 的定义与核心思想 RAG(Retrieval-Augmented Generation,检索增强生成) 是一种结合 信息检索(Retrieval) 和 文本生成(Generation) 的技术…