Объедините два тензора одинаковой размерности, чтобы получить окончательный выходной тензор с использованием обучаемых весов. - PullRequest
0 голосов
/ 20 июня 2020

Работая над проблемой, связанной с ответами на вопросы (MR C), я реализовал две разные архитектуры, которые независимо дают два тензора (распределение вероятностей по токенам). Оба тензора имеют размерность (batch_size, 512). Я использую sh, чтобы получить окончательный результат формы (batch_size, 512). Как я могу объединить два тензора, используя обучаемые веса, а затем обучить модель окончательному прогнозу?

Изменить (дополнительная информация):

Итак, в прямой функции моей модели NN у меня есть использовала модель BERT для кодирования 512 токенов. Эти кодировки 768-мерные. Затем они передаются линейному слою nn.Linear (768,1) для вывода тензора формы (batch_size, 512,1). Помимо этого, у меня есть еще одна модель, построенная на основе кодировок BERT, которая также дает тензор формы (batch_size, 512, 1). Я хочу sh объединить эти два тензора, чтобы, наконец, получить тензор формы (batch_size, 512, 1), который можно обучить против выходных логитов той же формы с помощью CrossEntropyLoss.

Пожалуйста, поделитесь кодом PyTorch фрагмент, если возможно.

1 Ответ

0 голосов
/ 21 июня 2020

Предположим, что ваши два вектора - это V1 и V2. Их нужно объединить (ансамбль), чтобы получить новый вектор. Вы можете использовать взвешенную сумму следующим образом:

alpha = sigmoid(alpha)
V_final = alpha * V1 + (1 - alpha) * V2

, где альфа - обучаемый масштабатор. сигмоид должен ограничивать альфа между 0 и 1, и вы можете инициализировать альфа = 0, чтобы сигмоид (альфа) был половиной, что означает, что вы добавляете V1 и V2 с равными весами.

Это линейная комбинация, но могут быть и нелинейные версии. У вас может быть нелинейный слой, который принимает (V1; V2) (конкатенацию) и выводит также вывод softmaxed, например softmax(W * (V1;V2) + b).

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...