Эта статья — первая из трёх частей. Каждая часть независима, поэтому вам не нужно читать остальные, чтобы её понять.
Скалярное произведение — одна из самых важных операций в машинном обучении, но её сложно понять без правильных геометрических основ. В первой части мы строим эти основы:
- Единичные векторы
- Скалярная проекция
- Векторная проекция
Если вы студент, изучающий линейную алгебру впервые, или хотите освежить эти концепции, я рекомендую прочитать эту статью.
В этой статье мы введём и объясним скалярное произведение, а в следующей статье мы изучим его глубже.
Раздел о векторной проекции включён как необязательный бонус: полезный, но не обязательный для понимания скалярного произведения.
Следующая часть углубляет изучение скалярного произведения: его геометрический смысл, его связь с косинусным сходством и почему это различие важно.
Финальная часть связывает эти идеи с двумя крупными приложениями: системами рекомендаций и обработкой естественного языка.
Единичный вектор
Вектор 𝐯 называется единичным вектором, если его величина равна 1:
|𝐯| = 1
Чтобы убрать величину ненулевого вектора, сохраняя его направление, мы можем нормализовать его. Нормализация масштабирует вектор на множитель:
1/|𝐯|
Нормализованный вектор 𝐯̂ — это единичный вектор в направлении 𝐯:
𝐯̂ = 𝐯/|𝐯|
Обозначение 1. Отныне, когда мы нормализуем вектор 𝐯 или пишем 𝐯̂, мы предполагаем, что 𝐯 ≠ 0. Это обозначение, вместе со следующими, также применимо к последующим статьям.
Эта операция естественным образом разделяет вектор на его величину и направление:
𝐯 = |𝐯| · 𝐯̂
Рисунок 1 иллюстрирует эту идею: 𝐯 и 𝐯̂ указывают в одном направлении, но имеют разные величины.
Рисунок 1 — Разделение «Насколько» и «В какую сторону». Любой вектор можно записать как произведение его величины и единичного вектора, который сохраняет направление, но имеет длину 1. Изображение автора (создано с помощью Claude).
Сходство единичных векторов
В двух измерениях все единичные векторы лежат на единичной окружности (радиус 1, центр в начале координат). Единичный вектор, образующий угол θ с осью x, имеет координаты (cos θ, sin θ).
Это означает, что угол между двумя единичными векторами кодирует естественную оценку сходства — как мы вскоре покажем, эта оценка ровно cos θ: равна 1, когда они указывают в одну сторону, 0, когда перпендикулярны, и −1, когда противоположны.
Обозначение 2. На протяжении этой статьи θ обозначает наименьший угол между двумя векторами, поэтому 0° ≤ θ ≤ 180°.
На практике мы не знаем θ напрямую — мы знаем координаты векторов.
Мы можем показать, почему скалярное произведение двух единичных векторов â и b̂ равно cos θ, используя геометрический аргумент из трёх шагов:
- Повернём систему координат так, чтобы b̂ лежал вдоль оси x. Поворот не изменяет углы или величины.
- Прочитаем новые координаты. После поворота b̂ имеет координаты (1, 0). Поскольку â — единичный вектор под углом θ к оси x, определение единичной окружности даёт его координаты как (cos θ, sin θ).
- Умножим соответствующие компоненты и просуммируем:
â · b̂ = a_x · b_x + a_y · b_y = cos θ · 1 + sin θ · 0 = cos θ
Эта сумма произведений компонент называется скалярным произведением:
a⃗ · b⃗ = a₁ · b₁ + a₂ · b₂ + ⋯ + aₙ · bₙ
См. иллюстрацию этих трёх шагов на рисунке 2 ниже:
Рисунок 2 — Повернув нашу перспективу, чтобы совместиться с осью x, математика координат упрощается красиво, раскрывая, почему скалярное произведение двух единичных векторов равно cos(θ). Изображение автора (создано с помощью Claude).
Всё выше было показано в 2D, но результат остаётся в любом количестве измерений. Любые два вектора, независимо от того, в скольких измерениях они живут, всегда лежат в одной плоской плоскости. Мы можем повернуть эту плоскость, чтобы совместиться с xy-плоскостью — и оттуда 2D доказательство применяется точно.
Обозначение 3. На диаграммах, которые следуют далее, мы часто рисуем один из векторов (обычно b⃗) вдоль горизонтальной оси. Когда b⃗ не уже совмещён с осью x, мы всегда можем повернуть нашу систему координат, как мы сделали выше (трюк «поворота»). Поскольку поворот сохраняет все длины, углы и скалярные произведения, каждая формула, выведенная в этой ориентации, действительна для любого направления b⃗.
Скалярная проекция
Вектор может вносить вклад во многих направлениях одновременно, но часто нам важно только одно направление.
Скалярная проекция отвечает на вопрос: Какая часть a⃗ лежит вдоль направления b⃗?
Это значение отрицательно, если проекция указывает в противоположном направлении b⃗.
Аналогия с тенью
Наиболее интуитивный способ думать о скалярной проекции — это длина тени. Представьте, что вы держите палку (вектор a⃗) под углом над землёй (направление b⃗), а источник света светит прямо вниз сверху.
Тень, которую палка отбрасывает на землю, — это скалярная проекция.
Анимированный рисунок ниже иллюстрирует эту идею:
Рисунок 3 — Скалярная проекция как тень. Скалярная проекция измеряет, какая часть вектора a лежит в направлении b. Она равна длине тени, которую a отбрасывает на b. GIF создана Claude.
Вычисление
Представьте источник света, светящий прямо вниз на линию PS (направление b⃗). Тень, которую a⃗ (стрелка от P к Q) отбрасывает на эту линию, — это ровно отрезок PR. Вы можете видеть это на Рисунке 4.
Рисунок 4: Измерение направленного выравнивания. Скалярная проекция (отрезок PR) визуально отвечает на основной вопрос: «Какая часть вектора a лежит в точном направлении вектора b.» Изображение автора (создано с помощью Claude).
Вывод формулы
Теперь посмотрите на треугольник PQR: перпендикулярный спуск из Q создаёт прямоугольный треугольник, его стороны:
- PQ = |a⃗| (гипотенуза).
- PR (прилежащая сторона – тень).
- QR (противоположная сторона – перпендикулярный компонент).
Из этого треугольника:
- Угол между a⃗ и b⃗ — это θ.
- cos(θ) = PR / |a⃗| (самое базовое определение косинуса).
- Умножим обе стороны на |a⃗|:
PR = |a⃗| cos(θ)
Отрезок PR — это длина тени — скалярная проекция a⃗ на b⃗.
Когда θ > 90°, скалярная проекция также становится отрицательной. Думайте о тени как переворачивающейся на противоположную сторону.
Как это связано с единичным вектором?
Длина тени (PR) не зависит от того, насколько длин b⃗. Она зависит от |a⃗| и от θ.
Когда вы вычисляете a⃗ · b̂, вы спрашиваете: какая часть a⃗ лежит вдоль направления b⃗? Это длина тени.
Единичный вектор действует как фильтр направления: умножение a⃗ на него извлекает компонент a⃗ вдоль этого направления.
Давайте посмотрим это, используя трюк поворота. Мы размещаем b̂ вдоль оси x:
a⃗ = (|a⃗|cos θ, |a⃗|sin(θ))
и:
b̂ = (1, 0)
Тогда:
a⃗ · b̂ = |a⃗|cos θ · 1 + |a⃗|sin(θ) · 0 = |a⃗|cos θ
Скалярная проекция a⃗ в направлении b⃗ это:
|a⃗|cos θ = a⃗ · b̂ = (a⃗ · b⃗) / |b⃗|
Геометрическая интерпретация скалярного произведения
Мы применяем трюк поворота ещё раз, теперь с двумя общими векторами: a⃗ и b⃗.
После поворота:
a⃗ = (|a⃗|cos θ, |a⃗|sin θ)
b⃗ = (|b⃗|, 0)
таким образом:
a⃗ · b⃗ = |a⃗|cos θ · |b⃗| + |a⃗|sin θ · 0 = |a⃗||b⃗|cos θ
Скалярное произведение a⃗ и b⃗ это:
a⃗ · b⃗ = a₁b₁ + ⋯ + aₙbₙ = Σ(i=1 до n) aᵢbᵢ = |a⃗||b⃗|cos θ
Векторная проекция
Векторная проекция извлекает часть вектора a⃗, которая указывает вдоль направления вектора b⃗.
Аналогия с маршрутом
Представьте два маршрута, начинающихся из одной точки (начало координат):
- Маршрут A ведёт на место для наблюдения за китами.
- Маршрут B ведёт вдоль побережья в другом направлении.
Вот вопрос, на который отвечает проекция:
Вам разрешено ходить только по маршруту B. Как далеко вы должны идти, чтобы оказаться как можно ближе к конечной точке маршрута A?
Вы идёте по B, и в какой-то момент останавливаетесь. Отсюда вы смотрите на конец маршрута A, и линия, соединяющая вас с ним, образует идеальный угол 90° с маршрутом B. Это ключевой геометрический факт — ближайшая точка всегда там, где вы сделаете прямой поворот.
Место, где вы останавливаетесь на маршруте B, — это проекция A на B. Она представляет «часть A, которая идёт в направлении B».
Оставшийся промежуток — от вашей точки остановки к фактическому концу маршрута A — это всё в A, что ничего не имеет общего с направлением B. Этот пример показан на Рисунке 5 ниже: Вектор, который начинается в начале, указывает вдоль маршрута B и заканчивается в ближайшей точке — это векторная проекция a⃗ на b⃗.
Рисунок 5 — Векторная проекция как ближайшая точка к направлению. Идя по маршруту B, ближайшая точка к конечной точке A происходит там, где соединяющий отрезок образует прямой угол с B. Эта точка — проекция A на B. Изображение автора (создано с помощью Claude).
Скалярная проекция отвечает: «Как далеко вы прошли?»
Это просто расстояние, одно число.
Векторная проекция отвечает: «Где ровно вы находитесь?»
Более точно: «Какое точное движение вдоль маршрута B доставит вас в эту ближайшую точку?»
Теперь «1,5 километра» недостаточно, вам нужно сказать «1,5 километра на восток вдоль побережья». Это расстояние плюс направление: стрелка, а не просто число. Стрелка начинается в начале, указывает вдоль маршрута B и заканчивается в ближайшей точке.
Расстояние, которое вы прошли, — это значение скалярной проекции. Величина векторной проекции равна абсолютному значению скалярной проекции.
Единичный вектор отвечает: «В каком направлении идёт маршрут B?»
Это ровно то, что представляет b̂. Это маршрут B, очищенный от любой информации о длине — просто чистое направление побережья.
векторная проекция = (как далеко вы прошли) × (направление B) = скалярная проекция × b̂
Я знаю, что аналогия с китами очень специфична; она вдохновлена этим хорошим объяснением (Michael.P, 2014)
На Рисунке 6 ниже показана та же диаграмма теней, что и на Рисунке 4, с PR нарисованным как стрелка, потому что векторная проекция — это вектор (с длиной и направлением), а не просто число.
Рисунок 6 — Векторная проекция как направленная тень. В отличие от скалярной проекции (длины), векторная проекция — это стрелка вдоль вектора b. Изображение автора (создано с помощью Claude).
Поскольку проекция должна лежать вдоль b⃗, нам нужны две вещи для PR⃗:
- Её величина — это скалярная проекция: |a⃗|cos θ
- Её направление — это: b̂ (направление b⃗)
Любой вектор равен его величине, умноженной на его направление (как мы видели в разделе «Единичный вектор»), таким образом:
PR⃗ = |a⃗|cos θ · b̂
Это уже формула векторной проекции. Мы можем переписать её, подставив b̂ = b⃗/|b⃗|, и признав, что |a⃗||b⃗|cos θ = a⃗ · b⃗:
Векторная проекция a⃗ в направлении b⃗ это:
proj_b⃗(a⃗) = (|a⃗|cos θ)b̂ = ((a⃗ · b⃗)/|b⃗|²)b⃗ = (a⃗ · b̂)b̂
Резюме
- Единичный вектор изолирует направление вектора, убирая его величину.
𝐯̂ = 𝐯/|𝐯|
- Скалярное произведение умножает соответствующие компоненты и суммирует их. Оно также равно произведению величин двух векторов, умноженному на косинус угла между ними.
a⃗ · b⃗ = a₁b₁ + ⋯ + aₙbₙ = Σ(i=1 до n) aᵢbᵢ = |a⃗||b⃗|cos θ
- Скалярная проекция использует скалярное произведение, чтобы измерить, как далеко один вектор достигает вдоль направления другого — одно число, как длина тени.
|a⃗|cos θ = a⃗ · b̂ = (a⃗ · b⃗)/|b⃗|
- Векторная проекция идёт дальше, возвращая фактическую стрелку вдоль этого направления: скалярная проекция, умноженная на единичный вектор.
(|a⃗|cos θ)b̂ = (a⃗ · b̂)b̂
В следующей части мы будем использовать инструменты, которые мы выучили в этой статье, чтобы действительно понять скалярное произведение.
Написано
Amit Shreiber
Наука о данных, Скалярное произведение, Вложение, Линейная алгебра, Математика