ALiBi线性偏置注意力

这篇具有很好参考价值的文章主要介绍了ALiBi线性偏置注意力。希望对大家有所帮助。如果存在错误或未考虑完全的地方,请大家不吝赐教,您也可以点击"举报违法"按钮提交疑问。

一、目录

1.公式
2.实现

二、实现

1.公式ALiBi线性偏置注意力,torch,pytorch,深度学习
m 的取值公式:2^(-8/n) n为head 头数
参考:https://zhuanlan.zhihu.com/p/632780188
2. 实现
github: https://github.com/ofirpress/attention_with_linear_biases/blob/master/fairseq/models/transformer.py#L941文章来源地址https://www.toymoban.com/news/detail-783081.html

import math
import torch
class TransformerDecoder():
    def __init__( self, args):
        self.args=args
        self._future_mask = torch.empty(0)
        #求坡度m
        def get_slopes(n):
            def get_slopes_power_of_2(n):
                start = (2 ** (-2 ** -(math.log2(n) - 3)))
                ratio = start
                return [start * ratio ** i for i in range(n)]

            if math.log2(n).is_integer():
                return get_slopes_power_of_2(
                    n)  # In the paper, we only train models that have 2^a heads for some a. This function has
            else:  # some good properties that only occur when the input is a power of 2. To maintain that even
                closest_power_of_2 = 2 ** math.floor(
                    math.log2(n))  # when the number of heads is not a power of 2, we use this workaround.
                return get_slopes_power_of_2(closest_power_of_2) + get_slopes(2 * closest_power_of_2)[0::2][
                                                                   :n - closest_power_of_2]

        maxpos = args.tokens_per_sample       # max number of tokens per sequence  每个序列的最大令牌数,最大有效长度
        attn_heads = args.decoder_attention_heads
        self.slopes = torch.Tensor(get_slopes(attn_heads))

        self.alibi = self.slopes.unsqueeze(1).unsqueeze(1) * torch.arange(maxpos).unsqueeze(0).unsqueeze(0).expand(
            attn_heads, -1, -1)
        self.alibi = self.alibi.view(attn_heads, 1, maxpos)     #[head, 1, maxpos]
        self.alibi = self.alibi.repeat(args.max_tokens // maxpos, 1, 1)  # batch_size, 1, 1

    #目的:将alibi 矩阵进行数据类型转变
    def buffered_future_mask(self, tensor):
        dim = tensor.size(1)
        # self._future_mask.device != tensor.device is not working in TorchScript. This is a workaround.
        if (
                self._future_mask.size(0) == 0
                or (not self._future_mask.device == tensor.device)
                or self._future_mask.size(1) < self.args.tokens_per_sample
        ):
            #求下三角矩阵
            self._future_mask = torch.triu(
                fill_with_neg_inf(torch.zeros([self.args.tokens_per_sample, self.args.tokens_per_sample])), 1
            )
            self._future_mask = self._future_mask.unsqueeze(0) + self.alibi
        self._future_mask = self._future_mask.to(tensor)         #转变为tensor 一样的数据类型
        return self._future_mask[:tensor.shape[0] * self.args.decoder_attention_heads, :dim, :dim]


def fill_with_neg_inf(t):
    """FP16-compatible function that fills a tensor with -inf."""
    return t.float().fill_(float("-inf")).type_as(t)

if __name__ == '__main__':
    class A():
        tokens_per_sample=8                 #每个序列的最大令牌数
        decoder_attention_heads=8
        max_tokens=256                      #每个批次中的最大令牌数
    args=A()
    m=TransformerDecoder(args)

    input_embedding=torch.randn(size=(2,256,64))
    attention_mask=m.buffered_future_mask(input_embedding)   #m*矩阵
    print(attention_mask)

    # attn_weights = torch.matmul(query_states, key_states.transpose(2, 3)) / math.sqrt(self.head_dim)
    #
    # if attention_mask is not None:
    #     if q_len == 1:  # inference with cache
    #         if len(attention_mask.size()) == 4:
    #             attention_mask = attention_mask[:, :, -1:, :]
    #         else:
    #             attention_mask = attention_mask[:, -1:, :]
    #     attn_weights = attn_weights + attention_mask
    #     attn_weights = torch.max(attn_weights, torch.tensor(torch.finfo(attn_weights.dtype).min))

到了这里,关于ALiBi线性偏置注意力的文章就介绍完了。如果您还想了解更多内容,请在右上角搜索TOY模板网以前的文章或继续浏览下面的相关文章,希望大家以后多多支持TOY模板网!

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处: 如若内容造成侵权/违法违规/事实不符,请点击违法举报进行投诉反馈,一经查实,立即删除!

领支付宝红包 赞助服务器费用

相关文章

  • 【深度学习注意力机制系列】—— CBAM注意力机制(附pytorch实现)

    CBAM(Convolutional Block Attention Module) 是一种用于增强卷积神经网络(CNN)性能的注意力机制模块。它由Sanghyun Woo等人在2018年的论文[1807.06521] CBAM: Convolutional Block Attention Module (arxiv.org)中提出。CBAM的主要目标是 通过在CNN中引入通道注意力和空间注意力 来提高模型的感知能力,从

    2024年02月13日
    浏览(28)
  • 【深度学习注意力机制系列】—— ECANet注意力机制(附pytorch实现)

    ECANet(Efficient Channel Attention Network) 是一种 用于图像处理任务的神经网络架构,它在保持高效性的同时,有效地捕捉图像中的通道间关系,从而提升了特征表示的能力 。ECANet通过引入通道注意力机制,以及在卷积层中嵌入该机制,取得了优越的性能。本文将对ECANet的核心思

    2024年02月13日
    浏览(34)
  • 《动手学深度学习 Pytorch版》 10.6 自注意力和位置编码

    在注意力机制中,每个查询都会关注所有的键-值对并生成一个注意力输出。由于查询、键和值来自同一组输入,因此被称为 自注意力(self-attention),也被称为内部注意力(intra-attention)。本节将使用自注意力进行序列编码,以及使用序列的顺序作为补充信息。 给定一个由

    2024年02月06日
    浏览(29)
  • pytorch注意力机制

    最近看了一篇大佬的注意力机制的文章然后自己花了一上午的时间把按照大佬的图把大佬提到的注意力机制都复现了一遍,大佬有一些写的复杂的网络我按照自己的理解写了几个简单的版本接下来就放出我写的代码。顺便从大佬手里盗走一些图片,等我有时间一起进行替换,

    2024年02月05日
    浏览(22)
  • 【动手深度学习-笔记】注意力机制(四)自注意力、交叉注意力和位置编码

    紧接上回:【动手深度学习-笔记】注意力机制(三)多头注意力 在注意力机制下,我们将词元序列输入注意力汇聚中,以便同一组词元同时充当查询、键和值。 具体来说,每个查询都会关注所有的键-值对并生成一个注意力输出。 像这样的,查询、键和值来自同一组输入的

    2024年01月16日
    浏览(34)
  • pytorch—实现各种注意力

    所谓Attention机制,便是聚焦于局部信息的机制,比如图像中的某一个图像区域。随着任务的变化,注意力区域往往会发生变化。 面对上面这样的一张图,如果你只是从整体来看,只看到了很多人头,但是你拉近一个一个仔细看就了不得了,都是天才科学家。 图中除了人脸之

    2024年02月13日
    浏览(24)
  • 一维pytorch注意力机制

    最近在研究一维数据,发现目前网络上的注意力机制都是基于二维来构建的,对于一维的,没有查到什么可直接加在网络中的代码,因此本次文章主要介绍常用的三种注意力机制–SENet,CBAM和ECA其一维的代码。 SE模块允许对特征重新校准,其核心是通过全连接层对全局信息学习

    2024年02月15日
    浏览(28)
  • 机器学习&&深度学习——注意力提示、注意力池化(核回归)

    👨‍🎓作者简介:一位即将上大四,正专攻机器学习的保研er 🌌上期文章:机器学习深度学习——常见循环神经网络结构(RNN、LSTM、GRU) 📚订阅专栏:机器学习深度学习 希望文章对你们有所帮助 之前讲过的CNN和RNN模型,容易发现的一个点是,他们并没有刻意的、主观的

    2024年02月13日
    浏览(31)
  • 【视频笔记】解密RWKV线性注意力的进化过程

    from: https://www.bilibili.com/video/BV1zW4y1D7Qg/?spm_id_from=333.999.0.0vd_source=21cce77bb69d40a81e0d37999f2da0c2 手动实现,可以看出 时间复杂度 O ( n 2 ) O(n^2) O ( n 2 ) 调用库函数 权重 衰减 权重 迭代 记录

    2024年02月12日
    浏览(29)
  • Pytorch 注意力机制解析与代码实现

    注意力机制是深度学习常用的一个小技巧,它有多种多样的实现形式,尽管实现方式多样,但是每一种注意力机制的实现的核心都是类似的,就是注意力。 注意力机制的核心重点就是让网络关注到它更需要关注的地方。 当我们使用卷积神经网络去处理图片的时候,我们会更

    2024年02月06日
    浏览(34)

觉得文章有用就打赏一下文章作者

支付宝扫一扫打赏

博客赞助

微信扫一扫打赏

请作者喝杯咖啡吧~博客赞助

支付宝扫一扫领取红包,优惠每天领

二维码1

领取红包

二维码2

领红包