论文阅读:TRAIN SHORT, TEST LONG: ATTENTION WITH LINEAR BIASES ENABLES INPUT LENGTH EXTRAPOLATION

论文研究表明,正弦位置嵌入的Transformer模型在推理时难以外推到训练时未见过的输入长度。ALiBi(Attention with Linear Biases)方法通过引入线性递减惩罚,提高了模型的外推能力,允许在较短序列上训练的模型在推理时处理更长序列,实现与正弦模型相当的性能,但训练速度更快、内存使用更少。ALiBi在外推到训练长度的两倍时达到最佳效果,有效降低了早期token的困惑度。

论文链接

ABSTRACT

自从transformer模型被提出以来,一个基本问题尚未得到回答:对于比训练中看到的更长的序列,模型如何在推理时实现外推。我们首先证明了外推可以通过简单地改变位置表示方法来实现,尽管我们发现目前的方法不允许有效的外推。因此我们引入了一个更加简单而且更高效的位置表示方法,即Attention with Linear Biases(ALiBi)。ALiBi不会将position embedding和word embedding相加,它使query-key的注意力得分产生偏差,惩罚与他们的距离成正比 。实验表明,该方法在长度为1024的输入序列上训练13亿参数模型,该模型外推到长度为2048的输入序列,实现了与在长度为2048输入上训练的正弦位置嵌入模型相同的困惑度 ,但训练速度快11%,使用的内存少11%。ALiBi对时间的归纳偏见也使其在WikiText-103基准测试中优于多种强位置方法。

1. INTRODUCTION

在构建一个基于transformer的模型时,一个主要的设计是对训练时序列长度的设计,在这里用 L L

目前没有直接提供VSA(Learning Varied-Size Window Attention in Vision Transformers)论文的开源代码信息[^1]。建议关注相关作者的官方发布渠道或学术平台,例如arXiv或Google Scholar,以获取最新更新[^2]。此外,可以查阅GitHub上的Vision Transformer相关项目,尝试联系开发者或社区以获得帮助[^3]。 ### 代码示例(参考Swin Transformer实现风格) 以下是一个模拟的代码框架,可用于实现类似VSA中可变尺寸窗口注意力机制的部分逻辑: ```python import torch import torch.nn as nn class VariedSizeWindowAttention(nn.Module): def __init__(self, dim, window_sizes, num_heads, qkv_bias=True, attn_drop=0., proj_drop=0.): super().__init__() self.dim = dim self.window_sizes = window_sizes # 支持不同窗口尺寸的列表 self.num_heads = num_heads # 动态生成不同窗口大小的相对位置偏置 self.relative_position_biases = nn.ParameterList([ nn.Parameter(torch.zeros((2 * w - 1) * (2 * h - 1), num_heads)) for w, h in window_sizes ]) # 查询、键、值的线性变换 self.qkv = nn.Linear(dim, dim * 3, bias=qkv_bias) self.attn_drop = nn.Dropout(attn_drop) self.proj = nn.Linear(dim, dim) self.proj_drop = nn.Dropout(proj_drop) def forward(self, x, H, W): B, N, C = x.shape qkv = self.qkv(x).reshape(B, N, 3, self.num_heads, C // self.num_heads).permute(2, 0, 3, 1, 4) q, k, v = qkv[0], qkv[1], qkv[2] # 计算注意力矩阵 attn = (q @ k.transpose(-2, -1)) * (1.0 / (C // self.num_heads) ** 0.5) # 添加可学习的相对位置偏置 for i, (win_w, win_h) in enumerate(self.window_sizes): window_area = win_w * win_h relative_position_bias = self.relative_position_biases[i] # 假设此处通过索引将偏置添加到对应的窗口 # 实际实现需根据窗口划分逻辑调整 attn[:, :, :window_area, :window_area] += relative_position_bias attn = attn.softmax(dim=-1) attn = self.attn_drop(attn) x = (attn @ v).transpose(1, 2).reshape(B, N, C) x = self.proj(x) x = self.proj_drop(x) return x ``` 此代码框架旨在展示如何实现支持多种窗口尺寸的注意力机制,具体实现细节可能需要根据实际论文内容进行调整。
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
红包 添加红包
表情包 插入表情
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

comli_cn

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值