骆驼注意力权重形状看起来不正确

问题描述 投票:0回答:1

我正在从 Huggingface 运行 Llama2 70B,并使用 Transformers 中的 output_attentions=True 参数来获取注意力权重。它应该输出一个元组(层、批量大小、注意力头、输入大小、输入大小),但我得到一个大小的元组(7、80、1、64、输入大小、输入大小)。 7 的额外维度应该是多少?另外,我认为因果模型应该具有下三角注意力矩阵,但输出不是下三角。这是为什么?

这是我使用的代码

from transformers import AutoTokenizer, AutoModelForCausalLM

model_name = "meta-llama/Llama-2-70b-chat-hf"
model = AutoModelForCausalLM.from_pretrained(model_name, device_map='auto')
tokenizer = AutoTokenizer.from_pretrained(model_name)

input_ids = tokenizer([input_prompt], return_tensors="pt")
    outputs= model.generate(
        input_ids['input_ids'],
        do_sample=False,
        temperature=None,
        top_p=None,
        top_k=None,
        max_new_tokens=7,
        sequence_bias=sequence_bias,
        return_dict_in_generate=True,
        output_attentions=True
        )
    attention = outputs.attentions
huggingface-transformers attention-model llama
1个回答
0
投票

部分答案:

元组outputs.attentions的长度为7,因为这是您正在生成的新令牌的数量。您生成的第一个新令牌基于输出的最后一个令牌。这里的注意力权重将具有形状(层、批量大小、注意力头、输入大小、输入大小)。您生成的下一个令牌的注意力权重将具有形状(层数、批量大小、注意力头、1、输入大小 + 1),因为仅计算新令牌和先前令牌之间的注意力。

但是,我不知道为什么第一个矩阵不是下三角矩阵。我很想认识自己!

© www.soinside.com 2019 - 2024. All rights reserved.