2024年 第10篇
bidirectional RNN(双向 RNN)
Deep RNN(多层 RNN)
Many to One(多对一)
One to Many (一对多)
Many to Many (多对多)
上一篇文章我们介绍了一个基本的 RNN 模块。有了 这个 RNN 模块后,就像搭积木一样,以 RNN 为基本单元,根据不同的任务或者需求,可以构建不同的模型架构。本节介绍的所有结构,在实际使用时均可以用 RNN 的变体 LSTM,GRU 等作为基本单元,方便起见,本小节我们以 RNN 为基本单元进行说明。我们来认识下 RNN 一些常见的模型架构。
当我们可以获得一条完整的输入序列时,即每个时刻的输入数据都可以同时获得。我们不仅可以利用 RNN 从左到右的进行计算,同时也可以从右到左进行计算。如图 1-1 所示,用 2 个不同 Cell 分别捕捉来自不同方向的 memory(信息)。
先对图片和公式中的符号集中说明,需要时方便查看:
前文我们介绍的 RNN,是数据在时间维度上的变换。不论时间维度多长,只有一个 RNN 模块, 即只有一组待学习参数(W, U),属于单层 RNN。deep RNN 也叫做多层 RNN,顾名思义它由多个 RNN 级联组成,是输入数据在空间维度上变换。如图 1-2, 这是 L 层的 RNN 架构。每一层是一个单独的 RNN,共有 L 个 RNN。
在 RNN 的结构中,并不是每个时刻都要输出,根据任务需求的不同,我们可以自行决定,什么时候输出。比如我们在做情感分类任务时,一句话有多个文字,但只在最后时刻有个输出,表示 positive 或者 negtive。“多对一”的结构可以完成这个任务,如图 1-3 所示, 有多个输入,最后时刻的隐状态 ,包含了整句话的信息,然后将 经过变换后输出这句话的情感状态。需要额外注意,图 1-3 只是一个结构示意图,图中蓝框不仅仅可以代表单个 RNN,有时候也可以代表 biRNN 模块或者 DeepRNN 模块。
顾名思义“One to Many”是只有一个时刻的输入,具有多个时刻输出的结构。如图 1-4 所示,比如我们要描绘一张图片的内容时,用一个 CNN 模型将图片映射为一个高维表示,记作 x1 并作为 RNN 的输入,然后不断输出对图片的描述。
从 Encode 和 Decode 的架构看,“Many to Many”有两种不同的结构。一种是 Encode 和 Decode 分别用不同的模块,即参数不一样;另外一种是 Encode 和 Decode 共用同一个模块,即共用一组参数。如图 1-5 是 Encode 和 Decode 不同模块的结构,常用于翻译任务中。这种结构可以看成是“Manyto One”结构和“One to Many”结构的组合。
如图 1-6 是 Encode 和 Decode 属于相同模块的结构, 常用于“Language Modeling”。
本文以基础的 RNN 模块为基本单元,先介绍双向 RNN 和 DeepRNN 的原理。然后介绍一些应用更加灵活和广泛的架构,如"Many to One","One to Many","Many to Many"。下一节将要从直观上理解 RNN 的两个问题:信息形变和梯度消失/爆炸。文中难免存在理解不正确,或者描述不清的地方。欢迎留言讨论。
「三翼鸟数字化技术平台-智慧设计团队」依托实体建模技术与人工智能技术打造面向家电的智能设计平台,为海尔特色的成套家电和智慧场景提供可视可触的虚拟现实体验。智慧设计团队提供全链路设计,涵盖概念化设计、深化设计、智能仿真、快速报价、模拟施工、快速出图、交易交付、设备检修等关键环节,为全屋家电设计提供一站式解决方案
_________________ END__________________