🔴 Сложный ⏱️ 50 минут

Ранг матрицы

📋 Содержание урока

Ранг матрицы 🧮

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

Ранг — одно из тех понятий линейной алгебры, которое сначала кажется чисто техническим (посчитал строки, привёл к ступенчатому виду, готово), а потом внезапно оказывается, что на нём держится половина машинного обучения. PCA ищет направления максимальной дисперсии, опираясь на ранг ковариационной матрицы. Сжатие весов нейросети через низкоранговые аппроксимации (LoRA, если ты уже слышал этот термин, — это буквально «Low-Rank Adaptation») экономит миллионы параметров. Рекомендательные системы вроде тех, что победили в конкурсе Netflix Prize, представляют матрицу оценок как произведение двух низкоранговых матриц. И даже банальный вопрос «а сколько решений у этой системы уравнений» без ранга не имеет ответа.

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

Давай разберёмся, что такое ранг на самом деле, как находить его руками (а не только через numpy.linalg.matrix_rank), и почему без этого понятия невозможно по-настоящему понять, что происходит внутри современных ML-моделей.

История: откуда это взялось?

Термин «ранг» (rank) в линейной алгебре ввёл английский математик Джеймс Джозеф Сильвестр в середине XIX века — тот самый Сильвестр, который придумал и само слово «матрица» в 1850 году. Он работал в области теории инвариантов вместе со своим другом и соавтором Артуром Кэли (тем самым, который в 1858 году формализовал обратную матрицу — мы упоминали его в прошлом уроке). Сильвестра интересовал вопрос: сколько «независимой информации» на самом деле содержится в системе линейных форм, если некоторые из них можно выразить через другие? Ответом стало число, которое он назвал рангом.

Дальнейшее развитие идея получила в работах немецкого математика Георга Фробениуса в 1870–1880-х годах — он связал ранг с минорами матрицы и показал, как вычислять его через определители подматриц. А в конце XIX века немецкий математик Леопольд Кронекер и независимо итальянский математик Альфредо Капелли доказали теорему, которая носит их имена и до сих пор остаётся золотым стандартом анализа систем линейных уравнений: система совместна тогда и только тогда, когда ранг матрицы коэффициентов равен рангу расширенной матрицы. Об этой теореме мы поговорим подробнее в конце урока — она станет мостиком к следующей теме.

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

Что такое ранг матрицы: интуиция через независимые направления

Представь матрицу как набор векторов-строк (или векторов-столбцов — неважно, к этому мы ещё вернёмся). Каждая строка — это стрелка в пространстве. Ранг матрицы отвечает на вопрос: сколько из этих стрелок «независимы», то есть не могут быть получены сложением и растяжением остальных?

Аналогия из жизни: представь команду из пяти аналитиков, каждый из которых даёт тебе прогноз по рынку в виде набора чисел. Если один из аналитиков всегда просто удваивает прогноз другого (механически, без своей информации), то реально независимых мнений у тебя не пять, а четыре — этот аналитик не добавляет ничего нового. Если ещё один аналитик всегда выдаёт среднее арифметическое прогнозов двух других, его тоже можно «вычесть» — он тоже не добавляет независимой информации. Ранг — это количество аналитиков, чьё мнение действительно нельзя предсказать, зная мнения остальных.

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

Определение: Рангом матрицы $A$ называется максимальное число линейно независимых строк матрицы. Обозначается $\text{rank}(A)$ или $r(A)$.

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

Для матрицы $A$ размера $m \times n$ всегда выполняется:

$$0 \le \text{rank}(A) \le \min(m, n)$$

То есть ранг не может превышать ни количество строк, ни количество столбцов — это же логично: если у тебя всего 3 строки, откуда взяться четырём независимым направлениям?

Как найти ранг: метод элементарных преобразований

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

Элементарные преобразования строк, которые не меняют ранг матрицы:

  • перестановка двух строк местами;

  • умножение строки на ненулевое число;

  • прибавление к одной строке другой строки, умноженной на любое число.

