2024.3.17 机器学习周报

引言

Abstract

文献阅读

1、题目

R-TRANSFORMER: RECURRENT NEURAL NETWORK ENHANCED TRANSFORMER

2、引言

递归神经网络长期以来一直是序列建模的主要选择。然而,它严重遭受两个问题:在捕获非常长期的依赖性和无法并行化的顺序计算过程中无能为力。因此,最近提出了许多基于卷积和注意力操作的非递归序列模型。值得注意的是,具有多头注意力的模型(如Transformer)在捕获各种序列建模任务中的长期依赖关系方面表现出了极大的有效性。尽管他们的成功,但是,这些模型缺乏必要的组件来模拟局部结构的序列,并严重依赖于位置嵌入,具有有限的效果,并需要大量的设计工作。在本文中,我们提出了R-Transformer,它既具有RNN和多头注意力机制的优点,又避免了各自的缺点。该模型可以有效地捕捉局部结构和全球长期依赖的序列,而不使用任何位置嵌入。我们通过广泛的实验来评估R-Transformer,实验结果表明,R-Transformer在大多数任务中的表现都远远优于最先进的方法。

3、问题

主要综合了RNN和Transformer两种模型的优点,提出了R-transformer

Transformer虽然在很多模型上表现出了很好的效果,但目前有两个比较致命的问题:

  • 第一是对于位置的编码,虽然transformer引入了Position embedding,但是其效果并不好。并且对于具体的任务还需要设计具体的位置编码方式;
  • 第二是多头注意力机制忽略了很多局部的特征

而RNN主要的问题是难以处理长距离依赖关系和难以实现并行

4、改进方法

将transformer的position embedding替换成局部的RNN,文章中称其为LocalRNN。具体来讲就是对一个序列,在每个位置的一个固定大小窗口范围内跑一个LocalRNN,将其局部的特征也表示到向量中,然后再按照transformer那样进行全局的多头attention和FeedForword

这个模型实际借鉴了TCN模型和标准transformer模型的思想。R-transformer借鉴了TCN层次化的思想,但在局部特征的提取方式上,TCN使用的是卷积核,而该模型使用了LocalRNN,这样可以更好地将位置信息进行提取。

通过以上改进,模型可以通过LocalRNN提取局部特征,弥补标准transformer在这方面的不足,同时在整体框架上依旧保持着transformer模型可并行的特点

5、R-Transformer模型

R-Transformer模型由一系列相同的层组成。每一层包含三个组件,按层次结构组织,层结构的架构如图1所示。较低级别是用于建模序列中的局部结构的本地循环神经网络;中间级别是能够捕捉全局长期依赖性的多头注意力;较高级别是逐位置的前馈网络,进行非线性特征转换。

R-Transformer提出用一个个单独的RNN来对每一个位置进行单独处理 (注:可以是Vanilla RNN,LSTM或者GRU),如下图,最底下的每一个红色圆代表句子中的一个词,最左侧虚线圆是补全上去的,每一个RNN只在一个窗口中运行,窗口的大小为3。假设没有补全,在第一个窗口中第一个红圆在第一位置,论文中需要确保处理每一个词时这个词后面的信息是不能获取到的,即将每一个需要处理的词放到窗口的最后一位,这样前面的都是过去的,不包含后面的信息,因此需要补全。

经过Local RNN之后每三个词就会对应一个隐藏状态,将隐藏状态和原始输入做一次Add & Norm

 

接下来会进入多头注意力层,这里与Transformer中的处理一致,区别是这里q,k,v是用隐藏状态进行初始化的。对于第 t 个时间步,首先初始化q,之后再初始化每一个k,v,然后与它们做点乘运算,形成这个q和整个序列的关系。结束多头注意力之后再过一下Add & Norm。最后经过全连接层和Add & Norm,全连接层的设置与Transformer一致。 

用公式来整体看一下N层的结构,对于 i^{th} 层(i\epsilon \left \{ 1,2,...,N \right \}):

R-Transformer通过单个的RNN捕捉位置信息来代替位置编码,因为每一个词都由不同的RNN处理,避免了传统的“一个接一个”的尴尬处境,进而可以并行化处理(每个RNN处理三个词不算多);另外,传统RNN由于中间传播很多次,很容易产生梯度消失和梯度爆炸的情况,这里的每一个RNN的处理总步长只有3,可以较有效地规避这两个问题。 

6、模型对比

TCN:与R-Transformer不同,TCN采取卷积运算的方式来获得位置信息,卷积的本质即是矩阵做点乘运算,将滤波器中的值换为query就可以获得滤波器窗口内词与词之间的联系,可是滤波器并非横向进行,而是一块窗口在选定范围内进行移动,因而忽略了序列信息。

7、实验

