Запутался в документации трансформаторов

Я читаю документацию библиотеки трансформатора из huggingface, и меня немного смущает прямой вывод BertModel.
В документах указано, что есть два вывода (и два дополнительных), которые:

  • последнее скрытое состояние
  • объединенный вывод

и в документации последнего предлагается, что:

Этот вывод обычно не является хорошим обобщением семантического содержания ввода, вам часто лучше усреднить или объединить последовательность скрытых состояний для всей входной последовательности.

Итак, мне кажется, что первый вывод может лучше представить семантику ввода. Однако в коде для BertForSequenceClassification второй выход используется и для питания полностью подключенного слоя. Почему?
Это часть кода:

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

person P.Alipoor    schedule 13.04.2020    source источник


Ответы (1)


Я думаю, что это во многом указатель на способы улучшения вашей модели. Для быстрого прототипирования и более быстрого обучения метод объединения определенно предпочтительнее, так как он требует немного меньше вычислений и более простой для понимания, а также «подтвержденный послужной список» хорошей работы в задачах классификации.

Насколько мне известно, несмотря на комментарий в документации, я не могу вспомнить каких-либо немедленных результатов, когда усреднение встраиваний было намного лучше, чем простое объединение по токену [CLS] для задачи классификации. На мой взгляд, усреднение, вероятно, также сделало бы распространение градиента немного более непоследовательным, поскольку поток теперь делится на несколько головок, а не только на [CLS], что потенциально может привести к обнулению градиента для более длинных последовательностей (это чисто теоретическое предположение, и Я не могу подтвердить это фактическими результатами).

Вы правы, что это немного непоследовательно, и я надеялся, что они предложат вторичную модель, которая может сделать это в ближайшее время, но, возможно, это ваш шанс внести свой вклад в открытый исходный код ;-)

person dennlinger    schedule 14.04.2020