Transformer - 注意⼒机制

Transformer - 注意⼒机制

flyfish

计算过程

flyfish

在这里插入图片描述
在这里插入图片描述
在这里插入图片描述

# -*- coding: utf-8 -*-

import torch
import torch.nn as nn
import torch.nn.functional as F
import os
import math

def attention(query, key, value, mask=None, dropout=None):

     # query的最后⼀维的⼤⼩, ⼀般情况下就等同于词嵌⼊维度, 命名为d_k
     d_k = query.size(-1)

     scores = torch.matmul(query, key.transpose(-2, -1)) / math.sqrt(d_k)
     print("scores.shape:",scores.shape)#scores.shape: torch.Size([1, 12, 12])

     if mask is not None:
         scores = scores.masked_fill(mask == 0, -1e9)


     p_attn = F.softmax(scores, dim = -1)

     if dropout is not None:
         p_attn = dropout(p_attn)

     return torch.matmul(p_attn, value), p_attn

class PositionalEncoding(nn.Module):
    def __init__(self, d_model, dropout, max_len=5000):
        super(PositionalEncoding, self).__init__()
        self.dropout = nn.Dropout(p=dropout)

       
        pe = torch.zeros(max_len, d_model)
        position = torch.arange(0, max_len).unsqueeze(1)
        div_term = torch.exp(
            torch.arange(0, d_model, 2) * -(math.log(10000.0) / d_model)
        )
        pe[:, 0::2] = torch.sin(position * div_term)
        pe[:, 1::2] = torch.cos(position * div_term)
        pe = pe.unsqueeze(0)
        self.register_buffer("pe", pe)

    def forward(self, x):
        x = x +  self.pe[:, : x.size(1)].requires_grad_(False)
        return self.dropout(x)
#在测试attention的时候需要位置编码PositionalEncoding


# 词嵌⼊维度是8维
d_model = 8
# 置0⽐率为0.1
dropout = 0.1
# 句⼦最⼤⻓度
max_len=12

x = torch.zeros(1, max_len, d_model)
pe = PositionalEncoding(d_model, dropout, max_len)
                           
pe_result = pe(x)

print("pe_result:", pe_result)
query = key = value = pe_result
print("pe_result.shape:",pe_result.shape)

#没有mask的输出情况
#pe_result.shape: torch.Size([1, 12, 8])
attn, p_attn = attention(query, key, value)
print("no mask\n")
print("attn:", attn)
print("p_attn:", p_attn)

#scores = torch.matmul(query, key.transpose(-2, -1)) / math.sqrt(d_k)
# 除以math.sqrt(d_k) 表示这个注意力就是 缩放点积注意力,如果没有,那么就是 点积注意力
#当Q=K=V时,又叫⾃注意⼒机制

#有mask的输出情况
print("mask\n")
mask = torch.zeros(1, max_len, max_len)
attn, p_attn = attention(query, key, value, mask=mask)
print("attn:", attn)
print("p_attn:", p_attn)
pe_result: tensor([[[ 0.0000e+00,  1.1111e+00,  0.0000e+00,  1.1111e+00,  0.0000e+00,
           1.1111e+00,  0.0000e+00,  1.1111e+00],
         [ 9.3497e-01,  6.0034e-01,  1.1093e-01,  1.1056e+00,  1.1111e-02,
           1.1111e+00,  1.1111e-03,  1.1111e+00],
         [ 1.0103e+00, -4.6239e-01,  2.2074e-01,  1.0890e+00,  2.2221e-02,
           0.0000e+00,  2.2222e-03,  1.1111e+00],
         [ 1.5680e-01, -1.1000e+00,  0.0000e+00,  1.0615e+00,  3.3328e-02,
           0.0000e+00,  3.3333e-03,  1.1111e+00],
         [-8.4089e-01, -7.2627e-01,  4.3269e-01,  1.0234e+00,  4.4433e-02,
           1.1102e+00,  4.4444e-03,  1.1111e+00],
         [-1.0655e+00,  3.1518e-01,  5.3270e-01,  0.0000e+00,  5.5532e-02,
           1.1097e+00,  5.5555e-03,  1.1111e+00],
         [-3.1046e-01,  1.0669e+00,  6.2738e-01,  9.1704e-01,  0.0000e+00,
           1.1091e+00,  6.6666e-03,  0.0000e+00],
         [ 7.2999e-01,  8.3767e-01,  7.1580e-01,  8.4982e-01,  7.7714e-02,
           1.1084e+00,  7.7777e-03,  1.1111e+00],
         [ 1.0993e+00, -1.6167e-01,  7.9706e-01,  7.7412e-01,  8.8794e-02,
           1.1076e+00,  8.8888e-03,  1.1111e+00],
         [ 4.5791e-01, -0.0000e+00,  8.7036e-01,  6.9068e-01,  9.9865e-02,
           1.1066e+00,  9.9999e-03,  1.1111e+00],
         [-6.0447e-01, -9.3230e-01,  9.3497e-01,  6.0034e-01,  1.1093e-01,
           1.1056e+00,  1.1111e-02,  1.1111e+00],
         [-1.1111e+00,  4.9174e-03,  9.9023e-01,  5.0400e-01,  1.2198e-01,
           1.1044e+00,  1.2222e-02,  1.1110e+00]]])
