← Вернуться к списку

Почему эта пользовательская функция потерь застревает по сравнению с среднеквадратичной ошибкой во время обучения?

Краткое содержание

Я работаю с прямо распространяющейся нейронной сетью для подгонки следующей простой функции: N(1) = -1 N(2) = -1 N(3) = 1 N(4) = -1 Но я не хочу использовать среднеквадратичную ошибку; я использую пользовательскую функцию потерь, которая "направляет" сеть к правильному выходу другим способом. Моя пользовательская функция потерь работает следующим образом: если input == 3: loss = -1 * output иначе: loss = 1 * output Если нейронная сеть имеет функцию активации atanh, то минимизационная функция для этой потери очевидна: N. Следовательно, сеть должна стремиться к подгонке N. Но моя сеть выдает только -1 (даже когда вход равен 3). Я написал небольшой образец кода с использованием PyTorch, чтобы продемонстрировать это: Функция потерь: import torch import torch.nn as nn class CustomLoss(nn.Module): def __init__(self): super().__init__() def forward(self, x, i): multiplier = -1 if i == 3 else 1 return multiplier * x Инициализация сети, оптимизатора и функции потерь: net = nn.Sequential( nn.Linear(1, 20), nn.Tanh(), nn.Linear(20, 20), nn.Tanh()

Полный текст статьи пока не загружен.