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

AttentionFreeTransformer 源码解析(一):AFTFull、AFTSimple、AFTLocal

我觉得源码写的很好懂,我就不加注释了,直接上计算流程图。

AFTFull

在这里插入图片描述

class AFTFull(nn.Module):def __init__(self, max_seqlen, dim, hidden_dim=64):super().__init__()'''max_seqlen: the maximum number of timesteps (sequence length) to be fed indim: the embedding dimension of the tokenshidden_dim: the hidden dimension used inside AFT FullNumber of heads is 1 as done in the paper'''self.dim = dimself.hidden_dim = hidden_dimself.to_q = nn.Linear(dim, hidden_dim)self.to_k = nn.Linear(dim, hidden_dim)self.to_v = nn.Linear(dim, hidden_dim)self.project = nn.Linear(hidden_dim, dim)self.wbias = nn.Parameter(torch.Tensor(max_seqlen, max_seqlen))nn.init.xavier_uniform_(self.wbias)def forward(self, x):B, T, _ = x.shapeQ = self.to_q(x).view(B, T, self.hidden_dim)K = self.to_k(x).view(B, T, self.hidden_dim)V = self.to_v(x).view(B, T, self.hidden_dim)temp_wbias = self.wbias[:T, :T].unsqueeze(0) # sequences can still be variable length'''From the paper'''Q_sig = torch.sigmoid(Q)temp = torch.exp(temp_wbias) @ torch.mul(torch.exp(K), V)weighted = temp / (torch.exp(temp_wbias) @ torch.exp(K))Yt = torch.mul(Q_sig, weighted)Yt = Yt.view(B, T, self.hidden_dim)Yt = self.project(Yt)return Yt

AFTSimple

在这里插入图片描述

class AFTSimple(nn.Module):def __init__(self, max_seqlen, dim, hidden_dim=64):super().__init__()'''max_seqlen: the maximum number of timesteps (sequence length) to be fed indim: the embedding dimension of the tokenshidden_dim: the hidden dimension used inside AFT FullNumber of Heads is 1 as done in the paper.'''self.dim = dimself.hidden_dim = hidden_dimself.to_q = nn.Linear(dim, hidden_dim)self.to_k = nn.Linear(dim, hidden_dim)self.to_v = nn.Linear(dim, hidden_dim)self.project = nn.Linear(hidden_dim, dim)def forward(self, x):B, T, _ = x.shapeQ = self.to_q(x).view(B, T, self.hidden_dim)K = self.to_k(x).view(B, T, self.hidden_dim)V = self.to_v(x).view(B, T, self.hidden_dim)'''From the paper'''weights = torch.mul(torch.softmax(K, 1), V).sum(dim=1, keepdim=True)Q_sig = torch.sigmoid(Q)Yt = torch.mul(Q_sig, weights)Yt = Yt.view(B, T, self.hidden_dim)Yt = self.project(Yt)return Yt

AFTLocal

在这里插入图片描述

class AFTLocal(nn.Module):def __init__(self, max_seqlen, dim, hidden_dim=64, s=256):super().__init__()'''max_seqlen: the maximum number of timesteps (sequence length) to be fed indim: the embedding dimension of the tokenshidden_dim: the hidden dimension used inside AFT Fulls: the window size used for AFT-Local in the paperNumber of heads is 1 as done in the paper'''self.dim = dimself.hidden_dim = hidden_dimself.to_q = nn.Linear(dim, hidden_dim)self.to_k = nn.Linear(dim, hidden_dim)self.to_v = nn.Linear(dim, hidden_dim)self.project = nn.Linear(hidden_dim, dim)self.wbias = nn.Parameter(torch.Tensor(max_seqlen, max_seqlen))self.max_seqlen = max_seqlenself.s = snn.init.xavier_uniform_(self.wbias)def forward(self, x):B, T, _ = x.shapeQ = self.to_q(x).view(B, T, self.hidden_dim)K = self.to_k(x).view(B, T, self.hidden_dim)V = self.to_v(x).view(B, T, self.hidden_dim)self.wbias = nn.Parameter(torch.Tensor([[self.wbias[i][j] if math.fabs(i-j) < self.s else 0 for j in range(self.max_seqlen)] for i in range(self.max_seqlen)]))temp_wbias = self.wbias[:T, :T].unsqueeze(0) # sequences can still be variable length'''From the paper'''Q_sig = torch.sigmoid(Q)temp = torch.exp(temp_wbias) @ torch.mul(torch.exp(K), V)weighted = temp / (torch.exp(temp_wbias) @ torch.exp(K))Yt = torch.mul(Q_sig, weighted)Yt = Yt.view(B, T, self.hidden_dim)Yt = self.project(Yt)return Yt