Ключевой факт, на котором держится весь метод: ни одно из этих преобразований не меняет ранг матрицы. Интуитивно это понятно — мы не добавляем и не убираем никакой информации, а только по-другому её «переупаковываем». Формально это доказывается через то, что элементарные преобразования не меняют линейную оболочку (span) строк матрицы — то есть множество всех их линейных комбинаций остаётся тем же самым.

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

Определение (эквивалентная формулировка): Ранг матрицы равен количеству ненулевых строк в её ступенчатом виде — то есть количеству «пивотов» (ведущих элементов).

Давай разберёмся на трёх примерах — от простого к сложному — как это работает руками.

Пример 1 (лёгкий): матрица 3×3 с очевидной зависимостью

Найдём ранг матрицы

$$A = \begin{pmatrix} 1 & 2 & 3 \\ 2 & 4 & 6 \\ 1 & 1 & 1 \end{pmatrix}$$

Шаг 1. Обнуляем первый столбец под ведущим элементом $a_{11} = 1$:

$$R_2 \to R_2 - 2R_1: \quad (2 - 2 \cdot 1,\ 4 - 2 \cdot 2,\ 6 - 2 \cdot 3) = (0, 0, 0)$$$$R_3 \to R_3 - R_1: \quad (1 - 1,\ 1 - 2,\ 1 - 3) = (0, -1, -2)$$

Получаем:

$$\begin{pmatrix} 1 & 2 & 3 \\ 0 & 0 & 0 \\ 0 & -1 & -2 \end{pmatrix}$$

Шаг 2. Строка $(0, 0, 0)$ — нулевая, её нужно переставить в конец (или просто не учитывать):

$$\begin{pmatrix} 1 & 2 & 3 \\ 0 & -1 & -2 \\ 0 & 0 & 0 \end{pmatrix}$$

Результат: две ненулевые строки $\Rightarrow \text{rank}(A) = 2$.

Заметь, что произошло: вторая строка матрицы $A$ оказалась ровно вдвое больше первой ($2 \cdot (1,2,3) = (2,4,6)$), поэтому она не добавила ничего нового и «схлопнулась» в ноль при вычитании.

Пример 2 (средний): матрица 3×4 со скрытой зависимостью

Теперь возьмём матрицу, где зависимость не видна на глаз сразу:

$$B = \begin{pmatrix} 1 & 2 & -1 & 3 \\ 2 & -1 & 1 & -1 \\ 3 & 1 & 0 & 2 \end{pmatrix}$$

Шаг 1. Обнуляем первый столбец:

$$R_2 \to R_2 - 2R_1: \quad (0,\ -5,\ 3,\ -7)$$$$R_3 \to R_3 - 3R_1: \quad (0,\ -5,\ 3,\ -7)$$

Получаем:

$$\begin{pmatrix} 1 & 2 & -1 & 3 \\ 0 & -5 & 3 & -7 \\ 0 & -5 & 3 & -7 \end{pmatrix}$$

Шаг 2. Строки 2 и 3 оказались одинаковыми! Вычитаем:

$$R_3 \to R_3 - R_2: \quad (0, 0, 0, 0)$$$$\begin{pmatrix} 1 & 2 & -1 & 3 \\ 0 & -5 & 3 & -7 \\ 0 & 0 & 0 & 0 \end{pmatrix}$$

Результат: $\text{rank}(B) = 2$.

Если проверить, окажется, что третья строка исходной матрицы — это в точности сумма первых двух: $(1,2,-1,3) + (2,-1,1,-1) = (3,1,0,2)$. В терминах датчиков или признаков: третья строка была полностью избыточной, просто эта избыточность не была видна невооружённым глазом, пока мы не сделали редукцию.

Пример 3 (сложный): матрица 4×4 с перестановкой строк

Разберём случай, где потребуется несколько шагов и перестановка строк:

$$C = \begin{pmatrix} 0 & 1 & 2 & -1 \\ 1 & 0 & -1 & 2 \\ 2 & 1 & 0 & 1 \\ 1 & 2 & 3 & 0 \end{pmatrix}$$