pe_result.shape: torch.Size([1, 12, 8])
scores.shape: torch.Size([1, 12, 12])
no mask

attn: tensor([[[ 1.0590e-01,  2.7361e-01,  4.9333e-01,  8.3999e-01,  5.0599e-02,
           1.0079e+00,  5.6491e-03,  1.0138e+00],
         [ 2.7554e-01,  2.0916e-01,  4.9203e-01,  8.6593e-01,  5.2177e-02,
           9.7066e-01,  5.6513e-03,  1.0398e+00],
         [ 2.8765e-01, -3.8825e-02,  4.7812e-01,  8.7535e-01,  5.4246e-02,
           8.4157e-01,  5.7015e-03,  1.0659e+00],
         [ 9.3666e-02, -1.8286e-01,  4.8727e-01,  8.5124e-01,  5.7070e-02,
           8.2547e-01,  5.9523e-03,  1.0712e+00],
         [-1.6747e-01, -1.0274e-01,  5.6960e-01,  7.7584e-01,  6.3699e-02,
           9.6958e-01,  6.7169e-03,  1.0546e+00],
         [-2.2646e-01,  6.8462e-02,  5.8668e-01,  7.2227e-01,  6.3119e-02,
           1.0233e+00,  6.8004e-03,  1.0310e+00],
         [ 8.8945e-04,  2.7654e-01,  5.3750e-01,  8.0958e-01,  5.2289e-02,
           1.0259e+00,  6.1360e-03,  9.6094e-01],
         [ 2.2231e-01,  2.2832e-01,  5.2263e-01,  8.4111e-01,  5.4828e-02,
           9.9655e-01,  5.9765e-03,  1.0298e+00],
         [ 2.6388e-01,  7.2239e-02,  5.3800e-01,  8.4070e-01,  5.8958e-02,
           9.5033e-01,  6.2306e-03,  1.0564e+00],
         [ 1.2822e-01,  7.4518e-02,  5.5305e-01,  8.1381e-01,  6.0125e-02,
           9.7442e-01,  6.4089e-03,  1.0462e+00],
         [-1.5757e-01, -1.3194e-01,  5.9562e-01,  7.6069e-01,  6.7079e-02,
           9.7264e-01,  7.0187e-03,  1.0607e+00],
         [-2.3505e-01,  5.6245e-03,  6.0160e-01,  7.3040e-01,  6.5491e-02,
           1.0176e+00,  7.0038e-03,  1.0367e+00]]])
