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

Функция потерь по запросу ловит сеть в локальных оптимумах.

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

Я работаю с прямо распространяющейся нейронной сетью для подгонки следующей простой функции: N(1) = -1 N(2) = -1 N(3) = 1 N(4) = -1 Но я не хочу использовать среднеквадратичную ошибку; я использую пользовательскую функцию потерь, которая "направляет" сеть к правильному выходу другим способом. Моя пользовательская функция потерь работает следующим образом: если вход == 3: loss = -1 * выход иначе: loss = 1 * выход Если нейронная сеть имеет функцию активации 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()

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