Шаг 1. В первой строке на месте ведущего элемента стоит ноль — переставляем строки 1 и 2:

$$\begin{pmatrix} 1 & 0 & -1 & 2 \\ 0 & 1 & 2 & -1 \\ 2 & 1 & 0 & 1 \\ 1 & 2 & 3 & 0 \end{pmatrix}$$

Шаг 2. Обнуляем первый столбец:

$$R_3 \to R_3 - 2R_1: \quad (0, 1, 2, -3)$$$$R_4 \to R_4 - R_1: \quad (0, 2, 4, -2)$$$$\begin{pmatrix} 1 & 0 & -1 & 2 \\ 0 & 1 & 2 & -1 \\ 0 & 1 & 2 & -3 \\ 0 & 2 & 4 & -2 \end{pmatrix}$$

Шаг 3. Обнуляем второй столбец ниже пивота:

$$R_3 \to R_3 - R_2: \quad (0, 0, 0, -2)$$$$R_4 \to R_4 - 2R_2: \quad (0, 0, 0, 0)$$$$\begin{pmatrix} 1 & 0 & -1 & 2 \\ 0 & 1 & 2 & -1 \\ 0 & 0 & 0 & -2 \\ 0 & 0 & 0 & 0 \end{pmatrix}$$

Результат: три ненулевые строки $\Rightarrow \text{rank}(C) = 3$.

Обрати внимание на любопытную деталь: третий столбец вообще не получил своего пивота (пивоты стоят в столбцах 1, 2 и 4) — это совершенно нормально и часто встречается. Ступенчатый вид не обязан иметь пивот в каждом столбце, если столбцов больше, чем ранг матрицы.

Почему это важно: метод элементарных преобразований — единственный практичный способ находить ранг матриц размером больше 2×2 или 3×3 вручную (и именно он лежит в основе numpy.linalg.matrix_rank — хотя там используется более численно устойчивый вариант через сингулярные значения, а не наивный метод Гаусса). А теперь попробуй сам: возьми любую матрицу 3×3, придумай её так, чтобы третья строка была суммой первых двух, и проверь, что ранг действительно окажется равен 2.

Ранг и невырожденность: связь с прошлым уроком

В прошлом уроке про обратную матрицу мы выяснили, что $A^{-1}$ существует тогда и только тогда, когда $\det(A) \ne 0$. Ранг даёт этому факту красивую переформулировку, которая работает не только для квадратных матриц.

Определение (для квадратных матриц): Квадратная матрица $A$ размера $n \times n$ называется невырожденной (или матрицей полного ранга), если $\text{rank}(A) = n$. Это эквивалентно условиям $\det(A) \ne 0$ и существованию $A^{-1}$.

Если ранг квадратной матрицы меньше её размера ($\text{rank}(A) < n$), матрица называется вырожденной — у неё нет обратной, а её определитель равен нулю.

Пример: матрица

$$D = \begin{pmatrix} 2 & 1 \\ 1 & 3 \end{pmatrix}$$

Приводим к ступенчатому виду: $R_2 \to R_2 - \frac{1}{2}R_1 = (0, 3 - 0.5) = (0, 2.5)$. Две ненулевые строки $\Rightarrow \text{rank}(D) = 2 = n$. Матрица невырожденная, и действительно $\det(D) = 2 \cdot 3 - 1 \cdot 1 = 5 \ne 0$ — обратная матрица существует.

Почему это важно: теперь у тебя есть два равносильных способа проверить обратимость квадратной матрицы — через определитель (быстрее для матриц 2×2 и 3×3) или через ранг (надёжнее для больших матриц, где считать определитель вручную мучительно). В библиотеках вроде NumPy для проверки обратимости и вычисления обратной матрицы на практике почти всегда используют разложения, связанные именно с рангом, а не наивное вычисление определителя — оно численно неустойчиво для больших матриц.

Ранг и машинное обучение: почему это не просто абстракция

Вот где ранг матрицы перестаёт быть учебным упражнением и становится рабочим инструментом.

