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

Вектор, линейная комбинация, оболочка

Что такое вектор на самом деле и почему span — единственное понятие, которое здесь нужно запомнить

Шаг 12 из 117 · ~25 мин

Три определения вектора

Программист скажет: вектор — это массив чисел. Физик скажет: величина с направлением и длиной. Математик скажет: элемент векторного пространства.

Все трое правы, и третье определение — самое полезное, потому что оно единственное объясняет, почему методы линейной алгебры работают на объектах, которые массивом не являются: на функциях, на многочленах, на матрицах.

Векторное пространство — это множество, в котором определены сложение и умножение на число, подчиняющиеся привычным правилам (ассоциативность, коммутативность сложения, дистрибутивность, наличие нуля и противоположного).

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

Из Rn\R^n как декартовой степени (мы её строили в блоке 0) векторное пространство получается покомпонентными операциями:

x+y=(x1+y1,  ,  xn+yn),λx=(λx1,  ,  λxn)\mathbf{x} + \mathbf{y} = (x_1 + y_1,\; \dots,\; x_n + y_n), \qquad \lambda \mathbf{x} = (\lambda x_1,\; \dots,\; \lambda x_n)

Линейная комбинация

v=λ1v1+λ2v2++λkvk\htmlData{k=v}{\mathbf{v}} = \htmlData{k=c1}{\lambda_1} \htmlData{k=v1}{\mathbf{v}_1} + \htmlData{k=c2}{\lambda_2} \htmlData{k=v2}{\mathbf{v}_2} + \cdots + \htmlData{k=cn}{\lambda_k} \htmlData{k=vn}{\mathbf{v}_k}

Всё, что делает линейная алгебра, — это линейные комбинации. Умножение матрицы на вектор, свёртка, полносвязный слой, PCA — везде под капотом одно и то же выражение.

В коде это sum(c * v for c, v in zip(coeffs, vectors)).

Линейная оболочка

span(v1,,vk)={i=1kλivi  :  λiR}\mathrm{span}(\mathbf{v}_1, \dots, \mathbf{v}_k) = \left\{ \sum_{i=1}^{k} \lambda_i \mathbf{v}_i \;:\; \lambda_i \in \R \right\}

Множество всех линейных комбинаций данного набора. Это то, куда можно попасть, комбинируя имеющиеся векторы.

Геометрически в R3\R^3:

  • span одного ненулевого вектора — прямая через начало координат;
  • span двух неколлинеарных — плоскость;
  • span трёх векторов «в общем положении» — всё пространство.

Ключевое наблюдение: span всегда содержит нулевой вектор (возьмите все λi=0\lambda_i = 0) и всегда проходит через начало координат. Прямая, не проходящая через ноль, оболочкой не является — это уже аффинное множество.

Линейная независимость

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

λ1v1++λkvk=0при не всех λi=0\lambda_1 \mathbf{v}_1 + \cdots + \lambda_k \mathbf{v}_k = \mathbf{0} \quad \text{при не всех } \lambda_i = 0

Независимы — если такой комбинации нет, то есть равенство нулю возможно только при всех нулевых коэффициентах.

Практический смысл: зависимость означает избыточность. Зависимый вектор ничего не добавляет к span — он уже там был.

Отсюда и берётся понятие ранга: ранг матрицы — это размерность span её столбцов, то есть количество по-настоящему независимой информации в ней. И отсюда же LoRA: низкоранговая поправка — это утверждение, что нужное изменение весов лежит в span небольшого числа направлений.

Базис и размерность

Базис — линейно независимый набор, span которого совпадает со всем пространством. Минимальный набор, из которого собирается всё.

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

Размерность — число векторов в базисе. Оно одно и то же для всех базисов данного пространства, и это утверждение (не очевидное, но верное) — то, что делает размерность корректно определённой.

Стандартный базис Rn\R^n — векторы ei\mathbf{e}_i с единицей на ii-м месте: координаты в нём совпадают с самими компонентами вектора. Именно поэтому «массив чисел» и «вектор» кажутся одним и тем же — но только пока базис фиксирован и не обсуждается.

Что это даёт в ML

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

Источники

Проверки

0 из 2
  1. Что такое span

    Отметьте все верные утверждения о линейной оболочке.

  2. Линейная независимость через приведение

    Реализуйте rank(vectors) — размерность линейной оболочки набора векторов (то есть ранг матрицы, составленной из них как из строк).

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

    Векторы даны как списки чисел одинаковой длины. Числа могут быть дробными, поэтому сравнивайте с нулём по порогу, например 10910^{-9}, а не точно — накопленная погрешность иначе даст неправильный ранг.

    Ранг набора и есть ответ на вопрос «сколько здесь по-настоящему независимой информации».

    функция rank

    Загрузка редактора…

    Ctrl/⌘ + Enter