Главная / Статьи / Восемь идей линейной алгебры, на которых держатся эмбеддинги, LoRA и PCA

Восемь идей линейной алгебры, на которых держатся эмбеддинги, LoRA и PCA

Векторы, матрицы, собственные векторы, косинусное сходство, нормы, SVD и ранг — на простых примерах с ценами на дома и с ИИ-техниками, которые от них зависят.

1673 слов

Чтобы строить что-то на ИИ, математический диплом не нужен, но немного линейной алгебры развеивает массу загадок. Модели не умеют напрямую читать текст, изображения или звук. Всё сначала превращается в числа. Но и после этого нужен способ упорядочить числа так, чтобы модель могла сравнивать объекты, находить закономерности и делать прогнозы, и этот инструментарий даёт линейная алгебра. Вот восемь понятий, которые стоит знать, прежде чем называть себя ИИ-инженером.

1. Векторы хранят данные

Вектор — это упорядоченный список чисел, описывающий что-либо. Дом можно записать так:

[300000, 150, 3]

Эти три элемента означают цену ($300 000), площадь (150 квадратных метров) и число спален (3).

Зачем это нужно? Когда объекты представлены векторами, модель может их сравнивать. У двух домов с похожими ценой, площадью и числом спален получаются похожие векторы — так модель и видит, что они связаны.

2. Матрицы складывают много векторов вместе

Представьте матрицу как сетку из строк и столбцов. Один вектор описывает один объект, а матрица вмещает целый набор:

[ 300000   150   3 ]  → House 1
[ 450000   200   4 ]  → House 2
[ 250000   120   2 ]  → House 3

Каждая строка — это дом, а каждый столбец — признак: цена, площадь, спальни. Матрицы позволяют системе обрабатывать много данных за раз, а не по одному вектору, благодаря чему вычисления на больших наборах данных остаются эффективными.

3. Собственные значения и собственные векторы указывают на главное

Собственный вектор — особый вектор, который после преобразования по-прежнему направлен вдоль той же прямой. Он может стать длиннее или короче, но не поворачивается в новом направлении. Его собственное значение показывает, насколько он растянулся или сжался. Это соотношение записывается так:

Av=λv

A = the transformation
v = the eigenvector (special direction)
λ = the eigenvalue (how much it stretches or shrinks)

Чтобы в этом разобраться, вспомним, что у вектора есть направление и модуль, то есть длина.

        ●
       ↗
      /
     /
    /
   /
  ●

Модуль — это длина стрелки, а направление — куда она указывает. Умножение вектора на матрицу преобразует его: результат может растянуться, сжаться, повернуться или измениться как-то ещё. Крошечный пример:

[3].[2 0] = [6]
[4] [0 2]   [4]

Вектор [3, 4] имеет модуль 5 и направлен примерно под углом 53,13 градуса. После умножения он становится [6, 8] с модулем 10 и тем же углом 53,13 градуса. Он стал вдвое длиннее, не повернувшись, значит, это собственный вектор с собственным значением 2.

Это важно, потому что спектральный анализ выявляет доминирующие закономерности или направления в данных. На нём основан метод главных компонент (PCA), который сжимает наборы данных, сохраняя важную информацию.

4. Скалярное произведение и косинусное сходство измеряют похожесть

Возьмите два вектора одной длины, объедините их — и скалярное произведение вернёт одно число:

A · B = (a₁ × b₁) + (a₂ × b₂) + ... + (aₙ × bₙ)

Применим его к двум домам:

House 1 (A) = [300000, 150, 3]
House 2 (B) = [450000, 200, 4]

A · B = (300000 × 450000) + (150 × 200) + (3 × 4)
      = 135,000,030,012

У этого результата два недостатка.

Первый — масштаб. Цены огромны по сравнению с числом спален, поэтому цена доминирует в ответе, а число спален почти не учитывается. Лекарство — масштабирование признаков: сожмите каждый признак в похожий диапазон, например от 0 до 1, где 0 — наименьшее встреченное значение, а 1 — наибольшее.

// All three features are on roughly the same scale (0–1),
// so price doesn't dominate simply because its original number is much larger.

A' = [0.60,0.50,0.60]
B' = [0.90,0.67,0.80]

Второй — длина. В «сыром» скалярном произведении более длинный вектор получает больший балл просто потому, что он длиннее. Есть два способа это исправить: сначала нормализовать векторы, а потом взять скалярное произведение, или вычислить скалярное произведение и закончить косинусным сходством. Для нормализации нужна норма L2 — длина вектора по прямой:

# L2 Norm (Euclidean Distance) → Straight-line distance from the origin.
# It measures the overall length of a vector.

||x||₂ = √(x₁² + x₂²+...+xₙ²)

||A'||₂ = √(0.60²+0.50²+0.60²) ≈ 0.985
A'' = [0.60/0.985, 0.50/0.985 ,0.60/0.985] ≈ [0.609,  0.508,  0.609]

||B'||₂ = √(0.90²+0.67²+0.80²) ≈ 1.378
B'' = [0.90/1.378, 0.67/1.378, 0.80/1.378] ≈[0.653,  0.486,  0.581]


A''⋅B'' = (0.609)(0.653)+(0.508)(0.486)+(0.609)(0.581)
        ≈ 0.398+0.247+0.354
        ≈0.999

И само вычисление косинуса:

# cosine similarity
A' · B' = (0.60×0.90)+(0.50×0.67)+(0.60×0.80)
        ≈ 1.355

||A'||₂ ≈ 0.985

||B′||₂ ≈ 1.378

