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

news2024/11/25 21:19:01

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.coloradmin.cn/o/2092755.html

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

相关文章

【C++ 第十八章】C++11 新增语法(1)

1. C11简介 在2003年C标准委员会曾经提交了一份技术勘误表(简称TC1),使得C03这个名字已经取代了C98称为C11之前的最新C标准名称。不过由于C03(TC1)主要是对C98标准中的漏洞进行修复,语言的核心部分则没有改动,因此人们习惯性的把两个标准合并…

2016年系统架构师案例分析试题五

目录 案例 【题目】 【问题 1】(10 分) 【问题 2】(6 分) 【问题 3】(9 分) 【答案】 【问题 1】解析 【问题 2】解析 【问题 3】解析 相关推荐 案例 阅读以下关于 Scrum 敏捷开发过程的叙述,在答题纸上回答问题 1 至问题 3。 【题目】 Scrum 是一个增量…

C语言典型例题57

《C程序设计教程(第四版)——谭浩强》 例题4.9 判断整数是否为素数 代码: //《C程序设计教程(第四版)——谭浩强》 //例题4.9 判断整数是否为素数//【数学知识】素数:一个大于1的自然数,如果只…

我从obsidian 转入 语雀 了

遇到的问题倒是不多,这里记录一下: 1. wiki链接转markdown 用vscode打开ob工作区文件夹,利用正则表达式,替换链接 \[\[(.*?)\]\][$1](../_resources/$1) 我的图片都存在_resources文件夹里 其中ob的json,还有插件的…

JavaEE:多线程代码案例(定时器)

文章目录 定时器介绍Java标准库中的定时器定时器的实现 定时器 介绍 除了之前说过的单例模式,阻塞队列,线程池以外,定时器也是我们日常开发中常用的代码~ 定时器相当于"闹钟".在现实生活中,当闹钟响时,我们就需要去完成一些事情. 同理,在代码中,也经常需要"闹…

力扣406-根据身高重建队列(java详细题解)

题目链接:406. 根据身高重建队列 - 力扣(LeetCode) 前情提要: 因为本人最近都来刷贪心类的题目所以该题就默认用贪心方法来做。 贪心方法:局部最优推出全局最优。 如果一个题你觉得可以用局部最优推出全局最优&…

【自用16.】C++类

类的构成 类的设计 代码demo #include <iostream> #include <Windows.h> #include <string>using namespace std;// 定义一个“人类” class Human { public: //公有的&#xff0c;对外的void eat(); //方法&#xff0c; “成员函数”void sleep();void …

从零开始搭建本地安全 AI 大模型攻防知识库

本文将系统分享从零开始搭建本地大模型问答知识库过程中所遇到的问题及其解决方案。 1 概述 目前&#xff0c;搭建大语言问答知识库能采用的方法主要包括微调模型、再次训练模型以及增强检索生成&#xff08;RAG&#xff0c;Retrieval Augmented Generation&#xff09;三种方…

51单片机-定时器介绍

时间&#xff1a;2024.8.31 作者&#xff1a;Whappy 目的&#xff1a;手撕51 代码&#xff1a; 现象&#xff1a;

【fastapi】fastapi的hello world

新建这样的目录结构 main.py的代码如下 from fastapi import FastAPI from fastapi.templating import Jinja2Templatesapp FastAPI()# 初始化 Jinja2 模板引擎 templates Jinja2Templates(directory"templates")app.get("/") async def home():contex…

AI编码新时代:免费人工智能助手Blackbox AI

前言&#xff1a; 在当今快速发展的科技时代&#xff0c;人工智能已经渗透到我们生活的方方面面&#xff0c;从智能手机的语音助手到智能家居控制系统&#xff0c;再到在线客服和个性化推荐算法&#xff0c;AI智能工具正变得越来越普遍。它们以其高效、智能和用户友好的特性&am…

已成功入职小米大模型岗!!大模型面试其实挺水的,hr听到这些直接过

小米大模型面试180题 1、目前比较受欢迎的开源大模型有哪些&#xff1f; GPT系列&#xff1a;由OpenAl开发的生成式预训练模型&#xff0c;如 GPT-3。 BERT系列&#xff1a;由Google开发的转换式预训练模型&#xff0c;如BERT、RoBERTa等。 T5系列&#xff1a;由Google开发的基…

Docker 实战加速器(紧急情况!镜像库全面失效,一招解决Docker无法下载)

现象: Docker 加速器原理 Docker 镜像加速器可以帮助你更快地从 Docker Hub 或其他镜像仓库下载镜像,特别是在网络环境较差或访问 Docker Hub 较慢的情况下。常见的加速器提供商包括阿里云、网易云等。 Docker 加速器原理 Docker 镜像加速器通过在本地设置一个代理服务器,…

【ubuntu笔记】Ubuntu下SourceInsight 4.x中文乱码问题

Options->Preferences->Files&#xff0c;最底部有个Default Encoding选项&#xff0c;选择UTF-8 Options->Preferences->Syntax Decorations->File Types->Screen Font&#xff0c;选择一个可以显示中文的字体&#xff0c;例如"文泉驿等宽微米黑"…

wsl下将Ubuntu从c盘移动到其他盘

一、概述 因为自己的C盘内存不足&#xff0c;加上之后需要在Ubuntu下面下载许多的内容和东西&#xff0c;需要将其移动到d盘上面&#xff0c;这样可以拥有更大的空间。这里记载了一下自己的操作过程。 二、具体步骤 &#xff08;一&#xff09;过程 1.查看当前系统中wsl分发版…

在uni-app中使用SQLite

目录 1、引入sqlite模块 2、sqlite文件结构 3、初始化文件index.js 4、打开数据库 5、查询数据 6、可视化测试 SQLite是一个进程内的库&#xff0c;实现了自给自足的、无服务器的、零配置的、事务性的 SQL 数据库引擎。它是一个零配置的数据库&#xff0c;这意味着与其他…

【网络安全】服务基础第一阶段——第八节:Windows系统管理基础---- Web服务与虚拟主机

目录 一、WWW概述 1.1 HTML 1.2 URI与URL 1.2.1 URL&#xff08;统一资源标识符&#xff0c;Uniform Resource Locator&#xff09; 1.3 HTTP 1.3.1 HTTP请求&#xff1a; 1.3.2 HTTP响应 1.3.3 状态码 1.4常见Web URL格式 实验一、网站搭建 1&#xff09;访问失败可…

实训day29(8.15)

一、python管理mysql 1、搭建主mysql [rootmysql57 ~]# tar -xf mysql-5.7.44-linux-glibc2.12-x86_64.tar.gz [rootmysql57 ~]# cp -r mysql-5.7.44-linux-glibc2.12-x86_64 /usr/local/mysql [rootmysql57 ~]# rm -rf /etc/my.cnf [rootmysql57 ~]# mkdir /usr/local/mysql…

DCB简介

DCB协议组主要用于构建无丢包以太网&#xff0c;以满足数据中心网络融合后的QoS需求。 数据中心网络融合后&#xff0c;LAN、SAN和IPC流量的QoS需求上存在较大的差异&#xff1a; SAN流量对丢包很敏感且要求报文在传输过程中是保序的。LAN流量允许丢包&#xff0c;只需要设备…

MySQL基础学习:MySQL主从复制如何实现

这里写自定义目录标题 一、为什么使用MySQL主从二、主从复制原理是什么三、如何保证主从一致 一、为什么使用MySQL主从 保证服务的高可用&#xff1a;当主机宕机的时候可以选择一个从节点作为主节点&#xff0c;保证了我们服务的高可用。保证容灾备份&#xff1a;主库上的磁盘…