深度学习:手撕 RNN(2)-RNN 的常见模型架构

本文首次发表于知乎,欢迎关注作者。 

上一篇文章我们介绍了一个基本的 RNN 模块。有了 这个 RNN 模块后,就像搭积木一样,以 RNN 为基本单元,根据不同的任务或者需求,可以构建不同的模型架构。本节介绍的所有结构,在实际使用时均可以用 RNN 的变体 LSTM,GRU 等作为基本单元,方便起见,本小节我们以 RNN 为基本单元进行说明。我们来认识下 RNN 一些常见的模型架构。

1. bidirectional RNN(双向 RNN)

当我们可以获得一条完整的输入序列时,即每个时刻的输入数据都可以同时获得。我们不仅可以利用 RNN 从左到右的进行计算,同时也可以从右到左进行计算。如图 1-1 所示,用 2 个不同 Cell 分别捕捉来自不同方向的 memory(信息)。

先对图片和公式中的符号集中说明,需要时方便查看:

2. Deep RNN(多层 RNN)

前文我们介绍的 RNN,是数据在时间维度上的变换。不论时间维度多长,只有一个 RNN 模块, 即只有一组待学习参数 (W,U),属于单层 RNN。deep RNN 也叫做多层 RNN,顾名思义它由多个 RNN 级联组成,是输入数据在空间维度上变换。如图 1-2, 这是 L 层的 RNN 架构。每一层是一个单独的 RNN,共有 L 个 RNN。

3. Many to One(多对一)

在 RNN 的结构中,并不是每个时刻都要输出,根据任务需求的不同,我们可以自行决定,什么时候输出。比如我们在做情感分类任务时,一句话有多个文字,但只在最后时刻有个输出,表示 positive 或者 negtive。“多对一”的结构可以完成这个任务,如图 1-3 所示, 有多个输入,最后时刻的隐状态 h_T,包含了整句话的信息,然后将 h_T 经过变换后输出这句话的情感状态。需要额外注意,图 1-3 只是一个结构示意图,图中蓝框不仅仅可以代表单个 RNN,有时候也可以代表 biRNN 模块或者 DeepRNN 模块。

4. One to Many (一对多)

顾名思义“One to Many”是只有一个时刻的输入,具有多个时刻输出的结构。如图 1-4 所示,比如我们要描绘一张图片的内容时,用一个 CNN 模型将图片映射为一个高维表示,记作 x1 并作为 RNN 的输入,然后不断输出对图片的描述。

5. Many to Many (多对多)

从 Encode 和 Decode 的架构看,“Many to Many”有两种不同的结构。一种是 Encode 和 Decode 分别用不同的模块,即参数不一样;另外一种是 Encode 和 Decode 共用同一个模块,即共用一组参数。如图 1-5 是 Encode 和 Decode 不同模块的结构,常用于翻译任务中。这种结构可以看成是“Manyto One”结构和“One to Many”结构的组合。

如图 1-6 是 Encode 和 Decode 属于相同模块的结构, 常用于“Language Modeling”。

6. 结语

本文以基础的 RNN 模块为基本单元,先介绍双向 RNN 和 DeepRNN 的原理,然后介绍一些应用更加灵活和广泛的架构,如"Many to One","One to Many","Many to Many"。下一节将要从直观上理解 RNN 的两个问题:信息形变和梯度消失/爆炸。文中难免存在理解不正确,或者描述不清的地方。欢迎留言讨论。

7. 团队介绍

「三翼鸟数字化技术平台-智慧设计团队」 依托实体建模技术与人工智能技术打造面向家电的智能设计平台,为海尔特色的成套家电和智慧场景提供可视可触的虚拟现实体验。智慧设计团队提供全链路设计,涵盖概念化设计、深化设计、智能仿真、快速报价、模拟施工、快速出图、交易交付、设备检修等关键环节,为全屋家电设计提供一站式解决方案。

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

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

相关文章

JS移动端设置mouseover,mouseleave有效么

在移动设备的浏览器环境中,mouseover 和 mouseleave 事件的行为与桌面浏览器有所不同,主要是因为移动设备的交互方式主要是基于触摸的,而不是基于鼠标的。 在移动设备上,当用户触摸屏幕时,通常会触发 touchstart 事件…

mysql查询的时间复杂度

SELECT * FROM customers WHERE age > 25; 首先是普通的select,如果没有建立任何的索引的话,假设数据量为N,那么时间复杂度为O(N) 如果对age添加了索引,那么复杂度为O(log n) 假设使用了in操作,总共查找M种&…

Codeforces Round 947 (Div. 1 + Div. 2) D. Paint the Tree 题解 DFS

Paint the Tree 题目描述 378QAQ has a tree with n n n vertices. Initially, all vertices are white. There are two chess pieces called P A P_A PA​ and P B P_B PB​ on the tree. P A P_A PA​ and P B P_B PB​ are initially located on vertices a a a an…

Spring Boot与MongoDB集成指南

1. 引言 在当今快速发展的软件开发领域,选择合适的技术栈对于构建高效、可扩展的应用程序至关重要。随着微服务架构和云原生应用的兴起,开发人员需要更灵活、更快速的解决方案来满足不断变化的业务需求。Spring Boot和MongoDB的结合正是这一需求的完美答…

运维开发.MySQL.范式与反范式化

