Алгебра
Линейная алгебра в ML
GPT-4: 1.8 триллиона параметров. Forward pass - последовательность матричных умножений. Attention - три умножения и softmax. Backprop - транспонированные Якобианы. Вся революция DL - это оптимизированная линейная алгебра на GPU.
- NVIDIA A100: 312 TeraFLOPS именно под GEMM - матричные умножения; весь DL оптимизирован под эту одну операцию
- Flash Attention: переписанный attention с tiling для IO-эффективности матричных умножений - 2-4x speedup
- Quantization: INT8 вместо FP32 для матричных умножений - 4x меньше памяти, 2-4x быстрее
Предварительные знания
Матрица как нейронный слой
GPT-4 содержит 1.8 триллиона параметров, организованных в матрицы. Forward pass - это последовательность матричных умножений плюс нелинейности. Весь глубокое обучение - это линейная алгебра с нелинейностями между слоями.
Линейный слой y = Wx + b: W ∈ ℝ^{d_out x d_in}. Батч из n образцов: X ∈ ℝ^{n x d_in}, выход Y = X Wᵀ + b ∈ ℝ^{n x d_out}. Одно матричное умножение - n образцов параллельно.
GPU оптимизированы под GEMM (General Matrix Multiply) - одну операцию, которая лежит в основе всего DL. Nvidia A100 выполняет ~312 TeraFLOPS - 312 триллионов матричных умножений в секунду. Это объясняет доминирование GPU в ML.
Батч X из 64 образцов, каждый в 768 dims. Линейный слой W: 768 -> 512. Размер выхода Y = X W^T + b:
Attention: матричные умножения в трансформерах
Attention в трансформерах - три матричных умножения и один softmax. Это сердце BERT, GPT, T5, LLaMA. Каждый токен «смотрит» на все остальные через матрицу внимания.
Q = X W_Q, K = X W_K, V = X W_V - линейные проекции входа. QKᵀ/sqrt(d_k) - матрица «сходств» токенов. Деление на sqrt(d_k) предотвращает слишком большие логиты (vanishing gradients в softmax).
Multi-head attention: h параллельных attention head, каждый со своими W_Q, W_K, W_V. Выходы конкатенируются и проецируются. GPT-3 имеет 96 heads x 128 dim = d_model=12288. Это 96 параллельных взглядов на каждый токен.
Зачем делить QK^T на sqrt(d_k) в attention?
Backpropagation как цепное правило для матриц
Backpropagation - не магия, это цепное правило дифференцирования для матричных функций. Каждый слой получает градиент выхода и передаёт градиент входа.
Для слоя Y = X Wᵀ: если дано dL/dY (градиент потерь по выходу), то градиенты:
Transpose в формулах backprop - не случайность. Если прямой проход - отображение f: ℝⁿ -> ℝᵐ с матрицей Якоби J ∈ ℝ^{m x n}, то обратный проход передаёт градиент через Jᵀ ∈ ℝ^{n x m}. Транспонирование - базовая операция backprop.
Фреймворки (PyTorch, JAX) реализуют automatic differentiation: каждая операция записывает правило backprop (vjp - vector-Jacobian product). Для y = Wx: vjp(v) = v @ W (backprop через вход) и vjp_W(v) = v.T @ x (backprop по весам). Это буквально формулы выше.
Для Y = X @ W.T (X: n x d_in, W: d_out x d_in), дано dL/dY: n x d_out. Чему равно dL/dW?
Ключевые идеи
- Линейный слой Y = X W^T + b: одно матричное умножение обрабатывает весь батч
- Attention: Softmax(QK^T / sqrt(d_k)) V - три умножения + softmax
- Деление на sqrt(d_k) - стабилизация градиентов при больших d_k
- Backprop: dL/dW = (dL/dY)^T @ X, dL/dX = (dL/dY) @ W - транспонированные Якобианы
- GPU GEMM: вся скорость DL - это одна операция matrix multiply, оптимизированная до предела
Связанные темы
Линейная алгебра - фундамент ML. Следующий уровень - численные методы и оптимизация.
- SVD — SVD объясняет low-rank структуру весовых матриц (LoRA) и PCA признаков
- Квадратичные формы — Гессиан функции потерь - квадратичная форма, определяющая геометрию оптимизации