Перейти к содержанию

Формулы линейной алгебры

~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-интервью.

Векторы

Скалярное произведение

\[\mathbf{a} \cdot \mathbf{b} = \sum_{i=1}^{n} a_i b_i = \|\mathbf{a}\| \cdot \|\mathbf{b}\| \cos\theta\]

Норма вектора (L2)

\[\|\mathbf{x}\|_2 = \sqrt{\sum_{i=1}^{n} x_i^2} = \sqrt{\mathbf{x}^T \mathbf{x}}\]

Другие нормы

\[\|\mathbf{x}\|_1 = \sum_{i=1}^{n} |x_i|\]
\[\|\mathbf{x}\|_\infty = \max_i |x_i|\]
\[\|\mathbf{x}\|_p = \left(\sum_{i=1}^{n} |x_i|^p\right)^{1/p}\]

Расстояния

\[d_{Euclidean} = \|\mathbf{x} - \mathbf{y}\|_2 = \sqrt{\sum_i (x_i - y_i)^2}\]
\[d_{Manhattan} = \|\mathbf{x} - \mathbf{y}\|_1 = \sum_i |x_i - y_i|\]
\[d_{Cosine} = 1 - \frac{\mathbf{x} \cdot \mathbf{y}}{\|\mathbf{x}\| \cdot \|\mathbf{y}\|}\]

Косинусное сходство

\[\cos\theta = \frac{\mathbf{x} \cdot \mathbf{y}}{\|\mathbf{x}\| \cdot \|\mathbf{y}\|}\]

Матрицы

Умножение матриц

\[(\mathbf{AB})_{ij} = \sum_{k=1}^{n} a_{ik} b_{kj}\]

Размерности: \((m \times n) \cdot (n \times p) = (m \times p)\)

Свойства умножения

\[(\mathbf{AB})^T = \mathbf{B}^T \mathbf{A}^T\]
\[(\mathbf{ABC}) = \mathbf{A}(\mathbf{BC}) = (\mathbf{AB})\mathbf{C}\]
\[\mathbf{AB} \neq \mathbf{BA}\]

(в общем случае)

Транспонирование

\[(\mathbf{A}^T)_{ij} = \mathbf{A}_{ji}\]
\[(\mathbf{A}^T)^T = \mathbf{A}\]
\[(\mathbf{A} + \mathbf{B})^T = \mathbf{A}^T + \mathbf{B}^T\]

Обратная матрица

\[\mathbf{A} \mathbf{A}^{-1} = \mathbf{A}^{-1} \mathbf{A} = \mathbf{I}\]
\[(\mathbf{AB})^{-1} = \mathbf{B}^{-1} \mathbf{A}^{-1}\]
\[(\mathbf{A}^T)^{-1} = (\mathbf{A}^{-1})^T\]

Для 2x2 матрицы

\[\mathbf{A}^{-1} = \frac{1}{ad-bc} \begin{pmatrix} d & -b \\ -c & a \end{pmatrix}\]

Специальные матрицы

Единичная

\[\mathbf{I} = \begin{pmatrix} 1 & 0 & \cdots \\ 0 & 1 & \cdots \\ \vdots & \vdots & \ddots \end{pmatrix}\]

Симметричная

\[\mathbf{A} = \mathbf{A}^T\]

Ортогональная

\[\mathbf{Q}^T \mathbf{Q} = \mathbf{Q} \mathbf{Q}^T = \mathbf{I}\]
\[\mathbf{Q}^{-1} = \mathbf{Q}^T\]

Положительно определённая

\[\mathbf{x}^T \mathbf{A} \mathbf{x} > 0 \quad \forall \mathbf{x} \neq \mathbf{0}\]

Определитель

Свойства

\[\det(\mathbf{AB}) = \det(\mathbf{A}) \det(\mathbf{B})\]
\[\det(\mathbf{A}^T) = \det(\mathbf{A})\]
\[\det(\mathbf{A}^{-1}) = \frac{1}{\det(\mathbf{A})}\]
\[\det(c\mathbf{A}) = c^n \det(\mathbf{A})\]

Для 2x2

\[\det \begin{pmatrix} a & b \\ c & d \end{pmatrix} = ad - bc\]

Для 3x3

\[\det(\mathbf{A}) = a_{11}(a_{22}a_{33} - a_{23}a_{32}) - a_{12}(a_{21}a_{33} - a_{23}a_{31}) + a_{13}(a_{21}a_{32} - a_{22}a_{31})\]

Собственные значения и векторы

Определение

\[\mathbf{A}\mathbf{v} = \lambda\mathbf{v}\]

Характеристический полином

\[\det(\mathbf{A} - \lambda\mathbf{I}) = 0\]

Свойства

\[\text{trace}(\mathbf{A}) = \sum_i \lambda_i\]
\[\det(\mathbf{A}) = \prod_i \lambda_i\]

Спектральное разложение (симметричная матрица)

\[\mathbf{A} = \mathbf{V} \Lambda \mathbf{V}^T = \sum_{i=1}^{n} \lambda_i \mathbf{v}_i \mathbf{v}_i^T\]

