Алгебра

Линейная алгебра в 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 быстрее

Предварительные знания

  • SVD и приложения

Матрица как нейронный слой

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 признаков
  • Квадратичные формы — Гессиан функции потерь - квадратичная форма, определяющая геометрию оптимизации

Связанные уроки

  • la-01-vectors-intro
Линейная алгебра в ML

0

1

Войти