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

Операции с векторами: арифметика, на которой стоит ML

Вектор - это не просто список чисел. Это точка в пространстве, направление движения, эмбеддинг слова, пиксель изображения. Операции над векторами - это язык, на котором написан весь ML: от линейной регрессии до GPT.

  • ML: каждый пример обучающей выборки - вектор признаков
  • NLP: слово 'king' - вектор 768 чисел в пространстве BERT
  • Компьютерная графика: позиция, нормаль, цвет вершины - всё векторы
  • Физика: скорость, ускорение, сила - векторные величины
  • Финансы: портфель активов - вектор весов

Операции с векторами: арифметика, на которой стоит ML

**Нейросеть на 4 слоя - это 4 раза сложение и умножение на матрицу.** Style transfer в Stable Diffusion - линейная комбинация латентных векторов. Батч-нормализация в каждом слое ResNet - вычитание среднего и деление на стандартное отклонение. Операции над векторами кажутся скучной математикой, но именно они - весь forward pass любой нейросети. Ни одной лишней строки кода помимо них нет.

**Чему урок учит на самом деле**: не «как сложить компоненты», а почему одни и те же четыре операции дают и школьную геометрию, и word2vec, и линейные слои нейросетей. К концу урока "сложить векторы" и "сделать forward pass" окажутся одним и тем же.

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

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

Сложение: покомпонентно, всегда

Сложение: покомпонентно, всегда

Два вектора складываются строго по компонентам: i-я с i-й. Никакого смешивания между разными позициями.

ФОРМУЛА: a + b = (a₁ + b₁, a₂ + b₂, ..., aₙ + bₙ) ПРИМЕР: a = (3, 1, 4) b = (1, 5, 2) ───────────── a + b = (4, 6, 6) ← каждая компонента отдельно В numpy: a + b ← broadcasting, одна операция на весь массив

**Геометрический смысл**: конец одного вектора - начало следующего. Сумма - стрелка из старта первого в конец второго. Именно так работает батч-сложение bias в линейном слое: к каждому вектору в батче прибавляется один и тот же вектор b.

Свойства сложения - не академический список, а инструменты для упрощения вычислений:

  • **Коммутативность**: a + b = b + a (порядок не важен)
  • **Ассоциативность**: (a + b) + c = a + (b + c) (скобки можно переставлять)
  • **Нулевой вектор**: a + 0 = a (сложение с нулём ничего не меняет)
  • **Противоположный**: a + (-a) = 0 (вычитание вектора из самого себя)

Что главное в концепте «Сложение: покомпонентно, всегда»?

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

Вычитание: разность как смещение

Вычитание: разность как смещение

Вычитание - это сложение с противоположным вектором. Геометрически **a - b** - стрелка **из конца b в конец a** (при общем начале). Именно эту операцию используют, чтобы найти «направление» от одного объекта к другому в embedding-пространстве.

ФОРМУЛА: a - b = (a₁ - b₁, a₂ - b₂, ..., aₙ - bₙ) ПРИМЕР: a = (5, 3, 1) b = (2, 1, 4) ───────────── a - b = (3, 2, -3) INTUITION (word2vec): v(king) - v(man) = «вектор монархии без признака пола» v(Paris) - v(France) = «вектор столичности» Это буквально вычитание векторов - ничего сложнее.

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

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

Умножение на скаляр: ползунок громкости

Умножение на скаляр: ползунок громкости

Умножение на число k масштабирует каждую компоненту. Направление остаётся - меняется только «интенсивность».

ФОРМУЛА: k · a = (k·a₁, k·a₂, ..., k·aₙ) ЧТО ПРОИСХОДИТ ПРИ РАЗНЫХ k: k = 2: то же направление, в 2 раза длиннее k = 0.5: то же направление, в 2 раза короче k = -1: разворот на 180°, та же длина k = 0: вектор схлопывается в ноль ПРИМЕР: v = (2, -1, 3) 3v = (6, -3, 9) -v = (-2, 1, -3) 0.5v = (1, -0.5, 1.5)

**ML-применение - style steering**: исследователи обнаружили, что умножение вектора активации на скаляр меняет «интонацию» ответа LLM. Статья «Activation Addition» (2023): простое сложение вектора 1.5 · emb("happy") к скрытому состоянию модели устойчиво делает ответы позитивнее. Без дообучения, без RLHF - просто скалярное умножение.

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

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

Линейная комбинация: фундамент нейросетей

Линейная комбинация: фундамент нейросетей

**Линейная комбинация** - это взвешенная сумма векторов. На этой операции держится буквально каждый нейрон.

ОБЩАЯ ФОРМА: α₁v₁ + α₂v₂ + ... + αₙvₙ ПРИМЕР - разложение через стандартный базис R²: e₁ = (1, 0), e₂ = (0, 1) (3, 5) = 3·e₁ + 5·e₂ ← линейная комбинация базисных ОДИН НЕЙРОН = ЛИНЕЙНАЯ КОМБИНАЦИЯ + НЕЛИНЕЙНОСТЬ: output = σ(w₁x₁ + w₂x₂ + ... + wₙxₙ + b) = σ(w · x + b) где w · x - это ровно линейная комбинация компонент x с весами w. Умножение матрицы на вектор = набор линейных комбинаций = forward pass линейного слоя.

**Критически важный факт**: линейная комбинация линейных комбинаций - снова линейная комбинация. Поэтому сеть без нелинейных активаций эквивалентна одному линейному слою, сколько бы слоёв ни было. Именно нелинейности (ReLU, GELU, sigmoid) превращают стек из матричных умножений в мощный аппроксиматор.

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

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