Мультиколлинеарность и избыточные признаки. Если в твоём датасете один признак линейно выражается через другие (площадь в футах через площадь в метрах, или — более коварный случай — суммарный доход семьи через доходы каждого из супругов), матрица признаков теряет ранг. Это напрямую ломает линейную регрессию: формула $\hat{\beta} = (X^TX)^{-1}X^Ty$ требует, чтобы $X^TX$ была обратима, а если $\text{rank}(X) < n$ (число признаков), то $X^TX$ вырождена, и обратной матрицы просто не существует. Именно поэтому перед обучением линейных моделей проверяют мультиколлинеарность признаков — это прямое следствие ранга.

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

Низкоранговая аппроксимация. Представь матрицу оценок пользователей фильмам — миллионы пользователей, тысячи фильмов. Если бы каждый пользователь оценивал фильмы совершенно независимо от всех остальных, эта матрица имела бы огромный ранг. Но на практике вкусы предсказуемы: любители фантастики любят фантастику, а не случайный набор фильмов. Поэтому такую матрицу можно хорошо приблизить матрицей низкого ранга — произведением двух намного меньших матриц (это и есть идея сингулярного разложения, SVD, к которому вы придёте в одном из следующих модулей курса). Ровно на этом принципе работали алгоритмы-победители конкурса Netflix Prize, и ровно этот же принцип лежит в основе техники LoRA для дообучения больших языковых моделей: вместо обновления всей матрицы весов (миллионы параметров) обучается низкоранговая поправка к ней — на порядки меньше параметров, но результат почти неотличим.

Рассмотрим совсем простой числовой пример матрицы ранга 1, чтобы почувствовать идею:

$$M = \begin{pmatrix} 5 & 4 & 3 \\ 10 & 8 & 6 \\ 15 & 12 & 9 \end{pmatrix}$$

Каждая строка здесь — просто кратное строки $(5, 4, 3)$: вторая строка умножена на 2, третья — на 3. Значит, $\text{rank}(M) = 1$, и всю матрицу $3 \times 3$ (9 чисел) можно восстановить всего из 6 чисел: вектора-строки $(5,4,3)$ и вектора коэффициентов $(1, 2, 3)$. В терминах пользователей и фильмов это означало бы, что все три «пользователя» оценивают фильмы в одной и той же пропорции, различаясь только общей «щедростью» оценок — крайний, но показательный случай сжатия информации через низкий ранг.

Ранг и число решений системы уравнений: анонс следующей темы

Мы неспроста изучили ранг именно сейчас, между обратной матрицей и системами линейных уравнений. Дело в том, что ранг — это ключ к главному вопросу, который возникает при решении любой системы $Ax = b$: есть ли у неё решения, и если да, то сколько?

Ответ даёт знаменитая теорема Кронекера — Капелли, которую мы подробно разберём в следующем уроке. Пока — только анонс идеи. Составим расширенную матрицу системы $[A \mid b]$, добавив к матрице коэффициентов столбец свободных членов. Тогда:

  • если $\text{rank}(A) \ne \text{rank}([A \mid b])$ — система несовместна (решений нет вообще);

  • если $\text{rank}(A) = \text{rank}([A \mid b]) = n$ (числу неизвестных) — система имеет единственное решение;

  • если $\text{rank}(A) = \text{rank}([A \mid b]) < n$ — система имеет бесконечно много решений.

Быстрый пример, чтобы почувствовать механику: возьмём систему $x + 2y - z = 3$, $2x + 4y - 2z = 7$. Матрица коэффициентов $A = \begin{pmatrix} 1 & 2 & -1 \\ 2 & 4 & -2 \end{pmatrix}$ имеет ранг 1 (вторая строка — удвоенная первая). А расширенная матрица $[A \mid b] = \begin{pmatrix} 1 & 2 & -1 & 3 \\ 2 & 4 & -2 & 7 \end{pmatrix}$ после вычитания $R_2 - 2R_1$ даёт строку $(0, 0, 0, 1)$ — ненулевую! Значит, $\text{rank}([A \mid b]) = 2 \ne 1 = \text{rank}(A)$, и система решений не имеет: второе уравнение противоречит первому (по сути требует, чтобы $6 = 7$, что невозможно).

