当前位置: 首页 > news >正文

序列建模之循环和递归网络 - 渗漏单元和其他多时间尺度的策略篇

序言

在序列建模的广阔领域中,循环神经网络( RNN \text{RNN} RNN)及其变体如长短期记忆网络( LSTM \text{LSTM} LSTM)和门控循环单元( GRU \text{GRU} GRU)占据了核心地位。然而,这些网络在处理长期依赖问题时常常面临挑战,如梯度消失或爆炸。为了克服这些难题,研究者们提出了多种策略,其中渗漏单元( Leaky Units \text{Leaky Units} Leaky Units)和多时间尺度策略尤为引人注目。这些策略旨在通过调整网络结构或单元行为,使信息能够在不同时间尺度上有效传递,从而增强网络对长期依赖的捕捉能力。

渗漏单元和其他多时间尺度的策略

  • 处理长期依赖的一种方法是设计工作在多个时间尺度的模型,使模型的某些部分在细粒度时间尺度上操作并能处理小细节,而其他部分在粗时间尺度上操作并能把遥远过去的信息更有效地传递过来。存在多种同时构建粗细时间尺度的策略。这些策略包括在时间轴增加跳跃连接,“渗漏单元’’ 使用不同时间常数整合信号,并去除一些用于建模细粒度时间尺度的连接。

时间维度的跳跃连接

  • 增加从遥远过去的变量到目前变量的直接连接是得到粗时间尺度的一种方法。使用这样跳跃连接的想法可以追溯到 Lin et al. (1996) \text{Lin et al. (1996)} Lin et al. (1996),紧接是向前馈网络引入延迟的想法 ( Lang and Hinton, 1988 \text{Lang and Hinton, 1988} Lang and Hinton, 1988)。在普通的循环网络中,循环从时刻 t t t 的单元连接到时刻 t + 1 t + 1 t+1 单元。构造较长的延迟循环网络是可能的 ( Bengio et al., 1991 \text{Bengio et al., 1991} Bengio et al., 1991)。
  • 正如我们在神经网络优化中的挑战篇 - 长期依赖中看到,梯度可能关于时间步数数消失或成倍爆炸。
    • ( Lin et al., 1996 \text{Lin et al., 1996} Lin et al., 1996) 引入了 d d d 延时的循环连接以减轻这个问题。
    • 现在导数指数减小的速度与 τ d \displaystyle\frac{\tau}{d} dτ相关而不是 τ \tau τ
    • 既然同时存在延迟和单步连接,梯度仍可能成 t t t 指数爆炸。
    • 这允许学习算法捕获更长的依赖性,但不是所有的长期依赖都能在这种方式下良好地表示。

渗漏单元和一系列不同时间尺度

  • 获得导数乘积接近 1 1 1 的另一方式是设置线性自连接单元,并且这些连接的权重接近 1 1 1
  • 我们对某些 v v v 值应用更新 μ ( t ) ← α μ ( t − 1 ) + ( 1 − α ) v ( t ) \mu^{(t)}\gets\alpha\mu^{(t-1)}+(1-\alpha)v^{(t)} μ(t)αμ(t1)+(1α)v(t) 累积一个滑动平均值 μ ( t ) \mu^{(t)} μ(t),其中 α \alpha α 是一个从 μ ( t − 1 ) \mu^{(t-1)} μ(t1) μ ( t ) \mu^{(t)} μ(t) 线性自连接的例子。
    • α \alpha α 接近 1 1 1 时,滑动平均值能记住过去很长一段时间的信息,
    • 而当 α \alpha α 接近 0 0 0,关于过去的信息被迅速丢弃。
    • 线性自连接的隐藏单元可以模拟滑动平均的行为。这种隐藏单元称为渗漏单元 ( leaky unit \text{leaky unit} leaky unit)。
  • d d d 时间步的跳跃连接可以确保单元总能被先前的 d d d 个时间步值影响。使用权重接近 1 1 1 的线性自连接是确保该单元可以访问过去值的不同方式。线性自连接通过调节实值 α \alpha α 更平滑灵活地调整这种效果,而不是调整整数值的跳跃长度。
  • 这个想法由 Mozer (1992) \text{Mozer (1992)} Mozer (1992) El Hihi and Bengio (1996) \text{El Hihi and Bengio (1996)} El Hihi and Bengio (1996) 提出。在回声状态网络中,渗漏单元也被发现很有用 ( Jaeger et al., 2007 \text{Jaeger et al., 2007} Jaeger et al., 2007)。
  • 我们可以通过两种基本策略设置渗漏单元使用的时间常数。
    • 一种策略是手工将其固定为常数,例如在初始化时从某些分布采样它们的值。
    • 另一种策略是使时间常数成为自由变量,并学习出来。在不同时间尺度使用这样的渗漏单元似乎能帮助学习长期依赖( Mozer, 1992; Pascanu et al., 2013a \text{Mozer, 1992; Pascanu et al., 2013a} Mozer, 1992; Pascanu et al., 2013a)。

