По каким параметрам минимизируется функция потерь?

Ответ

Функция потерь минимизируется по обучаемым параметрам модели (weights, biases), которые напрямую влияют на ее предсказания. Цель оптимизации — найти такие значения этих параметров, которые минимизируют ошибку на обучающих данных.

Конкретные примеры:

  • Линейная/Логистическая регрессия: Минимизируются коэффициенты (w, веса) и свободный член (b, смещение).
  • Нейронная сеть: Минимизируются веса и смещения всех слоев (полносвязных, сверточных и т.д.).
  • Деревья решений (включая ансамбли): Параметрами являются условия разбиения в узлах (пороговые значения признаков).

Процесс минимизации (на примере градиентного спуска для линейной модели):

import numpy as np

# Данные
X = np.array([[1, 2], [2, 3], [3, 4]])  # 3 samples, 2 features
y = np.array([3, 5, 7])

# Инициализация параметров (2 веса + смещение)
w = np.zeros(X.shape[1])  # [0., 0.]
b = 0.0
learning_rate = 0.01

# Функция потерь - MSE
for epoch in range(100):
    # Прямой проход: предсказание
    y_pred = X.dot(w) + b  # y_pred = w1*x1 + w2*x2 + b

    # Вычисление градиентов (производные MSE по параметрам)
    error = y_pred - y
    dw = (2 / len(y)) * X.T.dot(error)  # Градиент по весам
    db = (2 / len(y)) * error.sum()     # Градиент по смещению

    # Обновление параметров (шаг в направлении, противоположном градиенту)
    w -= learning_rate * dw
    b -= learning_rate * db

    # Текущая ошибка
    mse = np.mean(error**2)
    if epoch % 20 == 0:
        print(f"Epoch {epoch}: MSE = {mse:.4f}, w = {w}, b = {b:.4f}")

В современных фреймворках (PyTorch, TensorFlow) этот процесс автоматизирован через autograd и оптимизаторы (torch.optim.SGD, Adam), но суть остается той же: итеративное обновление параметров модели для уменьшения функции потерь.

Ответ 18+ 🔞

Слушай, давай разберём эту тему без соплей и заумных слов, как есть. Функция потерь — это, по сути, показатель того, насколько твоя модель пиздец как ошибается. И её задача — не просто так висеть, а уменьшаться, причём за счёт тех самых ручек-крутилок внутри модели, которые ты и можешь настраивать. Это веса и смещения, если по-простому. Их и крутим, чтобы предсказания стали хоть немного адекватными.

Если на пальцах:

  • Линейная регрессия или логистика: Там минимизируешь коэффициенты (w) и этот свободный член (b), который вечно мешается.
  • Нейронная сеть: Тут уже овердохуища этих параметров — веса и смещения во всех слоях, от первого до последнего. Все их и пытаешься подогнать.
  • Деревья решений (и всякие бусты с лесами): Параметры — это условия в узлах, типа «если признак Х больше 0.5, идём налево». Их тоже оптимизируешь, просто по-другому.

А вот как это выглядит в коде, если делать градиентный спуск для линейной модели своими руками, без этих ваших фреймворков:

import numpy as np

# Данные
X = np.array([[1, 2], [2, 3], [3, 4]])  # 3 samples, 2 features
y = np.array([3, 5, 7])

# Инициализация параметров (2 веса + смещение)
w = np.zeros(X.shape[1])  # [0., 0.]
b = 0.0
learning_rate = 0.01

# Функция потерь - MSE
for epoch in range(100):
    # Прямой проход: предсказание
    y_pred = X.dot(w) + b  # y_pred = w1*x1 + w2*x2 + b

    # Вычисление градиентов (производные MSE по параметрам)
    error = y_pred - y
    dw = (2 / len(y)) * X.T.dot(error)  # Градиент по весам
    db = (2 / len(y)) * error.sum()     # Градиент по смещению

    # Обновление параметров (шаг в направлении, противоположном градиенту)
    w -= learning_rate * dw
    b -= learning_rate * db

    # Текущая ошибка
    mse = np.mean(error**2)
    if epoch % 20 == 0:
        print(f"Epoch {epoch}: MSE = {mse:.4f}, w = {w}, b = {b:.4f}")

Суть в чём: мы смотрим, насколько предсказание отъехало от реальности (error), вычисляем, в какую сторону нужно дёрнуть каждый параметр (dw, db), и делаем маленький шаг в обратную сторону. Повторяем, пока либо ошибка не станет терпимой, либо терпения ноль ебать.

В современных фреймворках типа PyTorch или TensorFlow всё это, конечно, завёрнуто в красивую обёртку с autograd и умными оптимизаторами вроде Adam. Но под капотом-то та же самая хитрая жопа — итеративное обновление параметров, чтобы функция потерь наконец-то накрылась медным тазом и перестала портить жизнь.