p_attn: tensor([[[0.1488, 0.1215, 0.0514, 0.0396, 0.0698, 0.0703, 0.0875, 0.1205,
          0.0790, 0.0814, 0.0544, 0.0757],
         [0.1170, 0.1434, 0.0757, 0.0489, 0.0590, 0.0460, 0.0642, 0.1304,
          0.1161, 0.0943, 0.0527, 0.0524],
         [0.0716, 0.1094, 0.1341, 0.1067, 0.0716, 0.0379, 0.0407, 0.0930,
          0.1221, 0.0921, 0.0713, 0.0494],
         [0.0597, 0.0765, 0.1155, 0.1397, 0.1127, 0.0506, 0.0359, 0.0627,
          0.0918, 0.0806, 0.1056, 0.0688],
         [0.0692, 0.0607, 0.0509, 0.0740, 0.1475, 0.0846, 0.0509, 0.0607,
          0.0692, 0.0788, 0.1342, 0.1194],
         [0.0887, 0.0601, 0.0343, 0.0423, 0.1076, 0.1341, 0.0721, 0.0748,
          0.0591, 0.0777, 0.1057, 0.1435],
         [0.1232, 0.0938, 0.0411, 0.0335, 0.0722, 0.0804, 0.1351, 0.1103,
          0.0722, 0.0814, 0.0633, 0.0935],
         [0.1124, 0.1263, 0.0623, 0.0388, 0.0571, 0.0553, 0.0731, 0.1388,
          0.1134, 0.1001, 0.0571, 0.0652],
         [0.0758, 0.1157, 0.0841, 0.0584, 0.0670, 0.0450, 0.0492, 0.1166,
          0.1429, 0.1101, 0.0763, 0.0588],
         [0.0822, 0.0989, 0.0668, 0.0540, 0.0803, 0.0622, 0.0584, 0.1084,
          0.1158, 0.1046, 0.0879, 0.0804],
         [0.0548, 0.0551, 0.0515, 0.0705, 0.1364, 0.0845, 0.0454, 0.0617,
          0.0801, 0.0877, 0.1499, 0.1224],
         [0.0763, 0.0548, 0.0357, 0.0459, 0.1213, 0.1146, 0.0669, 0.0703,
          0.0616, 0.0802, 0.1224, 0.1499]]])
mask

scores.shape: torch.Size([1, 12, 12])
attn: tensor([[[0.0381, 0.0461, 0.5194, 0.8105, 0.0555, 0.9236, 0.0061, 1.0185],
         [0.0381, 0.0461, 0.5194, 0.8105, 0.0555, 0.9236, 0.0061, 1.0185],
         [0.0381, 0.0461, 0.5194, 0.8105, 0.0555, 0.9236, 0.0061, 1.0185],
         [0.0381, 0.0461, 0.5194, 0.8105, 0.0555, 0.9236, 0.0061, 1.0185],
         [0.0381, 0.0461, 0.5194, 0.8105, 0.0555, 0.9236, 0.0061, 1.0185],
         [0.0381, 0.0461, 0.5194, 0.8105, 0.0555, 0.9236, 0.0061, 1.0185],
         [0.0381, 0.0461, 0.5194, 0.8105, 0.0555, 0.9236, 0.0061, 1.0185],
         [0.0381, 0.0461, 0.5194, 0.8105, 0.0555, 0.9236, 0.0061, 1.0185],
         [0.0381, 0.0461, 0.5194, 0.8105, 0.0555, 0.9236, 0.0061, 1.0185],
         [0.0381, 0.0461, 0.5194, 0.8105, 0.0555, 0.9236, 0.0061, 1.0185],
         [0.0381, 0.0461, 0.5194, 0.8105, 0.0555, 0.9236, 0.0061, 1.0185],
         [0.0381, 0.0461, 0.5194, 0.8105, 0.0555, 0.9236, 0.0061, 1.0185]]])