选取了图像,音频和文本数据作为实验对象,通过对照实验R-Transformer在文本领域略输于Transformer-XL,其他领域均优于Transformer-XL,Transformer和TCN。

选取了MNIST作为数据集,有趣的是这里把28 * 28的像素矩阵转为784 * 1的长序列矩阵,这样就使得原本靠的很近的像素离的很远,这样用以测试模型是否能够捕捉长距离依赖。

选取了Nottingham作为数据集,每个乐符与它附近的乐符都有较深的联系,这也就考验了模型捕捉本地序列关系信息的能力。实验中,学习率选自 \left \{ 5e^{-4},5e^{-5},5e^{-6} \right \},Dropout的概率为0.1,此外训练时还选取了梯度裁剪,用负对数似然(negative log likelihood)作为损失函数。 

这里选取了字符级(character-level)和词级(word-level)的文本,数据集为 PennTreebank,,任务是给定句子的前 N 个位置,预测下一个字符/词。

在字符级的任务中,学习率属于 {1,2,3} ,Dropout的概率为0.35,梯度裁剪同样用到,选取了bpc(bits-per-character)作为语言评价指标,先介绍困惑度(perplexity),对于一个长度为 � 的字符串,这里 w_{i} ​是字符。

 

在词级别的任务中,上面选择的参数不变,同时选取了Transformer-XL(SOTA)作为基例,对于它来说学习率选自于 {0.01,0.001,0.0001},结果是0.001效果最好。这里用的是困惑度(perplexity)作为评价指标,这里 w_{i} ​是词。对于Transformer-XL超过R-Transformer可以理解,毕竟是专门为该领域涉及的SOTA版。 

 8、结果

在本文中,我们提出了一种新的通用序列模型,它既具有RNN和多头注意力的优点,又减轻了它们的缺点。具体来说,它由一个LocalRNN和一个多头注意力池组成,LocalRNN学习局部结构,而不会受到RNN的任何弱点的影响,多头注意力池可以有效地捕获长期依赖关系,而无需任何位置嵌入的帮助。此外,该模型可以很容易地实现与序列中的位置完全并行化。来自广泛领域的序列建模任务的实证结果表明,R-Transformer比最先进的非递归序列模型(如TCN和标准Transformer以及规范递归架构)具有显着的优势。

总结

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

如若内容造成侵权/违法违规/事实不符,请联系我们进行投诉反馈qq邮箱809451989@qq.com,一经查实,立即删除!

相关文章

【Javascript编程实操06】1、反转数组和字符串 2、将二维数组转一维数组

前言 1、反转数组和字符串 代码: 实现效果: 2、将二维数组转一维数组 代码: 实现效果: 总结 前言 本次主要是针对Javascript阶段的字符串与数组的实操练习,共有2个实操,大家可以在实操的过程中更加深…

程序人生——Java泛型和反射的使用建议

目录 引出泛型和反射建议93:Java的泛型是类型擦除的建议94:不能初始化泛型参数和数组建议95:强制声明泛型的实际类型 建议96:不同的场景使用不同的泛型通配符建议97:警惕泛型是不能协变和逆变的 建议98:建议…

基于springboot实现小区物业管理系统项目【项目源码+论文说明】

基于springboot实现小区物业管理系统演示 摘要 随着城镇人口居住的集中化加剧 ,传统人工小区管理模式逐渐跟不上时代的潮流。这就要求我们提供一个专门的管理系统。来提高物管的工作效率、为住户提供更好的服务。 物业管理系统运用现代化的计算机管理手段,使物业的…

基于YOLOv8/YOLOv7/YOLOv6/YOLOv5的安全帽检测系统(深度学习模型+UI界面代码+训练数据集)

摘要:开发先进的安全帽识别系统对提升工作场所的安全性至关重要。本文详细介绍了使用深度学习技术创建此类系统的方法,并分享了完整的实现代码。系统采用了强大的YOLOv8算法,并对其与YOLOv7、YOLOv6、YOLOv5的性能进行了详细比较,…

MySQL:视图

1. 概述 在MySQL中,视图(View)是一个虚拟存在的表,其内容是由查询定义的。视图本身并不包含数据,它只包含一条SQL查询语句(即定义视图的SELECT语句)。当通过视图访问数据时,MySQL会执…

【SpringBoot3】整合Druid数据源和Mybatis 项目打包和运行

文章目录 一、整合Druid数据源二、整合Mybatis2.1 MyBatis整合步骤2.1 Mybatis整合实践2.1 声明式事务整合配置2.1 AOP整合配置 三、项目打包和运行命令启动和参数说明 总结web 与 springboot 打包区别JDK8的编译环境 执行17高版本jar 一、整合Druid数据源 创建模块 &#xff1…

Fork - 将 GitHub 的某个特定仓库复制到自己的账户下