где \(\mathbf{V}\) — матрица собственных векторов, \(\Lambda\) — диагональная матрица собственных значений


SVD (Singular Value Decomposition)

Разложение

\[\mathbf{A} = \mathbf{U} \Sigma \mathbf{V}^T\]
  • \(\mathbf{A}\): \(m \times n\)
  • \(\mathbf{U}\): \(m \times m\) (левые сингулярные векторы)
  • \(\Sigma\): \(m \times n\) (диагональ сингулярных значений)
  • \(\mathbf{V}\): \(n \times n\) (правые сингулярные векторы)

Связь с собственными значениями

\[\mathbf{A}^T\mathbf{A} = \mathbf{V} \Sigma^T \Sigma \mathbf{V}^T\]
\[\mathbf{A}\mathbf{A}^T = \mathbf{U} \Sigma \Sigma^T \mathbf{U}^T\]

Усечённое SVD (для сжатия)

\[\mathbf{A} \approx \mathbf{U}_k \Sigma_k \mathbf{V}_k^T\]

Нормы матриц

Frobenius norm

\[\|\mathbf{A}\|_F = \sqrt{\sum_{i,j} a_{ij}^2} = \sqrt{\text{trace}(\mathbf{A}^T\mathbf{A})} = \sqrt{\sum_i \sigma_i^2}\]

Spectral norm (операторная)

\[\|\mathbf{A}\|_2 = \sigma_{max}(\mathbf{A})\]

Проекции

Проекция вектора на вектор

\[\text{proj}_{\mathbf{u}} \mathbf{v} = \frac{\mathbf{u} \cdot \mathbf{v}}{\|\mathbf{u}\|^2} \mathbf{u}\]

Проекция на подпространство

\[\text{proj}_{\mathbf{A}} \mathbf{b} = \mathbf{A}(\mathbf{A}^T\mathbf{A})^{-1}\mathbf{A}^T \mathbf{b}\]

Линейные системы

Решение \(\mathbf{Ax} = \mathbf{b}\)

\[\mathbf{x} = \mathbf{A}^{-1}\mathbf{b}\]

Наименьшие квадраты (overdetermined)

\[\mathbf{x} = (\mathbf{A}^T\mathbf{A})^{-1}\mathbf{A}^T\mathbf{b}\]

Псевдообратная матрица

\[\mathbf{A}^+ = (\mathbf{A}^T\mathbf{A})^{-1}\mathbf{A}^T\]

Через SVD: $\(\mathbf{A}^+ = \mathbf{V}\Sigma^+\mathbf{U}^T\)$


Градиенты

Градиент по вектору

\[\nabla_{\mathbf{x}} f = \begin{pmatrix} \frac{\partial f}{\partial x_1} \\ \vdots \\ \frac{\partial f}{\partial x_n} \end{pmatrix}\]

Полезные градиенты

\[\nabla_{\mathbf{x}} (\mathbf{a}^T \mathbf{x}) = \mathbf{a}\]
\[\nabla_{\mathbf{x}} (\mathbf{x}^T \mathbf{x}) = 2\mathbf{x}\]
\[\nabla_{\mathbf{x}} (\mathbf{x}^T \mathbf{A} \mathbf{x}) = (\mathbf{A} + \mathbf{A}^T)\mathbf{x} = 2\mathbf{A}\mathbf{x}\]

(если \(\mathbf{A}\) симметрична) $\(\nabla_{\mathbf{x}} \|\mathbf{Ax} - \mathbf{b}\|^2 = 2\mathbf{A}^T(\mathbf{Ax} - \mathbf{b})\)$

Гессиан

\[\mathbf{H} = \nabla^2 f = \begin{pmatrix} \frac{\partial^2 f}{\partial x_1^2} & \cdots & \frac{\partial^2 f}{\partial x_1 \partial x_n} \\ \vdots & \ddots & \vdots \\ \frac{\partial^2 f}{\partial x_n \partial x_1} & \cdots & \frac{\partial^2 f}{\partial x_n^2} \end{pmatrix}\]

Матричное дифференцирование

Производные по матрице

\[\frac{\partial}{\partial \mathbf{X}} \text{trace}(\mathbf{AX}) = \mathbf{A}^T\]
\[\frac{\partial}{\partial \mathbf{X}} \text{trace}(\mathbf{X}^T\mathbf{A}) = \mathbf{A}\]
\[\frac{\partial}{\partial \mathbf{X}} \text{trace}(\mathbf{X}^T\mathbf{AX}) = (\mathbf{A} + \mathbf{A}^T)\mathbf{X}\]

Для ML

Ковариационная матрица

\[\Sigma = \frac{1}{n-1}\mathbf{X}^T\mathbf{X}\]

где \(\mathbf{X}\) центрирован (среднее = 0)

Матрица Грама

\[\mathbf{G} = \mathbf{X}\mathbf{X}^T\]

\(G_{ij} = \mathbf{x}_i \cdot \mathbf{x}_j\) — скалярные произведения примеров

Whitening

\[\mathbf{X}_{white} = \mathbf{X} \mathbf{V} \Lambda^{-1/2}\]

где \(\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 для позиционного кодирования