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

Матрица как линейное отображение

Столбцы матрицы — это образы базисных векторов, и из одного этого следует почти всё

Шаг 13 из 117 · ~28 мин

Сначала отображение, потом таблица

Матрица — это не таблица чисел. Точнее: таблица чисел — это запись матрицы в фиксированном базисе, а сама матрица есть линейное отображение.

Отображение T:VWT : V \to W называется линейным, если

T(x+y)=T(x)+T(y),T(λx)=λT(x)T(\mathbf{x} + \mathbf{y}) = T(\mathbf{x}) + T(\mathbf{y}), \qquad T(\lambda \mathbf{x}) = \lambda\, T(\mathbf{x})

Одной формулой: TT сохраняет линейные комбинации. Отсюда сразу следует T(0)=0T(\mathbf{0}) = \mathbf{0} — линейное отображение обязано оставлять начало координат на месте.

Слой нейросети Wx+bW\mathbf{x} + \mathbf{b} линейным не является при b0\mathbf{b} \ne \mathbf{0}: он не сохраняет ноль. Это аффинное отображение. Разница в терминологии, но она объясняет, почему в теории всё пишут через расширенную матрицу с дополнительной единичной координатой.

Главное наблюдение

Возьмём произвольный вектор и разложим его по базису:

x=x1e1+x2e2++xnen\mathbf{x} = x_1 \mathbf{e}_1 + x_2 \mathbf{e}_2 + \cdots + x_n \mathbf{e}_n

Применим TT и воспользуемся линейностью:

T(x)=x1T(e1)+x2T(e2)++xnT(en)T(\mathbf{x}) = x_1 T(\mathbf{e}_1) + x_2 T(\mathbf{e}_2) + \cdots + x_n T(\mathbf{e}_n)

Вот и всё. Линейное отображение полностью определяется тем, куда оно переводит базисные векторы. Знаете nn образов — знаете отображение целиком.

Матрица AA — это именно эти образы, записанные столбцами:

A=[T(e1)T(e2)T(en)]A = \begin{bmatrix} \big| & \big| & & \big| \\ T(\mathbf{e}_1) & T(\mathbf{e}_2) & \cdots & T(\mathbf{e}_n) \\ \big| & \big| & & \big| \end{bmatrix}

Из этого следует и определение умножения матрицы на вектор:

Ax=i=1nxiA:,i\htmlData{k=A}{A}\htmlData{k=x}{\mathbf{x}} = \sum_{i=1}^{n} \htmlData{k=x}{x_i} \, \htmlData{k=col}{A_{:,i}}

, умноженная на вектор, — это линейная комбинация с в качестве коэффициентов. Не «строка на столбец», а именно так: покомпонентная запись jAijxj\sum_j A_{ij} x_j — это вычислительный рецепт, а комбинация столбцов — смысл.

Стоит один раз перестроить интуицию с «строка скалярно умножается на вектор» на «столбцы взвешиваются координатами». Вторая точка зрения объясняет почти всё остальное.

Следствия, которые теперь бесплатны

Образ (column space) — это span\mathrm{span} столбцов. Прямо из формулы выше: AxA\mathbf{x} пробегает все линейные комбинации столбцов, когда x\mathbf{x} пробегает всё пространство.

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

Ядро (null space) — множество {x:Ax=0}\{\mathbf{x} : A\mathbf{x} = \mathbf{0}\}, то есть те комбинации столбцов, которые обнуляются. Ядро тривиально ровно тогда, когда столбцы независимы, — то есть ровно тогда, когда отображение инъективно. Это в точности то, что мы обсуждали в блоке 0.

Теорема о ранге и дефекте связывает всё вместе:

dim(kerA)+rank(A)=n\dim(\ker A) + \operatorname{rank}(A) = n

где nn — число столбцов. Читается как закон сохранения: каждое измерение входа либо выживает в образе, либо схлопывается в ядро.

Умножение матриц — это композиция

(AB)x=A(Bx)(AB)\mathbf{x} = A(B\mathbf{x})

Определение умножения матриц выбрано именно так, чтобы это равенство выполнялось. Отсюда всё остальное:

  • Порядок: ABAB означает «сначала BB, потом AA» — как в композиции функций gfg \circ f. Матрицы записываются в порядке, обратном порядку применения.
  • Согласование размерностей: если B:RnRmB : \R^n \to \R^m и A:RmRkA : \R^m \to \R^k, то AA имеет форму k×mk \times m, BB — форму m×nm \times n, произведение — k×nk \times n. Внутренние размерности обязаны совпасть, потому что выход BB должен быть допустимым входом AA.
  • Некоммутативность: ABBAAB \ne BA, потому что композиция функций некоммутативна. Повернуть, а потом растянуть — не то же самое, что растянуть, а потом повернуть.
  • Ассоциативность: (AB)C=A(BC)(AB)C = A(BC), потому что композиция ассоциативна. Ровно поэтому в глубоких сетях можно группировать слои как угодно.

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

Транспонирование

(A)ij=Aji(A^\top)_{ij} = A_{ji}. Геометрический смысл не так очевиден, как хотелось бы, и станет ясен только вместе со скалярным произведением: AA^\top — это сопряжённое отображение, определяемое соотношением

Ax,y=x,Ay\langle A\mathbf{x}, \mathbf{y}\rangle = \langle \mathbf{x}, A^\top\mathbf{y}\rangle

Пока достаточно рабочих правил: (AB)=BA(AB)^\top = B^\top A^\top — порядок меняется, как при обращении композиции.

Проверка понимания

Матрица 2×32 \times 3 задаёт отображение R3R2\R^3 \to \R^2. Число строк — это размерность выхода, число столбцов — размерность входа. Легко перепутать, потому что записывается «строки × столбцы», а читается «из столбцов в строки».

Проверяйте так: столбцов должно быть столько, сколько базисных векторов на входе — ведь каждый столбец и есть образ одного из них.

Источники

Проверки

0 из 2
  1. Что кодируют столбцы

    Линейное отображение T:R2R2T : \R^2 \to \R^2 переводит e1=(1,0)\mathbf{e}_1 = (1, 0) в (3,1)(3, 1), а e2=(0,1)\mathbf{e}_2 = (0, 1) в (1,2)(-1, 2).

    Какая матрица его задаёт?

  2. Умножение как композиция

    Реализуйте matmul(a, b) — произведение матриц, заданных списками строк.

    Требования:

    • если размерности несовместимы (число столбцов a не равно числу строк b), верните null (в Python — None);
    • произведение матрицы с нулём столбцов на матрицу с нулём строк корректно и даёт нулевую матрицу нужного размера.

    Реализуйте через линейные комбинации столбцов, а не через тройной цикл по индексам, если получится: jj-й столбец произведения — это AA, применённая к jj-му столбцу BB. Результат тот же, но связь со смыслом видна лучше.

    функция matmul

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

    Ctrl/⌘ + Enter