【问题标题】:BERT token importance measuring issue. Grad is noneBERT 代币重要性测量问题。研究生没有
【发布时间】:2020-07-31 20:05:35
【问题描述】:

我正在尝试通过比较令牌嵌入 grad 值来衡量 BERT 的令牌重要性。因此,为了获得毕业生,我复制了 BertModel 的 2.8.0 转发并稍作更改:

huggingface transformers 2.8.0 BERThttps://github.com/huggingface/transformers/blob/11c3257a18c4b5e1a3c1746eefd96f180358397b/src/transformers/modeling_bert.py

代码:

        embedding_output = self.embeddings(
            input_ids=input_ids, position_ids=position_ids, token_type_ids=token_type_ids, inputs_embeds=inputs_embeds
        )
        embedding_output = embedding_output.requires_grad_(True) # my code
        encoder_outputs = self.encoder(
            embedding_output,
            attention_mask=extended_attention_mask,
            head_mask=head_mask,
            encoder_hidden_states=encoder_hidden_states,
            encoder_attention_mask=encoder_extended_attention_mask,
        )
        sequence_output = encoder_outputs[0]
        sequence_output.mean().backward() # my code
        assert(embedding_output.grad is not None) # my code

Colab 链接:https://colab.research.google.com/drive/1MggBUaDWAAZNuXbTDM11E8jvdMGEkuRD 但它给出了断言错误。我不明白为什么,这对我来说似乎是一个错误。 请帮忙!

【问题讨论】:

  • 也许我忽略了它,但您缺少优化器。如果没有优化器,pytorch 不会计算任何梯度。
  • 是的,我没有使用任何优化器。但是,torch 自己计算 grad ,AFAIK,检查这些证明行:pastebin.com/ZmYS2rCN

标签: deep-learning pytorch transformer huggingface-transformers


【解决方案1】:

我需要添加这一行:

embedding_output = torch.tensor(embedding_output, requires_grad=True)

看来,我使用的 .requires_grad_ 方法不正确。

【讨论】:

    猜你喜欢
    • 2014-04-20
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2015-12-06
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多