Функции потерь и их геометрический смысл

Определение функции потерь

Функция потерь (loss function) является центральным элементом любой нейронной сети. Она количественно оценивает разницу между предсказанными моделью значениями и истинными метками данных. В контексте TensorFlow.js функции потерь представлены в виде функций, которые принимают два тензора: предсказанные значения yPred и истинные значения yTrue, и возвращают скалярное значение ошибки.

Примеры встроенных функций потерь в TensorFlow.js:

const lossMSE = tf.losses.meanSquaredError(yTrue, yPred);
const lossMAE = tf.losses.meanAbsoluteError(yTrue, yPred);

Ключевой момент: функция потерь должна быть дифференцируемой по параметрам модели, чтобы алгоритмы оптимизации могли корректно обновлять веса с использованием градиентного спуска.


Геометрическая интерпретация

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

  • Минимум функции потерь — это точка, в которой сеть наилучшим образом аппроксимирует данные.
  • Градиент функции потерь указывает направление наибольшего роста потерь; его отрицание показывает направление, в котором следует изменять веса для уменьшения ошибки.

Для одномерной модели линейной регрессии y = wx + b с функцией MSE поверхность потерь является параболической. Минимум достигается, когда линия модели максимально приближена к набору точек данных, что можно визуализировать как «дно» параболы.


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

1. Среднеквадратичная ошибка (Mean Squared Error, MSE)

const lossMSE = tf.losses.meanSquaredError(yTrue, yPred);
  • Формула: [ L(y, ) = _{i=1}^{n} (y_i - _i)^2]

  • Геометрически: создаёт гладкую параболическую поверхность. Поскольку MSE усиливает большие отклонения, точки, сильно отличающиеся от модели, формируют «крутые склоны» на графике потерь.

2. Средняя абсолютная ошибка (Mean Absolute Error, MAE)

const lossMAE = tf.losses.meanAbsoluteError(yTrue, yPred);
  • Формула: [ L(y, ) = _{i=1}^{n} |y_i - _i|]

  • Геометрически: поверхность потерь состоит из линейных участков с углами на местах больших отклонений. В отличие от MSE, MAE менее чувствительна к выбросам, но её градиент не является непрерывным в нуле.

3. Кросс-энтропия (Categorical Crossentropy)

Используется для многоклассовой классификации:

const lossCE = tf.losses.softmaxCrossEntropy(labels, logits);
  • Формула: [ L(y, ) = - _{i=1}^{n} y_i (_i)]

  • Геометрически: поверхность потерь имеет крутые области, когда предсказание сильно отличается от правильного класса. Минимум достигается, когда вероятность правильного класса стремится к единице. Для бинарной классификации используется бинарная кросс-энтропия.


Функции потерь и оптимизация

Функции потерь в TensorFlow.js интегрированы с оптимизаторами, такими как tf.train.sgd, tf.train.adam и другими. Оптимизатор использует градиенты функции потерь для пошагового обновления весов:

const optimizer = tf.train.adam(0.01);
optimizer.minimize(() => tf.losses.meanSquaredError(yTrue, yPred));
  • Градиентный спуск визуально представляет собой движение по поверхности потерь вниз к минимуму.
  • Проблема локальных минимумов: некоторые функции потерь могут иметь множество минимумов, особенно в глубинных нейронных сетях. Геометрическое понимание помогает выбирать стратегии, такие как случайная инициализация весов и использование адаптивных оптимизаторов.

Визуализация функции потерь

В TensorFlow.js можно построить график поверхности потерь для маленьких моделей с двумя параметрами. Например, для линейной регрессии с параметрами w и b:

const ws = tf.linspace(-10, 10, 50);
const bs = tf.linspace(-10, 10, 50);
const losses = ws.map(w => bs.map(b => tf.losses.meanSquaredError(yTrue, model.predictWithWeights(w, b)).dataSync()[0]));
  • Цветовая карта или 3D-график показывает «долину» минимума.
  • Углы и крутизна поверхности помогают понять скорость обучения и поведение градиентов.

Влияние масштабирования данных

Масштаб входных данных напрямую влияет на геометрию поверхности потерь:

  • Большие значения признаков могут создавать крутые склоны функции потерь, что приводит к нестабильности градиентов.
  • Нормализация или стандартизация данных делает поверхность потерь более «ровной», улучшая сходимость оптимизатора.

Совместное использование нескольких функций потерь

TensorFlow.js поддерживает комбинированные функции потерь, что полезно для моделей с несколькими выходами или для регуляризации:

const totalLoss = tf.add(tf.losses.meanSquaredError(yTrue1, yPred1), tf.losses.meanAbsoluteError(yTrue2, yPred2));
  • Геометрически комбинированная функция потерь создаёт сложную поверхность, учитывающую несколько целей одновременно.
  • Позволяет балансировать обучение разных частей сети.

Функции потерь в TensorFlow.js — это не просто числа. Они формируют геометрическое пространство, в котором происходит обучение модели, и понимание их формы помогает эффективно настраивать архитектуру, оптимизаторы и гиперпараметры.