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

Attention Free Transformer (AFT)-2020论文笔记

在这里插入图片描述


名称:

Attention Free Transformer (AFT)

来源:

[2105.14103] An Attention Free Transformer

相关工作:

#Approximatingthedotproduct #Sparselocalattention #Contextcompression #Eliminatingdotproductattention #MLPsforvision

创新点:

1ub40zla.40o.png

lzs4fzme.3l4.png

1q5zzfyb.5ka.png

贡献:

  • 提出了一种全新的注意力机制替代方案,完全摒弃了点积注意力。

  • AFT的计算复杂度与输入长度和特征维度呈线性关系,适用于大规模数据。

  • AFT-local和AFT-conv变体通过引入局部性和空间权重共享,进一步提高了模型的效率和性能。

代码:

# ---------------------------------------  
# 论文:An Attention Free Transformer (arxiv2021)  
# ---------------------------------------  
import torch  
from torch import nn  
from torch.nn import init  
  
  
class AFT_FULL(nn.Module):  
  
    def __init__(self, d_model, n=49, simple=False):  
  
        super(AFT_FULL, self).__init__()  
        self.fc_q = nn.Linear(d_model, d_model)  
        self.fc_k = nn.Linear(d_model, d_model)  
        self.fc_v = nn.Linear(d_model, d_model)  
        if (simple):  
            self.position_biases = torch.zeros((n, n))  
        else:  
            self.position_biases = nn.Parameter(torch.ones((n, n)))  
        self.d_model = d_model  
        self.n = n  
        self.sigmoid = nn.Sigmoid()  
  
        self.init_weights()  
  
    def init_weights(self):  
        for m in self.modules():  
            if isinstance(m, nn.Conv2d):  
                init.kaiming_normal_(m.weight, mode='fan_out')  
                if m.bias is not None:  
                    init.constant_(m.bias, 0)  
            elif isinstance(m, nn.BatchNorm2d):  
                init.constant_(m.weight, 1)  
                init.constant_(m.bias, 0)  
            elif isinstance(m, nn.Linear):  
                init.normal_(m.weight, std=0.001)  
                if m.bias is not None:  
                    init.constant_(m.bias, 0)  
  
    def forward(self, input):  
  
        bs, n, dim = input.shape  
  
        q = self.fc_q(input)  # bs,n,dim  
        k = self.fc_k(input).view(1, bs, n, dim)  # 1,bs,n,dim  
        v = self.fc_v(input).view(1, bs, n, dim)  # 1,bs,n,dim  
  
        numerator = torch.sum(torch.exp(k + self.position_biases.view(n, 1, -1, 1)) * v, dim=2)  # n,bs,dim  
        denominator = torch.sum(torch.exp(k + self.position_biases.view(n, 1, -1, 1)), dim=2)  # n,bs,dim  
  
        out = (numerator / denominator)  # n,bs,dim  
        out = self.sigmoid(q) * (out.permute(1, 0, 2))  # bs,n,dim  
  
        return out  
  
  
# 输入 B C N,  输出 B C Nif __name__ == '__main__':  
    block = AFT_FULL(d_model=512, n=64).cuda()  
    input = torch.rand(64, 64, 512).cuda()  
    output = block( input)  
    print(input.size(), output.size())
    

http://www.kler.cn/a/524022.html

相关文章:

  • 将ollama迁移到其他盘(eg:F盘)
  • HTML 标题
  • 三天急速通关JavaWeb基础知识:Day 1 后端基础知识
  • PHP 7 新特性
  • 【教学类-89-01】20250127新年篇01—— 蛇年红包(WORD模版)
  • games101-作业2
  • 适配器模式——C++实现
  • 人工智能在医疗领域的应用有哪些?
  • LeetCode - #196 删除重复的电子邮件并保留最小 ID 的唯一电子邮件
  • 漏洞修复:Apache Tomcat 安全漏洞(CVE-2024-50379) | Apache Tomcat 安全漏洞(CVE-2024-52318)
  • C#@符号在string.Format方法中作用
  • HTML 标题
  • threejs实现烟花效果
  • 实现网站内容快速被搜索引擎收录的方法
  • Spring Boot 日志:项目的“行车记录仪”
  • 《Trustzone/TEE/安全从入门到精通-标准版》
  • 【MQ】如何保证消息队列的高可用?
  • Spring Boot多环境配置实践指南
  • Python面试宝典8 | 手写Python max 函数,从入门到精通
  • Kubernetes扩展
  • 提升企业内部协作的在线知识库架构与实施策略
  • 【YOLOv11改进[Backbone]】使用EMO替换Backbone
  • Deepseek R1 的大模拟考试
  • 高精度算法:加法
  • DeepSeek辅助学术写作摘要内容
  • 1.25学习记录