Именно вот эту логику — сравнение двух рангов — мы разовьём в полноценную теорию в следующем уроке. А сейчас закрепим саму технику вычисления ранга на практике.

Практика: 30 заданий

Базовые задания (1–10)

Задание 1. Найди ранг матрицы $A = \begin{pmatrix} 1 & 0 & 3 \\ 0 & 1 & -2 \end{pmatrix}$.


Задание 2. Найди ранг матрицы $B = \begin{pmatrix} 1 & 2 & 3 \\ 2 & 4 & 6 \end{pmatrix}$.


Задание 3. Найди ранг единичной матрицы $I_3 = \begin{pmatrix} 1 & 0 & 0 \\ 0 & 1 & 0 \\ 0 & 0 & 1 \end{pmatrix}$.


Задание 4. Найди ранг матрицы $C = \begin{pmatrix} 2 & -1 & 4 \\ 0 & 0 & 0 \\ 1 & 3 & -2 \end{pmatrix}$.


Задание 5. Найди ранг матрицы $D = \begin{pmatrix} 1 & 1 & 0 \\ 0 & 1 & 1 \\ 1 & 2 & 1 \end{pmatrix}$.


Задание 6 (ML). Датасет из 4 наблюдений с признаками «рост в см» (столбец 1), «рост в дюймах» (столбец 2, дублирует столбец 1) и «вес» (столбец 3):

$$E = \begin{pmatrix} 1 & 1 & 5 \\ 2 & 2 & 3 \\ 3 & 3 & 8 \\ 4 & 4 & 1 \end{pmatrix}$$

Найди ранг матрицы и объясни, что это значит для модели.


Задание 7. Найди ранг матрицы $F = \begin{pmatrix} 3 & 6 \\ 1 & 2 \end{pmatrix}$.


Задание 8. Найди ранг диагональной матрицы $G = \text{diag}(5, 0, 3) = \begin{pmatrix} 5 & 0 & 0 \\ 0 & 0 & 0 \\ 0 & 0 & 3 \end{pmatrix}$.


Задание 9. Найди ранг матрицы $H = \begin{pmatrix} 1 & -1 & 2 \\ 2 & -2 & 4 \\ 3 & 0 & 1 \end{pmatrix}$.


Задание 10 (ML). Три датчика фиксируют показания в 4 моментах времени, причём третий датчик дублирует первый с коэффициентом 2 (например, измеряет то же самое в других единицах):

$$K = \begin{pmatrix} 1 & 2 & 3 & 4 \\ 0 & 1 & 1 & 2 \\ 2 & 4 & 6 & 8 \end{pmatrix}$$

Сколько реально независимых датчиков в этой системе?

Средние задания (11–20)

Задание 11. Найди ранг матрицы $\begin{pmatrix} 1 & 2 & 1 \\ 3 & 7 & 4 \\ 2 & 5 & 3 \end{pmatrix}$.


Задание 12. Найди ранг матрицы $\begin{pmatrix} 1 & 1 & 2 & 3 \\ 2 & 1 & 3 & 4 \\ 1 & 2 & 3 & 5 \end{pmatrix}$.


Задание 13. Найди ранг матрицы $\begin{pmatrix} 1 & 0 & 2 & 1 \\ 0 & 1 & -1 & 2 \\ 2 & 1 & 3 & 4 \\ 1 & -1 & 5 & -1 \end{pmatrix}$.


Задание 14 (ML). В таблице успеваемости признак 3 — это сумма признаков 1 и 2 (например, «суммарный балл» = «балл за тест» + «балл за проект»):

$$\begin{pmatrix} 1 & 2 & 3 \\ 2 & -1 & 1 \\ 0 & 1 & 1 \\ 3 & 0 & 3 \end{pmatrix}$$