p_attn: tensor([[[0.0833, 0.0833, 0.0833, 0.0833, 0.0833, 0.0833, 0.0833, 0.0833,
          0.0833, 0.0833, 0.0833, 0.0833],
         [0.0833, 0.0833, 0.0833, 0.0833, 0.0833, 0.0833, 0.0833, 0.0833,
          0.0833, 0.0833, 0.0833, 0.0833],
         [0.0833, 0.0833, 0.0833, 0.0833, 0.0833, 0.0833, 0.0833, 0.0833,
          0.0833, 0.0833, 0.0833, 0.0833],
         [0.0833, 0.0833, 0.0833, 0.0833, 0.0833, 0.0833, 0.0833, 0.0833,
          0.0833, 0.0833, 0.0833, 0.0833],
         [0.0833, 0.0833, 0.0833, 0.0833, 0.0833, 0.0833, 0.0833, 0.0833,
          0.0833, 0.0833, 0.0833, 0.0833],
         [0.0833, 0.0833, 0.0833, 0.0833, 0.0833, 0.0833, 0.0833, 0.0833,
          0.0833, 0.0833, 0.0833, 0.0833],
         [0.0833, 0.0833, 0.0833, 0.0833, 0.0833, 0.0833, 0.0833, 0.0833,
          0.0833, 0.0833, 0.0833, 0.0833],
         [0.0833, 0.0833, 0.0833, 0.0833, 0.0833, 0.0833, 0.0833, 0.0833,
          0.0833, 0.0833, 0.0833, 0.0833],
         [0.0833, 0.0833, 0.0833, 0.0833, 0.0833, 0.0833, 0.0833, 0.0833,
          0.0833, 0.0833, 0.0833, 0.0833],
         [0.0833, 0.0833, 0.0833, 0.0833, 0.0833, 0.0833, 0.0833, 0.0833,
          0.0833, 0.0833, 0.0833, 0.0833],
         [0.0833, 0.0833, 0.0833, 0.0833, 0.0833, 0.0833, 0.0833, 0.0833,
          0.0833, 0.0833, 0.0833, 0.0833],
         [0.0833, 0.0833, 0.0833, 0.0833, 0.0833, 0.0833, 0.0833, 0.0833,
          0.0833, 0.0833, 0.0833, 0.0833]]])

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

如若内容造成侵权/违法违规/事实不符,请联系我们进行投诉反馈qq邮箱809451989@qq.com,一经查实,立即删除!

相关文章

工业项目能耗管理可以看这个开源项目

软件介绍 Scaphandre是一个专注于电力和能源消耗指标的计量代理,旨在为公司和个人提供测量技术服务功耗的便捷工具,并以便于理解的方式获取数据。其名字来源于法语中的潜水服或潜水器,象征着深入测量和揭示技术服务耗能量的意图。 功能特点 …

2024轨道交通、运输工程、供应链管理国际会议(RTTESCM2024)

2024轨道交通、运输工程、供应链管理国际会(RTTESCM2024) 会议简介 2024轨道交通、运输工程、供应链管理国际会议(RTTESCM2024)组委会诚挚地邀请您参加这次将在厦门举行的会议。 RTTESCM2024会议旨在为轨道交通、运输工程和供应链管理领域的专家学者提供一个平台,…

观察和配置MAC地址表

目录 原理概述 实验目的 实验内容 实验拓扑 ​编辑1.基本配置 2.观察正常状态时的MAC地址表 4.配置静态MAC地址表项 原理概述 MAC 地址表是交换机的一个核心组成部分,交换机主要是根据 MAC 地址表来进行帧的转发的。交换机对帧的转发操作行为一共有…

Mac上怎么合并多张图片?

Mac上怎么合并多张图片?上班过的小伙伴都应该知道,合并拼接图片是一件非常重要且经常需要使用到的图片处理技术,将多张图片合并拼成一张之后能够展现出更多的图片内容。在Mac电脑上,合并多张图片是一项常见的任务,无论…

智慧InSAR专题———模拟数据实现现实场景异常形变点识别(论文解读)

文章目录 (近期想静下心回顾近期看的佳作,会写一下自己的总结,大家如果对此系列感兴趣,每周踢一下我,周更,持续更新)0 前言1 Automated deformation detection and interpretation using InSAR …

财报解读:首次全年盈利的奈雪的茶,正越来越“接地气”

从2021年6月到2023年底,上市的奈雪的茶用一年半的时间,终于进入了自己的“盈利时代”。 根据奈雪的茶近日披露的财报,2023年,公司营收51.64亿元,同比增长20.3%;经调整净利润2090万元,上年同期亏…

HackTheBox-Machines--Builder

文章目录 1 端口扫描2 测试思路3 漏洞测试 Builder测试过程 1 端口扫描 nmap -sC -sV 10.129.230.2202 测试思路 系统开启了22和8080端口,22端口无账号密码,测试方向主要从8080的jenkins服务开始测试。 在测试开源系统时,可以下载源代码或本地…

C++ 哈希思想应用:位图,布隆过滤器,哈希切分

C 哈希思想应用:位图,布隆过滤器,哈希切分 一.位图1.位图的概念1.问题2.分析3.位图的概念4.演示 2.位图的操作3.位图的实现1.char类型的数组2.int类型的数组3.解决一开始的问题位图开多大呢?小小补充验证 4.位图的应用1.给定100亿个整数,设计算法找到只出现一次的整…

