Что такое модель в математическом смысле
Функция, параметры, ошибка.
Когда мы говорим о модели в машинном обучении, полезно сразу отбросить все ассоциации с "искусственным интеллектом" и сложными абстракциями. В математическом смысле модель – это функция. Не больше и не меньше. Она принимает какие-то входные данные и возвращает результат. Различие заключается в том, что эта функция не является жёстко заданной и допускает настройку параметров.
Проще всего это понять, если думать как PHP-разработчик. Любая модель очень похожа на обычный метод класса или функцию, которую вы пишете каждый день. Есть входные аргументы, есть вычисления внутри и есть возвращаемое значение.
В самом общем виде модель можно записать так:
Здесь x – входные данные, а ŷ – предсказание модели. Черта над y неслучайна: это не истинное значение, а лишь попытка его угадать.
Функция как основа модели
Допустим, мы хотим предсказывать цену квартиры по ее площади. В простейшем случае модель можно взять линейную:
Это уже полноценная модель. Она говорит: "Цена (y^) примерно равна площади (x), умноженной на некий коэффициент (w), плюс некий сдвиг (b)".
Если переписать это на PHP, получится почти банальный код:
class LinearModel {
public float $w;
public 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;
}
}Пример:
С точки зрения PHP это обычный класс. Никакой магии. Но с точки зрения машинного обучения – это модель.
Параметры модели
Ключевой момент здесь – параметры. В нашем примере это (w) и (b). Они не являются входными данными, но именно от них зависит поведение модели. Если изменить (w) или (b), функция начнет выдавать другие результаты.
Важно четко разделять:
входные данные (x) – то, что приходит "снаружи";
параметры (w, b) – то, что живет внутри модели и настраивается;
выход (y^) – результат работы модели.
В обычном программировании вы чаще всего задаете параметры жестко в коде. В машинном же обучении все наоборот: структура функции фиксирована, а параметры подбираются автоматически (во время обучения модели).
Ошибка как мера качества
Теперь возникает главный вопрос: как понять, что одни параметры лучше других? Для этого вводится понятие ошибки, или функции потерь.
Ошибка – это функция (общепринятое название - Loss function), которая сравнивает предсказание модели с реальным значением и возвращает число, показывающее, насколько сильно модель ошиблась. Чем меньше это число, тем лучше модель.
Например, самая простая функция потерь – разница между предсказанием и реальным значением:
Пример:
На практике чаще используют квадрат ошибки (Squared Error или SE), потому что он всегда положительный и сильнее наказывает большие промахи:
Пример:
Обратите внимание на важный момент. Ошибка непосредственно зависит от значения $yPredicted. Поскольку $yPredicted вычисляется из параметров модели, ошибка в итоге является функцией параметров модели.
Обучение как минимизация ошибки
Если собрать все вместе, картина становится очень простой и приземленной.
У нас есть:
модель – функция с параметрами;
данные – пары входов и правильных ответов;
ошибка – способ измерить качество предсказаний.
Обучение модели – это процесс подбора таких параметров, при которых суммарная ошибка на данных становится минимальной.
Даже в PHP это легко представить в виде цикла. Примитивно и неэффективно, но концептуально верно:
Пример:
Конкретный способ изменения параметров – это уже вопрос алгоритмов оптимизации, о которых мы будем говорить отдельно. Но важно уловить саму идею: никто не "объясняет" модели правила. Мы лишь говорим ей, насколько она ошиблась, и позволяем постепенно уменьшать эту ошибку.
Почему это понимание критично
Для PHP-разработчика такое представление особенно важно. Оно показывает, что машинное обучение не противоречит классическому программированию и не заменяет его. Напротив, оно опирается на те же самые базовые идеи: функции, параметры, вычисления.
Модель – это не черный ящик. Это функция.
Обучение – это не магия. Это оптимизация.
Ошибка – это не абстракция. Это обычная функция, возвращающая число.
Если вы это поняли, то страх перед машинным обучением уже исчез. Дальше начинается инженерия: какие функции брать, какие ошибки использовать и как эффективно подбирать параметры.
Чтобы самостоятельно протестировать этот код, установите примеры из официального репозитория GitHub или воспользуйтесь онлайн-демонстрацией для его запуска.
Last updated