Линейная алгебра

Матрицы: что они делают?

Матрица весов нейронного слоя 768x768 содержит 589 824 параметра и задаёт линейное преобразование пространства. Понять, что матрица делает геометрически - значит понять, что происходит внутри каждого слоя трансформера.

  • Нейросети: матрица весов W задаёт линейное отображение между слоями
  • Компьютерная графика: матрица поворота, масштаба, сдвига - базовые блоки 3D-рендеринга
  • Экономика: матрица Леонтьева описывает межотраслевые потоки в экономике
  • Квантовая механика: операторы - матрицы в пространстве состояний
  • Google PageRank: матрица переходов по веб-графу размером 50 миллиардов страниц

Матрицы: что они делают?

Linear(768, 3072) в PyTorch - одна строка кода. Внутри неё матрица размером 768 × 3072, то есть **2 359 296 чисел**. Когда вектор токена проходит через этот слой, происходит умножение матрицы на вектор - и вектор трансформируется. Не перезаписывается заново, не передаётся куда-то - именно **трансформируется**: каждый BERT, каждый GPT, каждый Vision Transformer - это цепочка таких трансформаций. Матрица задаёт правила трансформации.

**Чему этот урок учит на самом деле**: не «как выглядит матрица», а что матрица геометрически делает с пространством. Через 30 минут фраза «Linear слой - это матрица весов» станет не абстрактной, а наглядной - с интуицией о том, что происходит с каждым вектором при прохождении через слой.

Что главное в концепте «Матрицы: что они делают?»?

Проверка усвоения материала концепта.

Матрица = записанная трансформация

Матрица = записанная трансформация

Матрица - это **правила трансформации пространства**, записанные по столбцам. Каждый столбец говорит, куда попадёт один из базисных векторов. Для 2D это выглядит так:

┌ ┐ A = │ a b │ │ c d │ └ ┘ ЧТО ЭТО ЗНАЧИТ: - Первый столбец (a, c) - куда уходит i = (1, 0) - Второй столбец (b, d) - куда уходит j = (0, 1) ПРИМЕР - масштабирование: ┌ ┐ A = │ 3 0 │ i = (1,0) -> (3, 0) (растянули по X в 3 раза) │ 0 2 │ j = (0,1) -> (0, 2) (растянули по Y в 2 раза) └ ┘ ПРИМЕР - поворот на 90 градусов: ┌ ┐ R = │ 0 -1 │ i = (1,0) -> (0, 1) (пошёл вверх) │ 1 0 │ j = (0,1) -> (-1, 0) (пошёл влево) └ ┘

**Главное правило**: чтобы понять, что делает матрица, - смотри на её столбцы. Первый столбец - новое место для вектора (1,0). Второй - новое место для вектора (0,1). Всё остальное выводится из этих двух точек.

Что главное в концепте «Матрица = записанная трансформация»?

Проверка усвоения материала концепта.

Умножение матрицы на вектор: механизм трансформации

Умножение матрицы на вектор: механизм трансформации

Произвольный вектор v = (x, y) можно представить как x·i + y·j. После трансформации матрицей A каждый базисный вектор уйдёт в новое место - и вектор v уйдёт туда же, сохранив коэффициенты:

A * v = x * (A*i) + y * (A*j) = x * (первый столбец) + y * (второй столбец) ФОРМУЛА: ┌ ┐ ┌ ┐ ┌ ┐ │ a b │ * │ x │ = │ ax + by │ │ c d │ │ y │ │ cx + dy │ └ ┘ └ ┘ └ ┘ ПРИМЕР (матрица масштабирования 3x по X, 2x по Y): ┌ ┐ ┌ ┐ ┌ ┐ ┌ ┐ │ 3 0 │ * │ 4 │ = │ 12+0 │ = │ 12 │ │ 0 2 │ │ 5 │ │ 0+10 │ │ 10 │ └ ┘ └ ┘ └ ┘ └ ┘ (4, 5) -> (12, 10): x-координата утроена, y-координата удвоена

Что главное в концепте «Умножение матрицы на вектор: механизм трансформации»?

Проверка усвоения материала концепта.

Линейный слой нейросети: матрица весов

Линейный слой нейросети: матрица весов

**Linear(in, out)** в PyTorch - это матрица весов W размером [out × in] плюс вектор смещения b. Формула: y = Wx + b. Каждый нейрон в выходном слое - это одна строка матрицы W, скалярно умноженная на вектор входа x.