Fork - 将 GitHub 的某个特定仓库复制到自己的账户下 1. ForeverStrongCheng/OpenCV-tutorials2. Fork -> ForeverStrongCheng/R2CNN_Faster-RCNN_TensorflowReferences 访问仓库页面,点击 Fork 按钮创建自己的仓库。 Fork 是将 GitHub 的某个特定仓库复制到自己…

【Python编程基础】第一节.Python基本语法(上)

文章目录 前言⼀、Python介绍二、Python环境配置三、Pycharm 书写代码四、Python基本语法 4.1 print 函数的简单使用 4.2 注释 4.3 Python 代码中三种波浪线和 PEP8 4.4 在 cmd 终端中运⾏ Python 代码 4.5 变量 4.6 数据类型 4.7 类型转换…

【docker】docker的常用命令

📝个人主页:五敷有你 🔥系列专栏:中间件 ⛺️稳中求进,晒太阳 常规命令 docker version #查看docker 版本信息docker info #显示docker 的系统信息,包括镜像和容器数量docker --help #查看所有的命…

花钱买不到系列-linux信号[1]卷

我们下面要学的这个,信号,它呢就挺好玩的,虽然它也有一点点难,那么尤其是这里要进入第二阶段的进程地质空间的分享。 第一阶段,是当时在讲进程概念时,学了个进程地址空间,当时知道了地址空间页表…

基于大模型和向量数据库的 RAG 示例

1 RAG 介绍 RAG 是一种先进的自然语言处理方法,它结合了信息检索和文本生成技术,用于提高问答系统、聊天机器人等应用的性能。 2 RAG 的工作流程 文档加载(Document Loading) 从各种来源加载大量文档数据。这些文档…

操作系统——cpu、内存、缓存介绍

一、内存是什么 内存就是系统资源的代名词,它是其他硬件设备与 CPU 沟通的桥梁, 计算机中的所有程序都在内存中运行。其作用是暂时存放CPU的运算数据,以及与硬盘交换的数据。也是相当于CPU与硬盘沟通的桥梁。只要计算机在运行,CP…

应对恶意IP攻击的有效方法

在当今数字化时代,网络攻击已经成为了互联网安全的重大挑战之一。恶意IP攻击是网络安全领域中的一种常见威胁,它可能导致数据泄露、服务中断、系统瘫痪等严重后果。因此,有效地应对恶意IP攻击至关重要。IP数据云将深入探讨如何应对恶意IP攻击…

android中单例模式为什么会引起内存泄漏?

单例模式使用不恰当会造成内存泄漏。因为单例的静态特性使得单例的生命周期和应用的生命周期一样长, 如果一个对象已经不需要使用了,但是单例对象还持有该对象的引用,那么这个对象就不能被正常回收,因此会导致内存泄漏。 举个例子: ①新建一个工程。 ②配置好LeakCanary检…

SpringBoot Servlet容器启动解析

介绍 容器架构 容器处理请求 容器启动全局流程解析 启动前准备 WebServer创建入口 WebServer创建 Servlet启动 Web容器工厂类加载解析 Web容器个性化配置 属性注入 工厂类初始化 BeanPostProcessor方法实现 定制化流程 面试题 请描述下Servlet容器启动流程?介绍下…

下载程序到嵌入式开发板教程

一、设置共享目录 ubuntu与Window共同拥有的目录。 第一步:在Windows下创建一个文件夹share 第二部:点击虚拟机--->设置--->选项--->共享文件夹 进入共享目录的命令:cd/mnt/hgfs/share 二、C语言编译器 使用Linux平台下的gcc编…

发一下接口自动化测试框架(python3+requests+excel)

Git: https://github.com/lilinyu861/Interface-Test 环境配置: 开发工具:pycharm2018Excel 开发框架:python3requestsexcel 接口自动化测试框架介绍: 此接口测试框架,首先由用户设计原始的测试用例并为…

爬虫 某物流

目标地址 url "https://api.jdl.com/aging/feeInquiryNewByJDL" 加密参数 ciphertext和data 搜关键字ciphertext跟着栈走 很明显的DES加密 window globalconst e require(jsencrypt); // const e require(JSEncrypt) // e r(775).JSEncrypt // const t requi…

学点Java打小工_Day4_数组_冒泡排序

1 数组基本概念 程序算法数据结构 算法:解决程序的流程步骤 数据结构:将数据按照某种特定的结构来存储 设计良好的数据结构会导致良好的算法。 ArrayList、LinkedList 数组是最简单的数据结构。 数组:存放同一种类型数据的集合,在…

三.使用java的API文档

在Java中,API是指“应用程序接口”(Application Programming Interface)。Java API是Java编程语言中提供的类和接口的集合,用于开发各种类型的应用程序。类比C的STL(标准模板库)。 通俗理解就当做些封装好…