Alterna · учебный материал
01.5 Ближайшая точка на направлении
Хотим заменить вектор точкой на заданной прямой с наименьшей ошибкой. Это проекция; после неё сравним направления без влияния длины.
Что в этом материале
- Cosine отделяет направление от положительного масштаба
- Проекция как ближайшая точка на прямой
- Полный численный пример
- Прямая не зависит от длины её направляющего вектора
Содержание и основные понятия
На предыдущей странице: что даёт сумма произведений.
Хотим заменить вектор точкой на заданной прямой с наименьшей ошибкой. Это проекция; после неё сравним направления без влияния длины.
Хотим заменить [3,4] точкой горизонтальной прямой.
Координаты и расчёт геометрического примера приведены в тексте. Для изменения пространственного рисунка включитеJavaScript.
Cosine отделяет направление от положительного масштаба
Для ненулевых
x
,
y
x,y
x
,
y
cosine similarity определяется как
cos
(
x
,
y
)
=
x
T
y
∥
x
∥
2
∥
y
∥
2
.
\operatorname{cos}(x,y)=
\frac{x^Ty}{\|x\|_2\|y\|_2}.
cos
(
x
,
y
)
=
∥
x
∥
2
∥
y
∥
2
x
T
y
.
Для
x
=
[
3
,
4
]
T
x=[3,4]^T
x
=
[
3
,
4
]
T
,
y
=
[
1
,
0
]
T
y=[1,0]^T
y
=
[
1
,
0
]
T
получаем
3
/
5
=
0.6
3/5=0.6
3/5
=
0.6
, а угол равен
arccos
(
0.6
)
≈
53.13
∘
\arccos(0.6)\approx53.13^\circ
arccos
(
0.6
)
≈
53.1
3
∘
. Умножение аргумента на положительное число не меняет cosine, потому что одинаковый множитель появляется в числителе и знаменателе. Отрицательный множитель обращает направление и меняет знак similarity.
Если хотя бы один аргумент нулевой, знаменатель равен нулю. Значение не определено; возвращать 0 означало бы ошибочно утверждать ортогональность или отсутствие сходства. Интерфейс должен показывать границу определения явно.
Cosine отвечает на узкий геометрический вопрос о направлении представлений. Он не гарантирует человеческую семантическую близость: смысл зависит от данных, objective, архитектуры и того, какие отношения обучение разместило в пространстве.
Проекция как ближайшая точка на прямой
Пусть
y
≠
0
y\ne0
y
=
0
. Все точки прямой, порождённой
y
y
y
, имеют вид
α
y
\alpha y
α
y
. Требуется выбрать коэффициент, минимизирующий евклидову ошибку
E
(
α
)
=
∥
x
−
α
y
∥
2
2
.
E(\alpha)=\|x-\alpha y\|_2^2.
E
(
α
)
=
∥
x
−
α
y
∥
2
2
.
Раскроем квадрат:
E
(
α
)
=
x
T
x
−
2
α
x
T
y
+
α
2
y
T
y
.
E(\alpha)=x^Tx-2\alpha x^Ty+\alpha^2y^Ty.
E
(
α
)
=
x
T
x
−
2
α
x
T
y
+
α
2
y
T
y
.
Это парабола с положительным коэффициентом
y
T
y
y^Ty
y
T
y
. Её производная равна
−
2
x
T
y
+
2
α
y
T
y
-2x^Ty+2\alpha y^Ty
−
2
x
T
y
+
2
α
y
T
y
, поэтому единственный минимум достигается при
α
∗
=
x
T
y
y
T
y
,
proj
y
x
=
α
∗
y
.
\alpha^*=\frac{x^Ty}{y^Ty},
\qquad
\operatorname{proj}_y x=\alpha^*y.
α
∗
=
y
T
y
x
T
y
,
proj
y
x
=
α
∗
y
.
Тот же результат имеет геометрическое объяснение. Остаток
r
=
x
−
proj
y
x
r=x-\operatorname{proj}_y x
r
=
x
−
proj
y
x
ортогонален направлению
y
y
y
, поскольку
y
T
r
=
y
T
x
−
x
T
y
y
T
y
y
T
y
=
0.
y^Tr=y^Tx-\frac{x^Ty}{y^Ty}y^Ty=0.
y
T
r
=
y
T
x
−
y
T
y
x
T
y
y
T
y
=
0.
Полный численный пример
Для
x
=
[
3
,
4
]
T
x=[3,4]^T
x
=
[
3
,
4
]
T
,
y
=
[
2
,
0
]
T
y=[2,0]^T
y
=
[
2
,
0
]
T
:
α
∗
=
6
4
=
1.5
,
p
=
proj
y
x
=
[
3
,
0
]
T
,
r
=
[
0
,
4
]
T
.
\alpha^*=\frac{6}{4}=1.5,
\qquad
p=\operatorname{proj}_y x=[3,0]^T,
\qquad
r=[0,4]^T.
α
∗
=
4
6
=
1.5
,
p
=
proj
y
x
=
[
3
,
0
]
T
,
r
=
[
0
,
4
]
T
.
Разложение
x
=
p
+
r
x=p+r
x
=
p
+
r
состоит из ортогональных частей, поэтому
∥
x
∥
2
2
=
∥
p
∥
2
2
+
∥
r
∥
2
2
=
9
+
16
=
25.
\|x\|_2^2=\|p\|_2^2+\|r\|_2^2=9+16=25.
∥
x
∥
2
2
=
∥
p
∥
2
2
+
∥
r
∥
2
2
=
9
+
16
=
25.
Для произвольного
α
\alpha
α
можно отделить неизбежный остаток от лишнего сдвига вдоль прямой:
x
−
α
y
=
r
+
(
α
∗
−
α
)
y
.
x-\alpha y=r+(\alpha^*-\alpha)y.
x
−
α
y
=
r
+
(
α
∗
−
α
)
y
.
Слагаемые ортогональны, следовательно
∥
x
−
α
y
∥
2
2
=
∥
r
∥
2
2
+
(
α
−
α
∗
)
2
∥
y
∥
2
2
≥
∥
r
∥
2
2
.
\|x-\alpha y\|_2^2=
\|r\|_2^2+(\alpha-\alpha^*)^2\|y\|_2^2
\ge\|r\|_2^2.
∥
x
−
α
y
∥
2
2
=
∥
r
∥
2
2
+
(
α
−
α
∗
)
2
∥
y
∥
2
2
≥
∥
r
∥
2
2
.
Это доказывает минимальность проекции без ссылки на рисунок.
Прямая не зависит от длины её направляющего вектора
Если заменить
y
=
[
2
,
0
]
T
y=[2,0]^T
y
=
[
2
,
0
]
T
на
[
1
,
0
]
T
[1,0]^T
[
1
,
0
]
T
, коэффициент изменится с 1.5 на 3, но точка проекции останется
[
3
,
0
]
T
[3,0]^T
[
3
,
0
]
T
. При
y
→
−
y
y\to-y
y
→
−
y
коэффициент меняет знак, а произведение
α
y
\alpha y
α
y
сохраняется. Геометрический объект — прямая
span(y)
; конкретный
y
y
y
только задаёт её параметризацию.
При
y
=
0
y=0
y
=
0
формула проекции
на направление, заданное вектором
, не определена: делитель
y
T
y
y^Ty
y
T
y
равен нулю, и нулевой вектор не задаёт направление. Проекция на заранее определённое нулевое подпространство
{
0
}
\{0\}
{
0
}
равна нулю, но это другая постановка, в которой подпространство задано явно.
Проекции ведут к least squares, PCA и разложению сигнала на компоненты. В нижней лаборатории сравните
y
y
y
,
2
y
2y
2
y
и
−
y
-y
−
y
: similarity меняет поведение при отрицательном масштабе, коэффициент
α
\alpha
α
меняется при любой перепараметризации, а сама точка проекции на ту же прямую сохраняется. Далее
матрицы
позволят преобразовывать сразу все базисные направления.
x, y = [3, 4], [2, 0]
alpha = sum(a*b for a, b in zip(x, y)) / sum(b*b for b in y)
projection = [alpha*b for b in y]
residual = [a-b for a, b in zip(x, projection)]
assert projection == [3, 0] and residual == [0, 4]
Код повторяет только что разобранные операции.
Полный проверяемыйPython-пример главы
доступен отдельным файлом; показанный короткий фрагмент не заменяет его реализацию.
Остаток вертикален: он перпендикулярен выбранной прямой. Нормированное сравнение направлений (cosine similarity) — другой вопрос.
Как преобразовать весь вектор, не придумывая новое правило для каждого входа?
Python-примеры главы 01
Академическая база →