Линейная алгебра
Прямые и плоскости: геометрия разделяет пространство
Support Vector Machine делит пространство признаков гиперплоскостью - разделяющей поверхностью между классами. Расстояние от точки до этой плоскости - это уверенность классификатора. Геометрия прямых и плоскостей - язык, на котором говорит SVM.
- SVM: разделяющая гиперплоскость w·x + b = 0 делит пространство на два класса
- Компьютерное зрение: плоскость в 3D для сегментации облака точек LiDAR
- Физика: уравнение плоскости волнового фронта
- CAD: пересечение плоскостей задаёт рёбра и вершины твёрдого тела
- GPS: пересечение сфер даёт позицию; в линеаризации - плоскости
Прямые и плоскости: геометрия разделяет пространство
**SVM - один из самых элегантных алгоритмов ML - делает ровно одну вещь: находит плоскость, которая лучше всего разделяет два класса.** Эта плоскость описывается уравнением w·x + b = 0, где w - нормаль плоскости, x - точка пространства признаков. Логистическая регрессия, линейный классификатор, каждый нейрон в первом слое нейросети - все они строят такую границу. Гиперплоскость - это не абстракция, это рабочий инструмент. Понять его - значит понять половину классического ML.
**О чём этот урок на самом деле**: две формы записи одного объекта - прямая как траектория (P0 + t*d) и плоскость как граница (n·x = d). Первая удобна для лучей и движения, вторая - для классификации и разделения пространства. Обе встречаются в каждом 3D-движке и в каждом ML-алгоритме.
Что главное в концепте «Прямые и плоскости: геометрия разделяет пространство»?
Проверка усвоения материала концепта.
Прямая как параметрическая траектория
Прямая как параметрическая траектория
Прямая в 3D - это точка P0 плюс направление d. Параметр t контролирует, насколько далеко от P0 находится точка. При t=0 - стартовая точка, t>0 - вперёд, t<0 - назад.
P(t) = P0 + t * d где: P0 = (x0, y0, z0) - точка на прямой d = (a, b, c) - направляющий вектор t - любое вещественное число ПОКОМПОНЕНТНО: x = x0 + t*a y = y0 + t*b z = z0 + t*c ПРИМЕР: прямая через (1,0,0) в направлении (1,2,0) P(t) = (1+t, 2t, 0) t=0 -> (1, 0, 0) t=1 -> (2, 2, 0) t=-1 -> (0, -2, 0)
**Зачем параметрическая форма**: она позволяет найти конкретную точку на прямой за O(1) - подставить t. В ray tracing каждый луч - это прямая P(t) = eye + t*direction, где t - расстояние до объекта сцены.
Что главное в концепте «Прямая как параметрическая траектория»?
Проверка усвоения материала концепта.
Прямая через две точки
Прямая через две точки
ДАНЫ: A = (1, 0, 2), B = (3, 2, 1) 1. Направление: d = B - A = (2, 2, -1) 2. Точка P0 = A = (1, 0, 2) 3. Уравнение: P(t) = (1+2t, 2t, 2-t) ПРОВЕРКА: t=0 -> (1, 0, 2) = A ok t=1 -> (3, 2, 1) = B ok t=0.5 -> (2, 1, 1.5) - середина отрезка AB
Что главное в концепте «Прямая через две точки»?
Проверка усвоения материала концепта.
Уравнение плоскости: граница разделения
Уравнение плоскости: граница разделения
Плоскость определяется **нормалью** n (вектором, перпендикулярным плоскости) и одной точкой P0. Любая точка P лежит в плоскости тогда и только тогда, когда вектор P-P0 перпендикулярен нормали. Перпендикулярность - это нулевое скалярное произведение.
ВЕКТОРНАЯ ФОРМА: n · (P - P0) = 0 n · P = n · P0 = d ОБЩАЯ ФОРМА: a*x + b*y + c*z = d где (a, b, c) = n - нормаль плоскости d = n · P0 - константа (расстояние от начала координат вдоль нормали) ПРИМЕР: n = (0, 1, 0) (вертикальная нормаль), P0 = (0, 2, 0) d = n · P0 = 0*0 + 1*2 + 0*0 = 2 Уравнение: y = 2 (горизонтальная плоскость на высоте 2) ЛЮБАЯ ТОЧКА (x, 2, z) лежит в этой плоскости.
**Ключевой инсайт**: коэффициенты (a, b, c) в уравнении ax+by+cz = d - это буквально нормаль плоскости. Если уравнение плоскости известно, нормаль читается напрямую - первые три коэффициента.
Что главное в концепте «Уравнение плоскости: граница разделения»?
Проверка усвоения материала концепта.
ML-применение №1: SVM и гиперплоскость разделения
ML-применение №1: SVM и гиперплоскость разделения
**Support Vector Machine ищет именно ту плоскость**, которая максимизирует зазор между двумя классами. Уравнение: w·x + b = 0, где w - нормаль, x - признаки объекта. Точка классифицируется как класс +1 если w·x + b > 0, и как класс -1 если w·x + b < 0. Знак скалярного произведения определяет сторону плоскости.
**Связь с геометрией**: расстояние от точки x до гиперплоскости SVM = |w·x + b| / |w|. Это буквально формула расстояния от точки до плоскости. SVM максимизирует минимальное расстояние от ближайших примеров (support vectors) до гиперплоскости.
Что главное в концепте «ML-применение №1: SVM и гиперплоскость разделения»?
Проверка усвоения материала концепта.
ML-применение №2: нейросеть как набор гиперплоскостей
ML-применение №2: нейросеть как набор гиперплоскостей
**Каждый нейрон в линейном слое нейросети - это гиперплоскость.** Нейрон с весами w и смещением b вычисляет w·x + b. ReLU(w·x + b) включается когда x попадает в одну из полуплоскостей. Слой из 512 нейронов режет пространство признаков 512-ю гиперплоскостями. Глубокая нейросеть строит сложные границы, соединяя эти разрезы в иерархию.
НЕЙРОН С RELU: output = ReLU(w · x + b) = max(0, w · x + b) ГРАНИЦА АКТИВАЦИИ: w · x + b = 0 <- уравнение гиперплоскости ПРИМЕР (2D входы): w = (2, -1), b = -1 Граница: 2*x1 - x2 - 1 = 0 -> x2 = 2*x1 - 1 x=(1, 0): 2*1 - 0 - 1 = 1 > 0 -> нейрон активирован x=(0, 2): 2*0 - 2 - 1 = -3 < 0 -> нейрон заглушён Слой из 512 нейронов = 512 таких разрезов пространства.
**Universal Approximation Theorem** утверждает: нейросеть с достаточным количеством нейронов в одном скрытом слое может приблизить любую непрерывную функцию. Интуиция: достаточным количеством гиперплоскостей можно аппроксимировать любую границу классификации.
Что главное в концепте «ML-применение №2: нейросеть как набор гиперплоскостей»?
Проверка усвоения материала концепта.
Плоскость через три точки
Плоскость через три точки
ДАНЫ: A = (0,0,0), B = (2,0,0), C = (0,3,0) 1. Два вектора в плоскости: v1 = B - A = (2, 0, 0) v2 = C - A = (0, 3, 0) 2. Нормаль = векторное произведение: n = v1 x v2 = (0*0-0*3, 0*0-2*0, 2*3-0*0) = (0, 0, 6) -> нормированная: (0, 0, 1) 3. d = n · A = 0*0 + 0*0 + 1*0 = 0 Уравнение: z = 0 (плоскость XY) ПРОВЕРКА: все три точки имеют z=0, лежат в плоскости z=0.
Что главное в концепте «Плоскость через три точки»?
Проверка усвоения материала концепта.
Расстояние от точки до плоскости
Расстояние от точки до плоскости
ДЛЯ ПЛОСКОСТИ n·x = d: dist = |n · Q - d| / |n| ЕСЛИ n нормализован (|n| = 1): dist = |n · Q - d| <- просто подставить и взять модуль ИНТУИЦИЯ: скалярное произведение n·Q - это проекция Q на направление нормали. Вычитаем d (проекцию плоскости) - получаем "высоту" над плоскостью. ПРИМЕР: n = (0, 1, 0), d = 2 (плоскость y = 2) Q = (3, 5, 1) dist = |0*3 + 1*5 + 0*1 - 2| / 1 = |5 - 2| = 3 Q = (3, -1, 1) dist = |-1 - 2| = 3 (симметрично, по другую сторону)
Что главное в концепте «Расстояние от точки до плоскости»?
Проверка усвоения материала концепта.
Пересечение прямой и плоскости (ray casting)
Пересечение прямой и плоскости (ray casting)
В **ray tracing** каждый пиксель соответствует лучу из камеры. Для каждого луча нужно найти первый объект сцены, который он пересекает. Объект ограничен треугольниками - каждый треугольник лежит в своей плоскости. Задача: найти пересечение луча с плоскостью.
ПРЯМАЯ: P(t) = P0 + t * d ПЛОСКОСТЬ: n · x = c ПОДСТАВЛЯЕМ: n · (P0 + t*d) = c n·P0 + t*(n·d) = c t = (c - n·P0) / (n·d) ЗАТЕМ: точка пересечения = P(t) = P0 + t * d СЛУЧАИ: n·d != 0: единственная точка пересечения n·d = 0 и P0 на плоскости: прямая лежит в плоскости n·d = 0 и P0 не на плоскости: прямая параллельна плоскости ПРИМЕР: Луч: P0=(0,0,3), d=(0,0,-1) (вдоль -Z) Плоскость: z = 0 (n=(0,0,1), c=0) t = (0 - 0*0 - 0*0 - 1*3) / (0*0 + 0*0 + 1*(-1)) = (-3) / (-1) = 3 Пересечение: (0, 0, 3) + 3*(0, 0, -1) = (0, 0, 0)
Что главное в концепте «Пересечение прямой и плоскости (ray casting)»?
Проверка усвоения материала концепта.
Сторона плоскости: основа culling и классификации
Сторона плоскости: основа culling и классификации
Значение n·x - d определяет, с какой стороны плоскости находится точка. Это используется в двух совершенно разных контекстах: в графике для **back-face culling** (отбрасываем треугольники, повёрнутые от камеры), в ML для **классификации** (знак определяет метку класса).
| n·x - d | Геометрия (3D-графика) | ML (классификатор) |
|---|---|---|
| > 0 | Точка со стороны нормали, треугольник видим | Класс +1 (SVM, логрегрессия) |
| = 0 | Точка лежит в плоскости | На границе разделения |
| < 0 | Точка с обратной стороны, треугольник скрыт | Класс -1 |
Прямые и плоскости в индустрии
Один математический объект - два мира применений
| Компонент | Роль | Детали |
|---|---|---|
| SVM (scikit-learn, LibSVM) | Оптимальная разделяющая гиперплоскость | w·x + b = 0; максимизация зазора (margin); ядровые SVM работают в неявном высокомерном пространстве |
| Логистическая регрессия | Граница классификации | P(y=1|x) = sigmoid(w·x + b); граница там, где sigmoid = 0.5, то есть w·x + b = 0 |
| Ray Tracing / Rasterization (Pixar, NVIDIA) | Пересечение луча с треугольниками сцены | Каждый пиксель - луч, каждый треугольник - плоскость; P(t) = P0 + t*d |
| Нейросеть (каждый линейный слой) | Набор гиперплоскостей разделяет пространство признаков | Нейрон = ReLU(w·x + b); слой из N нейронов = N гиперплоскостей |
Что главное в концепте «Сторона плоскости: основа culling и классификации»?
Проверка усвоения материала концепта.
Практика: пересечение луча
Практика: пересечение луча
Вопросы для собеседования
Почему граница SVM описывается уравнением w·x + b = 0, а не просто w·x = 0?
- w·x = 0 - плоскость обязана проходить через ноль; большинство границ классификации - не там - b = bias/intercept смещает границу в нужное место пространства признаков - Геометрически: b/|w| - расстояние от начала координат до плоскости вдоль нормали - В нейросети b - это смещение (bias), которое тоже обучается градиентным спуском
Как определить, с какой стороны плоскости находится точка, не вычисляя расстояние?
- n·Q - d > 0: точка со стороны нормали - n·Q - d < 0: точка с противоположной стороны - n·Q - d = 0: точка на плоскости - В SVM это и есть предсказание: sign(w·x + b) = метка класса
Почему при поиске пересечения луча с плоскостью нужна проверка n·d != 0?
- n·d = 0 означает, что луч перпендикулярен нормали - то есть параллелен плоскости - При делении на ноль t = infinity - пересечения нет (или луч лежит в плоскости) - Числовая проверка: |n·d| < 1e-10 чтобы избежать деления на очень малое число - В ray tracing это один из первых проверяемых случаев
Что главное в концепте «Практика: пересечение луча»?
Проверка усвоения материала концепта.
Что унести из урока
- **Прямая**: P(t) = P0 + t*d - параметрическая, t задаёт положение на прямой
- **Плоскость**: n·x = d - нормаль (a,b,c) читается из коэффициентов уравнения
- **Нормаль через три точки**: n = (B-A) x (C-A) через векторное произведение
- **Расстояние**: dist = |n·Q - d| / |n|; знак показывает сторону плоскости
- **SVM**: w·x + b = 0 - это уравнение разделяющей гиперплоскости; sign(w·x + b) = класс
- **Нейрон = гиперплоскость**: ReLU(w·x + b) активируется по одну сторону плоскости w·x + b = 0
- **Ray casting**: t = (d - n·P0)/(n·d) находит расстояние до пересечения луча с плоскостью
Куда дальше
Плоскости - граница между геометрией и алгебраическими методами
- Системы линейных уравнений — Пересечение n плоскостей = система n уравнений
- Скалярное произведение — n·x = d - в основе формулы и для расстояния, и для классификатора
- Матрицы и линейные преобразования — Гиперплоскости в многомерных пространствах определяют линейные слои нейросети