Формулы линейной алгебры¶
~5 минут чтения
Предварительно: Подготовка к интервью по математике
Линейная алгебра -- фундамент 90%+ ML-алгоритмов. Каждый forward pass нейросети -- это цепочка матричных умножений: Dense layer с 512 нейронами = умножение матрицы (batch_size x input_dim) на (input_dim x 512). Attention в трансформерах -- три матричных умножения QK^T и QK^TV на каждый head. PCA -- собственные значения ковариационной матрицы. SVD -- основа рекомендательных систем (Netflix Prize). Без беглого владения формулами линала невозможно ни вывести градиент loss функции, ни понять, почему BatchNorm ускоряет обучение (whitening), ни ответить на 30--40% вопросов ML-интервью.
Векторы¶
Скалярное произведение¶
Норма вектора (L2)¶
Другие нормы¶
Расстояния¶
Косинусное сходство¶
Матрицы¶
Умножение матриц¶
Размерности: \((m \times n) \cdot (n \times p) = (m \times p)\)
Свойства умножения¶
(в общем случае)
Транспонирование¶
Обратная матрица¶
Для 2x2 матрицы¶
Специальные матрицы¶
Единичная¶
Симметричная¶
Ортогональная¶
Положительно определённая¶
Определитель¶
Свойства¶
Для 2x2¶
Для 3x3¶
Собственные значения и векторы¶
Определение¶
Характеристический полином¶
Свойства¶
Спектральное разложение (симметричная матрица)¶
где \(\mathbf{V}\) — матрица собственных векторов, \(\Lambda\) — диагональная матрица собственных значений
SVD (Singular Value Decomposition)¶
Разложение¶
- \(\mathbf{A}\): \(m \times n\)
- \(\mathbf{U}\): \(m \times m\) (левые сингулярные векторы)
- \(\Sigma\): \(m \times n\) (диагональ сингулярных значений)
- \(\mathbf{V}\): \(n \times n\) (правые сингулярные векторы)
Связь с собственными значениями¶
Усечённое SVD (для сжатия)¶
Нормы матриц¶
Frobenius norm¶
Spectral norm (операторная)¶
Проекции¶
Проекция вектора на вектор¶
Проекция на подпространство¶
Линейные системы¶
Решение \(\mathbf{Ax} = \mathbf{b}\)¶
Наименьшие квадраты (overdetermined)¶
Псевдообратная матрица¶
Через SVD: $\(\mathbf{A}^+ = \mathbf{V}\Sigma^+\mathbf{U}^T\)$
Градиенты¶
Градиент по вектору¶
Полезные градиенты¶
(если \(\mathbf{A}\) симметрична) $\(\nabla_{\mathbf{x}} \|\mathbf{Ax} - \mathbf{b}\|^2 = 2\mathbf{A}^T(\mathbf{Ax} - \mathbf{b})\)$
Гессиан¶
Матричное дифференцирование¶
Производные по матрице¶
Для ML¶
Ковариационная матрица¶
где \(\mathbf{X}\) центрирован (среднее = 0)
Матрица Грама¶
\(G_{ij} = \mathbf{x}_i \cdot \mathbf{x}_j\) — скалярные произведения примеров
Whitening¶
где \(\Sigma = \mathbf{V}\Lambda\mathbf{V}^T\)
Типичные заблуждения¶
Заблуждение: cosine similarity и cosine distance -- одно и то же
Cosine similarity = cos(theta) принимает значения [-1, 1]. Cosine distance = 1 - cos(theta) принимает значения [0, 2]. Они обратны друг другу. Частая ошибка на интервью: сказать "cosine distance = 0 означает ортогональные векторы". На самом деле ортогональность -- это cos(theta) = 0, т.е. distance = 1. А distance = 0 -- это идентичные направления.
Заблуждение: det(cA) = c * det(A)
Правильная формула: det(cA) = c^n * det(A), где n -- размерность матрицы. Для 3x3 матрицы умножение всех элементов на 2 увеличивает определитель в 2^3 = 8 раз, не в 2. Эта ошибка часто всплывает при нормализации данных -- масштабирование признаков изменяет определитель ковариационной матрицы экспоненциально.
Заблуждение: SVD и eigendecomposition -- одно и то же
Eigendecomposition работает только для квадратных матриц: A = V * Lambda * V^(-1). SVD работает для любых m x n матриц: A = U * Sigma * V^T. Для симметричных положительно определённых матриц (как ковариационная) результаты совпадают. Но для произвольной матрицы данных (batch x features, где batch != features) нужен именно SVD. Truncated SVD с k компонентами -- это и есть PCA.
Интервью¶
Как связаны PCA и SVD?
"PCA использует собственные значения, SVD -- сингулярные значения. Это разные вещи."
"PCA ищет собственные векторы ковариационной матрицы X^T * X / (n-1). SVD раскладывает саму матрицу X = U * Sigma * V^T. Связь: X^T * X = V * Sigma^2 * V^T, то есть правые сингулярные векторы V -- это и есть principal components PCA, а sigma_i^2 / (n-1) = lambda_i (собственные значения ковариационной). На практике SVD численно стабильнее прямого вычисления X^T * X, поэтому sklearn.PCA использует SVD."
Зачем в ML используется норма Frobenius?
"Это просто способ измерить размер матрицы"
"Frobenius norm ||A||_F = sqrt(sum a_ij^2) = sqrt(trace(A^T * A)) = sqrt(sum sigma_i^2). Три ключевых применения: (1) regularization -- L2 regularization весов нейросети = минимизация ||W||_F^2; (2) low-rank approximation -- truncated SVD минимизирует ||A - A_k||_F (теорема Эккарта-Янга); (3) weight initialization -- Xavier init задаёт масштаб весов через Frobenius norm для сохранения variance активаций."
Что такое положительно определённая матрица и где это важно в ML?
"Это матрица с положительными элементами"
"Матрица A положительно определена, если x^T * A * x > 0 для всех ненулевых x, эквивалентно -- все собственные значения > 0. В ML: (1) ковариационная матрица всегда положительно полуопределённая -- если нет, данные вырождены; (2) Hessian loss функции -- если PD, то мы в локальном минимуме; (3) ядро (kernel matrix) в SVM должно быть PSD -- гарантирует решение задачи оптимизации. Практический тест: Cholesky decomposition работает тогда и только тогда, когда матрица PD."
See Also¶
- Loss Functions -- градиенты loss функций опираются на матричное дифференцирование и chain rule
- Probability & Statistics -- ковариационная матрица, PCA, MLE используют линал
- NumPy Cheatsheet -- реализация матричных операций в Python
- Vision Transformers -- patch embedding = линейная проекция, attention = матричные умножения
- RoPE & Long Context -- rotation matrices для позиционного кодирования