DEV Community

Cover image for Что такое ML модель в математическом смысле
Samuel Akopyan
Samuel Akopyan

Posted on

Что такое ML модель в математическом смысле

Как это выглядит для PHP-разработчика
Проще всего понять это через привычную аналогию.
Любая модель очень похожа на обычную функцию или метод:
есть входные аргументы
есть вычисления
есть возвращаемое значение

В самом общем виде модель записывается так: f(x) = ŷ, где
x - входные данные
ŷ - предсказание модели

Важно: это не истинное значение, а лишь попытка его угадать.


Функция как основа модели
Допустим, мы хотим предсказывать цену квартиры по её площади.
Самая простая модель - линейная: ŷ = w · x + b
Она говорит:
Цена ≈ площадь × коэффициент + сдвиг


PHP-реализация
class LinearModel {
    private float $w;
    private float $b;

    public function __construct(float $w, float $b) {
        $this->w = $w;
        $this->b = $b;
    }

    public function predict(float $x): float {
        return $this->w * $x + $this->b;
    }
}
Enter fullscreen mode Exit fullscreen mode

Пример:

$model = new LinearModel(2.0, 0.0);
echo $model->predict(3.0);

// Результат: 6
// Объяснение: 2 * 3 + 0 = 6
Enter fullscreen mode Exit fullscreen mode

С точки зрения PHP - это обычный класс.
С точки зрения машинного обучения - это уже модель.


Параметры модели
Ключевой момент - параметры.
В нашем случае это: w и b
Они не являются входными данными, но именно от них зависит поведение модели.
Важно чётко разделять:
входные данные (x) - приходят извне
параметры (w, b) - настраиваются
выход (ŷ) - результат

В классическом программировании параметры фиксированы.
В машинном обучении - наоборот: структура фиксирована, параметры подбираются автоматически.


Ошибка как мера качества
Как понять, хороша ли модель?
Для этого используется функция ошибки (loss function).
Она сравнивает:
предсказание (ŷ)
реальное значение (y)

и возвращает число - насколько модель ошиблась.


Простая ошибка
Например, самая простая функция потерь - разница между предсказанием и реальным значением: ŷ - y

function error(float $yTrue, float $yPredicted): float {
    return $yPredicted - $yTrue;
}
Enter fullscreen mode Exit fullscreen mode

Пример:

echo error(yTrue: 10.0, yPredicted: 7.0);
// Результат: -3
// Объяснение: 7 - 10 = -3
Enter fullscreen mode Exit fullscreen mode

Квадрат ошибки (чаще используется)
На практике чаще используют квадрат ошибки (Squared Error или SE), потому что он всегда положительный и сильнее наказывает большие промахи: (ŷ - y)²

function squaredError(float $yTrue, float $yPredicted): float {
    return ($yPredicted - $yTrue) ** 2;
}
Enter fullscreen mode Exit fullscreen mode

Пример:

echo squaredError(yTrue: 4.0, yPredicted: 6.0);

// Результат: 4
// Объяснение: (6 - 4)^2 = 4
Enter fullscreen mode Exit fullscreen mode

Почему именно квадрат:

  • всегда положительный
  • сильнее наказывает большие ошибки

Важное наблюдение
Ошибка зависит от ŷ.
А ŷ зависит от параметров (w, b).
👉 Значит, ошибка - это функция параметров модели.


Обучение как минимизация ошибки
Если собрать всё вместе:

  • модель - функция с параметрами
  • данные - пары (x, y)
  • ошибка - мера качества

👉 Обучение = подбор параметров, уменьшающих ошибку


Простейшая иллюстрация на PHP

$dataset = [
    [1.0, 2.0],
    [2.0, 4.0],
];

$model = new LinearModel(w: 0.0, b: 0.0);

foreach ($dataset as [$x, $yTrue]) {
    $yPredicted = $model->predict($x);
    $loss = squaredError($yTrue, $yPredicted);

    // здесь параметры должны обновляться,
    // чтобы уменьшить loss
}
Enter fullscreen mode Exit fullscreen mode

До обучения

$model = new LinearModel(w: 0.0, b: 0.0);

// Результат:
// y = 0 * x
// x = 1 → loss = 4
// x = 2 → loss = 16
Enter fullscreen mode Exit fullscreen mode

После частичного обучения

$model = new LinearModel(w: 0.8, b: 0.0);

// Результат:
// y = 0.8 * x
// x = 1 → loss = 1.44
// x = 2 → loss = 5.76
Enter fullscreen mode Exit fullscreen mode

Параметры постепенно меняются так, чтобы ошибка уменьшалась.


Ключевая идея
Никто не «объясняет» модели правила.
Мы просто:

  • даём данные
  • считаем ошибку
  • уменьшаем её

Почему это важно для PHP-разработчика
Это понимание убирает магию.
Модель - это функция
Обучение - это оптимизация
Ошибка - обычная функция

Машинное обучение не противоречит программированию - оно продолжает его.


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


Полезные материалы
Книга: https://apphp.gitbook.io/ai-for-php-developers
Онлайн-демо: https://aiwithphp.org/books/ai-for-php-developers/examples/part-1/what-is-a-model

Top comments (0)