Запутался в документации по трансформаторам - PullRequest
1 голос
/ 13 апреля 2020

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

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

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

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

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

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

1 Ответ

2 голосов
/ 14 апреля 2020

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

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

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

...