Найди ранг и объясни результат.


Задание 15. Найди ранг матрицы $\begin{pmatrix} 2 & 1 & 3 \\ 1 & 4 & -1 \\ 3 & 5 & 2 \end{pmatrix}$.


Задание 16 (ML). Веса трёх нейронов одного слоя записаны как строки матрицы, причём второй нейрон — точная копия первого с удвоенными весами:

$$\begin{pmatrix} 2 & 1 & 3 \\ 4 & 2 & 6 \\ 1 & 1 & 2 \end{pmatrix}$$

Найди ранг и оцени, сколько нейронов реально нужно.


Задание 17. Найди ранг матрицы $\begin{pmatrix} 1 & 0 & 0 & 1 \\ 0 & 1 & 0 & 2 \\ 0 & 0 & 1 & 3 \\ 1 & 2 & 3 & 0 \end{pmatrix}$.


Задание 18 (ML). У четырёх студентов записаны баллы по математике, физике и средний балл (среднее арифметическое первых двух):

$$\begin{pmatrix} 80 & 60 & 70 \\ 60 & 80 & 70 \\ 100 & 60 & 80 \\ 40 & 80 & 60 \end{pmatrix}$$

Найди ранг.


Задание 19. Найди ранг матрицы $\begin{pmatrix} 1 & 3 & -1 & 2 \\ 2 & 7 & 1 & 4 \\ 3 & 8 & -6 & 7 \end{pmatrix}$.


Задание 20 (ML). Датасет из 4 наблюдений и 3 полностью независимых признаков (без дублирования):

$$\begin{pmatrix} 1 & 0 & 1 \\ 0 & 1 & 1 \\ 1 & 1 & 0 \\ 2 & 1 & 3 \end{pmatrix}$$

Найди ранг и сравни с предыдущими «избыточными» примерами.

Продвинутые задания (21–30)

Задание 21. При каких значениях параметра $a$ ранг матрицы $\begin{pmatrix} 1 & 2 & 3 \\ 2 & 4 & 6 \\ 3 & 6 & a \end{pmatrix}$ равен 1, а при каких — 2?


Задание 22. При каких значениях параметра $b$ матрица $\begin{pmatrix} 1 & 1 & b \\ 1 & b & 1 \\ b & 1 & 1 \end{pmatrix}$ вырождена (то есть имеет ранг меньше 3)? Найди ранг в каждом из этих случаев.


Задание 23. Дана матрица $A = \begin{pmatrix} 1 & 2 & 0 \\ 0 & 1 & 1 \end{pmatrix}$. Вычисли $A^TA$ и убедись, что $\text{rank}(A^TA) = \text{rank}(A)$.


Задание 24. Даны матрицы $A = \begin{pmatrix} 1 & 2 \\ 2 & 4 \end{pmatrix}$ и $B = \begin{pmatrix} -1 & -2 \\ 1 & 2 \end{pmatrix}$. Проверь на этом примере неравенство $\text{rank}(A+B) \le \text{rank}(A) + \text{rank}(B)$.


Задание 25. Система уравнений: $x + 2y - z = 3$, $2x + 4y - 2z = 7$. Сравни ранг матрицы коэффициентов и ранг расширенной матрицы. Есть ли у системы решения?


Задание 26. При каком значении $c$ система $x + y + z = 2$, $2x + 2y + 2z = c$ совместна? Сколько у неё будет решений в этом случае?


Задание 27 (ML). Матрица оценок пользователей фильмам:

$$R = \begin{pmatrix} 5 & 4 & 3 \\ 10 & 8 & 6 \\ 15 & 12 & 9 \end{pmatrix}$$

Найди ранг и объясни, что это значит с точки зрения рекомендательной системы.


Задание 28. Найди ранг матрицы $\begin{pmatrix} 2 & -1 & 3 & 1 \\ 1 & 1 & -1 & 2 \\ 3 & 0 & 2 & 3 \\ 0 & 3 & -5 & 3 \end{pmatrix}$.