相关文章:

AttentionFreeTransformer 源码解析(一):AFTFull、AFTSimple、AFTLocal

我觉得源码写的很好懂&#xff0c;我就不加注释了&#xff0c;直接上计算流程图。 AFTFull class AFTFull(nn.Module):def __init__(self, max_seqlen, dim, hidden_dim64):super().__init__()max_seqlen: the maximum number of timesteps (sequence length) to be fed indim…...

C++ 计算 拟合优度R^2

解决的问题&#xff1a; 拟合优度(Goodness of Fit)是指回归直线对观测值的拟合程度&#xff0c;度量拟合优度的统计量是可决系数(亦称确定系数) R?。R最大值为 1。R%的值越接近1&#xff0c;说明回归直线对观测值的拟合程度越好&#xff0c;反之&#xff0c;R%值越小&#x…...

Springboot-Retrofit HTTP工具框架快速使用

在SpringBoot项目直接使用okhttp、httpClient或者RestTemplate发起HTTP请求&#xff0c;既繁琐又不方便统一管理。 因此&#xff0c;在这里推荐一个适用于SpringBoot项目的轻量级HTTP客户端框架retrofit-spring-boot-starter&#xff0c;使用非常简单方便&#xff0c;同时又提供…...

微信小程序实现人脸识别(从一个没有开通人脸核身的小程序跳转到要给开通人脸核身的小程序,进行人脸识别后再跳转回来)

A小程序没有开通人脸识别功能,B小程序开通了人脸识别。 总体思路是:从A小程序需要进行人脸识别的地方携带参数跳转到B小程序进行人脸识别,识别后把参数传递回来。 A小程序的参考代码如下: //人脸识别相关 start powerDrawerFace(e){var that = thisthat.setData({faceO…...

CSS-grid布局

网格布局也叫grid布局&#xff0c;平常写样式的时候基本上都是用的flex布局。 像以下布局&#xff0c;用flex布局就可能会有有点麻烦&#xff0c;这时候用grid布局就方便的多了。 或者是照片墙 grid布局就是将容器划分为行和列&#xff0c;产生单元格&#xff0c;然后在指定的…...

【JavaEE进阶】Bean 作用域和生命周期

文章目录 一. 关于Bean作用域的实例1. lombok2. 实例代码 二. 作用域定义1. Bean的六种作用域2. 设置作用域 三. Spring 执行流程和 Bean 的生命周期1. Spring 执行流程2. Bean生命周期 一. 关于Bean作用域的实例 注意在此例子中需要用到lombok 1. lombok lombok是什么? Lo…...

3分钟自建查分系统?现在每个人都可以实现了

学生成绩查询系统在现代教育管理中扮演着重要的角色&#xff0c;它不仅可以方便学生和家长查询成绩&#xff0c;也能帮助老师更好地管理和分析学生的学业表现。作为一名教师&#xff0c;了解如何制作学生成绩查询系统是提高教学效率和管理学生成绩便利性的关键。 在制作学生成…...

关于APP备案、小程序备案的问题,如何备案?

近日&#xff0c;工信部发布了关于开展移动互联网应用程序备案工作的通知。为落实相关法律法规要求&#xff0c;促进互联网行业规范健康发展&#xff0c;进一步做好移动互联网信息服务管理&#xff0c;现组织开展移动互联网应用程序&#xff08;以下简称 APP&#xff09;备案工…...

git上传代码后,如何清空历史日志以及文件操作,重新上传?以及上传代码

【Git教程】如何清除git仓库的所有提交记录&#xff0c;成为一个新的干净仓库  马三也算Github的忠实用户了&#xff0c;经常会把一些练手的项目传到Github上面进行备份。其中有一个名为ColaFramework的Unity框架项目&#xff0c;马三开发了一年多了&#xff0c;期间提交代码的…...

超导热催生meme,换汤不换药的投机轮回