Linear(3, 2): вход 3D -> выход 2D ┌ ┐ ┌ ┐ ┌ ┐ y = W*x: │ w00 w01 w02│ * │ x0 │ + │ b0 │ │ w10 w11 w12│ │ x1 │ │ b1 │ └ ┘ │ x2 │ └ ┘ └ ┘ y[0] = w00*x0 + w01*x1 + w02*x2 + b0 <- первый нейрон y[1] = w10*x0 + w11*x1 + w12*x2 + b1 <- второй нейрон В BERT-base: W имеет shape [3072, 768] - матрица 768->3072 x имеет shape [768] - вектор токена y = W @ x + b - shape [3072] Каждый из 12 слоёв BERT содержит 4 таких матрицы.

**Что происходит с пространством**: Linear(768, 3072) берёт вектор из 768-мерного пространства и переносит его в 3072-мерное. Это не просто добавление нулей - матрица весов задаёт конкретное линейное отображение, и модель **обучает** это отображение так, чтобы оно было полезным для задачи.

Что главное в концепте «Линейный слой нейросети: матрица весов»?

Проверка усвоения материала концепта.

Датасет как матрица: n примеров × d признаков

Датасет как матрица: n примеров × d признаков

В ML датасет почти всегда представляется матрицей X размером [n × d], где n - количество примеров, d - количество признаков (размерность пространства). Это не случайное соглашение - такая форма позволяет обрабатывать весь batch одним матричным умножением.

X: [n_samples x n_features] Пример: MNIST, 1000 картинок 28x28 X: [1000 x 784] X[i] - i-я картинка (вектор 784D) X[:, j] - j-й пиксель всех картинок Пример: табличные данные, 500 клиентов, 10 признаков X: [500 x 10] X[i] - профиль i-го клиента X[:, 0] - возраст всех клиентов Линейная регрессия: y = X @ w X: [n x d], w: [d], y: [n] Один matmul - предсказания для всех n примеров сразу

**Batched processing**: обработка одного примера за раз в цикле в 100 раз медленнее обработки batch из 100 примеров одним matmul. GPU спроектирован под параллельное умножение матриц - именно поэтому batch processing ускоряет обучение в 10-100 раз.

Что главное в концепте «Датасет как матрица: n примеров × d признаков»?

Проверка усвоения материала концепта.

Единичная матрица: «ничего не делать»

Единичная матрица: «ничего не делать»

Единичная матрица I оставляет все векторы на месте - I·v = v для любого v. Это аналог числа 1 для умножения. Главная диагональ заполнена единицами, всё остальное - нули.

2x2: 3x3: ┌ ┐ ┌ ┐ │ 1 0 │ │ 1 0 0 │ │ 0 1 │ │ 0 1 0 │ └ ┘ │ 0 0 1 │ └ ┘ СВОЙСТВО: I * v = v для любого вектора v ПРОВЕРКА: ┌ ┐ ┌ ┐ ┌ ┐ ┌ ┐ │ 1 0 │ * │ x │ = │ 1*x+0*y │ = │ x │ │ 0 1 │ │ y │ │ 0*x+1*y │ │ y │ └ ┘ └ ┘ └ ┘ └ ┘ I - нейтральный элемент умножения матриц: A*I = I*A = A

В deep learning инициализация весов близко к единичной матрице - это одна из техник обучения глубоких residual сетей. Идея: в начале обучения блок делает «почти ничего» (близко к I), и сеть постепенно отклоняется от этого состояния.

Что главное в концепте «Единичная матрица: «ничего не делать»»?

Проверка усвоения материала концепта.

Визуализация: что матрица делает с единичным квадратом

Визуализация: что матрица делает с единичным квадратом

Применение матрицы к единичному квадрату - наглядный способ увидеть трансформацию. Квадрат с вершинами (0,0), (1,0), (0,1), (1,1) превращается в параллелограмм, углы которого - столбцы матрицы.

Матрица [[2,1],[0,2]]: столбцы (2,0) и (1,2) задают стороны параллелограмма. Вершина (1,1) уходит в (2+1, 0+2) = (3, 2). Квадрат наклонился и растянулся - это называется сдвигом (shear) плюс масштабирование.

Что главное в концепте «Визуализация: что матрица делает с единичным квадратом»?

Проверка усвоения материала концепта.

Матрицы в ML: карта применений

Матрицы в ML: карта применений

Матрица как объект в разных контекстах ML

Одна математическая структура - десятки применений

КомпонентРольДетали
Linear слой (Dense / FC)y = Wx + b, W: [out x in]Основной строительный блок нейросетей. BERT: 4 матрицы на слой, 12 слоёв = 48 матриц
Датасет X: [n x d]n примеров, d признаковMNIST: [60000 x 784]. ImageNet: [1.2M x 150528]. Обработка - батчами через matmul
Confusion matrixМатрица ошибок классификатора [n_classes x n_classes]confusion[i][j] = сколько объектов класса i предсказаны как класс j. Диагональ - правильные ответы
Adjacency matrix (графы)A[i][j] = 1 если ребро i->j существуетGraphSAGE, GCN, GAT - операции на графах через матричное умножение. Социальные сети, молекулы
Attention matrixQK^T / sqrt(d_k): [seq x seq]Каждый элемент - сходство двух токенов. Softmax превращает в вероятности внимания
Intrinsic camera matrix3x3 матрица параметров камерыПереводит 3D точку в 2D пиксель. NeRF, Structure from Motion, автономные автомобили

