文章预览
来源 | 知乎问答 地址 | https://www.zhihu.com/question/298810062 本文仅作学术分享,若侵权请联系后台删文处理 01 回答一:作者-不是大叔 我们直接用torch 实现一个SelfAttention 来说一说: 1.首先定义三个线性变换矩阵,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是它们三个的输出 2. 假设三种操作的输入都是同一个矩阵(暂且先别管为什么输入是同一个矩阵),这里暂且定为长度为L的句子,每个token的特征维度是768,那么输入就是(L, 768),每一行就是一个字
………………………………