#pytorch #embedding
Вопрос:
Я частично настраиваю матрицу встраивания (только для определенного индекса). Но на обратной фазе изменяются другие вложения, которые, как ожидается, не будут изменены.
Вот пример:
import torch
from torch import nn
embeds = nn.Embedding(10, 3)
optim = torch.optim.Adam(params=embeds.parameters(), lr=0.001, weight_decay=1e-6)
indexes = torch.tensor([1,2,3]) # expected to finetune
bce_loss = nn.BCELoss()
optim.zero_grad()
loss = bce_loss(embeds(indexes).sum(dim=-1), torch.zeros(3))
loss.backward()
optim.step()
Я хочу только настроить 1-е, 2-е, 3-е встраивания, но после обратного вся матрица встраивания изменяется. Почему? И как решить эту проблему? ТХ!
Ответ №1:
Изменение матрицы встраивания после optim.step()
этого не полностью связано с определенной вами потерей (т. Е. BCELoss). Вы упускаете из виду другую часть потерь, которая неявно определяется из-за weight_decay
параметра в вашем оптимизаторе. Когда вы предоставляете ненулевое снижение веса, оно добавляет вторую составляющую к потере, которая превышает все параметры модели. Просто выключи это
optim = torch.optim.Adam(..., weight_decay=0.)
и вы увидите ожидаемый результат.
Комментарии:
1. Мило! Это работает!
2. Если это помогло, пожалуйста, подумайте о том, чтобы отметить его как принятый ответ