Обучение модели с множественной скоростью обучения в PyTorch - PullRequest
1 голос
/ 22 сентября 2019

Я новичок в PyTorch и привыкаю к ​​некоторым концепциям.

Мне нужно обучить нейронную сеть.Для оптимизации мне нужно использовать оптимизатор Adam с 4 различными learning rates = [2e-5, 3e-5, 4e-5, 5e-5]

. Функция оптимизатора определяется следующим образом:

def optimizer(no_decay = ['bias', 'gamma', 'beta'], lr=2e-5):
    param_optimizer = list(model.named_parameters())
    optimizer_grouped_parameters = [
    {'params': [p for n, p in param_optimizer if not any(nd in n for nd in no_decay)],
     'weight_decay_rate': 0.01},
    {'params': [p for n, p in param_optimizer if any(nd in n for nd in no_decay)],
     'weight_decay_rate': 0.0}
     ]
     # This variable contains all of the hyperparemeter information our training loop needs
     optimizer = BertAdam(optimizer_grouped_parameters, lr, warmup=.1)
     return optimizer

. Как убедиться, что оптимизатор использует мой указанный набор обученияоценивать и возвращать лучшую модель?

Во время обучения мы используем оптимизатор, как показано ниже, где я не вижу способа заставить его попробовать другую скорость обучения

def model_train():
    #other code
    # clear out the gradient
    optimizer.zero_grad()
    # Forward pass
    loss = model(b_input_ids, token_type_ids=None, attention_mask=b_input_mask, labels=b_labels)
    train_loss_set.append(loss.item())
    # Backward pass
    loss.backward()
    # Update parameters and take a step using the computed gradient
    optimizer.step()

Я знаю, чтоoptimizer.step() внутренне шаг за шагом, чтобы оптимизировать градиент.Но как мне убедиться, что оптимизатор попробует мой указанный набор скорости обучения и вернет мне лучшую модель?

Пожалуйста, предложите.

1 Ответ

1 голос
/ 22 сентября 2019

Если вы хотите тренироваться четыре раза с четырьмя разными скоростями обучения, а затем сравнивать, вам нужны не только четыре optimizer с, но и четыре model с: использование разных скоростей обучения (или любого другого мета-параметра по этому вопросу)дает другую траекторию весов в многомерном «пространстве параметров».То есть после нескольких шагов различают не только скорость обучения, но и сами обученные веса - вот что дает реальную разницу между моделями.

, поэтому вам нужно тренироваться 4 раза, используя 4 отдельных случая model, используя 4 случая optimizer с разными скоростями обучения.

...