【问题标题】:Confused about transformers' documentation对变压器的文档感到困惑
【发布时间】:2020-04-14 15:21:51
【问题描述】:

我正在从 huggingface 阅读变压器库的文档,我对 BertModel 的前向输出有点困惑。
文档中说明有两个输出(和两个可选输出)是:

  • 最后隐藏状态
  • 合并输出

在后者的文档中建议:

此输出通常不能很好地概括输入的语义内容,通常最好对整个输入序列的隐藏状态序列进行平均或合并。

所以,在我看来,第一个输出可以更好地表示输入的语义。但是,在BertForSequenceClassification 的代码中,使用了第二个输出并为全连接层提供数据。这是为什么呢?
这是代码的一部分:

 pooled_output = outputs[1]
 pooled_output = self.dropout(pooled_output)
 logits = self.classifier(pooled_output)

【问题讨论】:

    标签: python-3.x huggingface-transformers


    【解决方案1】:

    我认为这主要是指向改进模型的方法。 对于快速原型设计和更快的训练,池化方法绝对是首选,因为它的计算量更少,更易于理解,并且在分类任务中表现良好的“经过验证的记录”。

    据我所知,尽管文档中有评论,但我无法回忆起任何直接结果,其中嵌入的平均值比简单地汇集 [CLS] 标记用于分类任务要好得多。在我看来,平均可能还会使梯度传播更加不一致,因为流现在通过几个头而不是 [CLS] 一个头,可能导致更长序列的梯度归零(这纯粹是理论上的推测,我无法用实际结果来支持这一点)。

    你说得对,这有点不一致,我希望他们能提供一个可能很快就会这样做的辅助模型,但也许这是你为开源做出贡献的机会 ;-)

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2021-04-06
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2012-02-20
      • 1970-01-01
      • 1970-01-01
      • 2017-01-01
      相关资源
      最近更新 更多