专栏名称: 大侠学Python
我们或许是在学宇宙第一热门语言Python吧!大家都在学Python,大侠和大家一起分享Python资料、Python文章、Python工具资源、Python源码、Python教程,会Python的人生就跟开了挂一样
目录
今天看啥  ›  专栏  ›  大侠学Python

如何理解attention中的Q,K,V?

大侠学Python  · 公众号  ·  · 2024-06-18 11:20
    

文章预览

01回答一:作者-不是大叔 我们直接用torch 实现一个SelfAttention 来说一说: 首先定义三个线性变换矩阵,query, key, value: class BertSelfAttention(nn.Module):     self.query = nn.Linear(config.hidden_size, self.all_head_size)  # 输入768, 输出768     self.key = nn.Linear(config.hidden_size, self.all_head_size)  # 输入768, 输出768     self.value = nn.Linear(config.hidden_size, self.all_head_size)  # 输入768, 输出768 注意,这里的query, key, value只是一种操作(线性变换)的名称,实际的Q/K/V是它们三个的输出 假设三种操作的输入都是同一个矩阵(暂且先别管为什么输入是同一个矩阵),这里暂且定为长度为L的句子,每个token的特征维度是768,那么输入就是(L, 768),每一行就是一个字,像这样: 乘以上面三种操作就得到了Q/K/V,(L, 768)*(768,768) = (L,768),维度其实没变,即此刻的Q/K/V分别为: ………………………………

原文地址:访问原文地址
快照地址: 访问文章快照
总结与预览地址:访问总结与预览