Alterna · учебный материал

01.1 Вектор и его координаты

На плоскости стрелку можно задать двумя числами: сколько пройти вправо и вверх. Четыре числа модели — такая же упорядоченная запись, но её не видно целиком на плоскости.

Что в этом материале

Содержание и основные понятия

Мы умеем читать координаты и складывать числа.
На плоскости стрелку можно задать двумя числами: сколько пройти вправо и вверх. Четыре числа модели — такая же упорядоченная запись, но её не видно целиком на плоскости.
Два набора чисел: [3,4] и [2,0].
Координаты и расчёт геометрического примера приведены в тексте. Для изменения пространственного рисунка включитеJavaScript.
Координаты описывают объект, но не исчерпывают его
В языковой модели токен сначала становится ID, но ID остаётся адресом: арифметика над номерами строк не обязана иметь содержательный смысл. Чтобы складывать представления, менять их масштаб и измерять согласованность направлений, нужен объект с заранее определёнными операциями. Таким объектом служит вектор. В этой главе рассматривается вещественное пространство
R
n
\mathbb R^n
R
n
, где каждый вектор после выбора базиса записывается упорядоченным набором из
n
n
n
чисел.
Запись
x
=
[
3
,
4
]
T
x=[3,4]^T
x
=
[
3
,
4
]
T
можно прочитать двумя совместимыми способами. Алгебраически это координаты в выбранном порядке. Геометрически на плоскости это направленный отрезок с приращением 3 по первой оси и 4 по второй. Стрелка из
(
0
,
0
)
(0,0)
(
0
,
0
)
в
(
3
,
4
)
(3,4)
(
3
,
4
)
и стрелка из
(
1
,
−
1
)
(1,-1)
(
1
,
−
1
)
в
(
4
,
3
)
(4,3)
(
4
,
3
)
изображают один свободный вектор: у обеих разность «конец минус начало» равна
[
3
,
4
]
T
[3,4]^T
[
3
,
4
]
T
.
Выбор начала координат относится к рисунку, а не к самому свободному вектору. Выбор базиса, напротив, определяет числа, которыми этот вектор записан. Поэтому фраза «вектор равен паре чисел» допустима только после фиксации базиса и порядка координат.
Операции задаются покоординатно
Для
x
,
y
∈
R
n
x,y\in\mathbb R^n
x
,
y
∈
R
n
и
α
∈
R
\alpha\in\mathbb R
α
∈
R
:
(
x
+
y
)
i
=
x
i
+
y
i
,
(
α
x
)
i
=
α
x
i
,
i
=
1
,
…
,
n
.
(x+y)_i=x_i+y_i,
\qquad
(\alpha x)_i=\alpha x_i,
\qquad i=1,\ldots,n.
(
x
+
y
)
i
​
=
x
i
​
+
y
i
​
,
(
αx
)
i
​
=
α
x
i
​
,
i
=
1
,
…
,
n
.
При
x
=
[
3
,
4
]
T
x=[3,4]^T
x
=
[
3
,
4
]
T
,
y
=
[
1
,
0
]
T
y=[1,0]^T
y
=
[
1
,
0
]
T
получаем
x
+
y
=
[
4
,
4
]
T
,
x
−
y
=
[
2
,
4
]
T
,
−
x
=
[
−
3
,
−
4
]
T
.
x+y=[4,4]^T,
\qquad x-y=[2,4]^T,
\qquad -x=[-3,-4]^T.
x
+
y
=
[
4
,
4
]
T
,
x
−
y
=
[
2
,
4
]
T
,
−
x
=
[
−
3
,
−
4
]
T
.
Геометрия суммы следует из той же формулы. Если перенести стрелку
y
y
y
так, чтобы она начиналась в конце
x
x
x
, её новый конец окажется в
(
3
+
1
,
4
+
0
)
=
(
4
,
4
)
(3+1,4+0)=(4,4)
(
3
+
1
,
4
+
0
)
=
(
4
,
4
)
. Это правило треугольника. Параллелограмм даёт тот же результат, потому что перенос стрелки не меняет её приращения.
Умножение на положительное
α
\alpha
α
сохраняет направление и меняет длину в
∣
α
∣
|\alpha|
∣
α
∣
раз. Отрицательное
α
\alpha
α
дополнительно обращает направление. При
α
=
0
\alpha=0
α
=
0
получается нулевой вектор. У него есть координаты и он является нейтральным элементом сложения, но направление нулевой стрелке приписать нельзя.
Shape является частью контракта
Сложение определено только для элементов одного пространства:
[
3
,
4
]
+
[
1
,
0
]
[3,4]+[1,0]
[
3
,
4
]
+
[
1
,
0
]
корректно, а
[
3
,
4
]
+
[
1
,
0
,
2
]
[3,4]+[1,0,2]
[
3
,
4
]
+
[
1
,
0
,
2
]
без дополнительного правила не определено. В программном массиве
shape [4096]
означает одну ось и 4096 компонент, а не 4096 геометрических осей интерфейса. Двумерный рисунок показывает принцип, но формула остаётся той же при
n
=
4096
n=4096
n
=
4096
.
Порядок компонент тоже является частью смысла. Если
[
рост
,
масса
]
[\text{рост}, \text{масса}]
[
рост
,
масса
]
переставить в
[
масса
,
рост
]
[\text{масса}, \text{рост}]
[
масса
,
рост
]
, нужно так же переставить все коэффициенты последующих операций. Иначе числовая форма сохранится, а вычисляемая функция изменится. Аналогично нельзя складывать token ID и embedding только потому, что оба представлены числами: у них разные роли и обычно разные shapes.
Инварианты, по которым проверяют реализацию
Для любых совместимых векторов должны выполняться свойства
x
+
y
=
y
+
x
,
(
x
+
y
)
+
z
=
x
+
(
y
+
z
)
,
x
+
0
=
x
,
1
x
=
x
.
x+y=y+x,
\qquad (x+y)+z=x+(y+z),
\qquad x+0=x,
\qquad 1x=x.
x
+
y
=
y
+
x
,
(
x
+
y
)
+
z
=
x
+
(
y
+
z
)
,
x
+
0
=
x
,
1
x
=
x
.
Они позволяют тестировать код без доверия к одному примеру. Ещё одна полезная проверка: изменение только
y
2
y_2
y
2
​
обязано изменить только вторую координату
x
+
y
x+y
x
+
y
. Если изменилась первая, индексы перепутаны.
Покомпонентное сложение двух
n
n
n
-векторов требует
n
n
n
сложений, поэтому его арифметическая стоимость растёт как
O
(
n
)
O(n)
O
(
n
)
. Числовой payload плотного float32-вектора равен
4
n
4n
4
n
байт, но это не размер всего объекта в Python или вкладки браузера: контейнер, метаданные и временные значения считаются отдельно.
x, y = [3, 4], [1, 0]
summed = [a + b for a, b in zip(x, y)]
scaled = [-1 * a for a in x]
assert summed == [4, 4]
assert scaled == [-3, -4]
Код повторяет только что разобранные операции.
Полный проверяемыйPython-пример главы
доступен отдельным файлом; показанный короткий фрагмент не заменяет его реализацию.
Каждая координата имеет своё место. Мы не складывали все числа в одно и не меняли их порядок.
Откуда отсчитываются координаты. Как этот вопрос продолжает полученный результат?
Python-примеры главы 01
Академическая база →

Структурная карта учебников