aardio plus滑尺滑块垂直

在滑尺调色工具中,将“控件宽度”调到小于“控件高度”时,就看到滑块滑条变成垂直的了。 一年前下载了aardio,刚接触,看到plus,滑尺配色工具,然后就试了一下,结果一直没找到怎么把plus滑尺调节…

Flash选型确认

3.1 NOR Flash选型 容量:容量大小一般是我们首先要考虑的因素,Flash的大小一般用bit表示,容量范围涵盖512Kb~512Mb。例如型号GD25Q64C容量就为64Mb8MB。 供电电压:Nor Flash的供电电压一般分为四种:2.7V~3.6V&#x…

盘点AI编程效率神器合集,代码助手工具大模型、Agent智能体

关注wx公众号:aigc247 进社群加wx号:aigc365 程序员是最擅长革自己命的职业,让我们借助AI的力量一起摸鱼一起卷! 据说好用的AI代码助手工具、大模型、Agent智能体 微软的compoliot:AI神器之微软的编码助手Copilot-CSDN博客 阿…

Stream流,线程

文章目录 Stream流思想作用三类方法获取方法单列集合(Collection[List,Set双列集合Map(不能直接获取)数组同一类型元素(Stream中的静态方法) 常见的中间方法终结方法收集方法 Optional类 线程相关概念多线程概念实现方式继承Thread类实现Runnable接口比较 常用方法线程安全产生…

电机控制器电路板布局布线参考指导(二)

电机控制器电路板布局布线参考指导(二)热特性 1.概述2.PCB传导与对流3.连续顶层散热焊盘4.覆铜厚度5.散热过孔连接6.散热过孔宽度7.电机控制器电路板热设计总结 1.概述 电机驱动器并不是理想的器件,在实际应用中,它们的一些功率会…

Go 源码之 Chan

Go 源码之 chan go源码之chan - Jxy 博客 目录 Go 源码之 chan一、总结二、源码(一)hchan(二)创建(三)发送(四)接收(五)关闭 三、常见问题1.为什么要使用环形…

SV学习笔记(一)

SV:SystemVerilog 开启SV之路 数据类型 內建数据类型 四状态与双状态 : 四状态指0、1、X、Z,包括logic、integer、 reg、 wire。双状态指0、1,包括bit、byte、 shortint、int、longint。 有符号与无符号 : 有符号&am…

12313124

c语言中的小小白-CSDN博客c语言中的小小白关注算法,c,c语言,贪心算法,链表,mysql,动态规划,后端,线性回归,数据结构,排序算法领域.https://blog.csdn.net/bhbcdxb123?spm1001.2014.3001.5343 给大家分享一句我很喜欢我话: 知不足而奋进,望远山而前行&am…

【Linux】进程管理(2):进程控制

一、进程创建:fork函数 我们在命令行中输入man fork 即可得到fork函数的函数接口的函数的使用方法。 我们可以看到,fork函数位于man手册的第2部分,由于第2部分通常是用于描述系统调用和库函数,所以我们可以了解到fork函数实际是一…

【总结】在嵌入式设备上可以离线运行的LLM--Llama

文章目录 Llama 简介运用另一种:MLC-LLM 一个令人沮丧的结论在资源受限的嵌入式设备上无法运行LLM(大语言模型)。 一丝曙光:tinyLlama-1.1b(10亿参数,需要至少2.98GB的RAM) Llama 简介 LLaMA…

自动驾驶的世界模型:综述

自动驾驶的世界模型:综述 附赠自动驾驶学习资料和量产经验:链接 24年3月澳门大学和夏威夷大学的论文“World Models for Autonomous Driving: An Initial Survey”。 在快速发展的自动驾驶领域,准确预测未来事件并评估其影响的能力对安全性…

ssm017网上花店设计+vue

网上花店的设计与实现 摘 要 网络技术和计算机技术发展至今,已经拥有了深厚的理论基础,并在现实中进行了充分运用,尤其是基于计算机运行的软件更是受到各界的关注。加上现在人们已经步入信息时代,所以对于信息的宣传和管理就很关…