Линейные преобразования 🔀
Матрицу ты умеешь умножать на столбец с урока 157. Формально это выглядело как арифметическое упражнение: берёшь строку матрицы, берёшь столбец, перемножаешь поэлементно, складываешь, записываешь в нужную клетку. Никакого смысла в этой процедуре не было — было правило.
А потом накопились странности. Умножение матриц оказалось некоммутативным, и это выглядело как досадный дефект. Определитель почему-то мультипликативен: $\det(AB) = \det A \cdot \det B$ — красиво, но непонятно откуда. Ранг произведения не превосходит ранга каждого сомножителя. Ядро матрицы, которое мы разобрали в уроке 167, оказалось подпространством, и его размерность равнялась $n - r$ — снова красиво и снова без внятного объяснения, почему именно так.
В этом уроке все эти факты перестают быть разрозненными наблюдениями. Потому что у матрицы есть смысл, и смысл этот один: матрица — это способ записать преобразование пространства. Числа в клетках — не самостоятельная сущность, а координатная запись действия: «вот куда переезжает каждый базисный вектор». Как только эта мысль встанет на место, всё перечисленное выше станет очевидными следствиями. Некоммутативность — потому что «повернуть, потом отразить» и «отразить, потом повернуть» дают разный результат, и это видно глазами на листе бумаги. Мультипликативность определителя — потому что определитель измеряет, во сколько раз преобразование меняет площадь, а при последовательном применении коэффициенты перемножаются. Ядро — потому что часть пространства преобразование схлопывает в ноль, и это схлопывание надо где-то учесть.
Центральный результат урока — теорема о ранге и дефекте: $\dim \ker T + \operatorname{rank} T = n$. Читается она как закон сохранения: сколько измерений преобразование потеряло, плюс сколько выжило, равно тому, сколько было изначально. Из неё мгновенно следует, что обратимость оператора равносильна тривиальности ядра, что равносильно $\det A \ne 0$, что равносильно полному рангу, — и вся коллекция критериев, которую курс копил с урока 161, наконец собирается в одну таблицу.
И последнее, ради чего всё затевалось. Матрица оператора зависит от выбранного базиса. Один и тот же геометрический поворот в удобном базисе выглядит одним набором чисел, а в неудобном — совсем другим. Формула $A' = C^{-1}AC$ описывает эту зависимость, а матрицы, связанные такой формулой, называются подобными: это буквально один оператор, записанный на двух разных языках. И тут же возникает вопрос, ради ответа на который написана добрая половина линейной алгебры: а нельзя ли подобрать базис так, чтобы матрица стала максимально простой?
В машинном обучении вся эта конструкция лежит буквально в основании. Полносвязный слой nn.Linear — это линейное преобразование плюс сдвиг. Стек таких слоёв без активаций схлопывается в одно преобразование — и это не метафора, а прямое перемножение матриц, которое мы посчитаем. Свёртка — тот же линейный оператор, просто с огромной разреженной матрицей. Узкое горлышко автоэнкодера — это оператор с гигантским ядром, то есть с заранее спланированной потерей информации.
🎯 Ты узнаешь:
-
Что такое линейное преобразование и как за полминуты отличить его от нелинейного и от аффинного
-
Почему оператор полностью определяется образами базисных векторов и как из этих образов собирается матрица
-
Как выглядят на плоскости поворот, отражение, проекция, растяжение и сдвиг — и что определитель говорит о площади
-
Почему умножение матриц устроено именно так «неудобно»: это композиция операторов, и по-другому не получится
-
Что такое ядро и образ оператора, почему это подпространства и как они связаны с ФСР и рангом
-
Теорему о ранге и дефекте $\dim \ker T + \operatorname{rank} T = n$ с полным доказательством и её смысл
-
Как меняется матрица оператора при смене базиса, что такое подобные матрицы и какие величины при этом не меняются
-
Где всё это работает в ML:
nn.Linear, схлопывание стека слоёв без активаций, свёртка как разреженный оператор, bottleneck автоэнкодера, аугментации изображений
История: откуда это взялось?
Смешно, но исторически всё шло задом наперёд. Сначала люди научились работать с линейными подстановками, потом придумали для них таблицы, и только через полвека поняли, что таблица — это запись отображения.
Отправной точкой считают Карла Фридриха Гаусса. В «Disquisitiones Arithmeticae» (1801), разбирая квадратичные формы, он систематически применял линейные подстановки вида $x' = \alpha x + \beta y$, $y' = \gamma x + \delta y$ и заметил ключевой факт: если сделать одну подстановку, а затем вторую, результат снова окажется подстановкой того же вида, и её коэффициенты вычисляются по вполне определённому правилу. Это и есть умножение матриц — за сорок лет до того, как появилось слово «матрица». Гаусс называл получившуюся подстановку композицией и уже понимал, что порядок применения важен.
Готхольд Эйзенштейн в 1844 году сделал следующий шаг: он стал обозначать подстановки одиночными буквами и писать $S \cdot T$ для их последовательного применения, явно оговорив, что $S \cdot T$ и $T \cdot S$ — вообще говоря, разные вещи. Это первое зафиксированное осознанное утверждение о некоммутативности умножения в алгебре.
Термин матрица ввёл Джеймс Джозеф Сильвестр в 1850 году, но развернул теорию его друг Артур Кэли. В «A Memoir on the Theory of Matrices» (1858) Кэли впервые рассмотрел матрицу как самостоятельный объект, определил сложение, умножение на число, умножение матриц, единичную и обратную матрицы. И главное — он прямо объяснил, откуда берётся правило умножения «строка на столбец»: из композиции линейных подстановок. То есть с самого начала произведение матриц было определено не как формальная операция, а как запись последовательного применения двух преобразований. Всё, что кажется в этом правиле странным, — следствие этой природы.
Абстрактное понятие линейного оператора, оторванное от координат, появилось позже. Джузеппе Пеано в книге «Calcolo geometrico» (1888) дал аксиоматику линейного пространства над вещественными числами и там же ввёл понятие линейного отображения между такими пространствами — по существу в современном виде. Работу почти не заметили: она вышла на итальянском, была написана на непривычном тогда аксиоматическом языке и опередила время лет на тридцать.
Слово ядро (нем. Kern, англ. kernel) для множества элементов, переходящих в ноль, пришло из теории групп начала XX века, а образ и ранг отображения окончательно закрепились в 1920–1930-е годы усилиями Эмми Нётер и её школы, вместе со всем языком гомоморфизмов. Теорема о ранге и дефекте в форме $\dim \ker + \dim \operatorname{im} = \dim V$ — это переформулировка того, что для матриц знали ещё Сильвестр и Фробениус в 1880-х: связь числа независимых решений однородной системы с рангом. Просто в старой формулировке речь шла о системе уравнений, а в новой — о преобразовании пространства.
Отдельная линия — геометрическая. Феликс Клейн в Эрлангенской программе (1872) предложил радикальный взгляд: геометрия — это наука об инвариантах группы преобразований. Хочешь евклидову геометрию — бери преобразования, сохраняющие расстояния; хочешь аффинную — бери линейные обратимые преобразования плюс сдвиги. С этого момента матрицы поворота, отражения и растяжения перестали быть учебными примерами и стали способом задавать саму геометрию. Компьютерная графика, где каждая трансформация объекта — это матрица $4 \times 4$ в однородных координатах, выросла ровно из этой идеи.
Что такое линейное преобразование
Интуиция: отображение, которое уважает структуру
В векторном пространстве есть ровно две операции: сложение векторов и умножение вектора на число. Больше ничего — ни умножения векторов друг на друга, ни деления, ни возведения в степень. Вся структура пространства — это две эти операции.
Теперь представь отображение $T$, которое каждому вектору пространства $V$ ставит в соответствие вектор пространства $W$. Отображений таких бесконечно много, и подавляющее большинство из них — полный хаос: они рвут пространство, скручивают его, отправляют близкие точки в далёкие. Но среди них есть узкий класс тех, кто уважает обе операции: если сначала сложить два вектора, а потом применить отображение, получится ровно то же, что сначала применить отображение к каждому, а потом сложить результаты. И то же самое с умножением на число.
Именно этот класс отображений и называется линейными. Требование звучит скромно, но последствия у него огромные: как только отображение уважает сложение и умножение на число, оно автоматически уважает любую линейную комбинацию, а значит, полностью определяется своим действием на базисе. Пространство может быть бесконечным множеством точек — а информации об отображении хватает конечной: $n$ векторов, куда переехали базисные.
Определение: Пусть $V$ и $W$ — векторные пространства над $\mathbb{R}$. Отображение $T : V \to W$ называется линейным отображением (линейным преобразованием), если для любых векторов $u, v \in V$ и любого числа $\lambda \in \mathbb{R}$ выполняются два условия:
$$T(u + v) = T(u) + T(v) \qquad \text{(аддитивность)},$$$$T(\lambda v) = \lambda\, T(v) \qquad \text{(однородность)}.$$
Если $W = V$, то есть отображение действует из пространства в себя, его чаще называют линейным оператором на $V$.
Обрати внимание на тонкость в первом равенстве. Слева знак «плюс» — это сложение в пространстве $V$, справа — сложение в пространстве $W$. Это могут быть совершенно разные операции: например, слева складываются многочлены, а справа — числовые столбцы. Требование как раз в том, чтобы отображение переводило одно сложение в другое.
Оба условия удобно свести в одно.
Критерий линейности: отображение $T : V \to W$ линейно тогда и только тогда, когда для любых $u, v \in V$ и любых чисел $\alpha, \beta$
$$T(\alpha u + \beta v) = \alpha\, T(u) + \beta\, T(v).$$
Проверять на практике удобнее именно эту форму — она объединяет обе аксиомы в одну выкладку. А по индукции она сразу распространяется на любое число слагаемых:
$$T\left(\sum_{i=1}^{k} \alpha_i v_i\right) = \sum_{i=1}^{k} \alpha_i\, T(v_i).$$Вот эта формула — рабочая лошадь всего урока. Она говорит: линейное отображение проносится сквозь линейную комбинацию.
Первое следствие: ноль переходит в ноль
Простейший, но крайне полезный факт.
Свойство: для любого линейного отображения $T(\mathbf{0}_V) = \mathbf{0}_W$.
Доказательство в одну строку: возьмём в условии однородности $\lambda = 0$. Тогда $T(0 \cdot v) = 0 \cdot T(v)$, то есть $T(\mathbf{0}) = \mathbf{0}$.
Практическая ценность огромна: это быстрый отрицательный тест. Подставь нулевой вектор. Если на выходе не ноль — отображение точно не линейно, и дальше можно не проверять. Тест односторонний: $T(\mathbf{0}) = \mathbf{0}$ ещё ничего не гарантирует (у отображения $T(x, y) = (x^2, y)$ ноль переходит в ноль, а линейности нет).
Второе следствие того же сорта: $T(-v) = -T(v)$ и, шире, $T(u - v) = T(u) - T(v)$. Берётся из однородности при $\lambda = -1$.
Линейное или аффинное: главная ловушка темы
Разберём подробно самый частый источник путаницы — отображение сдвига:
$$T(x) = x + a, \qquad a \ne \mathbf{0}.$$Со школы за таким отображением закрепилось слово «линейное»: график функции $y = kx + b$ — прямая, значит функция линейная. В линейной алгебре это слово занято под другой смысл, и сдвиг под него не подходит.
Проверим по определению. Аддитивность:
$$T(u + v) = (u + v) + a, \qquad T(u) + T(v) = (u + a) + (v + a) = u + v + 2a.$$Эти два выражения равны только при $a = \mathbf{0}$. Однородность рушится так же: $T(\lambda v) = \lambda v + a$, а $\lambda T(v) = \lambda v + \lambda a$. И самая быстрая проверка: $T(\mathbf{0}) = a \ne \mathbf{0}$.
Определение: отображение вида $F(x) = T(x) + b$, где $T$ линейно, а $b$ — фиксированный вектор, называется аффинным. При $b = \mathbf{0}$ аффинное отображение становится линейным; при $b \ne \mathbf{0}$ — нет.
Разница геометрическая и очень наглядная. Линейное отображение обязано оставлять начало координат на месте. Аффинное может весь мир сдвинуть в сторону. Прямая $y = 2x$ задаёт линейное отображение $\mathbb{R} \to \mathbb{R}$; прямая $y = 2x + 3$ — аффинное, но не линейное. Именно поэтому в школе «линейная функция» — это $y = kx + b$, а в линейной алгебре линейными являются только $y = kx$.
Различие не педантичное. Полносвязный слой нейросети nn.Linear(in, out) вычисляет $Wx + b$ — то есть по строгой терминологии он аффинный, а не линейный, и именно поэтому в документации PyTorch есть отдельный флаг bias=False, превращающий слой в честно линейный. К этому мы ещё вернёмся.
Разбор примеров
Пример 1. Отображение $T(x, y) = (2x - y,\; x + 3y)$ из $\mathbb{R}^2$ в $\mathbb{R}^2$.
Проверяем критерий на произвольной комбинации. Пусть $u = (u_1, u_2)$, $v = (v_1, v_2)$, тогда $\alpha u + \beta v = (\alpha u_1 + \beta v_1,\; \alpha u_2 + \beta v_2)$ и
$$T(\alpha u + \beta v) = \big(2(\alpha u_1 + \beta v_1) - (\alpha u_2 + \beta v_2),\; (\alpha u_1 + \beta v_1) + 3(\alpha u_2 + \beta v_2)\big).$$Раскроем скобки и сгруппируем по $\alpha$ и по $\beta$:
$$= \alpha\,(2u_1 - u_2,\; u_1 + 3u_2) + \beta\,(2v_1 - v_2,\; v_1 + 3v_2) = \alpha\,T(u) + \beta\,T(v).$$Совпало. Отображение линейно.
Общий вывод, который стоит запомнить сразу: любое отображение, у которого каждая координата результата — однородный многочлен первой степени от координат аргумента (без свободных членов и без произведений переменных), линейно. Проверка выше проходит слово в слово для любого такого отображения.
Пример 2. Отображение $T(x, y) = (x + y + 1,\; y)$.
Быстрый тест: $T(0, 0) = (1, 0) \ne (0, 0)$. Не линейно. Это аффинное отображение: $T(x,y) = (x+y,\, y) + (1, 0)$, линейная часть плюс сдвиг на вектор $(1,0)$.
Пример 3. Отображение $T(x, y) = (x^2,\; y)$.
Ноль переходит в ноль, тест ничего не дал — проверяем однородность. Возьмём $v = (1, 0)$ и $\lambda = 3$:
$$T(3v) = T(3, 0) = (9, 0), \qquad 3\,T(v) = 3\,(1, 0) = (3, 0).$$$(9,0) \ne (3,0)$ — однородность нарушена, отображение не линейно. Причина понятна: возведение в квадрат вытаскивает из $\lambda$ квадрат, $ (\lambda x)^2 = \lambda^2 x^2$, а требовалась первая степень.
Пример 4. Отображение $T(x) = |x|$ из $\mathbb{R}$ в $\mathbb{R}$.
Тест на ноль пройден: $|0| = 0$. Аддитивность тоже иногда выполняется — например, для двух положительных чисел. Но возьмём $u = 3$, $v = -3$:
$$T(u + v) = |0| = 0, \qquad T(u) + T(v) = 3 + 3 = 6.$$Не совпало. Однородность нарушается при отрицательном множителе: $T(-1 \cdot 5) = 5$, а $-1 \cdot T(5) = -5$. Модуль не линеен, хотя его график и состоит из двух прямых.
Отсюда важная мораль: проверять аддитивность на удачно подобранной паре векторов бессмысленно — нужно либо доказать её в общем виде, либо найти контрпример. Один удачный пример ничего не доказывает.
Пример 5. Транспонирование матриц: $T(X) = X^{T}$ на пространстве $M_{2\times 2}$.
Из свойств транспонирования, разобранных в уроке 157:
$$(X + Y)^{T} = X^{T} + Y^{T}, \qquad (\lambda X)^{T} = \lambda X^{T}.$$Оба условия выполнены дословно — транспонирование является линейным оператором на пространстве матриц. Заметь, что это оператор не над числовыми столбцами, а над матрицами: пространство $M_{2\times2}$ четырёхмерно, и транспонирование — вполне конкретный линейный оператор на нём.
Пример 6. Дифференцирование многочленов: $D(p) = p'$.
Правила из школьного курса: $(p + q)' = p' + q'$ и $(\lambda p)' = \lambda p'$. Это в точности аддитивность и однородность. Дифференцирование — линейный оператор на пространстве многочленов. Если ограничиться многочленами степени не выше $n$, оператор действует из $P_n$ в $P_{n-1}$ (степень падает на единицу) или, если удобнее, из $P_n$ в $P_n$.
Пример 7. Определённый интеграл: $I(p) = \displaystyle\int_0^1 p(t)\,dt$.
Здесь пространство-источник — многочлены, а пространство-приёмник — числа, то есть $\mathbb{R}$ как одномерное векторное пространство. Свойства интеграла:
$$\int_0^1 (p + q)\,dt = \int_0^1 p\,dt + \int_0^1 q\,dt, \qquad \int_0^1 \lambda p\,dt = \lambda\int_0^1 p\,dt.$$Отображение линейно. Линейное отображение в одномерное пространство чисел называют линейным функционалом — это тот же объект, просто с очень маленьким пространством-приёмником.
Пример 8. Возведение матрицы в квадрат: $T(X) = X^2$ на $M_{2\times 2}$.
Ноль в ноль переходит. Но однородность: $T(\lambda X) = (\lambda X)^2 = \lambda^2 X^2 \ne \lambda T(X)$ при $\lambda \ne 0, 1$. Не линеен — по той же причине, что и $x \mapsto x^2$ на числах.
Почему это важно
Линейность — это не украшение, а условие, при котором задача вообще решаема аналитически. Если отображение линейно, знание его на $n$ векторах базиса даёт знание на всём бесконечном пространстве. Для нелинейного отображения такого фокуса нет: чтобы описать $T(x,y) = (x^2, y)$, недостаточно знать образы двух векторов, нужна вся функция целиком.
Отсюда универсальный приём прикладной математики — линеаризация: нелинейное явление заменяют линейным приближением в окрестности точки и решают уже линейную задачу. Производная в анализе, якобиан в многомерном случае, метод Ньютона, фильтр Калмана в его расширенной версии, обратное распространение ошибки в нейросетях — везде на каждом шаге считается линейное приближение, потому что с линейным работать можно, а с общим нелинейным — нет.
И вторая причина. Различение «линейное / аффинное» кажется терминологической придиркой ровно до момента, когда упирается в практику. В нейросети слой с bias и слой без bias ведут себя по-разному: первый может сдвинуть данные, второй нет. При нормализации данных матрица центрирования $x \mapsto x - \bar{x}$ — аффинная, и это влияет на то, что можно и чего нельзя вносить внутрь матричных выкладок. Понимать, где у тебя честный оператор, а где оператор плюс сдвиг, — это про корректность, а не про терминологию.
Матрица линейного оператора
Интуиция: достаточно знать, куда уехал базис
Вот главная мысль всего урока, и она стоит того, чтобы её проговорить медленно.
Пусть в пространстве $V$ выбран базис $e_1, \dots, e_n$. Любой вектор $v \in V$ раскладывается по нему единственным образом (это результат урока 170):
$$v = x_1 e_1 + x_2 e_2 + \dots + x_n e_n.$$Применим к нему линейное отображение и воспользуемся тем, что оно проносится сквозь линейную комбинацию:
$$T(v) = T(x_1 e_1 + \dots + x_n e_n) = x_1 T(e_1) + x_2 T(e_2) + \dots + x_n T(e_n).$$Прочитай эту формулу внимательно. Слева — образ произвольного вектора, коих бесконечно много. Справа — комбинация всего $n$ фиксированных векторов $T(e_1), \dots, T(e_n)$ с коэффициентами, которые есть координаты исходного вектора. То есть:
Теорема: линейное отображение полностью определяется образами базисных векторов. Если $T(e_i) = S(e_i)$ для всех $i = 1, \dots, n$, то $T = S$. Обратно, какие бы $n$ векторов $w_1, \dots, w_n \in W$ ни взять, существует ровно одно линейное отображение с $T(e_i) = w_i$.
Первая часть доказана формулой выше: образ любого вектора выражается через образы базисных, значит совпадение на базисе влечёт совпадение везде. Вторая часть — конструкция: определим $T(v) := x_1 w_1 + \dots + x_n w_n$, где $x_i$ — координаты $v$. Это корректно, потому что координаты определены однозначно, и линейно, потому что координаты вектора $\alpha u + \beta v$ равны $\alpha$-кратным плюс $\beta$-кратным координатам (тоже из урока 170).
Осталось записать эти $n$ векторов компактно. Каждый образ $T(e_j)$ — вектор пространства $W$, у которого тоже есть базис $f_1, \dots, f_m$, значит у образа есть координаты:
$$T(e_j) = a_{1j} f_1 + a_{2j} f_2 + \dots + a_{mj} f_m.$$Составим из этих координатных столбцов матрицу, ставя их по столбцам.
Определение: матрицей линейного отображения $T : V \to W$ в базисах $\{e_j\}$ и $\{f_i\}$ называется матрица $A$ размера $m \times n$, $j$-й столбец которой — координатный столбец вектора $T(e_j)$ в базисе $\{f_i\}$:
$$A = \big(\,[T(e_1)] \ \ [T(e_2)] \ \ \dots \ \ [T(e_n)]\,\big).$$
Главное следствие: если $x$ — координатный столбец вектора $v$, то координатный столбец вектора $T(v)$ равен $Ax$.
Проверим следствие прямым счётом. Координаты $T(v) = \sum_j x_j T(e_j)$ по $i$-му базисному вектору равны $\sum_j x_j a_{ij}$ — а это ровно $i$-я компонента произведения $Ax$. Всё сходится.
Итак, круг замкнулся: умножение матрицы на столбец, которое в уроке 157 было формальным правилом, есть не что иное, как применение линейного оператора к вектору. И теперь понятно, почему столбцы, а не строки: столбец с номером $j$ — это адрес, куда переехал $j$-й базисный вектор.
Мнемоника, которая экономит много времени: чтобы получить $j$-й столбец матрицы, подставь в оператор $j$-й базисный вектор. В стандартном базисе $\mathbb{R}^n$ это буквально «подставь $(1,0,\dots,0)$, потом $(0,1,0,\dots,0)$ и так далее».
Разбор примеров
Пример 1. По действию на базисе — матрица.
Оператор $T$ на $\mathbb{R}^2$ задан так: $T(e_1) = (3, 1)$, $T(e_2) = (-2, 4)$. Найти матрицу и вычислить $T(5, -2)$.
Ставим образы по столбцам:
$$A = \begin{pmatrix} 3 & -2 \\ 1 & 4 \end{pmatrix}.$$Теперь образ произвольного вектора считается умножением:
$$T(5, -2) = A\begin{pmatrix} 5 \\ -2 \end{pmatrix} = \begin{pmatrix} 3\cdot 5 + (-2)\cdot(-2) \\ 1 \cdot 5 + 4 \cdot (-2)\end{pmatrix} = \begin{pmatrix} 19 \\ -3 \end{pmatrix}.$$Сверимся напрямую по определению линейности: $T(5, -2) = 5T(e_1) - 2T(e_2) = 5(3,1) - 2(-2,4) = (15,5) - (-4,8) = (19,-3)$. Совпало.
Пример 2. По матрице — действие.
Дана матрица $A = \begin{pmatrix} 1 & 0 & -1 \\ 0 & 1 & 1 \end{pmatrix}$. Что это за отображение?
Размер $2 \times 3$: три столбца — значит источник трёхмерен, две строки — значит приёмник двумерен. Отображение действует из $\mathbb{R}^3$ в $\mathbb{R}^2$. Читаем столбцы: $T(e_1) = (1,0)$, $T(e_2) = (0,1)$, $T(e_3) = (-1,1)$. Формула:
$$T(x, y, z) = x(1,0) + y(0,1) + z(-1,1) = (x - z,\; y + z).$$Проверка на конкретном векторе: $T(2, -3, 5) = (2 - 5,\; -3 + 5) = (-3, 2)$, и умножение матрицы на столбец $(2,-3,5)^T$ даёт то же самое.
Заодно посмотрим на структуру. Ранг матрицы равен 2 (первые два столбца уже независимы), значит образ — вся плоскость $\mathbb{R}^2$. Ядро одномерно, и ФСР даёт вектор $(1, -1, 1)$: действительно, $T(1,-1,1) = (1 - 1,\; -1 + 1) = (0,0)$. Оператор давит трёхмерное пространство в двумерное, теряя одно направление.
Пример 3. Дифференцирование многочленов.
Возьмём пространство $P_3$ многочленов степени не выше 3 с базисом $1,\ t,\ t^2,\ t^3$ (он четырёхмерен) и оператор $D(p) = p'$. Смотрим, куда едет базис:
$$D(1) = 0, \qquad D(t) = 1, \qquad D(t^2) = 2t, \qquad D(t^3) = 3t^2.$$Записываем координаты образов в том же базисе $(1, t, t^2, t^3)$ и ставим столбцами:
$$A_D = \begin{pmatrix} 0 & 1 & 0 & 0 \\ 0 & 0 & 2 & 0 \\ 0 & 0 & 0 & 3 \\ 0 & 0 & 0 & 0 \end{pmatrix}.$$Проверим на многочлене $p = 5 - 2t + 4t^2 + t^3$, координаты $(5, -2, 4, 1)$:
$$A_D \begin{pmatrix} 5 \\ -2 \\ 4 \\ 1 \end{pmatrix} = \begin{pmatrix} -2 \\ 8 \\ 3 \\ 0 \end{pmatrix},$$то есть $-2 + 8t + 3t^2$. Дифференцируем вручную: $p' = -2 + 8t + 3t^2$. Совпало.
Матрица получилась с нулевой последней строкой и нулевым первым столбцом — и то и другое содержательно. Нулевой первый столбец: константа переходит в ноль, значит константы лежат в ядре. Нулевая последняя строка: в образе не бывает члена с $t^3$, производная понижает степень. Ранг матрицы равен 3, дефект 1 — и сумма даёт 4, размерность $P_3$. Это первое появление теоремы, которую мы докажем чуть позже.
Пример 4. Интегрирование как оператор в другое пространство.
Оператор $J : P_2 \to P_3$, $J(p)(t) = \int_0^{t} p(s)\,ds$. Базис источника $1, t, t^2$; базис приёмника $1, t, t^2, t^3$.
$$J(1) = t, \qquad J(t) = \tfrac{t^2}{2}, \qquad J(t^2) = \tfrac{t^3}{3}.$$Матрица размера $4 \times 3$:
$$A_J = \begin{pmatrix} 0 & 0 & 0 \\ 1 & 0 & 0 \\ 0 & \tfrac12 & 0 \\ 0 & 0 & \tfrac13 \end{pmatrix}.$$Проверка на $p = 3 - 6t + 3t^2$ с координатами $(3, -6, 3)$: умножение даёт столбец $(0, 3, -3, 1)$, то есть многочлен $3t - 3t^2 + t^3$. Прямое интегрирование: $\int_0^t (3 - 6s + 3s^2)ds = 3t - 3t^2 + t^3$. Сходится.
Здесь ранг равен 3 (столбцы независимы), ядро пусто: единственный многочлен, у которого первообразная с нулевой константой тождественно нулевая, — сам нуль. Оператор $J$ ничего не теряет, но и не покрывает весь $P_3$: в образе нет ни одного многочлена с ненулевым свободным членом. Полезный контраст с примером 3: интегрирование инъективно и не сюръективно, дифференцирование наоборот.
Пример 5. Обратное чтение: матрица перестановки координат.
Дана матрица $A = \begin{pmatrix} 0 & 0 & 1 \\ 0 & 1 & 0 \\ 1 & 0 & 0 \end{pmatrix}$ на $\mathbb{R}^3$. Столбцы: $T(e_1) = e_3$, $T(e_2) = e_2$, $T(e_3) = e_1$. Значит, оператор меняет местами первую и третью координаты, оставляя вторую: $T(x,y,z) = (z, y, x)$.
Определитель такой матрицы равен $-1$ (одна транспозиция строк единичной матрицы). Оператор обратим, причём обратен сам себе: применив перестановку дважды, вернёшься в исходное состояние, $A^2 = E$. Геометрически это отражение пространства относительно плоскости $x = z$.
Почему это важно
Три практических вывода.
Первый. Абстрактные операторы над многочленами, матрицами и функциями сводятся к обычным числовым матрицам, как только выбран базис. Задача «найти ядро оператора дифференцирования на $P_3$» после перевода в координаты становится задачей «найти ядро матрицы $4\times4$», а это мы умеем с урока 167. Никакой новой техники не требуется — требуется только аккуратно выбрать базис и записать образы.
Второй. Размер матрицы теперь читается содержательно. Матрица $m \times n$ — это оператор из $n$-мерного пространства в $m$-мерное. Число столбцов = размерность источника, число строк = размерность приёмника. Правило «число столбцов первой матрицы должно совпадать с числом строк второй» при умножении перестаёт быть произвольным: оно означает, что приёмник первого оператора должен совпадать с источником второго, иначе композиция не определена.
Третий, самый прикладной. В машинном обучении данные — это координаты, а слои — это матрицы. Когда в PyTorch пишут nn.Linear(768, 3072), создаётся матрица размера $3072 \times 768$: оператор из 768-мерного пространства в 3072-мерное. Всё, что мы дальше скажем про ядро, образ и ранг, буквально применимо к весам слоя — и мы этим воспользуемся в конце урока.
Геометрия плоскости: зоопарк операторов
Интуиция: смотри на единичный квадрат
Любой оператор на $\mathbb{R}^2$ полностью описывается двумя векторами: куда уехал $e_1 = (1,0)$ и куда уехал $e_2 = (0,1)$. Нарисуй единичный квадрат, построенный на этих векторах, — и посмотри, во что он превратился. Квадрат перешёл в параллелограмм со сторонами $T(e_1)$ и $T(e_2)$, и по этому параллелограмму читается всё: и растяжения, и повороты, и схлопывание.
Площадь этого параллелограмма — это в точности $|\det A|$ (свойство определителя из урока 158). Поэтому определитель у нас теперь не абстрактное число, а коэффициент изменения площади. И его знак тоже содержателен: положительный означает, что ориентация сохранилась (обход против часовой стрелки остался обходом против часовой стрелки), отрицательный — что ориентация перевернулась, как в зеркале.
Поворот на угол $\varphi$
Выведем матрицу. Вектор $e_1 = (1,0)$ имеет длину 1 и направлен под углом 0. После поворота на угол $\varphi$ против часовой стрелки его длина не изменится, а угол станет равен $\varphi$, значит новые координаты — $(\cos\varphi,\ \sin\varphi)$.
Вектор $e_2 = (0,1)$ направлен под углом $90^\circ$. После поворота его угол станет $\varphi + 90^\circ$, и координаты равны
$$(\cos(\varphi + 90^\circ),\ \sin(\varphi + 90^\circ)) = (-\sin\varphi,\ \cos\varphi)$$по формулам приведения. Ставим оба образа столбцами:
$$R_\varphi = \begin{pmatrix} \cos\varphi & -\sin\varphi \\ \sin\varphi & \cos\varphi \end{pmatrix}.$$Определитель: $\cos^2\varphi + \sin^2\varphi = 1$. Площадь сохраняется, ориентация тоже — ровно то, чего ждёшь от поворота. Оператор обратим, и обратный к нему — поворот на $-\varphi$:
$$R_\varphi^{-1} = R_{-\varphi} = \begin{pmatrix} \cos\varphi & \sin\varphi \\ -\sin\varphi & \cos\varphi \end{pmatrix} = R_\varphi^{T}.$$Пример. Повернём вектор $(1,1)$ на $45^\circ$. Подставляем $\cos 45^\circ = \sin 45^\circ = \tfrac{\sqrt2}{2}$:
$$\begin{pmatrix} \tfrac{\sqrt2}{2} & -\tfrac{\sqrt2}{2} \\[2pt] \tfrac{\sqrt2}{2} & \tfrac{\sqrt2}{2} \end{pmatrix}\begin{pmatrix} 1 \\ 1 \end{pmatrix} = \begin{pmatrix} 0 \\ \sqrt2 \end{pmatrix}.$$Вектор $(1,1)$ смотрел под углом $45^\circ$ и имел длину $\sqrt2$; после поворота на $45^\circ$ он должен смотреть строго вверх и сохранить длину — то есть стать $(0, \sqrt2)$. Именно это и получилось.
Отражение относительно прямой
Пусть прямая проходит через начало координат под углом $\alpha$ к оси $Ox$. При отражении вектор, смотрящий под углом $\theta$, переходит в вектор, смотрящий под углом $2\alpha - \theta$ (прямая — «зеркало», угол падения равен углу отражения), длина не меняется.
Для $e_1$: $\theta = 0$, новый угол $2\alpha$, координаты $(\cos 2\alpha,\ \sin 2\alpha)$. Для $e_2$: $\theta = 90^\circ$, новый угол $2\alpha - 90^\circ$, координаты $(\cos(2\alpha - 90^\circ),\ \sin(2\alpha - 90^\circ)) = (\sin 2\alpha,\ -\cos 2\alpha)$.
$$S_\alpha = \begin{pmatrix} \cos 2\alpha & \sin 2\alpha \\ \sin 2\alpha & -\cos 2\alpha \end{pmatrix}, \qquad \det S_\alpha = -\cos^2 2\alpha - \sin^2 2\alpha = -1.$$Определитель равен $-1$: площадь сохраняется, ориентация переворачивается. Это и есть математический смысл слова «зеркально». Оператор обратим, и обратный к нему — он сам: отразив дважды, вернёшься назад, $S_\alpha^2 = E$.
Частные случаи, которые стоит помнить наизусть:
-
$\alpha = 0$ (отражение относительно оси $Ox$): $\begin{pmatrix} 1 & 0 \\ 0 & -1\end{pmatrix}$
-
$\alpha = 90^\circ$ (относительно оси $Oy$): $\begin{pmatrix} -1 & 0 \\ 0 & 1\end{pmatrix}$
-
$\alpha = 45^\circ$ (относительно прямой $y = x$): $\begin{pmatrix} 0 & 1 \\ 1 & 0\end{pmatrix}$ — просто меняет координаты местами
Пример. Отражение относительно прямой под углом $60^\circ$. Тогда $2\alpha = 120^\circ$, $\cos 120^\circ = -\tfrac12$, $\sin 120^\circ = \tfrac{\sqrt3}{2}$:
$$S_{60^\circ} = \begin{pmatrix} -\tfrac12 & \tfrac{\sqrt3}{2} \\[2pt] \tfrac{\sqrt3}{2} & \tfrac12 \end{pmatrix}.$$Применим к $e_1 = (1,0)$: получаем $(-\tfrac12,\ \tfrac{\sqrt3}{2})$ — вектор длины 1 под углом $120^\circ$. Ось $Ox$ смотрит под углом 0, зеркало под углом 60, отражение должно оказаться под углом 120. Сходится.
Растяжение и сжатие вдоль осей
$$K = \begin{pmatrix} k_1 & 0 \\ 0 & k_2 \end{pmatrix}, \qquad T(x,y) = (k_1 x,\ k_2 y), \qquad \det K = k_1 k_2.$$Каждая ось масштабируется независимо. При $k_1 = k_2 = k$ получается гомотетия (равномерное масштабирование) с матрицей $kE$ и определителем $k^2$. При $k = -1$ гомотетия становится центральной симметрией, она же поворот на $180^\circ$.
Оператор обратим тогда и только тогда, когда оба коэффициента ненулевые; обратная матрица — $\operatorname{diag}(1/k_1,\ 1/k_2)$.
Отдельно любопытный случай: $k_1 = 2$, $k_2 = \tfrac12$. Определитель равен 1, площадь сохраняется — но фигура при этом деформируется сильно, круг превращается в вытянутый эллипс. Полезное напоминание: сохранение площади не означает сохранения формы.
Проекция на прямую
Спроецируем плоскость на прямую, проходящую через начало координат под углом $\alpha$ (проекция вдоль перпендикулярного направления — то есть каждая точка едет к прямой по кратчайшему пути). Образ вектора $e_1$ — точка на прямой на расстоянии $\cos\alpha$ от начала, то есть вектор $\cos\alpha \cdot (\cos\alpha, \sin\alpha)$. Аналогично для $e_2$ получается $\sin\alpha \cdot (\cos\alpha, \sin\alpha)$:
$$P_\alpha = \begin{pmatrix} \cos^2\alpha & \cos\alpha\sin\alpha \\ \cos\alpha\sin\alpha & \sin^2\alpha \end{pmatrix}, \qquad \det P_\alpha = \cos^2\alpha\sin^2\alpha - \cos^2\alpha\sin^2\alpha = 0.$$Определитель нулевой: вся плоскость схлопывается в прямую, площадь любой фигуры становится нулевой. Оператор необратим — по образу невозможно восстановить прообраз, потому что в каждую точку прямой попадает целая перпендикулярная прямая точек.
Пример. Проекция на прямую $y = 2x$. Здесь $\tan\alpha = 2$, значит $\cos^2\alpha = \tfrac15$, $\sin^2\alpha = \tfrac45$, $\cos\alpha\sin\alpha = \tfrac25$:
$$P = \frac15\begin{pmatrix} 1 & 2 \\ 2 & 4 \end{pmatrix}.$$Проверим: $P(5, 0) = \tfrac15 (5,\ 10) = (1, 2)$ — точка на прямой $y = 2x$, всё верно. $P(3,4) = \tfrac15(3 + 8,\ 6+16) = (\tfrac{11}{5}, \tfrac{22}{5})$ — снова на прямой.
Ранг матрицы равен 1, ядро одномерно: решая $Pv = 0$, получаем $v = t(-2, 1)$. Направление $(-2,1)$ перпендикулярно прямой $y = 2x$ — это ровно то направление, вдоль которого точки едут к прямой и там сливаются. Именно оно и «съедается» проекцией.
И ещё одно характеристическое свойство: $P^2 = P$. Спроецировав дважды, ничего нового не получишь, точка уже на прямой. Операторы с таким свойством называются проекторами.
Сдвиг (shear)
$$H_k = \begin{pmatrix} 1 & k \\ 0 & 1 \end{pmatrix}, \qquad T(x,y) = (x + ky,\ y), \qquad \det H_k = 1.$$Каждая горизонтальная прямая сдвигается вдоль себя на величину, пропорциональную высоте: ось $Ox$ ($y=0$) остаётся на месте, прямая $y = 1$ уезжает на $k$, прямая $y = 2$ — на $2k$. Квадрат превращается в параллелограмм той же высоты и того же основания, поэтому площадь не меняется, а форма — очень даже.
Пример при $k = 3$: $T(2, 1) = (2 + 3, 1) = (5, 1)$, а $T(2, 0) = (2, 0)$ — точка на оси не сдвинулась. Обратный оператор — сдвиг в другую сторону: $H_3^{-1} = H_{-3} = \begin{pmatrix} 1 & -3 \\ 0 & 1\end{pmatrix}$.
Именно так получают наклонное (oblique) начертание шрифта: символы прямого начертания подвергают сдвигу примерно на $8$–$12^\circ$. Настоящий курсив (italic) — это отдельно нарисованная гарнитура, а не сдвиг.
Тождественный и нулевой операторы
Два вырожденных случая, но упомянуть их надо, потому что они постоянно всплывают в формулировках.
Тождественный оператор $\operatorname{id}(v) = v$ имеет матрицу $E$ (единичную) в любом базисе, определитель 1, обратим, ничего не делает.
Нулевой оператор $O(v) = \mathbf{0}$ имеет нулевую матрицу, определитель 0 (при $n \ge 1$), необратим, схлопывает всё пространство в точку. Его ядро — всё пространство, образ — нулевое подпространство.
Сводная таблица
| Оператор | Матрица | $\det$ | Что с площадью | Обратим? |
|---|---|---|---|---|
| Поворот на $\varphi$ | $\begin{pmatrix} \cos\varphi & -\sin\varphi \\ \sin\varphi & \cos\varphi\end{pmatrix}$ | $1$ | сохраняется | да, $R_{-\varphi}$ |
| Отражение относительно прямой | $\begin{pmatrix} \cos2\alpha & \sin2\alpha \\ \sin2\alpha & -\cos2\alpha\end{pmatrix}$ | $-1$ | сохраняется, ориентация меняется | да, он сам |
| Растяжение по осям | $\operatorname{diag}(k_1, k_2)$ | $k_1k_2$ | умножается на $k_1k_2$ | при $k_1k_2 \ne 0$ |
| Гомотетия | $kE$ | $k^2$ | умножается на $k^2$ | при $k \ne 0$ |
| Проекция на прямую | $\begin{pmatrix} \cos^2\alpha & \cos\alpha\sin\alpha \\ \cos\alpha\sin\alpha & \sin^2\alpha\end{pmatrix}$ | $0$ | обнуляется | нет |
| Сдвиг | $\begin{pmatrix} 1 & k \\ 0 & 1\end{pmatrix}$ | $1$ | сохраняется | да, $H_{-k}$ |
| Тождественный | $E$ | $1$ | сохраняется | да |
| Нулевой | $O$ | $0$ | обнуляется | нет |
Почему это важно
Таблица выше — это словарь перевода между геометрией и арифметикой. Увидев матрицу $\begin{pmatrix} 0 & 1 \\ 1 & 0\end{pmatrix}$, ты теперь не считаешь произведения, а сразу говоришь: «отражение относительно $y = x$». Увидев нулевой определитель — сразу говоришь: «схлопывание, необратимо, ядро непусто». Это экономит время на экзамене и, что важнее, даёт способ проверять свои вычисления на здравый смысл: если после поворота длина вектора изменилась, значит где-то арифметическая ошибка.
Прикладная сторона ещё прямее. В компьютерной графике объект хранится как набор координат вершин, а каждая трансформация — поворот камеры, масштабирование модели, зеркальное отражение — реализуется умножением на матрицу из этой таблицы. В аугментациях изображений для нейросетей RandomRotation, RandomHorizontalFlip и RandomResizedCrop — это ровно поворот, отражение и растяжение, применённые к координатной сетке пикселей. В физике деформация упругого тела в линейном приближении описывается матрицей $2\times2$ или $3\times3$, где симметричная часть даёт растяжение, а нулевой определитель означал бы схлопывание материала в плоскость.
Композиция операторов и произведение матриц
Интуиция: сделай одно, потом другое
Пусть есть два оператора: $T$ переводит пространство $U$ в $V$, а $S$ переводит $V$ в $W$. Применим сначала $T$, потом $S$. Получится отображение $U \to W$, которое обозначают $S \circ T$ или просто $ST$ и называют композицией:
$$(S \circ T)(v) = S\big(T(v)\big).$$Порядок записи сразу вызывает вопрос: почему первым применяется правый оператор? Причина чисто нотационная: аргумент пишется справа, и оператор, стоящий к нему ближе, срабатывает раньше. Читается справа налево, как вложенные скобки в коде.
Первое, что надо проверить: композиция линейных отображений сама линейна.
$$(ST)(\alpha u + \beta v) = S\big(T(\alpha u + \beta v)\big) = S\big(\alpha T(u) + \beta T(v)\big) = \alpha S(T(u)) + \beta S(T(v)) = \alpha (ST)(u) + \beta (ST)(v).$$Первый шаг — линейность $T$, второй — линейность $S$. Композиция линейна.
Почему умножение матриц устроено именно так
Теперь главный сюжет раздела. С урока 157 у тебя висит вопрос: почему произведение матриц определяется через «строку на столбец», а не поэлементно, как сложение? Поэлементное умножение выглядело бы куда естественнее. Ответ: потому что произведение матриц — это матрица композиции, и никакого выбора тут нет.
Пусть в пространствах выбраны базисы, $T$ имеет матрицу $B$ (размера $p \times n$), а $S$ — матрицу $A$ (размера $m \times p$). Найдём матрицу композиции. По правилу «столбец матрицы = образ базисного вектора» нужно посчитать $(ST)(e_j) = S\big(T(e_j)\big)$.
Вектор $T(e_j)$ — это $j$-й столбец матрицы $B$, то есть $T(e_j) = \sum_{k=1}^{p} b_{kj} f_k$, где $f_k$ — базис среднего пространства. Применяем $S$ и пользуемся линейностью:
$$S\big(T(e_j)\big) = S\left(\sum_{k=1}^{p} b_{kj} f_k\right) = \sum_{k=1}^{p} b_{kj}\, S(f_k).$$А $S(f_k)$ — это $k$-й столбец матрицы $A$, у него $i$-я координата равна $a_{ik}$. Значит, $i$-я координата вектора $(ST)(e_j)$ равна
$$\sum_{k=1}^{p} a_{ik}\, b_{kj}.$$Это и есть элемент $(i,j)$ произведения $AB$ по правилу «строка на столбец». Формула не придумана — она вычислена. Индекс $k$ бежит по размерности промежуточного пространства, поэтому число столбцов $A$ обязано совпадать с числом строк $B$: иначе композиция просто не определена, приёмник первого оператора не совпадает с источником второго.
Теорема: матрица композиции равна произведению матриц: $[S \circ T] = [S]\cdot[T]$.
Из этой теоремы всё остальное сыплется как следствия.
Ассоциативность $(AB)C = A(BC)$ — потому что композиция функций ассоциативна тождественно: «сначала $C$, потом $B$, потом $A$» — одна и та же последовательность действий, как её ни скобкуй. Доказательство через суммы с индексами — просто арифметическая проверка того, что и так очевидно на уровне смысла.
Мультипликативность определителя $\det(AB) = \det A \cdot \det B$ — потому что определитель есть коэффициент изменения объёма. Применили $B$: объём умножился на $\det B$. Применили $A$: умножился ещё на $\det A$. Итог — произведение коэффициентов.
Некоммутативность $AB \ne BA$ — потому что порядок действий в жизни имеет значение. Об этом отдельно.
Некоммутативность: смотрим глазами
Возьмём два оператора на плоскости:
$$R = \begin{pmatrix} 0 & -1 \\ 1 & 0 \end{pmatrix} \ \ (\text{поворот на } 90^\circ), \qquad S = \begin{pmatrix} 1 & 0 \\ 0 & -1 \end{pmatrix} \ \ (\text{отражение относительно } Ox).$$Посчитаем оба произведения.
$$SR = \begin{pmatrix} 1 & 0 \\ 0 & -1 \end{pmatrix}\begin{pmatrix} 0 & -1 \\ 1 & 0 \end{pmatrix} = \begin{pmatrix} 0 & -1 \\ -1 & 0 \end{pmatrix}, \qquad RS = \begin{pmatrix} 0 & -1 \\ 1 & 0 \end{pmatrix}\begin{pmatrix} 1 & 0 \\ 0 & -1 \end{pmatrix} = \begin{pmatrix} 0 & 1 \\ 1 & 0 \end{pmatrix}.$$Матрицы разные. Теперь посмотрим, что это за операторы, по формуле отражения $S_\alpha$. Матрица $\begin{pmatrix} 0 & -1 \\ -1 & 0\end{pmatrix}$ отвечает $\cos2\alpha = 0$, $\sin2\alpha = -1$, то есть $2\alpha = 270^\circ$, $\alpha = 135^\circ$ — это отражение относительно прямой $y = -x$. А $\begin{pmatrix} 0 & 1 \\ 1 & 0\end{pmatrix}$ — отражение относительно $y = x$.
Проследим за точкой $(1, 0)$ по шагам.
Путь «сначала повернуть, потом отразить» ($SR$): поворот на $90^\circ$ переводит $(1,0)$ в $(0,1)$, отражение относительно $Ox$ переводит $(0,1)$ в $(0,-1)$. Итог: $(0,-1)$.
Путь «сначала отразить, потом повернуть» ($RS$): отражение относительно $Ox$ оставляет $(1,0)$ на месте, поворот на $90^\circ$ переводит его в $(0,1)$. Итог: $(0,1)$.
Результаты противоположны. Причина ясна: во втором случае поворот применяется к уже отражённой картинке, и «против часовой стрелки» в зеркальном мире выглядит как «по часовой» в исходном. Отражение переворачивает ориентацию, и поворот, выполненный после него, крутит в другую сторону относительно исходной сцены.
Это ровно то, что происходит с реальными объектами. Поверни книгу на $90^\circ$, потом переверни её обложкой вниз — и переверни сначала, а поверни потом. Получатся разные положения. Некоммутативность матриц не дефект определения, а честное отражение того, что порядок операций в мире имеет значение.
Когда операторы всё-таки коммутируют
Не всегда порядок важен, и полезно знать типичные случаи.
Два поворота коммутируют. Проверим прямым перемножением:
$$R_\alpha R_\beta = \begin{pmatrix} \cos\alpha & -\sin\alpha \\ \sin\alpha & \cos\alpha\end{pmatrix}\begin{pmatrix} \cos\beta & -\sin\beta \\ \sin\beta & \cos\beta\end{pmatrix} = \begin{pmatrix} \cos\alpha\cos\beta - \sin\alpha\sin\beta & -(\cos\alpha\sin\beta + \sin\alpha\cos\beta) \\ \sin\alpha\cos\beta + \cos\alpha\sin\beta & \cos\alpha\cos\beta - \sin\alpha\sin\beta \end{pmatrix}.$$Внутри клеток стоят формулы косинуса и синуса суммы:
$$R_\alpha R_\beta = \begin{pmatrix} \cos(\alpha+\beta) & -\sin(\alpha+\beta) \\ \sin(\alpha+\beta) & \cos(\alpha+\beta)\end{pmatrix} = R_{\alpha+\beta}.$$Результат симметричен по $\alpha$ и $\beta$, значит $R_\alpha R_\beta = R_\beta R_\alpha$. Побочный бонус: тригонометрические формулы сложения углов выпали из матричного умножения сами собой — это стандартный способ их запоминать.
Гомотетия коммутирует со всем. Матрица $kE$ при умножении на любую $A$ даёт $kA$ с обеих сторон.
Проектор коммутирует сам с собой особым образом: $P^2 = P$, и вообще $P^n = P$ при $n \ge 1$.
А вот поворот и растяжение вдоль осей, вообще говоря, не коммутируют: «растянуть по горизонтали, потом повернуть» и «повернуть, потом растянуть по горизонтали» дают разные эллипсы.
Разбор примеров
Пример 1. Проекция после проекции.
Возьмём $P$ — проекцию на ось $Ox$, матрица $\begin{pmatrix} 1 & 0 \\ 0 & 0\end{pmatrix}$. Тогда
$$P^2 = \begin{pmatrix} 1 & 0 \\ 0 & 0\end{pmatrix}\begin{pmatrix} 1 & 0 \\ 0 & 0\end{pmatrix} = \begin{pmatrix} 1 & 0 \\ 0 & 0\end{pmatrix} = P.$$Смысл: точка, уже лежащая на оси, при повторной проекции никуда не сдвинется. Так ведёт себя любой проектор.
Пример 2. Отражение после отражения — это поворот.
Отразим относительно оси $Ox$ ($\alpha = 0$), затем относительно прямой $y = x$ ($\alpha = 45^\circ$):
$$S_{45^\circ} S_{0} = \begin{pmatrix} 0 & 1 \\ 1 & 0\end{pmatrix}\begin{pmatrix} 1 & 0 \\ 0 & -1\end{pmatrix} = \begin{pmatrix} 0 & -1 \\ 1 & 0\end{pmatrix} = R_{90^\circ}.$$Композиция двух отражений даёт поворот на удвоенный угол между зеркалами ($45^\circ \cdot 2 = 90^\circ$). Проверка определителем: $(-1)\cdot(-1) = 1$ — ориентация восстановилась, значит это точно не отражение, а поворот. Этот факт лежит в основе классификации движений плоскости.
Пример 3. Дифференцирование дважды.
Для оператора $D$ на $P_3$ с матрицей из предыдущего раздела:
$$A_D^2 = \begin{pmatrix} 0 & 1 & 0 & 0 \\ 0 & 0 & 2 & 0 \\ 0 & 0 & 0 & 3 \\ 0 & 0 & 0 & 0 \end{pmatrix}^2 = \begin{pmatrix} 0 & 0 & 2 & 0 \\ 0 & 0 & 0 & 6 \\ 0 & 0 & 0 & 0 \\ 0 & 0 & 0 & 0 \end{pmatrix}.$$Это матрица второй производной: $t^2 \mapsto 2$, $t^3 \mapsto 6t$. Ранг упал с 3 до 2. Если продолжить, $A_D^4 = O$ — четвёртая производная кубического многочлена тождественно нулевая. Операторы, некоторая степень которых равна нулю, называются нильпотентными, и дифференцирование на пространстве многочленов ограниченной степени — их главный пример.
Почему это важно
Для нейросетей это буквально устройство прямого прохода. Сеть из нескольких полносвязных слоёв — это композиция операторов, и если между ними нет нелинейности, композиция схлопывается в один оператор с матрицей-произведением. Никакой глубины не остаётся: три слоя $W_3W_2W_1x$ — это то же самое, что один слой с матрицей $W = W_3W_2W_1$. Мы посчитаем это на настоящих числах в ML-разделе, и это самый убедительный ответ на вопрос «зачем нужны функции активации».
Для компьютерной графики это техника оптимизации: вместо того чтобы применять к каждой из миллиона вершин пять преобразований подряд, перемножают пять матриц $4\times4$ один раз и применяют к вершинам одну итоговую матрицу. Экономия — в пять раз меньше операций, и она бесплатна благодаря ассоциативности.
Ядро и образ оператора
Интуиция: что теряется и что остаётся
У оператора есть две естественные «характеристики здоровья».
Первая: что он уничтожает. Проекция на прямую схлопывает целое направление в точку — эти векторы после применения оператора неразличимы от нуля, информация о них потеряна безвозвратно. Множество таких векторов называется ядром.
Вторая: что он покрывает. Та же проекция, сколько её ни применяй к разным векторам, никогда не выдаст результат вне прямой. Множество всех достижимых результатов называется образом.
Ядро измеряет потерю, образ измеряет достижение. Дальше выяснится, что эти две величины жёстко связаны: сумма их размерностей равна размерности источника.
Определение: ядром линейного отображения $T : V \to W$ называется множество векторов, переходящих в нуль:
$$\ker T = \{\, v \in V : T(v) = \mathbf{0} \,\}.$$Образом называется множество всех значений отображения:
$$\operatorname{im} T = \{\, w \in W : \exists\, v \in V,\ T(v) = w \,\} = \{\, T(v) : v \in V \,\}.$$
Ядро живёт в источнике $V$, образ — в приёмнике $W$. Путать их местами — самая частая ошибка в теме, и по размерностям она сразу видна: если оператор действует из $\mathbb{R}^5$ в $\mathbb{R}^3$, ядро состоит из пятимерных векторов, а образ — из трёхмерных.
Оба множества — подпространства
Теорема: $\ker T$ — подпространство в $V$, $\operatorname{im} T$ — подпространство в $W$.
Пользуемся критерием подпространства из урока 168: непустота, замкнутость относительно сложения, замкнутость относительно умножения на число.
Ядро. Непусто: $T(\mathbf{0}) = \mathbf{0}$, значит нулевой вектор в ядре лежит. Пусть $u, v \in \ker T$, то есть $T(u) = T(v) = \mathbf{0}$. Тогда
$$T(u + v) = T(u) + T(v) = \mathbf{0} + \mathbf{0} = \mathbf{0},$$значит $u + v \in \ker T$. И для числа $\lambda$:
$$T(\lambda u) = \lambda T(u) = \lambda \cdot \mathbf{0} = \mathbf{0},$$значит $\lambda u \in \ker T$. Все три условия выполнены.
Образ. Непуст: $\mathbf{0} = T(\mathbf{0}) \in \operatorname{im} T$. Пусть $w_1, w_2 \in \operatorname{im} T$, то есть нашлись прообразы: $w_1 = T(v_1)$, $w_2 = T(v_2)$. Тогда
$$w_1 + w_2 = T(v_1) + T(v_2) = T(v_1 + v_2),$$то есть у суммы есть прообраз $v_1 + v_2$, и она лежит в образе. Аналогично $\lambda w_1 = \lambda T(v_1) = T(\lambda v_1) \in \operatorname{im} T$. Доказано.
Заметь, насколько короткие эти доказательства: обе аксиомы линейности использованы ровно по одному разу. Это типично — линейность настолько сильное требование, что многие факты из неё выпадают в две строки.
Ядро оператора — это ядро матрицы
Теперь связка с уроком 167, ради которой всё и затевалось. Пусть оператор задан матрицей $A$ в некотором базисе. Тогда
$$v \in \ker T \iff T(v) = \mathbf{0} \iff Ax = 0,$$где $x$ — координатный столбец вектора $v$. То есть ядро оператора в координатах — это множество решений однородной системы $Ax = 0$, то самое нуль-пространство матрицы, которое мы разбирали в 167.
Отсюда сразу два бесплатных вывода:
-
базис ядра — это фундаментальная система решений системы $Ax = 0$, строится тем же алгоритмом (RREF, свободные переменные, поочерёдная единица);
-
размерность ядра равна $n - \operatorname{rank} A$, где $n$ — число столбцов, оно же размерность источника.
Никакой новой техники учить не надо: задача «найти ядро линейного оператора» полностью сводится к задаче «решить однородную систему».
Образ оператора — это линейная оболочка столбцов
Аналогично разберёмся с образом. Любой вектор образа имеет вид
$$T(v) = x_1 T(e_1) + x_2 T(e_2) + \dots + x_n T(e_n),$$то есть является линейной комбинацией образов базисных векторов. А образы базисных векторов — это столбцы матрицы $A$. Значит,
$$\operatorname{im} T = \operatorname{span}\{\text{столбцы } A\}.$$Это столбцовое пространство матрицы. Его размерность — столбцовый ранг, то есть просто ранг:
$$\dim \operatorname{im} T = \operatorname{rank} A.$$Базис образа получается стандартно: приводим $A$ к ступенчатому виду, смотрим, в каких столбцах стоят ведущие элементы (пивоты), и берём исходные столбцы матрицы с этими номерами. Именно исходные, а не преобразованные: элементарные преобразования строк меняют столбцовое пространство, хотя и сохраняют зависимости между столбцами.
Определение: размерность ядра называется дефектом оператора и обозначается $\operatorname{def} T = \dim \ker T$. Размерность образа называется рангом оператора: $\operatorname{rank} T = \dim \operatorname{im} T$.
Слова «ранг матрицы» и «ранг оператора» теперь означают одно и то же число. Это не совпадение терминов, а тождество: ранг матрицы был определён как максимальное число независимых столбцов, а столбцы — это образы базисных векторов.
Разбор примеров
Пример 1. Оператор на $\mathbb{R}^3$ с матрицей
$$A = \begin{pmatrix} 1 & -1 & 2 \\ 2 & 1 & 1 \\ 3 & 0 & 3 \end{pmatrix}.$$Сначала посмотрим глазами: третья строка равна сумме первых двух. Значит строки зависимы, $\det A = 0$, ранг не больше 2. Первые две строки не пропорциональны, значит ранг ровно 2.
Образ. Ранг 2, значит образ двумерен — это плоскость в $\mathbb{R}^3$. Базис: приводим к ступенчатому виду, пивоты оказываются в столбцах 1 и 2, берём исходные первый и второй столбцы:
$$\operatorname{im} T = \operatorname{span}\left\{ \begin{pmatrix} 1 \\ 2 \\ 3 \end{pmatrix},\ \begin{pmatrix} -1 \\ 1 \\ 0 \end{pmatrix} \right\}, \qquad \operatorname{rank} T = 2.$$Третий столбец обязан выражаться через них: действительно, $\begin{pmatrix} 2 \\ 1 \\ 3\end{pmatrix} = 1\cdot\begin{pmatrix} 1 \\ 2 \\ 3\end{pmatrix} + (-1)\cdot\begin{pmatrix} -1 \\ 1 \\ 0\end{pmatrix}$.
Ядро. Решаем $Ax = 0$. Улучшенный ступенчатый вид матрицы:
$$\operatorname{rref}(A) = \begin{pmatrix} 1 & 0 & 1 \\ 0 & 1 & -1 \\ 0 & 0 & 0 \end{pmatrix}.$$Свободная переменная $x_3$. Из строк: $x_1 = -x_3$, $x_2 = x_3$. Полагая $x_3 = 1$, получаем базисный вектор ядра $(-1, 1, 1)$.
Проверка подстановкой в исходную матрицу: $1\cdot(-1) + (-1)\cdot 1 + 2 \cdot 1 = 0$; $2\cdot(-1) + 1\cdot1 + 1\cdot1 = 0$; $3\cdot(-1) + 0 + 3\cdot 1 = 0$. Всё в нуле.
$$\ker T = \operatorname{span}\left\{(-1, 1, 1)\right\}, \qquad \operatorname{def} T = 1.$$Итог: $\operatorname{def} T + \operatorname{rank} T = 1 + 2 = 3 = \dim \mathbb{R}^3$. Геометрически оператор давит трёхмерное пространство на плоскость, схлопывая одну прямую в точку.
Пример 2. Прямоугольный случай.
$$B = \begin{pmatrix} 1 & 2 & 0 & -1 \\ 2 & 4 & 1 & 0 \\ 0 & 0 & 1 & 2 \end{pmatrix}, \qquad T : \mathbb{R}^4 \to \mathbb{R}^3.$$Приведём к ступенчатому виду. Вычтем из второй строки удвоенную первую: $(0, 0, 1, 2)$. Это совпало с третьей строкой, значит третья после вычитания второй обнулится. Ступенчатый вид:
$$\begin{pmatrix} 1 & 2 & 0 & -1 \\ 0 & 0 & 1 & 2 \\ 0 & 0 & 0 & 0 \end{pmatrix}, \qquad \operatorname{rank} B = 2.$$Пивоты в столбцах 1 и 3, значит
$$\operatorname{im} T = \operatorname{span}\left\{ \begin{pmatrix} 1 \\ 2 \\ 0\end{pmatrix},\ \begin{pmatrix} 0 \\ 1 \\ 1 \end{pmatrix} \right\}.$$Образ — плоскость в $\mathbb{R}^3$, значит оператор не сюръективен: есть векторы в $\mathbb{R}^3$, которые не получаются ни из чего.
Свободные переменные — $x_2$ и $x_4$. Полагая $x_2 = 1, x_4 = 0$: $x_3 = 0$, $x_1 = -2$, вектор $(-2, 1, 0, 0)$. Полагая $x_2 = 0, x_4 = 1$: $x_3 = -2$, $x_1 = 1$, вектор $(1, 0, -2, 1)$.
$$\ker T = \operatorname{span}\{(-2,1,0,0),\ (1,0,-2,1)\}, \qquad \operatorname{def} T = 2.$$Проверка: $2 + 2 = 4 = \dim\mathbb{R}^4$. Оператор из четырёхмерного пространства в трёхмерное, теряющий два измерения и покрывающий два.
Пример 3. Дифференцирование на $P_3$ — снова оно.
Ядро оператора $D(p) = p'$ — это многочлены с нулевой производной, то есть константы: $\ker D = \operatorname{span}\{1\}$, дефект 1. Образ — все многочлены степени не выше 2 (любой такой многочлен есть производная какого-то кубического): $\operatorname{im} D = P_2$, ранг 3. Сумма $1 + 3 = 4 = \dim P_3$.
Обрати внимание, что тот же ответ получается из матрицы $A_D$: её ядро задаётся столбцом $(1,0,0,0)$, что в терминах базиса $1, t, t^2, t^3$ означает многочлен-константу 1. Абстрактное и координатное рассуждения дают один результат — как и должно быть.
Почему это важно
Ядро — это потерянная информация, и это понятие оказывается на удивление прикладным.
В обработке сигналов линейный фильтр с непустым ядром полностью подавляет определённые составляющие сигнала, и восстановить их после фильтрации невозможно в принципе — это не вопрос точности вычислений, а вопрос того, что информации в выходе уже нет.
В машинном обучении сжатие данных в узкое пространство меньшей размерности — это оператор с огромным ядром, и потеря информации там запланирована сознательно: автоэнкодер с горлышком на 32 нейрона, применённый к картинкам $28\times28$, имеет дефект не меньше $784 - 32 = 752$.
В теории систем ядро матрицы наблюдаемости описывает состояния, которые невозможно различить по показаниям датчиков, а ядро матрицы жёсткости конструкции — движения, не вызывающие деформации (то есть перемещения конструкции как твёрдого тела).
Образ, в свою очередь, отвечает на вопрос «что вообще достижимо». Если система $Ax = b$ несовместна, то это ровно потому, что $b \notin \operatorname{im} A$. Теорема Кронекера — Капелли, которую ты знаешь с урока 163, на языке этого урока звучит одной фразой: система совместна тогда и только тогда, когда правая часть лежит в образе оператора.
Теорема о ранге и дефекте
Формулировка
Теорема (о ранге и дефекте). Пусть $T : V \to W$ — линейное отображение, $\dim V = n$ (пространство $V$ конечномерно). Тогда
$$\dim \ker T + \dim \operatorname{im} T = n,$$то есть $\operatorname{def} T + \operatorname{rank} T = \dim V$.
Читается как закон сохранения размерности: сколько измерений пропало плюс сколько выжило равно тому, сколько было. Причём слева стоит размерность подпространства источника, а справа — размерность подпространства приёмника; в равенстве участвует только размерность источника, размерность $W$ в него не входит вовсе.
Интуиция: до доказательства
Представь, что оператор берёт $n$-мерное пространство и «проецирует» его куда-то. Каждое направление источника либо схлопывается в ноль (уходит в ядро), либо выживает и даёт вклад в образ. Третьего не дано: направление не может частично умереть.
На проекции плоскости на прямую это видно буквально. Одно направление (вдоль прямой) выживает и порождает образ, второе (перпендикулярное) схлопывается и образует ядро. $1 + 1 = 2$.
На нулевом операторе: всё схлопывается, ядро — всё пространство, образ нулевой. $n + 0 = n$.
На повороте: ничего не схлопывается, всё выживает. $0 + n = n$.
Строгое доказательство просто аккуратно формализует эту дихотомию.
Доказательство
Пусть $\dim \ker T = k$. Выберем базис ядра $u_1, \dots, u_k$. По теореме о дополнении до базиса (урок 170) этот независимый набор можно дополнить до базиса всего пространства $V$:
$$u_1, \dots, u_k,\ v_1, \dots, v_{n-k}.$$Докажем, что векторы $T(v_1), \dots, T(v_{n-k})$ образуют базис образа. Тогда $\dim \operatorname{im} T = n - k$, и утверждение теоремы получится сложением.
Шаг 1: они порождают образ. Возьмём произвольный элемент образа $w = T(v)$. Разложим $v$ по построенному базису:
$$v = \alpha_1 u_1 + \dots + \alpha_k u_k + \beta_1 v_1 + \dots + \beta_{n-k} v_{n-k}.$$Применим $T$ и вынесем коэффициенты:
$$T(v) = \alpha_1 T(u_1) + \dots + \alpha_k T(u_k) + \beta_1 T(v_1) + \dots + \beta_{n-k} T(v_{n-k}).$$Но $u_i$ лежат в ядре, значит все $T(u_i) = \mathbf{0}$, и первая группа слагаемых исчезает:
$$T(v) = \beta_1 T(v_1) + \dots + \beta_{n-k} T(v_{n-k}).$$Любой элемент образа выражается через $T(v_j)$ — порождение доказано.
Шаг 2: они линейно независимы. Пусть некоторая их комбинация равна нулю:
$$\gamma_1 T(v_1) + \dots + \gamma_{n-k} T(v_{n-k}) = \mathbf{0}.$$Соберём под знак оператора:
$$T\big(\gamma_1 v_1 + \dots + \gamma_{n-k} v_{n-k}\big) = \mathbf{0}.$$Значит вектор $z = \gamma_1 v_1 + \dots + \gamma_{n-k} v_{n-k}$ лежит в ядре. А базис ядра — это $u_1, \dots, u_k$, поэтому $z$ раскладывается по ним:
$$\gamma_1 v_1 + \dots + \gamma_{n-k} v_{n-k} = \delta_1 u_1 + \dots + \delta_k u_k.$$Перенесём всё в одну сторону:
$$\gamma_1 v_1 + \dots + \gamma_{n-k} v_{n-k} - \delta_1 u_1 - \dots - \delta_k u_k = \mathbf{0}.$$Это линейная комбинация векторов $u_1, \dots, u_k, v_1, \dots, v_{n-k}$, равная нулю. Но эти векторы — базис $V$, то есть линейно независимы, значит все коэффициенты нулевые. В частности, $\gamma_1 = \dots = \gamma_{n-k} = 0$. Независимость доказана.
Итого набор $T(v_1), \dots, T(v_{n-k})$ — базис образа, в нём $n-k$ элементов, откуда
$$\dim \operatorname{im} T = n - k = n - \dim\ker T,$$что и требовалось. $\blacksquare$
Обрати внимание, где именно использована линейность: в шаге 1 — чтобы пронести $T$ сквозь комбинацию, в шаге 2 — чтобы собрать комбинацию под знак $T$. Больше нигде.
Связь с уроком 167: это старая теорема в новой одежде
Переведём результат в координаты. Оператор задан матрицей $A$ размера $m \times n$. Тогда $\operatorname{rank} T = \operatorname{rank} A$, а $\ker T$ — множество решений $Ax = 0$. Теорема говорит:
$$\dim\{x : Ax = 0\} = n - \operatorname{rank} A.$$Это в точности утверждение из урока 167 про число векторов в ФСР: их ровно $n - r$. То есть теорема о ранге и дефекте — это тот же факт, только сформулированный без координат. Раньше он выглядел как техническое следствие метода Гаусса («сколько свободных переменных, столько векторов в ФСР»), теперь стал утверждением о геометрии оператора и получил доказательство, не упоминающее ни строк, ни столбцов, ни элементарных преобразований.
В этом вообще смысл всего перехода к операторам: факты, которые казались особенностями вычислительной процедуры, оказываются свойствами объекта.
Разбор примеров
Пример 1. Оператор $\mathbb{R}^5 \to \mathbb{R}^3$ ранга 3.
Раз ранг равен 3 и приёмник трёхмерен, образ — весь $\mathbb{R}^3$, оператор сюръективен. Дефект: $5 - 3 = 2$. Ядро — двумерная плоскость в пятимерном пространстве. Оператор не инъективен: у каждого достижимого вектора целая двумерная плоскость прообразов.
Пример 2. Оператор $\mathbb{R}^2 \to \mathbb{R}^7$.
Здесь $n = 2$, значит $\operatorname{rank} T \le 2$ независимо от того, насколько велик приёмник. Образ — максимум плоскость в семимерном пространстве. Сюръективным такой оператор быть не может никогда: $\dim \operatorname{im} T \le 2 < 7$.
Общее правило, вытекающее из теоремы: ранг не превосходит ни размерности источника, ни размерности приёмника, то есть $\operatorname{rank} A \le \min(m, n)$. Это то самое ограничение на ранг, которое ты знаешь с урока 162, — и вот его объяснение.
Пример 3. Оператор с матрицей $\begin{pmatrix} 2 & -4 & 6 \\ -1 & 2 & -3 \\ 3 & -6 & 9 \end{pmatrix}$.
Все три строки пропорциональны первой (вторая — со множителем $-\tfrac12$, третья — со множителем $\tfrac32$). Ранг равен 1. По теореме дефект равен $3 - 1 = 2$: ядро — плоскость. Действительно, система сводится к одному уравнению $2x_1 - 4x_2 + 6x_3 = 0$, то есть $x_1 = 2x_2 - 3x_3$, две свободные переменные, ФСР из двух векторов: $(2,1,0)$ и $(-3,0,1)$.
Оператор давит всё трёхмерное пространство на одну прямую — линейную оболочку первого столбца $(2,-1,3)$.
Пример 4. Теорема как инструмент экономии.
Задача: у оператора на $\mathbb{R}^4$ ядро порождено векторами $(1,1,0,0)$ и $(0,0,1,1)$. Какова размерность образа?
Считать ничего не надо. Два независимых вектора в ядре дают $\dim\ker T = 2$, значит $\operatorname{rank} T = 4 - 2 = 2$. Это типичный сценарий: теорема позволяет получить одну характеристику из другой, не решая систем.
Почему это важно
Первое. Теорема даёт мгновенный критерий обратимости, и мы им сейчас воспользуемся: если $\ker T = \{\mathbf{0}\}$, то ранг равен $n$, оператор не теряет ничего; если ядро непусто, то ранг меньше $n$, и никакой обратный оператор существовать не может.
Второе. Она объясняет, почему нельзя «сжать без потерь». Если оператор действует из $\mathbb{R}^{784}$ в $\mathbb{R}^{32}$, то ранг не больше 32, значит дефект не меньше 752. Целых 752 измерения гарантированно схлопываются в ноль, и никакой хитрый выбор весов этого не изменит — теорема запрещает. Это фундаментальное ограничение линейного сжатия, и именно поэтому автоэнкодеры делают нелинейными.
Третье. Она объясняет типичную картину в данных. Если у тебя 50 объектов и 200 признаков, матрица $X$ имеет размер $50 \times 200$, ранг не больше 50, дефект не меньше 150. Значит, существует не меньше чем 150-мерное пространство направлений в пространстве весов, вдоль которых предсказания вообще не меняются, — та самая неидентифицируемость из урока 167, теперь с точным счётом измерений.
Инъективность, сюръективность, обратимость
Три вопроса об одном операторе
Про любое отображение можно спросить три вещи.
Инъективность («не склеивает»): верно ли, что разные векторы переходят в разные? Формально $T(u) = T(v) \Rightarrow u = v$.
Сюръективность («покрывает всё»): верно ли, что каждый вектор приёмника достижим, то есть $\operatorname{im} T = W$?
Обратимость (биективность): верно ли и то и другое сразу, то есть существует ли обратное отображение $T^{-1}$?
Для линейных отображений на первый вопрос есть неожиданно простой ответ.
Критерий инъективности: линейное отображение $T$ инъективно тогда и только тогда, когда $\ker T = \{\mathbf{0}\}$.
Доказательство. Пусть $T$ инъективно. Тогда из $T(v) = \mathbf{0} = T(\mathbf{0})$ следует $v = \mathbf{0}$, значит ядро тривиально. Обратно, пусть ядро тривиально и $T(u) = T(v)$. Тогда
$$T(u - v) = T(u) - T(v) = \mathbf{0},$$значит $u - v \in \ker T = \{\mathbf{0}\}$, откуда $u = v$. Доказано.
Это очень удобно: чтобы проверить инъективность нелинейного отображения, надо перебирать пары векторов, а для линейного достаточно решить одну однородную систему. Вся информация о «склейках» сосредоточена в единственном подпространстве — ядре. Если ядро одномерно, то в каждую точку образа попадает целая прямая прообразов; если двумерно — плоскость; и так далее. Ядро описывает не только «что уходит в ноль», но и размер каждого слоя склейки.
Сводная таблица равносильностей
Для квадратного случая, то есть оператора $T : V \to V$ на $n$-мерном пространстве с матрицей $A$ размера $n \times n$, все перечисленные свойства сливаются в одно. Ниже собрано всё, что курс накопил с урока 158.
| № | Условие | Откуда взялось |
|---|---|---|
| 1 | $T$ обратим (биективен) | определение |
| 2 | $T$ инъективен | урок 171 |
| 3 | $T$ сюръективен, $\operatorname{im} T = V$ | урок 171 |
| 4 | $\ker T = \{\mathbf{0}\}$ | урок 171 |
| 5 | $\operatorname{def} T = 0$ | урок 171 |
| 6 | $\operatorname{rank} T = n$ | урок 162 |
| 7 | $\det A \ne 0$ | урок 158 |
| 8 | существует $A^{-1}$ | урок 161 |
| 9 | столбцы $A$ линейно независимы | урок 169 |
| 10 | строки $A$ линейно независимы | урок 169 |
| 11 | столбцы $A$ образуют базис $\mathbb{R}^n$ | урок 170 |
| 12 | система $Ax = 0$ имеет только тривиальное решение | урок 167 |
| 13 | система $Ax = b$ совместна и определённа при любом $b$ | урок 163 |
| 14 | $A$ приводится к единичной матрице элементарными преобразованиями | урок 162 |
Все четырнадцать пунктов равносильны. Выполняется один — выполняются все; нарушается один — рушатся все.
Логика связей короткая. Инъективность равносильна тривиальности ядра (доказали выше), то есть нулевому дефекту. По теореме о ранге и дефекте нулевой дефект равносилен $\operatorname{rank} T = n$, а полный ранг для квадратной матрицы равносилен и независимости столбцов, и ненулевому определителю, и существованию обратной. Наконец, ранг $n$ означает, что образ — $n$-мерное подпространство в $n$-мерном пространстве, то есть всё пространство целиком: это сюръективность.
Ключевое наблюдение: в конечномерном случае и при совпадающих размерностях источника и приёмника инъективность и сюръективность равносильны. Одного достаточно, второе прилагается бесплатно.
Это утверждение не работает без оговорок. Если размерности разные, всё разъезжается: оператор $\mathbb{R}^2 \to \mathbb{R}^3$ может быть инъективным, но сюръективным — никогда; оператор $\mathbb{R}^3 \to \mathbb{R}^2$ может быть сюръективным, но инъективным — никогда. И в бесконечномерном случае равносильность тоже ломается: оператор дифференцирования на пространстве всех многочленов сюръективен (любой многочлен есть чья-то производная), но не инъективен (константы в ядре).
Обратный оператор
Определение: оператор $S$ называется обратным к $T$, если $S \circ T = \operatorname{id}$ и $T \circ S = \operatorname{id}$. Обозначается $T^{-1}$.
Если $T$ имеет матрицу $A$, то $T^{-1}$ имеет матрицу $A^{-1}$: это прямо следует из теоремы о матрице композиции, ведь $[T^{-1}][T] = [\operatorname{id}] = E$.
Обратный оператор к линейному сам линеен. Проверим: пусть $w_1 = T(v_1)$, $w_2 = T(v_2)$. Тогда
$$T(\alpha v_1 + \beta v_2) = \alpha w_1 + \beta w_2 \ \Longrightarrow\ T^{-1}(\alpha w_1 + \beta w_2) = \alpha v_1 + \beta v_2 = \alpha T^{-1}(w_1) + \beta T^{-1}(w_2).$$Разбор примеров
Пример 1. Оператор $T(x,y) = (2x + y,\ 3x + 2y)$.
Матрица $A = \begin{pmatrix} 2 & 1 \\ 3 & 2\end{pmatrix}$, определитель $4 - 3 = 1 \ne 0$. По таблице оператор обратим. Находим обратную матрицу по формуле для $2\times2$ (урок 161):
$$A^{-1} = \frac{1}{1}\begin{pmatrix} 2 & -1 \\ -3 & 2 \end{pmatrix} = \begin{pmatrix} 2 & -1 \\ -3 & 2 \end{pmatrix}.$$Значит $T^{-1}(x, y) = (2x - y,\ -3x + 2y)$.
Проверка композицией: $A A^{-1} = \begin{pmatrix} 2 & 1 \\ 3 & 2\end{pmatrix}\begin{pmatrix} 2 & -1 \\ -3 & 2\end{pmatrix} = \begin{pmatrix} 4-3 & -2+2 \\ 6-6 & -3+4\end{pmatrix} = \begin{pmatrix} 1 & 0 \\ 0 & 1\end{pmatrix}$. Единичная — верно.
Пример 2. Проекция на прямую $y = 2x$.
Матрица $\tfrac15\begin{pmatrix} 1 & 2 \\ 2 & 4\end{pmatrix}$, определитель $\tfrac{1}{25}(4 - 4) = 0$. Оператор необратим. Причина видна и без определителя: ядро одномерно (порождено вектором $(-2,1)$), значит оператор склеивает целую прямую в одну точку, и восстановить, откуда точка пришла, невозможно.
Пример 3. Ловушка «односторонней обратимости».
Возьмём $J : P_2 \to P_3$ — интегрирование, и $D : P_3 \to P_2$ — дифференцирование. Тогда $D \circ J = \operatorname{id}$ на $P_2$: продифференцировав первообразную, вернёшь исходный многочлен. Но $J \circ D \ne \operatorname{id}$ на $P_3$: у многочлена $p = t + 5$ производная равна 1, а её первообразная с нулевой константой равна $t$, и пятёрка потерялась.
Здесь $J$ инъективен, но не сюръективен, а $D$ сюръективен, но не инъективен. Ни один из них не обратим — обратимость требует обеих сторон сразу. Такое возможно только когда размерности источника и приёмника различаются: $\dim P_2 = 3$, $\dim P_3 = 4$.
Почему это важно
Таблица равносильностей — это, пожалуй, самый практичный артефакт всего курса линейной алгебры. Она позволяет выбирать удобный путь для проверки. Хочешь понять, обратим ли оператор на $\mathbb{R}^2$ или $\mathbb{R}^3$ — считай определитель, это быстрее всего. На матрице $5\times5$ определитель считать дорого, зато метод Гаусса даст ранг за один проход. Если оператор задан абстрактно, на многочленах или матрицах, проще всего найти ядро: непусто — необратим, точка.
В численных задачах у этой таблицы есть важная оговорка. Все четырнадцать условий — про точную арифметику, а на компьютере определитель почти никогда не равен нулю ровно. Матрица бывает «почти вырожденной»: определитель равен $10^{-15}$, формально не ноль, а решать систему с ней бессмысленно. Поэтому на практике вместо «$\det \ne 0$» смотрят на число обусловленности (урок 166) и на численный ранг с допуском — np.linalg.matrix_rank(A, tol=...).
Матрица оператора в другом базисе. Подобие
Интуиция: оператор один, записей много
Оператор — объект геометрический. Поворот плоскости на $30^\circ$ существует сам по себе, никаких чисел в нём нет. Числа появляются, когда мы выбираем базис и начинаем записывать координаты. Выберем другой базис — получим другие числа, хотя поворот остался ровно тем же.
Отсюда неизбежный вопрос: как связаны две матрицы одного и того же оператора в двух разных базисах? Ответ — формула $A' = C^{-1}AC$, и вывести её не сложнее, чем аккуратно проследить за координатами.
Вывод формулы
Пусть в пространстве $V$ есть старый базис $e_1, \dots, e_n$ и новый $e'_1, \dots, e'_n$. Матрица перехода $C$ (урок 170) — это матрица, столбцы которой суть координаты новых базисных векторов в старом базисе. Её ключевое свойство: если $x'$ — координатный столбец вектора в новом базисе, а $x$ — в старом, то
$$x = C x'.$$Матрица $C$ обратима, потому что её столбцы — базис, то есть независимы (пункт 9 таблицы равносильностей). Значит, работает и обратный перевод: $x' = C^{-1}x$.
Теперь возьмём оператор $T$ с матрицей $A$ в старом базисе, то есть $y = Ax$, где $x$ и $y$ — старые координаты вектора и его образа. Нужна матрица $A'$, для которой $y' = A'x'$ в новых координатах. Идём по цепочке:
$$y' = C^{-1}y = C^{-1}(Ax) = C^{-1}A(Cx') = (C^{-1}AC)\,x'.$$Три шага: перевели результат в новые координаты, подставили действие оператора, перевели аргумент из новых координат в старые. Отсюда
Формула замены базиса:
$$A' = C^{-1} A C, \qquad\text{и обратно}\qquad A = C A' C^{-1}.$$
Мнемоника для порядка множителей: читай справа налево, как композицию. Сначала $C$ переводит новые координаты в старые, потом $A$ работает в старых, потом $C^{-1}$ возвращает результат в новые. Записать наоборот ($CAC^{-1}$) — значит перепутать направление перевода; это самая частая ошибка в теме, и лечится она проверкой на конкретном векторе.
Определение: матрицы $A$ и $B$ называются подобными, если существует обратимая матрица $C$ такая, что $B = C^{-1}AC$. Обозначение: $A \sim B$.
Подобие — это отношение эквивалентности: оно рефлексивно ($C = E$), симметрично (если $B = C^{-1}AC$, то $A = CBC^{-1} = (C^{-1})^{-1}B(C^{-1})$) и транзитивно (последовательные замены базиса перемножаются). Содержательный смысл один: подобные матрицы — это один и тот же оператор, записанный в разных базисах.
Разбор примеров
Пример 1. Полный расчёт на плоскости.
Оператор в стандартном базисе имеет матрицу $A = \begin{pmatrix} 3 & 1 \\ 2 & 4\end{pmatrix}$. Найдём его матрицу в базисе $f_1 = (1, 1)$, $f_2 = (2, 3)$.
Матрица перехода — из координат новых векторов, поставленных по столбцам:
$$C = \begin{pmatrix} 1 & 2 \\ 1 & 3 \end{pmatrix}, \qquad \det C = 3 - 2 = 1 \ne 0.$$Обратная (формула для $2\times2$):
$$C^{-1} = \frac{1}{1}\begin{pmatrix} 3 & -2 \\ -1 & 1 \end{pmatrix} = \begin{pmatrix} 3 & -2 \\ -1 & 1 \end{pmatrix}.$$Считаем в два приёма. Сначала $C^{-1}A$:
$$\begin{pmatrix} 3 & -2 \\ -1 & 1 \end{pmatrix}\begin{pmatrix} 3 & 1 \\ 2 & 4\end{pmatrix} = \begin{pmatrix} 9 - 4 & 3 - 8 \\ -3 + 2 & -1 + 4 \end{pmatrix} = \begin{pmatrix} 5 & -5 \\ -1 & 3 \end{pmatrix}.$$Затем умножаем на $C$ справа:
$$A' = \begin{pmatrix} 5 & -5 \\ -1 & 3 \end{pmatrix}\begin{pmatrix} 1 & 2 \\ 1 & 3 \end{pmatrix} = \begin{pmatrix} 5 - 5 & 10 - 15 \\ -1 + 3 & -2 + 9 \end{pmatrix} = \begin{pmatrix} 0 & -5 \\ 2 & 7 \end{pmatrix}.$$Первая проверка — по инвариантам: $\operatorname{tr}A = 3 + 4 = 7$ и $\operatorname{tr}A' = 0 + 7 = 7$; $\det A = 12 - 2 = 10$ и $\det A' = 0 \cdot 7 - (-5)\cdot 2 = 10$. Совпало.
Вторая проверка — на конкретном векторе, и она куда надёжнее. Возьмём вектор с новыми координатами $x' = (3, -1)$. Его старые координаты получаются умножением на матрицу перехода:
$$x = Cx' = \begin{pmatrix} 1\cdot 3 + 2 \cdot(-1) \\ 1 \cdot 3 + 3 \cdot (-1)\end{pmatrix} = \begin{pmatrix} 1 \\ 0 \end{pmatrix}.$$Применим оператор в старых координатах: $Ax = \begin{pmatrix} 3 \\ 2 \end{pmatrix}$. Переведём результат в новые: $C^{-1}\begin{pmatrix} 3 \\ 2\end{pmatrix} = \begin{pmatrix} 9 - 4 \\ -3 + 2\end{pmatrix} = \begin{pmatrix} 5 \\ -1 \end{pmatrix}$.
Теперь то же самое через $A'$: $A'x' = \begin{pmatrix} 0 \cdot 3 + (-5)(-1) \\ 2 \cdot 3 + 7 \cdot (-1)\end{pmatrix} = \begin{pmatrix} 5 \\ -1\end{pmatrix}$. Совпало — формула работает.
Пример 2. Трёхмерный случай.
$$A = \begin{pmatrix} 2 & 0 & 1 \\ 1 & 3 & -1 \\ 0 & 1 & 2\end{pmatrix}, \qquad \text{новый базис } f_1 = (1,1,0),\ f_2 = (0,1,1),\ f_3 = (0,0,1).$$Матрица перехода и обратная к ней:
$$C = \begin{pmatrix} 1 & 0 & 0 \\ 1 & 1 & 0 \\ 0 & 1 & 1\end{pmatrix}, \qquad \det C = 1, \qquad C^{-1} = \begin{pmatrix} 1 & 0 & 0 \\ -1 & 1 & 0 \\ 1 & -1 & 1\end{pmatrix}.$$Обратную здесь удобно получить не через алгебраические дополнения, а рассуждением: $C$ нижнетреугольная с единицами на диагонали, обратная к такой — тоже нижнетреугольная с единицами; коэффициенты подбираются последовательно.
Считаем $C^{-1}A$:
$$\begin{pmatrix} 1 & 0 & 0 \\ -1 & 1 & 0 \\ 1 & -1 & 1\end{pmatrix}\begin{pmatrix} 2 & 0 & 1 \\ 1 & 3 & -1 \\ 0 & 1 & 2\end{pmatrix} = \begin{pmatrix} 2 & 0 & 1 \\ -1 & 3 & -2 \\ 1 & -2 & 4 \end{pmatrix}.$$И домножаем на $C$ справа:
$$A' = \begin{pmatrix} 2 & 0 & 1 \\ -1 & 3 & -2 \\ 1 & -2 & 4 \end{pmatrix}\begin{pmatrix} 1 & 0 & 0 \\ 1 & 1 & 0 \\ 0 & 1 & 1\end{pmatrix} = \begin{pmatrix} 2 & 1 & 1 \\ 2 & 1 & -2 \\ -1 & 2 & 4 \end{pmatrix}.$$Инварианты: $\operatorname{tr}A = 2 + 3 + 2 = 7$, $\operatorname{tr}A' = 2 + 1 + 4 = 7$. Определители обоих равны 15, ранги обоих равны 3.
Численная проверка на векторе с новыми координатами $x' = (1, 2, -1)$: старые координаты $x = Cx' = (1, 3, 1)$, образ $Ax = (3, 9, 5)$, его новые координаты $C^{-1}(3,9,5) = (3, 6, -1)$. И напрямую: $A'x' = (2 + 2 - 1,\ 2 + 2 + 2,\ -1 + 4 - 4) = (3, 6, -1)$. Совпало.
Что не меняется при смене базиса: инварианты
Матрица меняется, оператор — нет. Значит, у матрицы есть характеристики, зависящие от базиса (сами числа в клетках), и характеристики, от базиса не зависящие. Вторые называются инвариантами и особенно ценны: они говорят что-то об операторе, а не о нашем произволе в выборе координат.
Определитель — инвариант. По мультипликативности:
$$\det A' = \det(C^{-1}AC) = \det(C^{-1})\det A \det C = \frac{1}{\det C}\cdot \det A \cdot \det C = \det A.$$Смысл: определитель — коэффициент изменения объёма, а объёмы меняются одинаково независимо от того, какими координатами их описывают.
Ранг — инвариант. Умножение на обратимую матрицу не меняет ранга (свойство из урока 162), поэтому $\operatorname{rank}(C^{-1}AC) = \operatorname{rank}A$. Смысл: ранг — размерность образа, а размерность подпространства от выбора базиса не зависит. Заодно инвариантен и дефект: он равен $n - \operatorname{rank}$.
След — инвариант. След $\operatorname{tr}A$ — сумма диагональных элементов. Это уже не так очевидно, потому что диагональ, казалось бы, зависит от базиса напрямую. Ключ — вспомогательное свойство:
$$\operatorname{tr}(XY) = \operatorname{tr}(YX)$$для любых матриц подходящих размеров. Проверяется прямым счётом: элемент $(i,i)$ произведения $XY$ равен $\sum_k x_{ik}y_{ki}$, поэтому
$$\operatorname{tr}(XY) = \sum_i \sum_k x_{ik} y_{ki} = \sum_k \sum_i y_{ki} x_{ik} = \operatorname{tr}(YX).$$Обе двойные суммы состоят из одних и тех же слагаемых $x_{ik}y_{ki}$, просто просуммированных в другом порядке. Теперь применим это к $A' = C^{-1}AC$, обозначив $X = C^{-1}$ и $Y = AC$:
$$\operatorname{tr}(C^{-1}\cdot AC) = \operatorname{tr}(AC \cdot C^{-1}) = \operatorname{tr}(A).$$След инвариантен. Небольшой пример на свойство: для $P = \begin{pmatrix} 1 & 2 \\ 3 & 4\end{pmatrix}$ и $Q = \begin{pmatrix} 0 & 1 \\ -1 & 5\end{pmatrix}$ имеем $\operatorname{tr}(PQ) = \operatorname{tr}(QP) = 21$, хотя сами произведения $PQ$ и $QP$ — разные матрицы.
Асимметрия: инварианты доказывают неподобие, но не подобие
Здесь надо быть очень аккуратным, и это место регулярно теряют.
Что можно. Если у двух матриц не совпадает хотя бы один инвариант — след, определитель или ранг, — они точно не подобны. Это строгое доказательство, и оно занимает пять секунд. Например, $\begin{pmatrix} 1 & 2 \\ 3 & 4\end{pmatrix}$ имеет след 5 и определитель $-2$, а $\begin{pmatrix} 2 & 0 \\ 1 & 3\end{pmatrix}$ — след 5 и определитель 6. Следы совпали, определители нет — матрицы не подобны, вопрос закрыт.
Чего нельзя. Если все инварианты совпали, отсюда не следует подобие. Контрпример: возьмём
$$A = \begin{pmatrix} 2 & 0 \\ 0 & 2 \end{pmatrix} = 2E, \qquad B = \begin{pmatrix} 2 & 1 \\ 0 & 2 \end{pmatrix}.$$След у обеих равен 4, определитель равен 4, ранг равен 2. Все три инварианта совпали. Но подобными они быть не могут: для любой обратимой $C$
$$C^{-1}(2E)C = 2\,C^{-1}EC = 2\,C^{-1}C = 2E = A.$$Скалярная матрица подобна только самой себе, в каком базисе её ни записывай. А $B \ne A$. Значит, $A \not\sim B$, несмотря на полное совпадение инвариантов.
Логическая суть: совпадение инвариантов — необходимое, но не достаточное условие подобия. Как необходимое оно очень полезно (быстро отсеивает), как достаточное — не работает. Чтобы доказать подобие, приходится либо предъявлять конкретную матрицу $C$, либо пользоваться более тонкой теорией, до которой курс дойдёт позже.
Куда это ведёт
Раз матрица оператора зависит от базиса, естественно спросить: а нельзя ли подобрать базис так, чтобы матрица получилась максимально простой? Идеально — диагональной, потому что с диагональной матрицей всё тривиально: степени считаются поэлементно, определитель — произведением диагонали, применение к вектору — покоординатным умножением.
Иногда это удаётся. Вернёмся к оператору с матрицей
$$A = \begin{pmatrix} 4 & -2 \\ 1 & 1 \end{pmatrix}$$и возьмём базис $f_1 = (2, 1)$, $f_2 = (1, 1)$, то есть $C = \begin{pmatrix} 2 & 1 \\ 1 & 1\end{pmatrix}$, $\det C = 1$, $C^{-1} = \begin{pmatrix} 1 & -1 \\ -1 & 2\end{pmatrix}$. Тогда
$$A' = C^{-1}AC = \begin{pmatrix} 3 & 0 \\ 0 & 2 \end{pmatrix}.$$Матрица стала диагональной. Почему именно этот базис сработал, видно из прямого счёта: $A\begin{pmatrix} 2 \\ 1\end{pmatrix} = \begin{pmatrix} 6 \\ 3\end{pmatrix} = 3\begin{pmatrix} 2 \\ 1\end{pmatrix}$ и $A\begin{pmatrix} 1 \\ 1\end{pmatrix} = \begin{pmatrix} 2 \\ 2\end{pmatrix} = 2\begin{pmatrix} 1 \\ 1\end{pmatrix}$. Каждый вектор нового базиса оператор просто растягивает вдоль себя, не сворачивая в сторону. В таком базисе оператор действует как независимое масштабирование по каждой оси — отсюда и диагональ. Проверим инварианты: $\operatorname{tr} = 5$ у обеих, $\det = 6$ у обеих.
Возникают три вопроса, на которые этот урок уже не отвечает.
-
Как искать такие «неповорачиваемые» направления, если они не даны заранее?
-
Всегда ли их хватает, чтобы составить базис?
-
Что делать, когда не хватает?
Ответы разбираются в следующих уроках курса. Там эти направления получат имя и алгоритм поиска, а вместе с ними — объяснение, почему $2E$ и $\begin{pmatrix} 2 & 1 \\ 0 & 2\end{pmatrix}$ из контрпримера выше не подобны, хотя все инварианты у них одинаковые.
Линейные преобразования в машинном обучении
Нейросеть — это чередование линейных преобразований и нелинейных функций. Линейная часть делает всю тяжёлую работу и держит все параметры; нелинейная — маленькая, без параметров, но без неё вся конструкция разваливается. Разберём по порядку, как понятия этого урока ложатся на реальный код.
nn.Linear — это аффинное отображение, а не линейное
Полносвязный слой в PyTorch вычисляет
$$y = Wx + b,$$где $W$ — матрица весов, $b$ — вектор сдвига (bias). По терминологии этого урока такое отображение аффинное: линейная часть плюс сдвиг. Честно линейным слой становится только при bias=False.
Разница не косметическая. Слой без bias обязан переводить нулевой вход в нулевой выход, слой с bias — нет. Именно поэтому bias обычно оставляют: он даёт модели свободу сдвинуть выход, не трогая направление преобразования. И именно поэтому в слоях, стоящих перед батч-нормализацией, bias отключают — нормализация всё равно вычитает среднее, и сдвиг оказывается лишним параметром.
Соглашение о размерах: nn.Linear(in_features, out_features) создаёт weight формы (out_features, in_features). Это ровно матрица оператора из $\mathbb{R}^{\text{in}}$ в $\mathbb{R}^{\text{out}}$: число столбцов — размерность источника, число строк — приёмника. Для nn.Linear(768, 3072) матрица имеет размер $3072 \times 768$, то есть $768 \cdot 3072 = 2\,359\,296$ весов плюс $3072$ элемента bias, всего $2\,362\,368$ параметров.
Почему без активаций глубина бессмысленна
Возьмём три слоя без нелинейностей между ними:
$$y = W_3\big(W_2(W_1 x)\big).$$По ассоциативности умножения матриц это то же самое, что
$$y = (W_3 W_2 W_1)\,x = W_{\text{экв}}\,x.$$Композиция линейных операторов — линейный оператор. Три слоя схлопнулись в один, и никакой выразительной силы глубина не добавила. Проверим на настоящих числах:
import numpy as np
rng = np.random.default_rng(42)
W1 = rng.normal(size=(256, 512))
W2 = rng.normal(size=(128, 256))
W3 = rng.normal(size=(10, 128))
x = rng.normal(size=(512,))
step_by_step = W3 @ (W2 @ (W1 @ x)) # три слоя подряд
W_eq = W3 @ W2 @ W1 # одна эквивалентная матрица
print(W_eq.shape) # (10, 512)
print(np.max(np.abs(step_by_step - W_eq @ x))) # ~7e-12 — только ошибка округления
print(np.linalg.matrix_rank(W_eq)) # 10
Максимальное расхождение — порядка $10^{-12}$, то есть чистая арифметика с плавающей точкой; математически это одно и то же отображение. Три матрицы с суммарным числом параметров $256\cdot512 + 128\cdot256 + 10\cdot128 = 165\,120$ выражают ровно то, что выражает одна матрица $10 \times 512$ с $5120$ параметрами. Лишние параметры не дали ничего.
А вот что происходит, если вставить между слоями ReLU:
relu = lambda z: np.maximum(z, 0)
with_relu = W3 @ relu(W2 @ relu(W1 @ x))
print(np.max(np.abs(with_relu - W_eq @ x))) # ~1.1e+04 — совершенно другое отображение
Расхождение порядка десяти тысяч: это уже никак не сводится к одной матрице. Функция активации разрывает цепочку композиции линейных операторов — и только благодаря этому глубокая сеть может выражать то, чего не выражает одна матрица.
Заодно обрати внимание на ранг: $\operatorname{rank} W_{\text{экв}} = 10$, потому что ранг произведения не превосходит ранга каждого сомножителя, а последняя матрица имеет всего 10 строк. Как бы ни были широки внутренние слои, узкое место в конце режет ранг всей цепочки.
Свёртка — тоже линейный оператор
Свёрточный слой без нелинейности линеен: свёртка удовлетворяет обеим аксиомам, $(f+g) * k = f*k + g*k$ и $(\lambda f)*k = \lambda(f*k)$. Значит, у неё есть матрица. Просто эта матрица огромная и очень разреженная.
k = np.array([1., -2., 1.]) # ядро свёртки, размер 3
n_in, n_out = 6, 4 # вход длины 6, выход длины 4 (без padding)
C = np.zeros((n_out, n_in))
for i in range(n_out):
C[i, i:i+3] = k
print(C)
# [[ 1. -2. 1. 0. 0. 0.]
# [ 0. 1. -2. 1. 0. 0.]
# [ 0. 0. 1. -2. 1. 0.]
# [ 0. 0. 0. 1. -2. 1.]]
sig = np.array([1., 4., 9., 16., 25., 36.])
print(C @ sig) # [2. 2. 2. 2.]
print(np.convolve(sig, k[::-1], mode="valid")) # [2. 2. 2. 2.] — то же самое
print(np.linalg.matrix_rank(C)) # 4
Матрица такого вида (одна и та же строка, сдвигаемая вправо) называется тёплицевой. Ядро $(1,-2,1)$ — это дискретная вторая производная, и на последовательности квадратов $1, 4, 9, 16, 25, 36$ она честно даёт постоянную двойку.
Оценим масштаб в двумерном случае. Свёртка $3\times3$ по изображению $32\times32$ с сохранением размера — это оператор из $\mathbb{R}^{1024}$ в $\mathbb{R}^{1024}$, то есть матрица $1024 \times 1024$ с миллионом с лишним клеток. Ненулевых среди них не больше $1024 \cdot 9 = 9216$, то есть плотность $0{,}879\%$. Вместо миллиона независимых параметров — девять, повторённых по всей матрице.
Отсюда, кстати, и вычислительный выигрыш свёртки: никто эту матрицу не строит. Прямое применение матрицы $1024\times1024$ стоило бы $1\,048\,576$ умножений, а свёртка делает $1024 \cdot 9 = 9216$. Матричная запись нужна не для счёта, а для рассуждений: она позволяет говорить о ранге, ядре и обратимости свёртки на том же языке, что и о полносвязном слое.
Ранг слоя и низкоранговые адаптеры
Матрица слоя $3072 \times 768$ имеет ранг не больше $768$. Но на практике у обученных слоёв он часто оказывается фактически меньше: сингулярные значения быстро убывают, и матрица близка к низкоранговой.
Отсюда идея LoRA (Low-Rank Adaptation): при дообучении не менять исходную матрицу $W$, а добавить к ней поправку в виде произведения двух узких матриц, $W + BA$, где $A$ имеет размер $r \times 768$, а $B$ — $3072 \times r$ при маленьком $r$. Ранг такой поправки не превосходит $r$ — это прямое следствие того, что $\operatorname{rank}(BA) \le \min(\operatorname{rank}B, \operatorname{rank}A)$, факт из урока 162.
Арифметика экономии при $r = 8$: обучаемых параметров $768\cdot8 + 8\cdot3072 = 6144 + 24\,576 = 30\,720$ против $2\,359\,296$ в полной матрице, то есть $1{,}30\%$. Механику ранга произведения ты уже знаешь; новое здесь только применение.
Ядро преобразования как запланированная потеря информации
Автоэнкодер сжимает картинку $28\times28$ (то есть вектор из $\mathbb{R}^{784}$) в код размерности 32 и потом пытается восстановить. Энкодер — это оператор $\mathbb{R}^{784} \to \mathbb{R}^{32}$, его ранг не больше 32, значит по теореме о ранге и дефекте
$$\dim\ker \ge 784 - 32 = 752.$$Как минимум 752-мерное пространство направлений схлопывается в ноль. Это значит, что существует огромное множество пар различных картинок с абсолютно одинаковым кодом: возьми любую картинку и прибавь к ней любой вектор из ядра — код не изменится. Восстановить обе из одного кода невозможно физически.
Вывод, который отсюда следует, вполне практический: линейное сжатие обязано терять информацию, и теорема указывает точный минимальный объём потери. Именно поэтому реальные автоэнкодеры делают глубокими и нелинейными: нелинейность позволяет «свернуть» многообразие данных так, чтобы схлопывались как раз те направления, вдоль которых реальных картинок нет.
Тот же счёт объясняет и bottleneck в архитектурах вообще: любое узкое место в сети — это оператор с большим дефектом, и всё, что через него не прошло, теряется окончательно.
Батч — это применение оператора к пачке векторов сразу
В коде слой применяется не к одному вектору, а к матрице объектов. Если $X$ имеет форму (batch, in_features), то
даёт форму (batch, out_features), и $i$-я строка $Y$ — это образ $i$-й строки $X$. Транспонирование появляется из-за соглашения «объекты по строкам»: в математической записи вектор — столбец и оператор действует слева, а в коде объект — строка и матрица применяется справа.
X = rng.normal(size=(8, 512))
Y = X @ W1.T
Y_loop = np.stack([W1 @ X[i] for i in range(8)])
print(Y.shape, np.allclose(Y, Y_loop)) # (8, 256) True
Результат идентичен построчному применению, но считается одним вызовом BLAS вместо восьми. Это возможно именно потому, что оператор линеен и одинаков для всех объектов батча: одна матрица, много столбцов-аргументов.
Аугментации — те самые матрицы $2\times2$ и $3\times3$
Повороты, отражения и масштабирование изображений в torchvision.transforms — буквально операторы из раздела про геометрию плоскости. Матрица $2\times2$ описывает поворот вокруг начала координат, но начало координат у изображения в углу, а крутить надо вокруг центра, — значит нужен ещё сдвиг. А сдвиг, как мы выяснили, не линеен.
Приём, которым это лечится, называется однородными координатами: точку $(x,y)$ записывают как $(x, y, 1)$ и работают матрицами $3\times3$:
$$\begin{pmatrix} \cos\varphi & -\sin\varphi & t_x \\ \sin\varphi & \cos\varphi & t_y \\ 0 & 0 & 1\end{pmatrix}\begin{pmatrix} x \\ y \\ 1\end{pmatrix} = \begin{pmatrix} x\cos\varphi - y\sin\varphi + t_x \\ x\sin\varphi + y\cos\varphi + t_y \\ 1 \end{pmatrix}.$$Аффинное преобразование плоскости стало линейным оператором на $\mathbb{R}^3$ — трюк, на котором стоит вся компьютерная графика (там матрицы $4\times4$ для трёхмерных сцен).
def rot(deg, tx=0.0, ty=0.0):
a = np.deg2rad(deg); c, s = np.cos(a), np.sin(a)
return np.array([[c, -s, tx],
[s, c, ty],
[0, 0, 1]])
M = rot(90, tx=27, ty=0) # поворот картинки 28x28 на 90°
corners = np.array([[0,0,1],[27,0,1],[27,27,1],[0,27,1]], dtype=float).T
print(np.round(M @ corners, 6))
# столбцы: (27,0), (27,27), (0,27), (0,0) — углы переехали друг в друга,
# картинка осталась в тех же границах
print(round(np.linalg.det(M[:2, :2]), 12)) # 1.0 — площадь сохранилась
Именно так torchvision.transforms.functional.affine и cv2.warpAffine устроены внутри: строится матрица $2\times3$ (первые две строки однородной матрицы), и для каждого пикселя выходного изображения по ней вычисляется, откуда его взять.
Сколько стоит применить оператор
Умножение матрицы $m \times n$ на вектор — это $mn$ умножений и примерно столько же сложений. Для слоя $4096 \times 4096$ это $16\,777\,216$ умножений на один вектор; при батче в 32 объекта — $536\,870\,912$, больше полумиллиарда операций на один слой прямого прохода.
Отсюда несколько практических выводов, которые прямо следуют из материала урока.
-
Композицию выгодно схлопывать заранее. Если несколько линейных преобразований применяются к большому набору векторов, дешевле перемножить матрицы один раз, а потом применить одну. Ассоциативность это разрешает, и это стандартный приём в графике.
-
Порядок скобок в произведении матриц влияет на стоимость. Для $A$ размера $1000\times2$, $B$ размера $2\times1000$ и вектора $x$ длины 1000: $(AB)x$ требует построить матрицу $1000\times1000$ (два миллиона умножений на построение), а $A(Bx)$ — сначала вектор длины 2, потом вектор длины 1000, всего около четырёх тысяч умножений. Результат один и тот же, стоимость различается в сотни раз.
-
Низкий ранг — это дешевизна. Матрицу ранга $r$ можно хранить и применять как произведение $m\times r$ на $r\times n$; при $r \ll \min(m,n)$ это экономит и память, и время. На этом стоят и LoRA, и сжатие моделей факторизацией слоёв.
Кстати, здесь же ответ на вопрос, почему разреженная свёртка победила плотные слои в задачах обработки изображений: у неё та же линейность, но при этом на порядки меньше параметров и операций, потому что структура матрицы задана заранее, а не выучивается.
Практика: 30 заданий
Базовые задания (1–10)
Задание 1: Является ли линейным отображение $T(x, y) = (x - 4y,\ 3x + y)$? Если да — выпиши его матрицу.
Задание 2: Является ли линейным отображение $T(x, y) = (x + y,\ xy)$? Укажи, какое свойство нарушено.
Задание 3: Является ли линейным отображение $T(x, y) = (2x - 5,\ y)$? Если нет — как оно называется?
Задание 4: Является ли линейным отображение $T(x, y, z) = (|x|,\ y + z)$ из $\mathbb{R}^3$ в $\mathbb{R}^2$?
Задание 5: Проверь линейность оператора $T(X) = X + X^{T}$ на пространстве матриц $M_{2\times2}$. Если он линеен, найди его матрицу в базисе $E_{11}, E_{12}, E_{21}, E_{22}$ и его ядро.
Задание 6: Проверь линейность оператора $T(p)(t) = p(t+1)$ на пространстве $P_2$ многочленов степени не выше 2. Найди его матрицу в базисе $1, t, t^2$ и выясни, обратим ли он.
Задание 7: Построй матрицу поворота плоскости на $60^\circ$ против часовой стрелки и найди образ вектора $(2, 0)$.
Задание 8: Линейный оператор на $\mathbb{R}^2$ задан действием на базисе: $T(e_1) = (2, -1)$, $T(e_2) = (0, 5)$. Найди матрицу оператора и вычисли $T(3, -4)$.
Задание 9: Опиши геометрическое действие оператора с матрицей $A = \begin{pmatrix} 2 & 0 \\ 0 & 1/2 \end{pmatrix}$. Что происходит с площадью фигур? Обратим ли оператор?
Задание 10: Для оператора $T(x, y) = (x - 2y,\ 2x - 4y)$ найди ядро и образ, укажи их базисы и проверь теорему о ранге и дефекте.
Средние задания (11–20)
Задание 11: На пространстве $P_2$ (базис $1, t, t^2$) задан оператор $T(p)(t) = t\,p'(t)$. Проверь линейность, построй матрицу, найди ядро и образ, проверь теорему о ранге и дефекте.
Задание 12: Даны операторы на $\mathbb{R}^2$: $A = \begin{pmatrix} 1 & 2 \\ 0 & 1\end{pmatrix}$ (сдвиг) и $B = \begin{pmatrix} 3 & 0 \\ 0 & 1\end{pmatrix}$ (растяжение вдоль $Ox$). Найди матрицы обеих композиций и покажи на конкретном векторе, что они дают разные результаты.
Задание 13: Найди ядро оператора $T : \mathbb{R}^4 \to \mathbb{R}^3$ с матрицей
$$A = \begin{pmatrix} 1 & 2 & -1 & 3 \\ 2 & 4 & -1 & 7 \\ 3 & 6 & -2 & 10 \end{pmatrix}$$и укажи его базис. Проверь теорему о ранге и дефекте.
Задание 14: Найди образ оператора с матрицей $A = \begin{pmatrix} 1 & 3 & 2 \\ 2 & 1 & -1 \\ 3 & 4 & 1 \end{pmatrix}$, укажи его базис и геометрический тип. Найди также ядро.
Задание 15: Обратим ли оператор с матрицей $A = \begin{pmatrix} 2 & 1 \\ 4 & 2 \end{pmatrix}$? Ответ обоснуй тремя разными способами из таблицы равносильностей.
Задание 16: Оператор задан формулой $T(x, y) = (x + 2y,\ 3x + 5y)$. Проверь обратимость и найди формулу обратного оператора.
Задание 17: Оператор в стандартном базисе $\mathbb{R}^2$ имеет матрицу $A = \begin{pmatrix} 1 & 4 \\ 2 & 3\end{pmatrix}$. Найди его матрицу в базисе $f_1 = (1, 2)$, $f_2 = (1, 1)$ и проверь результат по инвариантам.
Задание 18: Найди матрицу оператора $A = \begin{pmatrix} 5 & -1 \\ 2 & 2 \end{pmatrix}$ в базисе $f_1 = (1, 1)$, $f_2 = (2, 3)$.
Задание 19: Могут ли быть подобны матрицы $A = \begin{pmatrix} 1 & 2 \\ 3 & 4\end{pmatrix}$ и $B = \begin{pmatrix} 2 & 0 \\ 1 & 3 \end{pmatrix}$?
Задание 20: Оператор транспонирования $T(X) = X^{T}$ на пространстве $M_{2\times2}$. Построй его матрицу в базисе $E_{11}, E_{12}, E_{21}, E_{22}$, найди определитель, ядро и выясни, обратим ли оператор.
Продвинутые задания (21–30)
Задание 21: Оператор на $\mathbb{R}^3$ задан матрицей $A = \begin{pmatrix} 1 & 0 & 2 \\ 0 & 1 & 1 \\ 2 & 1 & 0 \end{pmatrix}$. Найди его матрицу в базисе $f_1 = (1,0,0)$, $f_2 = (1,1,0)$, $f_3 = (0,1,1)$ и проверь по инвариантам.
Задание 22: Оператор $P$ — проекция плоскости на ось $Ox$ вдоль оси $Oy$. Найди его матрицу в стандартном базисе, затем в базисе $f_1 = (1,1)$, $f_2 = (1,2)$. Проверь, что в новом базисе сохранились свойства проектора.
Задание 23: Подобны ли матрицы $A = \begin{pmatrix} 0 & 1 \\ 1 & 0\end{pmatrix}$ и $B = \begin{pmatrix} 1 & 0 \\ 0 & -1\end{pmatrix}$? Если да — предъяви матрицу $C$. Объясни, почему совпадения инвариантов было бы недостаточно.
Задание 24: Докажи: если линейный оператор $T$ инъективен, то он переводит любую линейно независимую систему векторов в линейно независимую. Приведи пример, показывающий, что без инъективности это неверно.
Задание 25: Докажи, что для композиции операторов $\operatorname{rank}(S \circ T) \le \min\big(\operatorname{rank}S,\ \operatorname{rank}T\big)$. Приведи пример, где неравенство строгое для обоих сомножителей.
Задание 26: На пространстве $M_{2\times2}$ задан оператор $T(X) = AX$, где $A = \begin{pmatrix} 1 & 2 \\ 2 & 4 \end{pmatrix}$. Найди матрицу оператора в базисе $E_{11}, E_{12}, E_{21}, E_{22}$, его ранг, дефект и базис ядра.
Задание 27: Докажи свойство $\operatorname{tr}(XY) = \operatorname{tr}(YX)$ для квадратных матриц и выведи из него инвариантность следа при смене базиса. Проверь оба утверждения на конкретном примере.
Задание 28: На пространстве $P_4$ (базис $1, t, t^2, t^3, t^4$) рассмотри оператор второй производной $T(p) = p''$. Построй его матрицу, найди ядро и образ, проверь теорему о ранге и дефекте. Обратим ли оператор?
Задание 29: Два линейных слоя нейросети без функции активации заданы матрицами $W_1 = \begin{pmatrix} 2 & 0 & 1 \\ 1 & 1 & -1\end{pmatrix}$ и $W_2 = \begin{pmatrix} 1 & -1 \\ 0 & 2 \end{pmatrix}$. Найди матрицу эквивалентного одного слоя, проверь результат на векторе $x = (1, 2, -1)$ и оцени ранг.
Задание 30: Оператор $T$ на $\mathbb{R}^3$ задан действием на базисе $a_1 = (1,0,1)$, $a_2 = (0,1,1)$, $a_3 = (1,1,0)$:
$$T(a_1) = a_1, \qquad T(a_2) = a_2, \qquad T(a_3) = \mathbf{0}.$$Найди матрицу оператора в стандартном базисе. Опиши его геометрически и проверь свойства.
Частые ошибки
Ошибка 1. Считать сдвиг $x \mapsto x + a$ линейным отображением.
Как выглядит: «функция $y = 2x + 3$ линейная, её график — прямая, значит и отображение линейное».
Почему возникает: в школе словом «линейная функция» называют именно $y = kx + b$. В линейной алгебре термин занят под более узкий смысл, и совпадение названий сбивает.
Как правильно: линейное отображение обязано сохранять ноль. У $y = 2x + 3$ образ нуля равен трём — линейности нет. Такое отображение называется аффинным: линейная часть плюс сдвиг. Быстрый тест — подставить нулевой вектор.
Ошибка 2. Записывать образы базисных векторов по строкам, а не по столбцам.
Как выглядит: при $T(e_1) = (2,-1)$, $T(e_2) = (0,5)$ пишут $A = \begin{pmatrix} 2 & -1 \\ 0 & 5\end{pmatrix}$ вместо $\begin{pmatrix} 2 & 0 \\ -1 & 5\end{pmatrix}$.
Почему возникает: образы естественно выписывать в строчку на бумаге, и рука сама складывает их построчно.
Как правильно: столбец с номером $j$ — это координатный столбец вектора $T(e_j)$. Проверка занимает пять секунд: умножь построенную матрицу на $e_1 = (1,0,\dots)$ и убедись, что получился именно $T(e_1)$. При умножении на $e_1$ из матрицы выпадает её первый столбец — если он не совпал с ожидаемым образом, матрица транспонирована.
Ошибка 3. Путать ядро и образ — в частности, искать ядро среди векторов приёмника.
Как выглядит: для оператора $\mathbb{R}^4 \to \mathbb{R}^3$ выписывают «ядро порождено вектором $(1,2,3)$» — трёхмерным вектором.
Почему возникает: оба понятия вводятся рядом и оба про «подпространство, связанное с оператором».
Как правильно: ядро живёт в источнике и состоит из векторов длины $n$ (число столбцов); образ живёт в приёмнике и состоит из векторов длины $m$ (число строк). Первый контроль любого ответа — сверить длину векторов с размером матрицы.
Ошибка 4. Считать дефект как «число столбцов минус число строк».
Как выглядит: «матрица $3\times5$, значит дефект равен $5 - 3 = 2$» — на матрице полного ранга это случайно верно, а на матрице $3\times5$ ранга 2 даёт неверное 2 вместо правильного 3.
Почему возникает: на учебных примерах строки чаще всего независимы, и ранг совпадает с числом строк.
Как правильно: $\operatorname{def} T = n - \operatorname{rank} T$, где $n$ — размерность источника, то есть число столбцов, а $\operatorname{rank}$ надо честно посчитать, а не заменить числом строк.
Ошибка 5. Брать в базис образа столбцы преобразованной матрицы.
Как выглядит: привели $A$ к ступенчатому виду, увидели пивоты в столбцах 1 и 3 и записали в базис образа столбцы 1 и 3 ступенчатой матрицы.
Почему возникает: по аналогии с базисом ядра, который действительно читается прямо из rref.
Как правильно: элементарные преобразования строк сохраняют зависимости между столбцами, но меняют сами столбцы, а с ними и столбцовое пространство. Номера пивотных столбцов брать из ступенчатого вида можно и нужно, а сами векторы — только из исходной матрицы.
Ошибка 6. Перепутать порядок множителей в композиции.
Как выглядит: «сначала поворот, потом отражение» записывают как $RS$ вместо $SR$.
Почему возникает: по-русски мы читаем слева направо, а операторы применяются справа налево.
Как правильно: аргумент стоит справа, поэтому правый оператор срабатывает первым: $(SR)(v) = S(R(v))$. Если сомневаешься — проверь на конкретном векторе по шагам, как в разборе некоммутативности выше. Стоимость проверки — одно умножение матрицы на столбец.
Ошибка 7. Писать формулу замены базиса как $A' = CAC^{-1}$.
Как выглядит: перепутаны местами $C$ и $C^{-1}$, ответ получается матрицей другого оператора (хотя инварианты, что коварно, совпадают).
Почему возникает: формулу запоминают как картинку, а не выводят.
Как правильно: восстанавливай по цепочке. Аргумент дан в новых координатах, значит сначала $C$ переводит его в старые, затем $A$ работает, затем $C^{-1}$ возвращает результат в новые: $A' = C^{-1}AC$. Численный контроль обязателен: возьми конкретный $x'$, посчитай $A'x'$ и $C^{-1}A(Cx')$ — должно совпасть.
Ошибка 8. Из совпадения следа, определителя и ранга делать вывод о подобии.
Как выглядит: «у обеих матриц след 4, определитель 4, ранг 2 — значит подобны».
Почему возникает: инварианты работают как критерий в одну сторону, и эта односторонность легко теряется.
Как правильно: несовпадение любого инварианта доказывает неподобие; совпадение всех — не доказывает подобия. Контрпример из урока: $2E$ и $\begin{pmatrix} 2&1\\0&2\end{pmatrix}$. Чтобы доказать подобие, нужна явная матрица $C$.
Ошибка 9. Проверять линейность на одном удачно подобранном примере.
Как выглядит: «$T(x) = |x|$: возьмём $u = 2$, $v = 3$; $T(5) = 5 = 2 + 3$ — аддитивность выполняется, отображение линейно».
Почему возникает: один пример психологически ощущается как проверка.
Как правильно: для подтверждения линейности нужно доказательство в общем виде, с произвольными $u, v, \alpha, \beta$. Один пример годится только для опровержения. У модуля аддитивность выполняется на всех парах одного знака и ломается на разных знаках.
Ошибка 10. Считать, что оператор из маленького пространства может покрыть большое.
Как выглядит: «оператор $\mathbb{R}^2 \to \mathbb{R}^5$ с матрицей полного ранга 2 сюръективен».
Почему возникает: «полный ранг» ассоциируется с «всё хорошо, ничего не потеряно».
Как правильно: $\operatorname{rank} \le \min(m, n)$. Из двумерного пространства образ выходит не более чем двумерным, каким бы большим ни был приёмник. Полный ранг здесь означает только инъективность, но не сюръективность. Сюръективность требует $\operatorname{rank} = m$, а это невозможно при $n < m$.
Главное запомнить
-
Линейное отображение — это отображение, сохраняющее сложение и умножение на число: $T(\alpha u + \beta v) = \alpha T(u) + \beta T(v)$. Оно проносится сквозь любую линейную комбинацию.
-
Обязательное следствие: $T(\mathbf{0}) = \mathbf{0}$. Это быстрый отрицательный тест: если ноль не переходит в ноль, линейности нет. Обратное неверно.
-
Сдвиг $x \mapsto x + a$ при $a \ne \mathbf{0}$ не линеен — он аффинный. Школьная «линейная функция» $y = kx+b$ линейна в смысле этого урока только при $b = 0$.
-
Оператор полностью определяется образами базисных векторов. Столбцы матрицы оператора — это координаты образов базисных векторов. Умножение матрицы на столбец есть применение оператора.
-
Геометрия на плоскости: поворот $\begin{pmatrix} \cos\varphi & -\sin\varphi \\ \sin\varphi & \cos\varphi\end{pmatrix}$ ($\det = 1$), отражение ($\det = -1$), растяжение $\operatorname{diag}(k_1,k_2)$ ($\det = k_1k_2$), проекция ($\det = 0$, необратима), сдвиг $\begin{pmatrix} 1 & k \\ 0 & 1\end{pmatrix}$ ($\det = 1$).
-
Определитель — коэффициент изменения площади (объёма), его знак говорит об ориентации. Нулевой определитель означает схлопывание и необратимость.
-
Композиция операторов = произведение матриц: $[S\circ T] = [S][T]$. Отсюда правило «строка на столбец», ассоциативность, мультипликативность определителя и некоммутативность. В записи $ST$ первым применяется $T$.
-
$\ker T = \{v : T(v) = \mathbf{0}\}$ — подпространство источника; в координатах это множество решений $Ax = 0$, а его базис — ФСР из урока 167.
-
$\operatorname{im}T$ — подпространство приёмника, равное линейной оболочке столбцов матрицы; $\dim\operatorname{im}T = \operatorname{rank}A$. Базис образа — исходные столбцы с номерами пивотов.
-
Теорема о ранге и дефекте: $\dim\ker T + \operatorname{rank}T = n$, где $n$ — размерность источника. Сколько измерений потерялось плюс сколько выжило равно тому, сколько было.
-
Инъективность равносильна $\ker T = \{\mathbf{0}\}$. Для квадратного случая инъективность, сюръективность, обратимость, $\det A \ne 0$, $\operatorname{rank} = n$, независимость столбцов — всё это одно и то же (таблица из 14 равносильных условий).
-
Смена базиса: $A' = C^{-1}AC$, где $C$ — матрица перехода (столбцы = координаты новых базисных векторов в старом базисе). Матрицы, связанные такой формулой, называются подобными.
-
При смене базиса не меняются определитель, ранг, дефект и след. Несовпадение любого из них доказывает неподобие; совпадение всех подобия не доказывает.
-
В ML:
nn.Linear— аффинное отображение $Wx+b$; стек линейных слоёв без активаций схлопывается в одну матрицу; свёртка — линейный оператор с разреженной тёплицевой матрицей; узкое горлышко автоэнкодера — оператор с дефектом не меньше $n - k$.
Связь с другими темами курса
Что нужно было знать до этого урока
Урок стоит на всём предыдущем блоке. Из урока 157 взято умножение матриц — здесь оно наконец получило смысл композиции, а его «неудобное» правило оказалось выведенным, а не постулированным. Из уроков 158–159 — определитель и его мультипликативность, ставшая утверждением о коэффициенте изменения площади. Из урока 161 — обратная матрица, теперь читаемая как матрица обратного оператора. Из урока 162 — ранг и его свойства, включая $\operatorname{rank}(AB) \le \min$; ранг матрицы оказался размерностью образа. Из урока 167 — ядро матрицы, ФСР и связь $\dim\ker = n - r$: теорема о ранге и дефекте есть бескоординатная форма этого факта. Из урока 168 — определение подпространства и критерий, без которого не доказать, что ядро и образ являются подпространствами. Из урока 169 — линейная зависимость, нужная в доказательстве теоремы о ранге и дефекте. Из урока 170 — базис, координаты, теорема о дополнении независимой системы до базиса (ключевой шаг доказательства) и матрица перехода, которая здесь работает в формуле $A' = C^{-1}AC$ в готовом виде.
Что изучить дальше
Урок 172 «Собственные векторы и собственные значения» отвечает на вопрос, которым заканчивается этот урок: как искать направления, вдоль которых оператор действует простым растяжением, и как через них подбирать удачный базис. Урок 173 «Диагонализация матриц» доводит эту идею до критерия: когда матрицу удаётся привести к диагональному виду сменой базиса, а когда — нет, и что делать во втором случае. Урок 174 «Квадратичные формы» переносит технику на функции второго порядка и приведение к главным осям. Урок 175 «Евклидово пространство» добавляет к линейной структуре скалярное произведение, длины и углы — и там повороты и отражения получат точное определение через сохранение длин, а проекция — через ортогональность. Дальше по курсу появятся сингулярное разложение и жорданова форма — два разных ответа на вопрос «насколько простой можно сделать матрицу оператора».
Где это нужно в жизни
💻 Программирование. Компьютерная графика целиком построена на матрицах преобразований: каждый поворот камеры, масштабирование модели и проекция сцены на экран — это матрица $4\times4$ в однородных координатах, а сложная трансформация — их произведение. Игровые движки и графические API (OpenGL, Vulkan, WebGL) оперируют этими матрицами напрямую. В обработке изображений cv2.warpAffine и cv2.getRotationMatrix2D — прямая реализация материала урока.
🤖 ML/AI. Полносвязный слой — аффинное отображение; глубина сети имеет смысл только благодаря нелинейностям, разрывающим композицию линейных операторов. Свёртка — линейный оператор с разреженной структурой. Ранг слоя лежит в основе низкоранговых адаптеров (LoRA) и факторизации моделей. Ядро преобразования описывает информацию, теряемую в узких горлышках, а батчевая обработка — применение одного оператора к пачке векторов сразу.
📊 Data Science. Стандартизация и центрирование признаков — аффинные преобразования данных; отбеливание и линейные проекции в пространство меньшей размерности — линейные операторы, у которых ранг определяет, сколько информации сохранится. Матрица перехода между базисами — это буквально смена системы признаков, а инвариантность ранга объясняет, почему некоторые характеристики данных не зависят от выбранного представления.
🔬 Наука. В механике тензор деформации в линейном приближении — матрица оператора, переводящего вектор до деформации в вектор после; нулевой определитель означал бы схлопывание материала. В кристаллографии симметрии решётки описываются группами матриц поворотов и отражений. В квантовой механике состояния — векторы, а наблюдаемые — линейные операторы, и весь аппарат этого урока работает там дословно.
💰 Финансы. Портфель — вектор весов, а переход от весов активов к рискам и доходностям задаётся линейным оператором; факторные модели раскладывают доходности по базису факторов, и матрица перехода описывает смену набора факторов. Ядро матрицы факторных нагрузок соответствует комбинациям позиций, не несущим факторного риска, — на этом строятся хеджирующие портфели.
Интересные факты
-
Артур Кэли в «Memoir on the Theory of Matrices» (1858) определил умножение матриц именно как композицию линейных подстановок — то есть смысл, который мы разобрали в этом уроке, был первичен, а формальное правило «строка на столбец» вторично. В той же работе Кэли сформулировал знаменитую теорему Кэли — Гамильтона, полностью проверил её для матриц $2\times2$, вручную посчитал случай $3\times3$ и честно написал, что не считает нужным браться за формальное доказательство общего случая.
-
Слово «матрица» придумал Джеймс Джозеф Сильвестр в 1850 году, и происходит оно от латинского matrix — «утроба», «лоно». Логика была такая: сама таблица чисел интересовала математиков меньше, чем определители её подматриц, — а таблица служила «лоном», из которого эти определители (миноры) рождаются. То есть исторически матрица была вспомогательным объектом при определителях, и лишь Кэли сделал её самостоятельной сущностью.
-
Однородные координаты, в которых точка плоскости записывается тройкой $(x, y, 1)$, чтобы сдвиг стал линейным, ввёл Август Фердинанд Мёбиус в книге «Der barycentrische Calcul» (1827) — за полтора века до компьютерной графики и совсем для других целей: он изучал проективную геометрию и центры масс. Сегодня на этом трюке держатся все графические конвейеры и все аффинные аугментации изображений.
-
Феликс Клейн в Эрлангенской программе (1872) предложил определять геометрию через группу преобразований, оставляющих неизменными интересующие нас свойства. Евклидова геометрия — это инварианты движений, аффинная — инварианты обратимых линейных преобразований со сдвигами, проективная — ещё более широкой группы. Идея оказалась настолько плодотворной, что современная теория инвариантных нейросетей (эквивариантность к поворотам и сдвигам) — это, по сути, та же программа, применённая к архитектурам моделей.
-
Джузеппе Пеано в 1888 году в книге «Calcolo geometrico» дал полную аксиоматику векторного пространства над вещественными числами и определение линейного отображения — в форме, практически совпадающей с современной. Работу почти не заметили: она была написана по-итальянски, в непривычном тогда аксиоматическом стиле, и настоящее признание аксиоматический подход получил только в 1920-х годах, через тридцать с лишним лет, в работах Германа Вейля и Стефана Банаха.
Лайфхаки и полезные трюки
-
Проверяй линейность нулём — это бесплатно. Подставь $\mathbf{0}$ первым делом. Если результат ненулевой, отображение не линейно, и дальше можно не считать. Тест ловит все аффинные ловушки вида $(2x - 5,\ y)$ мгновенно.
-
Ищи в формуле «нелинейные» приметы. Квадраты, произведения переменных, модули, корни, синусы, свободные члены — любой из этих признаков означает, что отображение почти наверняка не линейно, и нужен контрпример. Если же каждая координата результата — сумма переменных с числовыми коэффициентами и без свободного члена, отображение линейно, и это можно писать сразу.
-
Матрицу оператора собирай подстановкой базисных векторов. Не выводи формулы в общем виде: подставь $(1,0,\dots,0)$, получишь первый столбец, подставь $(0,1,0,\dots)$ — второй, и так далее. Для операторов на многочленах и матрицах это единственный вменяемый способ не запутаться.
-
Проверяй построенную матрицу на одном векторе. Возьми любой несимметричный вектор вроде $(1, 2)$, посчитай образ по исходной формуле и умножением на матрицу. Совпало — матрица почти наверняка верна; не совпало — скорее всего, она транспонирована.
-
По определителю читай геометрию. $\det = 1$ — площадь сохранена (поворот или сдвиг); $\det = -1$ — площадь сохранена, ориентация перевёрнута (отражение); $\det = 0$ — схлопывание, оператор необратим, ядро непусто; $|\det| > 1$ — растяжение. Это позволяет за секунду сказать про матрицу главное, не решая систем.
-
Считай ядро и образ одним проходом Гаусса. Приведи матрицу к rref — и получишь сразу всё: ранг (число пивотов), базис образа (исходные столбцы с номерами пивотов), базис ядра (ФСР по свободным переменным) и проверку теоремы о ранге и дефекте. Два отдельных вычисления здесь не нужны.
-
В задачах на смену базиса всегда делай численный контроль. Посчитай $A' = C^{-1}AC$, возьми конкретный вектор $x'$ и проверь, что $A'x'$ совпадает с $C^{-1}A(Cx')$. Это ловит и перепутанные $C$ с $C^{-1}$, и арифметические ошибки в перемножении. Дешёвая предварительная проверка — сравнить след и определитель: они обязаны совпадать у $A$ и $A'$.
-
Для проверки подобия сначала считай инварианты. След и определитель считаются за секунды, и несовпадение любого из них сразу закрывает вопрос отрицательным ответом. Только если все инварианты совпали, есть смысл искать матрицу $C$ — и помнить, что совпадение само по себе ничего не доказывает.
Линейные преобразования — это точка, в которой линейная алгебра перестаёт быть набором вычислительных приёмов и становится геометрией. Матрица оказалась не таблицей чисел, а способом записать действие; умножение матриц — не правилом, а композицией; ранг и ядро — не характеристиками таблицы, а измерением того, что оператор сохранил и что потерял. Теорема о ранге и дефекте связала эти два измерения законом сохранения, а формула $A' = C^{-1}AC$ показала, что сами числа в матрице — вопрос удачного выбора координат. Отсюда прямая дорога к следующему вопросу: какой выбор координат самый удачный, и что делать, когда идеального выбора не существует.
Понял тему? Закрепи в боте! 🚀
Попрактикуйся на задачах и получи персональные рекомендации от AI
💪 Начать тренировку