Зачем вся эта математика в обучении моделей
Финальная картина: соберём все темы курса в один работающий пример и увидим, как математика превращается в обучающуюся модель.
Машинное обучение — это линейная алгебра (данные как векторы и матрицы) + анализ (градиенты) + оптимизация (спуск) + вероятность и статистика (потери и оценки), соединённые в один цикл.
Карта курса в одном абзаце
Пройдём по разделам и увидим, что каждый — звено одной цепи.
- Векторы и матрицы дают язык данных: объект — вектор признаков, датасет — матрица, предсказание — скалярное произведение весов на признаки.
- Анализ даёт производную и градиент — направление, куда менять веса, чтобы ошибка падала.
- Оптимизация даёт градиентный спуск — алгоритм, который шаг за шагом находит лучшие веса.
- Вероятность объясняет предсказания-вероятности и через правдоподобие порождает функции потерь.
- Статистика учит оценивать по выборке, не обманываться смещением и понимать, надёжен ли результат.
Всё вместе: классификатор с нуля
Соберём бинарный классификатор (логистическая регрессия) полностью вручную — и узнаем в нём каждый раздел курса. Модель предсказывает вероятность класса 1 через сигмоиду от скалярного произведения весов на признаки, потеря — кросс-энтропия (из MLE), обучение — градиентный спуск.
import math, random
random.seed(0)
# Данные: 2 признака. Класс 1, если сумма признаков велика
def make_point():
x1 = random.uniform(-2, 2)
x2 = random.uniform(-2, 2)
label = 1 if (x1 + x2) > 0 else 0
return [x1, x2], label
data = [make_point() for _ in range(400)]
def dot(a, b): # линейная алгебра
return sum(p * q for p, q in zip(a, b))
def sigmoid(z): # вероятность класса (анализ + вероятность)
return 1 / (1 + math.exp(-z))
w = [0.0, 0.0] # веса
b = 0.0
lr = 0.1
for epoch in range(200): # градиентный спуск (оптимизация)
for features, y in data:
pred = sigmoid(dot(w, features) + b)
err = pred - y # градиент кросс-энтропии (из MLE)
for j in range(len(w)):
w[j] -= lr * err * features[j]
b -= lr * err
# Точность на обучающих данных (статистика — оценка качества)
correct = sum(1 for f, y in data if (sigmoid(dot(w, f) + b) > 0.5) == bool(y))
print("Веса:", [round(v, 3) for v in w], " сдвиг:", round(b, 3))
print("Точность:", round(correct / len(data), 4))
Вывод:
Веса: [17.121, 16.643] сдвиг: -0.24 Точность: 0.9975
Модель сама выучила, что важна сумма признаков (оба веса почти равны и положительны, сдвиг около нуля — ровно как в правиле x1 + x2 > 0), и классифицирует с точностью 99.75%. Веса выросли крупными, потому что данные линейно разделимы и мы не сдерживали их регуляризацией. В этих двадцати строках — весь курс: скалярное произведение (векторы), сигмоида (функция и вероятность), градиент кросс-энтропии (анализ и MLE), спуск по весам (оптимизация), оценка точности (статистика).
Что дальше
Нейросеть отличается от этого примера в основном масштабом: вместо двух весов — миллионы, вместо одного скалярного произведения — слои матричных умножений с нелинейностями, вместо ручного градиента — backpropagation (правило цепочки). Но фундамент ровно тот, что вы теперь понимаете. Зная эту математику, вы читаете формулы в статьях и документации не как заклинания, а как осмысленные инструкции.
| Раздел курса | Что даёт в обучении модели |
| Векторы | признаки, скалярное произведение, похожесть |
| Матрицы | данные и слои-преобразования, PCA |
| Анализ | градиент, backpropagation |
| Оптимизация | градиентный спуск, learning rate |
| Вероятность | предсказания-вероятности, Байес, распределения |
| Статистика | оценки, корреляция, MLE, функции потерь |
Итог
- Машинное обучение — это сборка линейной алгебры, анализа, оптимизации, вероятности и статистики в один цикл.
- Логистическая регрессия в 20 строк использует все темы курса сразу.
- Нейросеть — то же самое, но в большем масштабе: матрицы, нелинейности, backpropagation.
- Понимая эту математику, вы читаете ML-формулы осмысленно, а не как магию.