Алгебра
Выражения и уравнения
Аль-Хорезми написал книгу в Багдаде в 820 году. Слово «алгебра» - от «аль-джабр» из её названия. Слово «алгоритм» - от его имени. Один человек, один трактат - и оба слова, которые теперь определяют индустрию. Задачи, которые он решал: раздел наследства. Задачи, которые решают сейчас теми же методами: обучение нейросетей на миллиардах параметров.
- **Нормальное уравнение в ML:** $\hat{\theta} = (X^TX)^{-1}X^Ty$ - это квадратная минимизация, решённая через ту же формулу дискриминанта. sklearn LinearRegression использует его для небольших датасетов.
- **PolynomialFeatures в sklearn:** линейная модель + многочленные признаки = нелинейная регрессия без смены алгоритма. RBF kernel - это бесконечный многочлен в пространстве признаков.
- **Forward pass нейросети:** каждый линейный слой решает систему $y = Wx + b$. BLAS-рутины, оптимизированные под конкретный CPU/GPU, делают это за наносекунды.
Многочлены
**820 год, Багдад.** Мухаммад аль-Хорезми пишет книгу «Китаб аль-мухтасар фи хисаб аль-джабр». Слово «алгебра» - от «аль-джабр» (восстановление). Слово «алгоритм» - от имени самого аль-Хорезми. Один человек дал нам оба слова. Он решал задачи о наследстве. Через 1200 лет его методы обучают нейросети.
**Многочлен** - это выражение вида $a_n x^n + a_{n-1} x^{n-1} + \ldots + a_1 x + a_0$, где $a_i$ - коэффициенты, $n$ - **степень** (наибольшая степень переменной с ненулевым коэффициентом). Степень суммы не превышает максимума степеней. Степень произведения равна их сумме.
| Многочлен | Степень | Старший коэффициент | Свободный член |
|---|---|---|---|
| $5x^3 - 2x + 7$ | 3 | 5 | 7 |
| $x^2 - 4$ | 2 | 1 | -4 |
| $-3x + 1$ | 1 | -3 | 1 |
| $42$ | 0 | 42 | 42 |
| $0$ | не определена | - | 0 |
Многочлен - это обобщение числа. Число $237 = 2 \cdot 10^2 + 3 \cdot 10 + 7$ - это многочлен $2x^2 + 3x + 7$ при $x = 10$. Сложение, вычитание, умножение - по тем же правилам. В ML это прямо применяется: sklearn `PolynomialFeatures` превращает признак $x$ в $[1, x, x^2, \ldots, x^d]$. Линейная модель поверх таких признаков обучается нелинейным зависимостям.
Какова степень многочлена $(x^2 + 1)(x^3 - x)$?
Разложение на множители
**Факторизация** - это операция, обратная раскрытию скобок. Но за ней стоит кое-что глубже: алгоритм обратного распространения ошибки (backprop) в нейросетях - это по сути факторизация вычислительного графа. Правило цепи $\frac{dL}{dx} = \frac{dL}{dz} \cdot \frac{dz}{dx}$ разбивает сложную производную на простые множители. PyTorch делает это автоматически для любой функции.
**Ключевой принцип:** если произведение равно нулю, хотя бы один множитель равен нулю. Именно это превращает сложное уравнение в несколько простых: $p(x) = 0 \Rightarrow (x - r_1)(x - r_2) \ldots = 0$.
| Приём | Формула | Пример |
|---|---|---|
| Общий множитель | $ab + ac = a(b+c)$ | $6x^3 + 4x^2 = 2x^2(3x+2)$ |
| Разность квадратов | $a^2 - b^2 = (a-b)(a+b)$ | $x^2 - 9 = (x-3)(x+3)$ |
| Квадрат суммы | $a^2 + 2ab + b^2 = (a+b)^2$ | $x^2 + 6x + 9 = (x+3)^2$ |
| Квадрат разности | $a^2 - 2ab + b^2 = (a-b)^2$ | $x^2 - 10x + 25 = (x-5)^2$ |
| Сумма кубов | $a^3 + b^3 = (a+b)(a^2-ab+b^2)$ | $x^3 + 8 = (x+2)(x^2-2x+4)$ |
| Разность кубов | $a^3 - b^3 = (a-b)(a^2+ab+b^2)$ | $x^3 - 27 = (x-3)(x^2+3x+9)$ |
**Не все многочлены разложимы над вещественными числами.** $x^2 + 1$ не раскладывается в R, но раскладывается в C: $(x+i)(x-i)$. Такой многочлен называется **неприводимым** над R.
Разложите $x^4 - 1$ на множители полностью:
Квадратные уравнения
**Нормальное уравнение линейной регрессии:** $\hat{\theta} = (X^TX)^{-1}X^Ty$. Это квадратная минимизация - берут $L = \|X\theta - y\|^2$, берут производную и приравнивают нулю. Та же операция, что в квадратном уравнении $ax^2 + bx + c = 0$. Просто переменная - не $x \in \mathbb{R}$, а $\theta \in \mathbb{R}^d$, матрица весов.
От Вавилона до нормального уравнения
Вавилонские математики решали квадратные уравнения геометрически за 2000 лет до н.э. - дополнением до квадрата. Аль-Хорезми в IX веке систематизировал методы. Общая формула через дискриминант появилась в Европе в XVI веке. В 1801 году Гаусс применил ту же идею минимизации квадратичной функции для предсказания орбиты астероида Церера - это стало методом наименьших квадратов.
**Дискриминант** $D = b^2 - 4ac$ определяет природу корней: $D > 0$ - два разных вещественных, $D = 0$ - один кратный, $D < 0$ - два комплексных. Формула: $x = \frac{-b \pm \sqrt{D}}{2a}$. В SVM дискриминант появляется в условии отступа: разделяющая гиперплоскость существует при $D \geq 0$.
**Теорема Виета** - связь между корнями и коэффициентами без явного решения. Для $ax^2 + bx + c = 0$ с корнями $x_1, x_2$: $x_1 + x_2 = -b/a$ и $x_1 x_2 = c/a$. Это быстрый способ подобрать корни «в уме» для простых уравнений. Аналог Виета есть и для кубических - формулы Виета-Кардано.
| Свойство | Формула | Пример для $x^2 - 5x + 6 = 0$ |
|---|---|---|
| Сумма корней | $x_1 + x_2 = -b/a$ | $3 + 2 = 5 = -(-5)/1$ |
| Произведение корней | $x_1 x_2 = c/a$ | $3 \cdot 2 = 6 = 6/1$ |
Уравнение $2x^2 + 3x - 2 = 0$ имеет корни $x_1$ и $x_2$. Чему равно $x_1 \cdot x_2$?
Системы уравнений
**Каждую секунду миллиарды устройств решают системы линейных уравнений** - так работает forward pass нейросети. Каждый линейный слой: $\mathbf{y} = W\mathbf{x} + \mathbf{b}$ - это система $Ax = b$ в матричной форме. BLAS-рутины (Basic Linear Algebra Subprograms) оптимизированы под конкретное железо: процессоры AMD, ARM, GPU NVIDIA. NumPy, PyTorch, TensorFlow все используют их под капотом. 'Решение' системы в нейросети находится не аналитически, а через умножение матриц - потому что умножение быстрее обращения.
**Три метода решения системы линейных уравнений:** 1. **Подстановка** - выразить одну переменную через другую 2. **Сложение (исключение)** - сложить уравнения так, чтобы переменная исчезла 3. **Матричный метод** - записать как $Ax = b$, решить через $\text{np.linalg.solve}$
**Геометрический смысл:** каждое линейное уравнение с двумя переменными - это прямая. Решение - точка пересечения. Параллельные прямые: решений нет. Совпадающие: бесконечно много. Это точно та же картина, что в градиентном спуске: функция потерь - это поверхность, минимум - точка, где градиент равен нулю (система уравнений $\nabla L = 0$).
| Случай | Геометрия | Алгебра | Количество решений |
|---|---|---|---|
| Прямые пересекаются | Одна точка | $\det(A) \neq 0$ | Ровно одно |
| Прямые параллельны | Нет общих точек | $\det(A) = 0$, противоречие | Нет решений |
| Прямые совпадают | Все точки общие | $\det(A) = 0$, тождество | Бесконечно много |
Если дискриминант квадратного уравнения отрицателен, уравнение не имеет решений
При $D < 0$ нет вещественных решений, но есть два комплексных сопряжённых корня
Формула $x = \frac{-b \pm \sqrt{D}}{2a}$ работает и при $D < 0$ - $\sqrt{D}$ становится мнимым. Например, $x^2 + 1 = 0$: $D = -4$, корни $x = \pm i$. Комплексные числа были изобретены именно для этого.
Система: $x + 2y = 5$, $2x + 4y = 7$. Сколько решений?
Ключевые идеи
- **Многочлен** $a_n x^n + \ldots + a_0$: степень произведения = сумма степеней. sklearn `PolynomialFeatures` строит их из признаков.
- **Факторизация** = разложение на множители. Backprop - это факторизация вычислительного графа через правило цепи.
- **Квадратное уравнение** $ax^2+bx+c=0$: дискриминант $D=b^2-4ac$, теорема Виета. Нормальное уравнение регрессии - та же квадратная минимизация.
- **Системы уравнений:** подстановка, сложение, матричный метод ($Ax=b$). Каждый forward pass нейросети - система в матричной форме.
- Аль-Хорезми решал задачи о наследстве. Мы решаем задачи об обучении нейросетей. Инструмент тот же.
Связанные темы
Уравнения и многочлены - язык для постановки задач оптимизации:
- Числа и арифметика — Типы чисел определяют, в каком множестве ищется решение
- Неравенства и модули — Обобщение: вместо равенства - неравенство
- Линейная алгебра: матрицы — Системы линейных уравнений - основа матричных методов
Вопросы для размышления
- Аль-Хорезми создал алгебру для раздела наследства. Гаусс применил квадратную минимизацию для расчёта орбиты астероида. Теперь нормальное уравнение обучает модели. Что объединяет эти три задачи на 1200 лет?
- Backprop - это факторизация вычислительного графа. Если бы не было правила цепи (факторизации производной), как бы пришлось вычислять градиенты? Что изменилось бы в скорости обучения?
- Система линейных уравнений может не иметь решений. Что это значит для градиентного спуска - когда $\nabla L = 0$ не имеет аналитического решения?
Связанные уроки
- alg-01 — Числа и арифметика - база для работы с многочленами
- alg-03 — Факторизация открывает неравенства и модули
- alg-05 — Системы ведут к матрицам и линейной алгебре
- la-06-gauss — Гауссово исключение - то же сложение уравнений, только на матрицах
- stat-09-regression — Нормальное уравнение - квадратная минимизация из этого урока
- la-01-vectors-intro