SelfAttenion自注意力机制

my-attention

考虑别的token对当前token的语义影响

第一种情况, 维度缩减

输入x= 4x6

dk=3

wq = 6x3

wk = 6x3

wv = 6x3

q = x@ wq = 4x6*6x3 = 4x3

k = x@ wk = 4x6*6x3 = 4x3

r=q@k.T = 4x3*3x4=4x4

缩放

r = r/sqrt(dk)=4x4

a = softmax®=4x4

v = x@ wv = 4x6*6x3 = 4x3

out = a@v = 4x4 * 4x3 = 4x3

第二种情况, 维度不缩减

输入x= 4x6

输出维度为6

dk=6

随机生成qkv

wq = 6x6

wk = 6x6

wv = 6x6

q = x@ wq = 4x6*6x6 = 4x6

k = x@ wk = 4x6*6x6 = 4x6

r=q@k.T = 4x6*6x4=4x4

缩放

r = r/sqrt(dk)=4x4

归一化

a = softmax®=4x4

原始值增加权重

v = x@ wv = 4x6*6x6 = 4x6

out = a@v = 4x4 * 4x6 = 4x6

保证输出结果的维度和要求要一致

下面是用代码实现了一下自注意力机制

复制代码
import math

import torch
from torch import nn

x = torch.randn(16, 64, 512)

d_model = 512
h_num = 8


class Self_Attention(nn.Module):
    def __init__(self, d_model, h_num):
        # 调用父类构造函数
        super(Self_Attention, self).__init__()

        self.d_model = d_model
        self.h_num = h_num
        self.softmax = nn.Softmax(dim=-1)
        self.w_q = nn.Linear(d_model, d_model)
        self.w_k = nn.Linear(d_model, d_model)
        self.w_v = nn.Linear(d_model, d_model)
        self.w_o = nn.Linear(d_model, d_model)

    def forward(self, x):
        B, L, D = x.shape

        h_d = self.d_model // self.h_num

        q, k, v = self.w_q(x), self.w_k(x), self.w_v(x)
        q = q.view(B, L, self.h_num, h_d).transpose(1, 2)
        k = k.view(B, L, self.h_num, h_d).transpose(1, 2)
        v = v.view(B, L, self.h_num, h_d).transpose(1, 2)

        r = q @ k.transpose(2, 3) / math.sqrt(h_d)

        mask = torch.tril(torch.ones(L, L, dtype=bool))

        r = r.masked_fill(~mask, -10000) 

        a = self.softmax(r)

        o = a @ v
        o = o.transpose(1, 2).contiguous().view(B, L, self.d_model)

        return self.w_o(o)


attention = Self_Attention(d_model, h_num)
y = attention(x)
print(y.shape)
print(y)
相关推荐
特立独行的猫A3 小时前
我给女儿写了个打字练习:一边敲键盘,一边把小学英语单词记牢
java·后端·python
cpolar技术支持3 小时前
「我这边连不上你那个服务」—— 用清单驱动的 TCP 连通性只读看板,cpolar 让远端同事自己取证
python·内网穿透·tcp·cpolar·网络诊断
云和数据.ChenGuang4 小时前
LangGraph 异步 Node 的设计与写法实践
开发语言·人工智能·python·机器学习·php
会飞锦鲤4 小时前
工业AI视觉检测项目完整实施方案
人工智能·深度学习·视觉检测·缺陷检测·模型训练·ai项目·工业应用
天诰5 小时前
SA-K-11 检索会消失吗与四个未解问题
java·服务器·人工智能·python·机器学习·ai编程
电科_银尘5 小时前
【深度学习项目实战·15】小样本图像分类:迁移学习识别蚂蚁与蜜蜂
深度学习·分类·迁移学习
benchmark_cc5 小时前
用 QuantDash 读取美股行情:AAPL.US 的运行前检查、排错顺序与数据校验清单
python·数据分析·pandas·量化交易·股票数据·quantdash
陈嘿萌6 小时前
TIP 2026 | 不再混成一张! RealFusion从模态不变性重想图像融合
图像处理·人工智能·深度学习·计算机视觉·学术研究与理论基础
蜗牛一步步往上爬7 小时前
第十六章 C++语言在深度学习中的应用
开发语言·c++·深度学习
武天旭7 小时前
AI安全--AI大模型的对抗样本攻击与防御解析
人工智能·深度学习·安全·机器学习