1. Математический фундамент: Линейная алгебра и Математический анализ в машинном обучении
Если передать цветное изображение размером 256×256 пикселей в алгоритм машинного обучения, компьютер не увидит ни форм, ни текстур. Он зафиксирует единственную точку в пространстве, имеющем 196 608 измерений. Вся работа инженера машинного обучения — от проектирования архитектур до тонкой отладки весов — сводится к навигации в таких многомерных пространствах. Когда при обучении кастомной архитектуры функция потерь выдает NaN (Not a Number), готовые API и подсказки LLM-ассистентов оказываются бессильны. В этот момент инженер должен спуститься на уровень математики: проверить обусловленность матриц, вычислить аналитический градиент и найти слой, в котором происходит арифметическое переполнение. Линейная алгебра предоставляет инструменты для хранения данных и трансформации пространства, а математический анализ дает компас, показывающий, как нужно изменить параметры трансформации для минимизации ошибки.
Линейная алгебра: язык представления данных
В машинном обучении данные никогда не существуют в виде разрозненных переменных. Они всегда организованы в структуры, подчиняющиеся строгим алгебраическим правилам. Иерархия этих структур начинается со скаляра и уходит в многомерные тензоры.
От скаляра к тензору и физической памяти
Скаляр — это одиночное число. В ML скалярами обычно выступают гиперпараметры (например, скорость обучения) или итоговое значение функции потерь.
Вектор — это одномерный массив чисел, который геометрически представляет собой точку в многомерном пространстве или направленный отрезок из начала координат. Вектор-столбец обозначается жирным шрифтом:
Здесь — вектор, — множество действительных чисел, а — размерность пространства (количество элементов в векторе). Любой объект в ML (пользователь, текст, пиксель) в конечном итоге кодируется вектором признаков (feature vector).
Матрица — это двумерный массив чисел. Если вектор — это один объект, то матрица часто представляет собой набор объектов (датасет), где строки — это отдельные примеры, а столбцы — их признаки. Также матрицы хранят веса нейронных сетей. Матрица размерности содержит строк и столбцов.
Тензор — это обобщение матриц на три и более измерений.
!Визуализация структуры четырехмерного тензора данных с измерениями: пакет, каналы, высота и ширина.
Батч (пакет) из 32 цветных изображений размером 256×256 пикселей представляется в памяти как тензор размерности . Первое измерение — размер батча, второе — три цветовых канала (Red, Green, Blue), третье и четвертое — высота и ширина в пикселях.
Для инженера, пишущего собственные слои на C++ или CUDA, абстракции размерностей недостаточно. Важно понимать, как тензор развернут в одномерный массив физической оперативной памяти (RAM или VRAM). В глубоком обучении существуют два основных стандарта компоновки памяти для изображений: NCHW (канализация в начале) и NHWC (канализация в конце), где N — батч, C — каналы, H — высота, W — ширина. Если библиотека cuDNN ожидает данные в формате NHWC для ускоренной тензорной свертки, а вы передаете NCHW, код может выполниться без ошибок, но работать в 10 раз медленнее из-за постоянных промахов кэша при чтении неоптимально расположенных байтов.
Скалярное произведение (Dot Product) и аппаратное ускорение
Скалярное произведение двух векторов — это базовая операция, на которой строится оценка сходства объектов и работа искусственных нейронов. Алгебраически это сумма попарных произведений элементов двух векторов:
Где и — векторы одинаковой размерности , — транспонированный вектор (превращенный из столбца в строку), и — соответствующие элементы векторов. Результатом этой операции является скаляр.
Геометрический смысл скалярного произведения раскрывается через косинус угла между векторами:
Где и — длины (нормы) векторов, а — угол между ними в -мерном пространстве.
Если векторы нормализованы (их длины равны 1), скалярное произведение в точности равно косинусу угла между ними. Это свойство лежит в основе косинусного сходства (cosine similarity). В высоконагруженных рекомендательных системах предварительная L2-нормализация векторов позволяет заменить сложную операцию вычисления косинуса на простое скалярное произведение. Современные процессоры и видеокарты имеют специализированные инструкции (например, FMA — Fused Multiply-Add), которые выполняют умножение и прибавление к сумме за один такт процессора, что делает скалярное произведение самой быстрой операцией в ML.
Умножение матриц как линейное преобразование и информационное «бутылочное горлышко»
Математически умножение вектора на матрицу — это процесс трансформации пространства. Применяя матрицу к вектору, мы осуществляем линейное преобразование (поворот, растяжение, сжатие или отражение).
Где — исходный вектор размерности , — матрица весов размерности , а — новый вектор размерности .
Каждый столбец матрицы показывает, где окажутся базисные векторы исходного пространства после преобразования. Если исходный вектор находился в трехмерном пространстве (), а матрица имеет размер 128×3, то умножение перенесет данные из 3-мерного пространства в 128-мерное.
При проектировании архитектур инженер должен учитывать ранг матрицы и размерности скрытых слоев. Если мы проецируем вектор размерности 1024 в пространство размерности 64 (умножая на матрицу ), а затем пытаемся восстановить обратно в 1024, мы создаем информационное «бутылочное горлышко» (bottleneck). Математика гарантирует, что мы не сможем восстановить исходные данные без потерь, так как ранг результирующей трансформации не превышает 64. Этот принцип лежит в основе работы автоэнкодеров: заставляя сеть сжимать данные через матрицу меньшей размерности, мы принуждаем ее выделять только самые важные, фундаментальные признаки объектов.
Собственные векторы и число обусловленности
При умножении вектора на матрицу он обычно меняет длину и направление. Для квадратной матрицы существуют векторы, которые при умножении на нее только растягиваются или сжимаются, не меняя направления. Это собственные векторы (eigenvectors), а коэффициент их растяжения — собственное значение (eigenvalue).
Где — квадратная матрица, — собственный вектор (ненулевой), — собственное значение (скаляр).
Для ML-инженера анализ собственных значений — это инструмент отладки стабильности обучения. Отношение наибольшего по модулю собственного значения к наименьшему называется числом обусловленности матрицы (condition number). Если это число огромно (например, ), матрица считается плохо обусловленной. В контексте машинного обучения это означает, что функция потерь в одних направлениях пространства весов будет невероятно крутой, а в других — почти плоской. Градиентный спуск в такой ситуации начнет осциллировать (метаться из стороны в сторону), и обучение остановится. Понимание этого механизма заставляет инженеров применять методы нормализации батчей (Batch Normalization) или слоев (Layer Normalization), которые математически улучшают обусловленность матриц ковариации признаков.
Математический анализ: механика обучения и отладки
Линейная алгебра описывает структуру данных и прямой проход (forward pass). Математический анализ отвечает за обратный проход (backward pass) — поиск таких значений весов, при которых функция потерь достигает минимума.
Градиент и проблема седловых точек
Производная функции одной переменной показывает мгновенную скорость изменения функции в конкретной точке. В моделях с миллионами параметров используется вектор частных производных — градиент.
Где — градиент функции потерь в точке , а — частная производная по -му параметру.
Градиент указывает направление наискорейшего возрастания функции. Алгоритмы оптимизации делают шаг в направлении антиградиента.
При глубоком аудите кода инженер обязан уметь выполнять проверку градиента (gradient checking). Баги в реализации слоев часто не вызывают ошибок выполнения, но приводят к неверным вычислениям производных. Аналитический градиент (вычисленный по формулам) сверяется с численным градиентом, который вычисляется по определению производной:
Где — очень малое число (например, ). Если разница между аналитическим и численным градиентом превышает заданный порог, в коде обратного прохода есть ошибка.
Также в многомерных пространствах (от измерений и выше) градиент часто равен нулю не в точках минимума, а в седловых точках (saddle points). В этих точках функция возрастает по одним измерениям и убывает по другим. Математический анализ показывает, что вероятность встретить локальный минимум в пространстве с миллионом измерений экспоненциально мала по сравнению с вероятностью встретить седловую точку. Именно поэтому современные оптимизаторы (Adam, RMSprop) используют инерцию (momentum), чтобы алгоритм «проскакивал» плоские участки седловых точек, не останавливаясь в них.
Матрицы Якоби и Гессе: пределы вычислений
Когда функция возвращает вектор, градиент обобщается до матрицы Якоби (Якобиана), содержащей частные производные каждого выхода по каждому входу.
Где — элемент матрицы Якоби, — -й элемент выходного вектора, — -й элемент входного вектора.
Матрица вторых производных — матрица Гессе (Гессиан) — описывает кривизну поверхности функции потерь.
Где — смешанная вторая частная производная.
В теории оптимизации использование Гессиана (метод Ньютона) позволяет достичь минимума за несколько шагов, так как алгоритм учитывает кривизну пространства. Но на практике для сети с параметров Гессиан будет иметь размер , требуя терабайты оперативной памяти только для хранения одной матрицы. Поэтому инженеры используют методы первого порядка (основанные только на градиенте) или квазиньютоновские алгоритмы (L-BFGS), которые аппроксимируют обратный Гессиан, не вычисляя его напрямую.
Цепное правило и затухание градиентов
Нейронная сеть — это цепочка вложенных математических функций: . Цепное правило (Chain Rule) позволяет найти производную сложной функции.
Для функций и :
Где — итоговый градиент, вычисленный как произведение локального градиента и градиента предыдущего шага .
Цепное правило обнажает главную проблему глубоких сетей — затухание градиента (vanishing gradient). Если в качестве функции активации используется сигмоида, ее максимальная производная равна . В сети из 10 слоев градиент для первого слоя будет включать умножение десяти таких производных. . Сигнал об ошибке математически уничтожается, и первые слои перестают обучаться. Понимание этого факта привело инженеров к созданию функции активации ReLU (где производная равна 1 для положительных чисел) и архитектуры ResNet (где добавление исходного вектора к выходу слоя создает параллельный путь с градиентом, равным 1).
Синтез: математика в строке кода и «мертвые нейроны»
Рассмотрим базовую операцию ML-алгоритма с точки зрения инженера, отлаживающего сеть: линейную комбинацию признаков с последующей нелинейной активацией.
Прогнозируем цену квартиры. Вектор признаков , вектор весов . Прямой проход вычисляется через скалярное произведение:
Где — линейный выход (скаляр), — транспонированный вектор весов, — смещение.
Далее применяется функция активации ReLU, чтобы сеть могла моделировать нелинейные зависимости:
Где — итоговое предсказание.
Вычисляем квадратичную ошибку:
Где — функция потерь, — реальная цена.
Для обновления весов вычисляем градиент по цепному правилу:
Вычисляем компоненты:
Перемножаем их:
Где — индикаторная функция (равна 1 при выполнении условия, иначе 0).
Здесь математика показывает классический баг архитектуры — «мертвый ReLU» (dying ReLU). Если при инициализации весов или из-за слишком большого шага обучения (learning rate) значение становится отрицательным для всех примеров в батче, то производная нелинейности становится строго равной нулю. Из-за цепного правила весь итоговый градиент обнуляется. Веса перестают обновляться навсегда. Инженер, понимающий этот математический вывод, не будет слепо менять гиперпараметры, а осознанно заменит ReLU на Leaky ReLU (где производная при отрицательных значениях равна, например, ) или снизит скорость обучения.
Рекомендуемые ресурсы для углубленного изучения
Для перехода от использования библиотек к самостоятельному математическому выводу и проектированию архитектур, рекомендуется изучить следующие материалы:
Книги и учебники:
Статьи и блоги:
Видеокурсы и YouTube-каналы (на русском языке):