Нормализация: единичная длина как стандарт

Нормализация: единичная длина как стандарт

Нормализация вектора - деление на его длину. Результат - вектор той же направленности, но единичной длины. Именно нормированные векторы лежат в основе cosine similarity и векторных баз.

ФОРМУЛА: v̂ = v / ||v|| где ||v|| = sqrt(v₁² + v₂² + ... + vₙ²) ПРОВЕРКА: ||v̂|| = ||v/||v|||| = ||v||/||v|| = 1 ✓ ПРИМЕР: v = (3, 4) ||v|| = sqrt(9 + 16) = 5 v̂ = (3/5, 4/5) = (0.6, 0.8) ||v̂|| = sqrt(0.36 + 0.64) = 1 ✓ ОСОБЫЙ СЛУЧАЙ: Нулевой вектор нормализовать нельзя (деление на 0). В numpy: np.linalg.norm([0,0,0]) = 0.0

Нулевой вектор нормализовать нельзя - у него нет направления. В production-коде всегда проверять: if np.linalg.norm(v) > 1e-8 before normalization.

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

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

Батч-нормализация: вычитание и масштабирование в нейросетях

Батч-нормализация: вычитание и масштабирование в нейросетях

**Batch Normalization** (BatchNorm) - один из ключевых приёмов в глубоком обучении. Внутри - вычитание вектора среднего и деление на вектор стандартного отклонения. Буквально операции над векторами из этого урока.

**Почему BatchNorm работает**: без нормализации активации в глубоких сетях «дрейфуют» - среднее и дисперсия постепенно смещаются, градиенты взрываются или затухают. BatchNorm фиксирует распределение после каждого слоя. Результат - ResNet-50 сходится за часы, не дни. Все операции - вычитание вектора, деление на вектор.

Что главное в концепте «Батч-нормализация: вычитание и масштабирование в нейросетях»?

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

Где матричные операции крутятся прямо сейчас

Где матричные операции крутятся прямо сейчас

Векторные операции в ML-системах

От базовой операции к реальному применению

КомпонентРольДетали
Сложение: bias в линейном слоеoutput = W @ x + bКаждый линейный слой нейросети: прибавление вектора b к каждому элементу батча
Вычитание: word2vec аналогииv(king) - v(man) + v(woman) ≈ v(queen)Difference vectors в embedding-пространстве - семантические оси
Умножение: style steering в LLMhidden += scale * steering_vectorActivation Addition: управление тоном модели без fine-tuning
Линейная комбинация: forward passW @ x = набор dot productsКаждый слой Dense/Linear в PyTorch, TensorFlow, JAX
Нормализация: векторные базыv / ||v|| перед upsert в Qdrant/FAISSOpenAI ada-002 возвращает уже нормализованные; другие - нормировать самому
Батч-операции: BatchNorm / LayerNorm(X - mean) / std + gamma * x + betaResNet, ViT, Transformer - BatchNorm или LayerNorm после каждого слоя

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

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

Практика: L2-нормализация

Практика: L2-нормализация

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

Почему два линейных слоя подряд можно заменить одним линейным слоем?

- Первый слой: y = W₁x + b₁ - Второй слой: z = W₂y + b₂ = W₂(W₁x + b₁) + b₂ = (W₂W₁)x + (W₂b₁ + b₂) - Это тоже линейный слой: z = Wx + b, где W = W₂W₁, b = W₂b₁ + b₂ - Любое число линейных слоёв без активаций = один линейный слой - Именно поэтому нелинейные активации (ReLU, GELU) необходимы

В чём смысл нормализации эмбеддингов перед косинусной близостью?

- cosine_sim(a,b) = (a·b) / (||a||·||b||) - при нормировке делитель = 1 - Нормированная версия: просто a · b - один dot product вместо трёх операций - Длина вектора не несёт семантического смысла - важно направление - FAISS с Inner Product metric требует нормированных входов - OpenAI ada-002 нормирует заранее - это соглашение, не математическая необходимость

BatchNorm и LayerNorm - в чём принципиальная разница?

- BatchNorm: среднее/std по оси batch (axis=0) - статистики по всему батчу - LayerNorm: среднее/std по оси features (axis=-1) - статистики по одному примеру - При batch_size=1 BatchNorm вырождается - LayerNorm стабилен всегда - Трансформеры используют LayerNorm: авторегрессивная генерация идёт по одному токену - CNN с большими батчами - BatchNorm: ResNet, VGG, EfficientNet

Что главное в концепте «Практика: L2-нормализация»?

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

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

  • **Сложение/вычитание** - покомпонентно; a + b в нейросети = прибавление bias b к каждому элементу батча
  • **Умножение на скаляр** - масштабирование без изменения направления; основа style steering в LLM
  • **Линейная комбинация** = один нейрон = одна строка матрицы весов W умноженная на вход x
  • **Нормализация** v/||v|| - стандарт перед векторным поиском; делает cosine_sim равным dot product
  • **BatchNorm** - вычитание вектора среднего и деление на вектор std; не магия, просто векторные операции
  • Два линейных слоя без активации = один линейный слой; нелинейность - не опция, а необходимость

Куда дальше

Операции над векторами - азбука. Дальше - матрицы и то, что с ними делать.

  • Скалярное произведение — dot product - основа cosine similarity, attention и проекций
  • Матрицы и их операции — Умножение матрицы на вектор = пакет линейных комбинаций = один слой нейросети
  • Собственные векторы и SVD — PCA проецирует данные на главные компоненты через те же dot products

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

  • calc-18-partial
Операции с векторами: арифметика, на которой стоит ML

0

1

Войти