Задание 29. Дана матрица $A = \begin{pmatrix} 2 & 1 & 0 \\ 0 & 2 & 0 \\ 0 & 0 & 3 \end{pmatrix}$. Найди все значения $\lambda$, при которых $\text{rank}(A - \lambda I) < 3$.


Задание 30 (ML, капстоун). Пять точек в трёхмерном пространстве: $(1,2,3)$, $(2,1,3)$, $(0,3,3)$, $(4,-1,3)$, $(5,0,5)$. Запиши их как матрицу $5 \times 3$ и найди её ранг. Что это говорит об истинной размерности данных?

Частые ошибки

Ошибка 1. «Ранг матрицы равен количеству строк или столбцов».

Правильно: ранг может быть меньше, если строки (или столбцы) линейно зависимы. Всегда верно только неравенство $\text{rank}(A) \le \min(m, n)$.

Ошибка 2. «У квадратной матрицы ранг всегда равен её размеру».

Правильно: это верно только для невырожденных матриц ($\det \ne 0$). Вырожденная квадратная матрица имеет ранг строго меньше своего размера — как раз в задании 22 мы видели матрицу 3×3 с рангом 1 и 2 при разных значениях параметра.

Ошибка 3. Путают ранг матрицы с определителем.

Правильно: определитель — это одно число, определённое только для квадратных матриц, а ранг определён для матриц любого размера и говорит о числе независимых направлений, а не о «величине» матрицы. Связь между ними одна: для квадратной матрицы $\det = 0 \Leftrightarrow \text{rank} < n$.

Ошибка 4. Забывают, что элементарные преобразования нельзя заменять произвольными операциями со строками.

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

Ошибка 5. Считают ступенчатый вид неоднозначным и потому «неправильным» способом искать ранг.

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

Ошибка 6. При анализе системы уравнений путают ранг матрицы коэффициентов $A$ с рангом расширенной матрицы $[A \mid b]$.

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

Главное запомнить

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

  • Для матрицы размера $m \times n$ всегда $0 \le \text{rank}(A) \le \min(m, n)$.

  • Ранг находится приведением матрицы к ступенчатому виду с помощью элементарных преобразований строк — количество ненулевых строк и есть ранг.

  • Элементарные преобразования (перестановка строк, умножение на ненулевое число, прибавление кратной строки) не меняют ранг матрицы.

  • Для квадратной матрицы $\text{rank}(A) = n \Leftrightarrow \det(A) \ne 0 \Leftrightarrow$ матрица невырождена и имеет обратную $A^{-1}$.

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

  • $\text{rank}(A^TA) = \text{rank}(A)$ — на этом свойстве держится корректность линейной регрессии и вычисление ковариационной матрицы в PCA.

  • Низкий ранг матрицы позволяет сжимать её — представлять как произведение двух меньших матриц (идея, лежащая в основе SVD, рекомендательных систем и LoRA).

  • Для системы уравнений $Ax = b$ сравнение $\text{rank}(A)$ и $\text{rank}([A \mid b])$ отвечает на вопрос о существовании и количестве решений (теорема Кронекера — Капелли, следующий урок).

  • Ступенчатый вид не обязан иметь пивот в каждом столбце — «пропущенные» столбцы просто означают, что соответствующая переменная не связана с пивотом напрямую.

Связь с другими темами курса

Ранг матрицы — это точка пересечения почти всех тем, которые вы уже изучили в этом разделе курса. Из урока 158–160 про определители и миноры пришло понимание того, что такое линейная зависимость строк и столбцов через нулевой определитель — ранг обобщает эту идею на прямоугольные матрицы, где определителя вообще не существует. Из урока 161 про обратную матрицу пришла связь «невырожденность = обратимость» — теперь вы знаете, что это частный случай более общего факта про ранг: $\text{rank}(A) = n \Leftrightarrow A$ обратима.

