2024.3.17 机器学习周报

news2024/11/24 10:49:45

引言

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以及规范递归架构)具有显着的优势。

总结

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

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

相关文章

Qt 实现 Asterix 报文解析库

【写在前面】 最近工作中需要解析 Cat 21 和 Cat 62 的 ADS-B 数据 ( 自己的工作包含航空领域 )。 然后,因为整个 Asterix 协议类别非常之多,每个类别的版本也多,纯手工实现每个版本解析根本不现实 ( 然鹅公司之前的解析库就是这么做的且做的…

01_什么是深度学习

人工智能包含了机器学习,而深度学习是机器学习的一个分支。 人工智能 试图将通常由人类完成的智力任务自动化—这就是人工智能。 用硬编码的方式实现人工智能,这称作符号主义人工智能Symbolic AI。其中包含专家系统。 机器学习 机器学习是一种替代符…

Linux操作系统-汇编LED驱动程序基础

一、汇编LED原理分析 IMX6ULL-LED灯硬件原理分析: 1、使能时钟,CCGR0-CCGR6这7个寄存器控制着IMX6ULL所有外设时钟的使能。为了简单,设置CCGR0-CCGR6这7个寄存器全部为0XFFFFFFFF,相当于使能全部外设时钟。(在IMX6ULL芯…

【Stable Diffusion】入门-04:不同模型分类+代表作品+常用下载网站+使用技巧

目录 1 模型简介2 模型文件构成和加载位置2.1 存储位置2.2 加载模型 3 模型下载渠道3.1 HuggingFace3.2 Civitai 4 模型分类4.1 二次元模型4.2 写实模型4.3 2.5D模型 1 模型简介 拿图片给模型训练的这个过程,通常被叫做“喂图”。模型学习的内容不仅包括对具体事物…

Rust学习02:推荐一本入门书,免费的

都说Rust的学习曲线很陡峭,试过才知雀实不容易。 先说我的基础,非科班,自学Python,写过几个小程序。 我买书从来不扣扣嗖嗖的,所以先啃了几本Rust的入门书,包括: Tim McNamara的《Rust实战》&am…

Day40:安全开发-JavaEE应用SpringBoot框架JWT身份鉴权打包部署JARWAR

目录 SpringBoot-身份鉴权-JWT技术 SpringBoot-打包部署-JAR&WAR 思维导图 Java知识点 功能:数据库操作,文件操作,序列化数据,身份验证,框架开发,第三方组件使用等. 框架库:MyBatis&…

idea将非UTF-8的properties修改为UTF-8编码的文件

需求背景 由于项目初始化时,properties文件的编码格式为ASCII编码格式,此时用idea打开该文件会默认展示UTF-8的编码内容,其中汉字可以正常展示,但是使用notepad打开却依旧时ASCII编码格式 idea配置 打开idea-setting-editor-f…

使用Lua编写Wireshark解析ProtoBuf插件

文章目录 Wireshark Protobuf Lua-dissectorStep 1: 获取 WiresharkStep 2: 配置ProtoBuf相关设置添加ProtoBuf查找路径 Step 3 运行和调试Lua代码1. 添加Lua脚本2. 运行和调试 Step 4: 写Lua Dissector代码 :)Step 5(Optional): Decode AsGithub工程地址 Wireshark Protobuf L…

YOLOv8训练好模型后,追加轮数继续训练、或者提前终止训练,缩减训练轮数

一、前言 而且此教程适用的情况是你已经训练好了此模型,想继续追加一些轮数。比如训练进度是120/120,已经完成了,继续追加10轮,或者你原先定的是200轮,希望缩减到150轮,可以使用我说的这个方法。为什么缩减…

【C语言】最大公约数

给定两个数&#xff0c;求这两个数的最大公约数 方法&#xff1a;辗转相除法 例&#xff1a;36与24的最小公约数 36/241...12 24/122...0 那么12就是36与24的最大公约数。 代码如下&#xff1a; #include <stdio.h> int main() { int a 0; int b 0; scan…

鸿蒙Harmony应用开发—ArkTS声明式开发(容器组件:RowSplit)

将子组件横向布局&#xff0c;并在每个子组件之间插入一根纵向的分割线。 说明&#xff1a; 该组件从API Version 7开始支持。后续版本如有新增内容&#xff0c;则采用上角标单独标记该内容的起始版本。 子组件 可以包含子组件。 RowSplit通过分割线限制子组件的宽度。初始化…

FPGA和ASIC

前言 大家好&#xff0c;我是jiantaoyab&#xff0c;这是我所总结作为学习的笔记第16篇,在本篇文章给大家介绍FPGA和ASIC。 一个四核i7的CPU的晶体管中有20亿的晶体管&#xff0c;需要链接起20亿的晶体管可不是一件容易的事情&#xff0c;所以设计一个CPU需要用年来算&#x…

挑战杯 机器视觉的试卷批改系统 - opencv python 视觉识别

文章目录 0 简介1 项目背景2 项目目的3 系统设计3.1 目标对象3.2 系统架构3.3 软件设计方案 4 图像预处理4.1 灰度二值化4.2 形态学处理4.3 算式提取4.4 倾斜校正4.5 字符分割 5 字符识别5.1 支持向量机原理5.2 基于SVM的字符识别5.3 SVM算法实现 6 算法测试7 系统实现8 最后 0…

第七课-----分支切平面

割平面方法的基本思想是对于一个优化问题而言&#xff0c;通过不断添加约束条件来切割可行域&#xff0c; 最终将可行域不断变小&#xff0c;相当于搜索空间变小。在LP中讲过&#xff0c;一个等式约束就等价于一个超平面&#xff0c;一个不等式约束就代表一个半空间&#xff0c…

17.搜索二维矩阵Ⅱ

编写一个高效的算法来搜索 m x n 矩阵 matrix 中的一个目标值 target 。该矩阵具有以下特性&#xff1a; 每行的元素从左到右升序排列。每列的元素从上到下升序排列。 示例 1&#xff1a; 输入&#xff1a;matrix [[1,4,7,11,15],[2,5,8,12,19],[3,6,9,16,22],[10,13,14,17,2…

2.26回顾章节主体线索脉络,课程要求(评分)

3)翻译程序、汇编程序、编译程序、解释程序有什么差别&#xff1f;各自的特性是什么&#xff1f; 翻译程序是指把高级语言源程序翻译成机器语言程序&#xff08;目标代码&#xff09;的软件。 翻译程序有两种&#xff1a;一种是编译程序&#xff0c;它将高级语言源程序一次全部…

