Выбор функции потерь

Функция потерь является центральным элементом обучения нейронной сети. Она определяет, как сеть измеряет ошибку между предсказанными значениями и истинными метками, и напрямую влияет на процесс оптимизации весов. В ConvNetJS функции потерь реализованы как отдельные объекты, которые можно передавать в конструктор Trainer.

Основные типы функций потерь

1. Softmax Cross-Entropy Loss Наиболее часто используемая функция потерь для задач классификации с несколькими классами. В ConvNetJS реализуется через объект SoftmaxLayer или FullyConnLayer с параметром activation: 'softmax'.

Ключевые моменты:

  • Выходные значения сети интерпретируются как вероятности.
  • Потеря вычисляется как отрицательный логарифм вероятности правильного класса:

[ L = -_{i} y_i (_i)]

где (y_i) — истинная метка, а (_i) — предсказанная вероятность.

  • Обеспечивает плавный градиент, подходящий для оптимизации через SGD (Stochastic Gradient Descent).

Пример использования:

var layer_defs = [];
layer_defs.push({type:'input', out_sx:1, out_sy:1, out_depth:10});
layer_defs.push({type:'softmax', num_classes:10});

var net = new convnetjs.Net();
net.makeLayers(layer_defs);

var trainer = new convnetjs.Trainer(net, {method:'sgd', learning_rate:0.01, l2_decay:0.001});

2. Regression Loss (L2 Loss) Используется для задач регрессии, когда требуется предсказывать непрерывные значения. В ConvNetJS для этого применяются слои RegressionLayer.

Особенности:

  • Потеря вычисляется как среднеквадратичная ошибка между предсказанным значением и целевым:

[ L = _i (y_i - _i)^2]

  • Подходит для предсказания численных величин, например, координат объектов на изображении.
  • Градиент пропорционален разности между предсказанием и целью, что делает обучение стабильным при малых ошибках.

Пример настройки:

layer_defs.push({type:'input', out_sx:1, out_sy:1, out_depth:1});
layer_defs.push({type:'regression', num_neurons:1});

var net = new convnetjs.Net();
net.makeLayers(layer_defs);

var trainer = new convnetjs.Trainer(net, {method:'sgd', learning_rate:0.01});

3. Hinge Loss Часто используется в задачах бинарной классификации или многоклассовых задачах с поддержкой метода SVM. ConvNetJS поддерживает реализацию через SVMLayer.

Особенности:

  • Максимизирует разницу между правильным классом и остальными.
  • Потеря выражается как:

[ L = _{i y} (0, 1 - (_y - _i))]

  • Чувствительна к выбору коэффициентов регуляризации, так как напрямую влияет на ширину “запаса” между классами.

Пример конфигурации:

layer_defs.push({type:'input', out_sx:1, out_sy:1, out_depth:10});
layer_defs.push({type:'svm', num_classes:10});

var net = new convnetjs.Net();
net.makeLayers(layer_defs);

var trainer = new convnetjs.Trainer(net, {method:'sgd', learning_rate:0.01});

Влияние выбора функции потерь на обучение

  • Скорость сходимости: Softmax с кросс-энтропией быстрее сходится на многоклассовых задачах по сравнению с MSE.
  • Чувствительность к выбросам: L2 Loss сильно реагирует на выбросы, тогда как Hinge Loss и Cross-Entropy более устойчивы.
  • Совместимость с архитектурой: Softmax требует одного нейрона на класс, Regression — одного нейрона на предсказываемое значение, SVM — одного нейрона на класс с соответствующим слоем.

Настройка тренера с учетом функции потерь

ConvNetJS использует объект Trainer для управления процессом оптимизации. При выборе функции потерь важно правильно задать параметры тренера:

  • learning_rate — скорость обучения, влияет на стабильность градиентов.
  • l2_decay — регуляризация весов, предотвращает переобучение.
  • momentum — ускоряет сходимость для сложных задач.

Пример для многоклассовой задачи:

var trainer = new convnetjs.Trainer(net, {
    method: 'adam',
    learning_rate: 0.001,
    l2_decay: 0.0001
});

Советы по подбору функции потерь

  • Для классификации с вероятностной интерпретацией — использовать Softmax + Cross-Entropy.
  • Для регрессии — использовать RegressionLayer с L2 Loss.
  • Для SVM-подобных задач — применять SVMLayer с Hinge Loss.
  • В сложных сценариях можно комбинировать функции потерь через несколько выходных слоев, например, регрессию координат и классификацию объектов одновременно.

Выбор функции потерь — ключевой элемент, определяющий поведение сети и эффективность обучения. Правильная комбинация слоя и соответствующей потери обеспечивает оптимальное использование ConvNetJS в любых задачах.