Функции потерь: meanSquaredError, categoricalCrossentropy, binaryCrossentropy и другие

Функции потерь (loss functions) играют ключевую роль в процессе обучения нейронных сетей. Они измеряют расхождение между предсказанными значениями модели и фактическими метками данных. В TensorFlow.js функции потерь реализуются через API tf.losses и могут использоваться как при компиляции моделей, так и при ручной оптимизации через градиентный спуск.


Mean Squared Error (MSE)

Определение: Среднеквадратичная ошибка вычисляется как среднее значение квадратов разностей между предсказанными и истинными значениями.

[ = _{i=1}^{n} (y_i - _i)^2]

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

Особенности применения:

  • Используется для регрессии.
  • Чувствительна к выбросам, так как квадратичная форма увеличивает влияние крупных ошибок.
  • В TensorFlow.js вызывается через tf.losses.meanSquaredError(labels, predictions).

Пример:

const labels = tf.tensor1d([1, 2, 3]);
const predictions = tf.tensor1d([1.1, 1.9, 3.2]);
const loss = tf.losses.meanSquaredError(labels, predictions);
loss.print(); // Выведет значение MSE

Categorical Crossentropy

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

[ = - _{i=1}^{n} y_i (_i)]

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

Особенности применения:

  • Подходит для задач с более чем двумя классами.
  • Часто комбинируется с softmax на выходном слое модели.
  • В TensorFlow.js функция доступна как tf.losses.softmaxCrossEntropy(labels, logits).

Пример:

const labels = tf.tensor2d([[0, 1, 0], [1, 0, 0]]);
const logits = tf.tensor2d([[0.1, 0.8, 0.1], [0.7, 0.2, 0.1]]);
const loss = tf.losses.softmaxCrossEntropy(labels, logits);
loss.print(); // Значение кросс-энтропии

Binary Crossentropy

Определение: Бинарная кросс-энтропия используется для задач классификации с двумя классами.

[ = - _{i=1}^{n} ]

где (y_i ), (_i) — вероятность класса 1.

Особенности применения:

  • Подходит для бинарной классификации.
  • Используется с сигмоидной активацией на выходном слое.
  • В TensorFlow.js функция реализована как tf.losses.sigmoidCrossEntropy(labels, logits).

Пример:

const labels = tf.tensor1d([0, 1, 1]);
const logits = tf.tensor1d([0.2, 0.8, 0.6]);
const loss = tf.losses.sigmoidCrossEntropy(labels, logits);
loss.print();

Другие функции потерь

Huber Loss

Комбинирует преимущества MSE и MAE (Mean Absolute Error). Считается менее чувствительной к выбросам, чем MSE.

[ = ]

В TensorFlow.js используется через tf.losses.huberLoss(labels, predictions, delta).


Absolute Difference (MAE)

Считается как среднее абсолютное отклонение:

[ = _{i=1}^{n} |y_i - _i|]

Применяется для регрессии, когда важнее уменьшить влияние выбросов. В TensorFlow.js доступно через tf.losses.absoluteDifference(labels, predictions).


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

  • Регрессия: meanSquaredError, absoluteDifference, huberLoss.
  • Бинарная классификация: binaryCrossentropy (sigmoidCrossEntropy).
  • Многоклассовая классификация: categoricalCrossentropy (softmaxCrossEntropy).

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


Использование с моделью

Функция потерь передается при компиляции модели через model.compile:

model.compile({
  optimizer: tf.train.adam(0.01),
  loss: 'meanSquaredError', // или 'categoricalCrossentropy', 'binaryCrossentropy'
  metrics: ['mse']
});

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