Cosine Similarity = (A' · B')/||A'||||B'||
                  ≈ 1.355/(0.985*1.378)
                  ≈ 0.999

Распространённая интерпретация значения:

  • 1,0 — то же направление, максимальное сходство
  • от 0,9 до 1,0 — чрезвычайно похожи
  • от 0,7 до 0,9 — довольно похожи
  • от 0,4 до 0,7 — умеренно похожи
  • больше 0 и меньше 0,4 — слабое сходство
  • 0 — перпендикулярны, общего направления нет
  • меньше 0 — всё более противоположны
  • -1,0 — строго противоположны, максимальное различие

Не воспринимайте эти диапазоны как закон. Что считать похожим, зависит от ваших данных и модели. Сама идея важна, потому что поиск по сходству, рекомендательные системы и нейросети опираются на то, насколько сильно связаны два набора чисел.

5. Нормы измеряют размер и ошибку

Векторы могут представлять дома, пользователей, товары, изображения или слова. Норма даёт одно число для размера вектора, что позволяет сравнивать векторы по величине. Три распространённые нормы:

Норма L1, она же манхэттенское расстояние, складывает модули всех элементов и даёт суммарную величину.

||x||₁ = ∣x₁∣+∣x₂∣+⋯+∣xₙ∣

Норма L2, или евклидово расстояние, — это расстояние по прямой от начала координат, то есть общая длина.

||x||₂ = √(x₁² + x₂²+...+xₙ²)

Норма L-бесконечность смотрит только на наибольший модуль.

||x||∞ = max⁡(∣x₁∣,∣x₂∣, ⋯ , ∣xₙ∣)

Для вопроса «насколько большой» представьте вектор стрелкой: его норма — длина стрелки, и у более длинного вектора норма больше. Именно на этом держится описанный выше шаг нормализации. Нормализация приводит вектор к длине 1, так что сравнение зависит от направления, а не от размера.

Для вопроса «насколько ошибочный» рассматривайте разницу между прогнозом и истиной как вектор ошибки. Его норма показывает, насколько вы промахнулись.

yactual=[10,20]
ypredicted=[8,23]

Error     = [10,20]−[8,23]=[2,−3]
||error||₁=∣2∣+∣−3∣=5
So the prediction has a total absolute error of 5.

Чем больше норма ошибки, тем хуже прогноз. Значение 5 само по себе ни хорошее, ни плохое; его оценивают в сравнении с другими прогнозами или с базовым уровнем.

На практике нормы встречаются в трёх местах:

  • Регуляризация (L1 и L2) борется с переобучением, штрафуя в функции потерь большие веса.
  • Функции потерь используют их: средняя абсолютная ошибка построена на норме L1, а среднеквадратичная ошибка — на квадрате нормы L2.
  • Отсечение градиентов использует норму L2, чтобы держать взрывающиеся градиенты под контролем при обучении глубоких сетей.

6. Умножение матриц объединяет информацию

Матрица не просто хранит числа. Применённая к входному вектору, она даёт выходной вектор, масштабируя, поворачивая, отражая или иначе преобразуя его. Умножение матриц смешивает числа из обеих, создавая новые. Допустим, три дома описаны тремя масштабированными признаками:

Houses =
    [ 0.50 0.50 0.50 ]
    [ 0.75 1.00 1.00 ]
    [ 0.25 0.00 0.00 ]

Теперь допустим, что модель выучила разную важность признаков: цена — 0,5, площадь — 0,3, спальни — 0,2:

Weights =
  [ 0.5 ]
  [ 0.3 ]
  [ 0.2 ]

Умножим данные о домах на веса:

Houses × Weights → Scores

Результат:

House 1 → 0.500
House 2 → 0.875
House 3 → 0.125

Чем выше балл, тем выше взвешенная ценность при заданной вами важности. Умножение матриц повсюду в машинном обучении, нейросетях, обработке данных и компьютерной графике, потому что оно эффективно объединяет и преобразует данные.

7. SVD упрощает матрицы

Многие матрицы не квадратные, а у неквадратных матриц нет собственных векторов. Сингулярное разложение (SVD) работает с любой матрицей любой формы, раскладывая её на три более простые:

A=UΣVᵀ

Читать это можно так: U поворачивает выход, Sigma масштабирует важные направления, а V транспонированная поворачивает вход. SVD позволяет уменьшать большие матрицы, сохраняя их самое важное содержимое. Его используют для снижения размерности, сжатия, рекомендательных систем и низкоранговых методов вроде LoRA. Оставьте только самые сильные компоненты — и данные и модели станут меньше, быстрее и дешевле.

8. Ранг объясняет низкоранговые трюки

Ранг показывает, сколько уникальной информации несёт матрица. У матрицы может быть много строк и столбцов, но при этом она может повторяться, и тогда ранг у неё низкий. Посмотрите на эту:

[1 2]
[2 4]

Вторая строка — просто удвоенная первая, так что независима только одна строка, и ранг равен 1.

Вот почему низкоранговые методы так популярны. Вместо того чтобы хранить каждое число, вы представляете суть меньшим количеством чисел, сокращая память и вычисления и сохраняя большую часть важного.

Как это всё складывается

Вместе эти восемь идей позволяют кодировать данные, менять их форму, оценивать их размер, проверять, насколько похожи две вещи, и сводить данные к чему-то меньшему. Не пытайтесь заучивать формулы. Стремитесь понимать, что делает каждое понятие, чем оно полезно и где встречается в реальных системах. Эта интуиция делает инструменты, библиотеки и модели, которыми вы пользуетесь, куда менее непрозрачными. А какое девятое понятие вы бы добавили в список?