lua脚本的基础内容

官方地址&#xff1a;http://luajit.org/ 官方wiki地址&#xff1a;http://wiki.luajit.org/Home 推荐书籍&#xff1a; OpenResty 最佳实践&#xff1a;https://moonbingbing.gitbooks.io/openresty-best-practices/content/ lua基础文档&#xff1a;https://www.runoob.com/l…

mac电脑修改终端zsh显示的用户名

电脑名称一直没有修改&#xff0c;所以电脑名称都是Apple的MacBook Pro&#xff0c;如下图所示&#xff1a; mac电脑终端显示用户名太长一点也不美观&#xff0c;而且占用很长的行&#xff0c;浪费空间&#xff0c;可以通过修改来调整要显示什么内容&#xff1a; 方式一 要想换…

解决Linux中Eclipse启动时找不到Java环境的问题

按照报错的意思是没有在/usr/local/eclipse/jre/bin/java下找到java环境&#xff0c;我检查了一下eclipse的目录结构发现在/usr/local/eclipse没有jre/bin/java&#xff0c;我的想法是自己建对应文件夹然后软连接到我的java环境 cd /usr/local/eclipse sudo mkdir jre cd jre s…

Java中为什么只有值传递?

Java中为什么只有值传递&#xff1f; 对于对象参数而言&#xff0c;实际参数传递给形式参数的只是一个内存地址&#xff0c;让形式参数也指向实际参数所指向的地址&#xff0c;传递的值的内容是对象的引用。 为什么会是这样&#xff1f;让我慢慢为你讲解。 对于Java的传递类…