删除连接

  • 处理长期依赖另一种方法是在多个时间尺度组织 RNN \text{RNN} RNN状态的想法 ( El Hihi and Bengio, 1996 \text{El Hihi and Bengio, 1996} El Hihi and Bengio, 1996),信息在较慢的时间尺度上更容易长距离流动。
  • 这个想法与之前讨论的时间维度上的跳跃连接不同,因为它涉及主动删除长度为一的连接并用更长的连接替换它们。
    • 以这种方式修改的单元被迫在长时间尺度上运作。
    • 而通过时间跳跃连接是添加边。
    • 收到这种新连接的单元,可以学习在长时间尺度上运作,但也可以选择专注于自己其他的短期连接。
  • 强制一组循环单元在不同时间尺度上运作有不同的方式。
    • 一种选择是使循环单元变成渗漏单元,但不同的单元组关联不同的固定时间尺度。这由 Mozer (1992) \text{Mozer (1992)} Mozer (1992)提出,并被成功应用于 Pascanu et al. (2013a) \text{Pascanu et al. (2013a)} Pascanu et al. (2013a)
    • 另一种选择是使显式且离散的更新发生在不同的时间,不同的单元组有不同的频率。这是 El Hihi and Bengio (1996) \text{El Hihi and Bengio (1996)} El Hihi and Bengio (1996) Koutnik et al. (2014) \text{Koutnik et al. (2014)} Koutnik et al. (2014) 的方法。它在一些基准数据集上表现不错。

总结

  • 渗漏单元作为一种重要的多时间尺度策略,通过引入线性自连接并允许权重接近 1 1 1,模拟了滑动平均行为,使得信息能够在较长时间内保持流动。
  • 此外,结合不同时间尺度的策略,如增加跳跃连接、使用不同时间常数的渗漏单元等,进一步增强了网络处理长期依赖的能力。这些策略不仅丰富了循环神经网络的工具箱,也为解决序列建模中的长期依赖问题提供了新的思路。
  • 在实际应用中,这些策略已被证明是有效的,特别是在自然语言处理、语音识别等领域取得了显著成果。
  • 未来,随着研究的深入,我们期待看到更多创新的多时间尺度策略涌现,进一步推动序列建模技术的发展。

往期重要内容回顾

深度模型中的优化 - 神经网络优化中的挑战篇

相关文章:

  • 北京网站建设多少钱?
  • 辽宁网页制作哪家好_网站建设
  • 高端品牌网站建设_汉中网站制作
  • 帆软报表设计器函数相关问题
  • OLED整体刷新到结合switch刷新方式演变
  • Swin-Transformer论文阅读
  • 打印空心正方形(c语言)
  • 8.20
  • 【人工智能】Transformers之Pipeline(十一):零样本图片分类(zero-shot-image-classification)
  • SpringSecurity6
  • 学习C语言 第十八天
  • Java面试题--分布式锁
  • 多目标跟踪之StrongSORT论文(翻译+精读)
  • 目标检测 | yolov9 原理和介绍
  • 吐血整理 ChatGPT 3.5/4.0/4o 新手使用手册~
  • 使用 Python 进行 PDF 文件加密
  • Sed编辑器
  • 【案例49】ORA-01000:超出打开游标的最大数
  • 【Linux系统编程】快速查找errno错误码信息
  • Cookie 在前端中的实践
  • dva中组件的懒加载
  • ES学习笔记(12)--Symbol
  • Golang-长连接-状态推送
  • Intervention/image 图片处理扩展包的安装和使用
  • jquery ajax学习笔记
  • MaxCompute访问TableStore(OTS) 数据
  • node-glob通配符
  • php中curl和soap方式请求服务超时问题
  • React 快速上手 - 06 容器组件、展示组件、操作组件
  • Spring Boot MyBatis配置多种数据库
  • uva 10370 Above Average
  • vue.js框架原理浅析
  • 不上全站https的网站你们就等着被恶心死吧
  • 创建一个Struts2项目maven 方式
  • 从0搭建SpringBoot的HelloWorld -- Java版本
  • 好的网址,关于.net 4.0 ,vs 2010
  • 看域名解析域名安全对SEO的影响
  • 排序(1):冒泡排序
  • 前端js -- this指向总结。
  • 前端存储 - localStorage
  • 如何用Ubuntu和Xen来设置Kubernetes?
  • 我们雇佣了一只大猴子...
  • ###C语言程序设计-----C语言学习(3)#
  • (+3)1.3敏捷宣言与敏捷过程的特点
  • (2.2w字)前端单元测试之Jest详解篇
  • (35)远程识别(又称无人机识别)(二)
  • (JSP)EL——优化登录界面,获取对象,获取数据
  • (Redis使用系列) SpringBoot中Redis的RedisConfig 二
  • (四)事件系统
  • (提供数据集下载)基于大语言模型LangChain与ChatGLM3-6B本地知识库调优:数据集优化、参数调整、Prompt提示词优化实战
  • (一)WLAN定义和基本架构转
  • **PHP二维数组遍历时同时赋值
  • .NET 5.0正式发布,有什么功能特性(翻译)
  • .Net 6.0--通用帮助类--FileHelper
  • .NET Core 实现 Redis 批量查询指定格式的Key
  • .Net IOC框架入门之一 Unity
  • .NET 跨平台图形库 SkiaSharp 基础应用
  • .NET/C# 如何获取当前进程的 CPU 和内存占用?如何获取全局 CPU 和内存占用?