Попадает ли эта нейронная сеть векторного отображения в локальное оптимальное решение? Как мне выпрыгнуть из него? (Пыторч)

#python #neural-network #pytorch

Вопрос:

Я создаю простую полностью подключенную нейронную сеть для миссии векторного отображения, str_features (3202 X 100) — это входные данные сети, sem_features (3202 X 1903) — это векторы, которые мне нужно сравнить, размер in_size равен 100 dim, размер out_size равен 1900 dim. Сетевые коды и функция оптимизации следующие:

     ```
    net = torch.nn.Sequential(torch.nn.Linear(in_size, 128),
                              torch.nn.ReLU(),
                              torch.nn.Linear(128, out_size)).to('cuda:0')
    optimizer = torch.optim.Adam(net.parameters(), lr=0.01)
    loss_func = torch.nn.MSELoss()

    for epoch in range(100):
        net.train()
        logits = net(str_features)
        loss = loss_func(logits[train_idx], sem_features[train_idx])

        optimizer.zero_grad()
        loss.backward()
        optimizer.step()
    ```
 

Я пробовал многие методы настройки параметров, такие как функции активации (пробовал: ReLU, Tanh, Дырявый Relu), количество слоев (пробовал: 3,4,5), количество скрытых блоков (пробовал: 64, 128, 500, 1000), функции потерь (попробовано: MSELoss, SmoothL1Loss, косинусоидальность, косинусоидальность), количество эпох обучения и т. Д. Но каждый раз он сходится к тестовому значению около 0,5 (диапазон значений [-1,1]) после 100 тренировочных эпох.

введите описание изображения здесь

Находится ли это в ловушке локального оптимального решения, и как мне выпрыгнуть из него? Любая помощь приветствуется.