运维开发 MySQL.三大范式 - 文章信息 - Author: 李俊才 (jcLee95) Visit me at CSDN: https://jclee95.blog.csdn.netMy WebSite:http://thispage.tech/Email: 291148484163.com. Shenzhen ChinaAddress of this article:https://blog.csdn.net/qq_28550263/artic…

jest测试

文章目录 测试testexpecttoThrow asyncPromiseAsync/Await 作用域一次性设置 beforeAll and afterAll重复设置 beforeEach 和 afterEachdescribe 块 mockcli配置覆盖率测试报告 测试 test test(name, () > {function} }expect () > {expect(期望value).toBe(匹配value…

python海龟绘图(你的作业说不定就在这里)

三角形 from turtle import * for i in range(3):forward(100)left(120)基本绘图​​​​​ 让海龟前进 100 步: forward(100)你应该会看到(最可能的情况,是在你的显示器的一个新窗口中)海龟画出一条线段,方向朝东。 改变海龟的…

spdlog日志库源码:线程池thread_pool

线程池 线程池本质上一组事先创建的子线程,用于并发完成特定任务的机制,避免运行过程中频繁创建、销毁线程,从而降低程序运行效率。通常,线程池主要涉及到以下几个方面问题: 如何创建线程池?线程池如何执…

Ubuntu22.04之解决:登录计算机的密码与登录密钥环里的密码不再匹配(二百三十四)

简介: CSDN博客专家,专注Android/Linux系统,分享多mic语音方案、音视频、编解码等技术,与大家一起成长! 优质专栏:Audio工程师进阶系列【原创干货持续更新中……】🚀 优质专栏:多媒…

微信网页版登录插件v1.1.1

说到如今的微信客户端,大家肯定会有很多提不完的意见或者建议。比如这几年体积越来越大,如果使用频率比较高,那占用空间就更离谱了。系统迷见过很多人电脑C盘空间爆满,都是由于微信PC版造成的。 而且,它还加了很多乱七…

15、Spring系统-AOP

ProxyFactory选择cglib或jdk动态代理原理 ProxyFactory在生成代理对象之前需要决定到底是使用JDK动态代理还是CGLIB技术: 代理对象创建过程 JdkDynamicAopProxy 在构造JdkDynamicAopProxy对象时,会先拿到被代理对象自己所实现的接口,并且…

VSCODE终端输出中文乱码 菱形问号?

问题现象 VSCODE终端输出中文乱码 菱形问号? 解决方法 方法一 设置系统环境变量 变量名:PYTHONIOENCODING 值:utf8 方法二 安装插件Code Runner插件在设置中搜索 code-runner.executorMap,再点击在setting.json中编辑&#x…

达梦数据库

达梦数据库 达梦Docker部署 达梦Docker部署 1、下载链接 https://pan.baidu.com/s/1RI3Lg0ppRhCgUsThjWV6zQ?pwdjc62 2、docker启动命令 docker run -d -p 5236:5236 \ --restartalways \ --name dm8 \ -e LD_LIBRARY_PATH/app/dm8/bin \ -e LENGTH_IN_CHAR1 \ -e CASE_SENS…

powershell 配合aria2实现简单的图片爬取

powershell 配合aria2实现简单的图片爬取 01 前言 现如今,提到爬虫,令人不得不提到Python,确实简单,也强大,到处都可以找到教程。故而今天换换口味,用powershell来实现,配合aria2的强大下载功…

目标检测 | R-CNN、Fast R-CNN与Faster R-CNN理论讲解

☀️教程:霹雳吧啦Wz ☀️链接:https://www.bilibili.com/video/BV1af4y1m7iL?p1&vd_sourcec7e390079ff3e10b79e23fb333bea49d 一、R-CNN R-CNN(Region with CNN feature)是由Ross Girshick在2014年提出的,在PAS…

leetcode 684.冗余连接

思路:并查集 这里的图比较像一种特殊的数据结构,其实也是图论的一种东西,就是基环树,但是这里并不是有向图,而是无向图,所以并不能用那种剪枝操作然后找基环。 看到连通量,我们应该能想到两种…

Qt 配置Eigen矩阵库 - 并简单测试

Qt 配置Eigen矩阵库 - 并简单测试 引言一、在Qt中配置Eigen二、低通Demo源码三、参考链接以及其他 引言 Eigen是一个开源的C模板库,提供了线性代数和矩阵运算的功能。它被设计为一个高性能、可扩展和易用的库,可以用于科学计算、机器学习和计算机图形学等…

HCIA-HarmonyOS Device Developer 课程大纲

一:OpenHarmony 介绍 - ( 3 课时) - OpenHarmony 简介;OpenHarmony 设计理念;OpenHarmony 设计理念概述; - OpenHarmony 试图解决的问题;应用生态割裂问题;用户数据割裂问题&#…

服务器感染了. rmallox勒索病毒,如何确保数据文件完整恢复?

导言: 近年来,随着信息技术的飞速发展,网络安全问题日益凸显。其中,勒索病毒作为一种严重的网络威胁,对个人和企业数据造成了巨大的威胁。本文将重点介绍.rmallox勒索病毒的特点、传播途径以及应对策略,旨…

【LeetCode算法】第94题:二叉树的中序遍历

目录 一、题目描述 二、初次解答 三、官方解法 四、总结 一、题目描述 二、初次解答 1. 思路:二叉树的中序遍历。访问二叉树的左子树,再访问二叉树的根节点,最后访问二叉树的右叉树。 2. 代码: void order(struct TreeNode* r…