alterna ai
ALTERNA AI / ГЛАВА 01 · 05

01.5 Ближайшая точка на направлении

На предыдущей странице: что даёт сумма произведений.

Хотим заменить вектор точкой на заданной прямой с наименьшей ошибкой. Это проекция; после неё сравним направления без влияния длины.

Хотим заменить [3,4] точкой горизонтальной прямой.

Cosine отделяет направление от положительного масштаба

Для ненулевых x,yx,y cosine similarity определяется как

cos⁡(x,y)=xTy∥x∥2∥y∥2.\operatorname{cos}(x,y)= \frac{x^Ty}{\|x\|_2\|y\|_2}.

Для x=[3,4]Tx=[3,4]^T, y=[1,0]Ty=[1,0]^T получаем 3/5=0.63/5=0.6, а угол равен arccos⁡(0.6)≈53.13∘\arccos(0.6)\approx53.13^\circ. Умножение аргумента на положительное число не меняет cosine, потому что одинаковый множитель появляется в числителе и знаменателе. Отрицательный множитель обращает направление и меняет знак similarity.

Если хотя бы один аргумент нулевой, знаменатель равен нулю. Значение не определено; возвращать 0 означало бы ошибочно утверждать ортогональность или отсутствие сходства. Интерфейс должен показывать границу определения явно.

Cosine отвечает на узкий геометрический вопрос о направлении представлений. Он не гарантирует человеческую семантическую близость: смысл зависит от данных, objective, архитектуры и того, какие отношения обучение разместило в пространстве.

Проекция как ближайшая точка на прямой

Пусть y≠0y\ne0. Все точки прямой, порождённой yy, имеют вид αy\alpha y. Требуется выбрать коэффициент, минимизирующий евклидову ошибку

E(α)=∥x−αy∥22.E(\alpha)=\|x-\alpha y\|_2^2.

Раскроем квадрат:

E(α)=xTx−2αxTy+α2yTy.E(\alpha)=x^Tx-2\alpha x^Ty+\alpha^2y^Ty.

Это парабола с положительным коэффициентом yTyy^Ty. Её производная равна −2xTy+2αyTy-2x^Ty+2\alpha y^Ty, поэтому единственный минимум достигается при

α∗=xTyyTy,proj⁡yx=α∗y.\alpha^*=\frac{x^Ty}{y^Ty}, \qquad \operatorname{proj}_y x=\alpha^*y.

Тот же результат имеет геометрическое объяснение. Остаток

r=x−proj⁡yxr=x-\operatorname{proj}_y x

ортогонален направлению yy, поскольку

yTr=yTx−xTyyTyyTy=0.y^Tr=y^Tx-\frac{x^Ty}{y^Ty}y^Ty=0.

Полный численный пример

Для x=[3,4]Tx=[3,4]^T, y=[2,0]Ty=[2,0]^T:

α∗=64=1.5,p=proj⁡yx=[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.

Разложение x=p+rx=p+r состоит из ортогональных частей, поэтому

∥x∥22=∥p∥22+∥r∥22=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∥22=∥r∥22+(α−α∗)2∥y∥22≥∥r∥22.\|x-\alpha y\|_2^2= \|r\|_2^2+(\alpha-\alpha^*)^2\|y\|_2^2 \ge\|r\|_2^2.

Это доказывает минимальность проекции без ссылки на рисунок.

Прямая не зависит от длины её направляющего вектора

Если заменить y=[2,0]Ty=[2,0]^T на [1,0]T[1,0]^T, коэффициент изменится с 1.5 на 3, но точка проекции останется [3,0]T[3,0]^T. При y→−yy\to-y коэффициент меняет знак, а произведение αy\alpha y сохраняется. Геометрический объект — прямая span(y); конкретный yy только задаёт её параметризацию.

При y=0y=0 формула проекции на направление, заданное вектором, не определена: делитель yTyy^Ty равен нулю, и нулевой вектор не задаёт направление. Проекция на заранее определённое нулевое подпространство {0}\{0\} равна нулю, но это другая постановка, в которой подпространство задано явно.

Проекции ведут к least squares, PCA и разложению сигнала на компоненты. В нижней лаборатории сравните yy, 2y2y и −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 Академическая база →