Что главное в концепте «Матрицы в ML: карта применений»?

Проверка усвоения материала концепта.

Сингулярная матрица: когда трансформация «схлопывается»

Сингулярная матрица: когда трансформация «схлопывается»

Если столбцы матрицы коллинеарны - лежат на одной прямой - пространство «схлопывается» в линию. Такая матрица называется **сингулярной**. Обратной матрицы у неё нет, а det = 0.

┌ ┐ A = │ 1 2 │ Столбцы: (1, 2) и (2, 4) │ 2 4 │ (2, 4) = 2 * (1, 2) - коллинеарны! └ ┘ ЛЮБОЙ вектор (x, y) трансформируется: A * (x, y) = x*(1,2) + y*(2,4) = x*(1,2) + 2y*(1,2) = (x + 2y) * (1, 2) Результат ВСЕГДА на прямой через (1, 2)! Всё 2D пространство схлопнулось в одну прямую. det(A) = 1*4 - 2*2 = 4 - 4 = 0 - подтверждение сингулярности

В ML сингулярность матрицы возникает при **мультиколлинеарности признаков** - когда один признак является линейной комбинацией других. Это делает матрицу X^T X необратимой, и нормальное уравнение линейной регрессии перестаёт работать. Решение: регуляризация (ridge regression добавляет lambda*I, что гарантирует обратимость).

Что главное в концепте «Сингулярная матрица: когда трансформация «схлопывается»»?

Проверка усвоения материала концепта.

Практика: трансформация спрайта

Практика: трансформация спрайта

Вопросы для собеседования

Linear(768, 3072) - это матрица размером [768 x 3072] или [3072 x 768]? Почему?

- W имеет shape [3072, 768]: [out_features, in_features] - y = W @ x: [3072, 768] @ [768] = [3072] - внутренние размерности 768 совпадают - PyTorch хранит W именно в форме [out, in] для эффективного matmul - Это соглашение - некоторые фреймворки хранят транспонированно и делают x @ W^T

Матрица X датасета имеет shape [1000, 784]. Что означает X[5] и X[:, 100]?

- X[5] - шестой пример (картинка/объект), вектор размером 784 - X[:, 100] - 100-й признак для всех 1000 примеров, вектор размером 1000 - X[5, 100] - значение 100-го признака у шестого примера (один скаляр) - X[:, :] = X - вся матрица; X[:10] - первые 10 примеров (mini-batch)

Матрица A = [[1,2],[2,4]] сингулярна. Что произойдёт в PyTorch при попытке вычислить torch.linalg.inv(A)?

- torch.linalg.inv выбросит исключение LinAlgError: singular matrix - Математически: обратная матрица не существует при det = 0 - В линейной регрессии: X^T X может быть сингулярной при мультиколлинеарности - Решение: torch.linalg.lstsq или ridge regression (добавить lambda*I перед инверсией)

Что главное в концепте «Практика: трансформация спрайта»?

Проверка усвоения материала концепта.

Что унести из урока

  • **Матрица = трансформация** пространства: столбцы показывают, куда уходят базисные векторы
  • **A*v = x*(столбец 1) + y*(столбец 2)** - линейная комбинация столбцов с весами из вектора v
  • **Linear слой**: y = Wx + b, W: [out x in] - каждый нейрон - одна строка матрицы весов
  • **Датасет X**: [n_samples x n_features] - весь batch обрабатывается одним matmul
  • **Единичная матрица I**: нейтральный элемент, A*I = I*A = A, I*v = v
  • **Сингулярная матрица** (det = 0): пространство схлопывается, обратной нет - мультиколлинеарность в данных
  • **GPU = matmul**: batched matrix multiplication - именно поэтому батчи ускоряют обучение в 10-100 раз

Куда дальше

Матрица как объект - начало. Дальше - операции над ней и глубокие свойства

  • Операции с матрицами — Сложение, умножение, транспонирование - механика backprop и attention
  • Обратная матрица — Нормальное уравнение линейной регрессии: w = (X^T X)^{-1} X^T y
  • SVD и собственные векторы — PCA, LoRA (low-rank adaptation) - разложение матрицы весов

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

  • calc-06-derivative-intro
Матрицы: что они делают?

0

1

Войти