А вот куда ранг ведёт дальше. В следующем уроке (163) про системы линейных уравнений ранг станет главным инструментом: теорема Кронекера — Капелли, которую мы только анонсировали, полностью определит, сколько решений имеет любая система — ни одного, ровно одно или бесконечно много — просто через сравнение двух рангов. Дальше, в темах про векторные пространства и линейную зависимость векторов, ранг превратится в размерность пространства строк или столбцов матрицы — то же самое понятие, но уже в более общем геометрическом облачении. А ещё дальше, когда вы дойдёте до собственных векторов и сингулярного разложения (SVD), ранг станет инструментом для сжатия данных и построения низкоранговых приближений — той самой техники, что стоит за PCA, рекомендательными системами и современными методами эффективного дообучения нейросетей.

Интересные факты

  • Термин «ранг» ввёл Джеймс Джозеф Сильвестр — тот же математик, что придумал слово «матрица» в 1850 году. Английское слово rank при этом буквально означает «звание» или «чин» — по аналогии с иерархией, где ранг матрицы показывает её «уровень информативности».

  • В отличие от матричного ранга, который вычисляется за полиномиальное время методом Гаусса, ранг тензора (многомерного обобщения матрицы — куба или гиперкуба чисел) вычислить точно в общем случае вычислительно неразрешимо (NP-трудная задача). Это одна из причин, почему тензорные разложения в глубоком обучении — куда более тонкое искусство, чем матричные.

  • Алгоритмы-победители конкурса Netflix Prize (2006–2009 годы, приз $1 000 000 за улучшение точности рекомендаций на 10%) почти все опирались на факторизацию матрицы оценок в произведение двух низкоранговых матриц — прямое практическое применение идеи, которую мы разбирали в задании 27.

  • Сжатие изображений через усечённое сингулярное разложение (truncated SVD) заменяет матрицу пикселей изображения на приближение сильно меньшего ранга — иногда ранг 20–50 вместо нескольких сотен уже даёт визуально неотличимую картинку, потому что реальные изображения обычно далеки от «максимально возможного» ранга.

  • Метод LoRA (Low-Rank Adaptation), один из самых популярных способов дообучать большие языковые модели в 2020-х годах, буквально построен на идее ранга: вместо обновления всей матрицы весов размером, скажем, $4096 \times 4096$ (16 миллионов чисел), обучается поправка ранга 8–16, которая представляется как произведение двух матриц $4096 \times 16$ и $16 \times 4096$ — то есть меньше 200 тысяч параметров вместо 16 миллионов.

Лайфхаки и полезные трюки

  • Прежде чем делать полную редукцию, бегло проверь строки и столбцы «на глаз» на пропорциональность — часто зависимость видна сразу, и не нужно тратить время на вычисления.

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

  • Выбирай порядок строк так, чтобы ведущий элемент был «удобным» числом — единицей или числом, на которое остальные элементы делятся без остатка. Это резко уменьшает количество дробей в вычислениях (как в примере 3, где мы специально переставили строки).

  • Ранг не меняется при транспонировании матрицы: если строк много, а столбцов мало, иногда удобнее транспонировать матрицу и работать со столбцами как со строками — вычислений будет меньше.

  • В NumPy результат всегда можно быстро проверить: np.linalg.matrix_rank(A). Полезно сверяться с этой функцией, пока набиваешь руку на вычислениях вручную — она использует численно устойчивый метод через сингулярные значения, а не наивную редукцию, поэтому иногда может немного отличаться на матрицах с почти-зависимыми (но не точно зависимыми) строками из-за погрешностей округления.

  • Если при анализе датасета видишь, что корреляция между двумя признаками близка к 1 или $-1$, это сигнал возможной потери ранга матрицы признаков — стоит явно проверить ранг перед тем, как обучать линейную модель.

  • Элементарные преобразования допустимы и для столбцов, а не только для строк — если тебе удобнее работать со столбцами (например, столбцов заметно меньше, чем строк), можно применить весь тот же метод к транспонированной матрице.

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

Понял тему? Закрепи в боте! 🚀

Попрактикуйся на задачах и получи персональные рекомендации от AI

💪 Начать тренировку
💬 Есть вопрос? Спроси бота!