Функция потерь (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]));
Масштаб входных данных напрямую влияет на геометрию поверхности потерь:
TensorFlow.js поддерживает комбинированные функции потерь, что полезно для моделей с несколькими выходами или для регуляризации:
const totalLoss = tf.add(tf.losses.meanSquaredError(yTrue1, yPred1), tf.losses.meanAbsoluteError(yTrue2, yPred2));
Функции потерь в TensorFlow.js — это не просто числа. Они формируют геометрическое пространство, в котором происходит обучение модели, и понимание их формы помогает эффективно настраивать архитектуру, оптимизаторы и гиперпараметры.