文/章鱼哥 出品/陀螺财经 币圈对炒作meme概念的热情从未消亡过。 随着一种名为LK-99的物质被发现&#xff0c;围绕超导的兴奋不仅激发了科学界&#xff0c;加密货币相关概念也与之沸腾。不出所料&#xff0c;与此前围绕元宇宙、AI大肆炒作一样&#xff0c;许多meme代币已经出现…...

【HashMap】 73. 矩阵置零

73. 矩阵置零 解题思路 首先遍历矩阵找到所有的0元素 将其的行和列索引记录下俩遍历矩阵 将所有的需要更新的元素进行更新 也就是查找hashmap中的每一个元素进行更新查找行或者列是否在hashmap中 class Solution {public void setZeroes(int[][] matrix) {// 首先遍历矩阵找…...

Vue-2.nodejs的介绍和安装

nodejs简介 ► 创建 Node.js 应用:package.json 首先&#xff0c;创建一个新文件夹以便于容纳需要的所有文件&#xff0c;并且在此其中创建一个 package.json 文件&#xff0c;描述你应用程序以及需要的依赖&#xff1a; 配合着你的 package.json 请运行 npm install。如果你…...

分别用Vue和Java来实现的风靡一时的2048 游戏

目录 1、Vue实现2、Java实现 2048 游戏是一个基于网格的数字益智游戏&#xff0c;玩家需要通过滑动相同的数字来合并它们&#xff0c;并最终得到一个值为 2048 的方块。以下是分别用Vue和Java来实现的 2048 游戏&#xff0c;包含运行效果。 1、Vue实现 首先&#xff0c;创建一…...

echarts甘特图 一个值多条线

先看图 这里我们用到的是 series &#xff1a;type:custom 自定义&#xff0c;但是这里我遇到一个问题&#xff0c;就是不过你在series里push多少数据&#xff0c;图表上显示的都是在同一水平线&#xff0c;用了好多方法都不好使&#xff0c; renderItem: (params, api) >…...

多态性说明

多态 多态性多态性类型描述编译时多态和运行时多态的差异go 语言多态性 多态性 多态性类型描述 多态性是面向对象编程中的一个重要概念&#xff0c;它允许不同的对象通过相同的接口表现出不同的行为&#xff0c;从而实现更加灵活和可扩展的代码结构。多态性有助于降低代码的耦…...

2023-08-04 LeetCode每日一题(不同路径 III)

2023-08-04每日一题 一、题目编号 980. 不同路径 III二、题目链接 点击跳转到题目位置 三、题目描述 在二维网格 grid 上&#xff0c;有 4 种类型的方格&#xff1a; 1 表示起始方格。且只有一个起始方格。2 表示结束方格&#xff0c;且只有一个结束方格。0 表示我们可以…...

腾讯云服务器地域怎么选?可用区是什么?

腾讯云服务器地域有什么区别&#xff1f;怎么选择比较好&#xff1f;地域选择就近原则&#xff0c;距离地域越近网络延迟越低&#xff0c;速度越快。关于地域的选择还有很多因素&#xff0c;地域节点选择还要考虑到网络延迟速度方面、内网连接、是否需要备案、不同地域价格因素…...

第一百二十三天学习记录:C++提高:STL-vector容器(下)(黑马教学视频)

vector插入和删除 功能描述&#xff1a; 对vector容器进行插入、删除操作 函数原型&#xff1a; push_back(ele); //尾部插入元素ele pop_back(); //删除最后一个元素 insert(const_iterator pos, ele); //迭代器指向位置pos插入元素ele insert(const_iterator pos, int cou…...

谈谈Spring与字节码生成技术

Spring框架是一个面向企业级Java应用开发的开源框架&#xff0c;它提供了许多功能和特性来简化Java开发过程。字节码生成技术在Spring框架中起着重要的作用&#xff0c;用于实现依赖注入&#xff08;Dependency Injection&#xff09;和面向切面编程&#xff08;Aspect-Oriente…...

Java数组详解 -- 基础知识与常用操作

文章目录 前言一、初识数组1. 数组的定义2. 数组的特点3. 声明和初始化数组4. 默认初始化值 二、访问和操作数组元素1. 数组的索引和范围2. 通过索引访问数组元素3. 修改数组元素的值 三、数组的长度和属性1. 数组的长度计算2. 数组的长度属性3. 数组越界的错误 四、数组的遍历…...

终极Windows图像查看器:为什么90%的用户选择ImageGlass替代自带软件?

终极Windows图像查看器&#xff1a;为什么90%的用户选择ImageGlass替代自带软件&#xff1f; 【免费下载链接】ImageGlass &#x1f3de; A lightweight, versatile image viewer 项目地址: https://gitcode.com/gh_mirrors/im/ImageGlass 在数字图像日益丰富的今天&…...

Flutter动画高级技巧:创建流畅的用户体验

Flutter动画高级技巧&#xff1a;创建流畅的用户体验 引言 动画是现代移动应用中不可或缺的一部分&#xff0c;它可以提升用户体验&#xff0c;使应用更加生动和富有吸引力。Flutter提供了强大的动画系统&#xff0c;从基本的补间动画到复杂的物理动画&#xff0c;都可以轻松…...

别再傻傻分不清了!ARM Cortex-M开发中SVC和PendSV中断到底该怎么用?(附FreeRTOS/RT-Thread实战对比)

ARM Cortex-M开发中SVC与PendSV中断的深度解析与实战应用 在嵌入式系统开发领域&#xff0c;特别是使用ARM Cortex-M系列处理器时&#xff0c;SVC和PendSV这两个中断机制常常让开发者感到困惑。它们看似功能相似&#xff0c;却在实时操作系统(RTOS)中扮演着截然不同的角色。本文…...

网络工程师实战:用iperf3给你的内网做个“体检”,排查带宽瓶颈(附常用命令模板)

网络工程师实战&#xff1a;用iperf3给你的内网做个“体检”&#xff0c;排查带宽瓶颈&#xff08;附常用命令模板&#xff09; 当内网应用响应迟缓、文件传输卡顿时&#xff0c;网络工程师的第一反应往往是&#xff1a;"到底是服务器性能问题还是网络带宽瓶颈&#xff1…...

Process Phoenix进阶应用:多进程架构下的状态管理终极指南

Process Phoenix进阶应用&#xff1a;多进程架构下的状态管理终极指南 【免费下载链接】ProcessPhoenix Process Phoenix facilitates restarting your application process. 项目地址: https://gitcode.com/gh_mirrors/pr/ProcessPhoenix Process Phoenix是一款专注于A…...

以太网实时性不好,载波监听机制可不背锅~

正文大家好&#xff0c;我是bug菌~最近跟同事聊到为什么现在的以太网还是够不上实时以太网呢&#xff1f;其中有个同事说了下主要是因为载波监听机制&#xff0c;导致发送的以太网数据存在碰撞&#xff0c;于是我又想了想&#xff0c;不对呀&#xff0c;现在不都是用交换机吗&a…...

别再被SVG的viewBox搞晕了!用三个实战例子讲透width、height和viewBox的关系

别再被SVG的viewBox搞晕了&#xff01;用三个实战例子讲透width、height和viewBox的关系 每次在项目中遇到SVG图标变形的问题&#xff0c;我都会想起刚入行时被viewBox支配的恐惧——明明设置了正确的width和height&#xff0c;图形却像被施了魔法般忽大忽小。直到后来通过几个…...

终极内存清理神器:Mem Reduct完整使用指南

终极内存清理神器&#xff1a;Mem Reduct完整使用指南 【免费下载链接】memreduct Lightweight real-time memory management application to monitor and clean system memory on your computer. 项目地址: https://gitcode.com/gh_mirrors/me/memreduct 你的电脑是否经…...

VLC-Qt深度解析:Qt应用中的专业视频播放方案

Qt自带的QMediaPlayer不够用&#xff1f;深入VLC-Qt源码&#xff0c;解锁专业级视频播放的全部能力 一、VLC-Qt概述 VLC-Qt是libVLC的Qt封装库&#xff0c;将强大的VLC播放引擎集成到Qt应用中。相比Qt原生QMediaPlayer&#xff0c;VLC-Qt提供了更强大的解码能力和更丰富的控制…...

OBS虚拟背景插件:3分钟打造专业直播间的完整指南

OBS虚拟背景插件&#xff1a;3分钟打造专业直播间的完整指南 【免费下载链接】obs-backgroundremoval An OBS plugin for removing background in portrait images (video), making it easy to replace the background when recording or streaming. 项目地址: https://gitco…...