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

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

Мы умеем читать координаты и складывать числа.

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

Два набора чисел: [3,4] и [2,0].

Координаты описывают объект, но не исчерпывают его

В языковой модели токен сначала становится ID, но ID остаётся адресом: арифметика над номерами строк не обязана иметь содержательный смысл. Чтобы складывать представления, менять их масштаб и измерять согласованность направлений, нужен объект с заранее определёнными операциями. Таким объектом служит вектор. В этой главе рассматривается вещественное пространство Rn\mathbb R^n, где каждый вектор после выбора базиса записывается упорядоченным набором из nn чисел.

Запись x=[3,4]Tx=[3,4]^T можно прочитать двумя совместимыми способами. Алгебраически это координаты в выбранном порядке. Геометрически на плоскости это направленный отрезок с приращением 3 по первой оси и 4 по второй. Стрелка из (0,0)(0,0) в (3,4)(3,4) и стрелка из (1,−1)(1,-1) в (4,3)(4,3) изображают один свободный вектор: у обеих разность «конец минус начало» равна [3,4]T[3,4]^T.

Выбор начала координат относится к рисунку, а не к самому свободному вектору. Выбор базиса, напротив, определяет числа, которыми этот вектор записан. Поэтому фраза «вектор равен паре чисел» допустима только после фиксации базиса и порядка координат.

Операции задаются покоординатно

Для x,y∈Rnx,y\in\mathbb R^n и α∈R\alpha\in\mathbb R:

(x+y)i=xi+yi,(αx)i=αxi,i=1,…,n.(x+y)_i=x_i+y_i, \qquad (\alpha x)_i=\alpha x_i, \qquad i=1,\ldots,n.

При x=[3,4]Tx=[3,4]^T, y=[1,0]Ty=[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.

Геометрия суммы следует из той же формулы. Если перенести стрелку yy так, чтобы она начиналась в конце xx, её новый конец окажется в (3+1,4+0)=(4,4)(3+1,4+0)=(4,4). Это правило треугольника. Параллелограмм даёт тот же результат, потому что перенос стрелки не меняет её приращения.

Умножение на положительное α\alpha сохраняет направление и меняет длину в ∣α∣|\alpha| раз. Отрицательное α\alpha дополнительно обращает направление. При α=0\alpha=0 получается нулевой вектор. У него есть координаты и он является нейтральным элементом сложения, но направление нулевой стрелке приписать нельзя.

Shape является частью контракта

Сложение определено только для элементов одного пространства: [3,4]+[1,0][3,4]+[1,0] корректно, а [3,4]+[1,0,2][3,4]+[1,0,2] без дополнительного правила не определено. В программном массиве shape [4096] означает одну ось и 4096 компонент, а не 4096 геометрических осей интерфейса. Двумерный рисунок показывает принцип, но формула остаётся той же при n=4096n=4096.

Порядок компонент тоже является частью смысла. Если [рост,масса][\text{рост}, \text{масса}] переставить в [масса,рост][\text{масса}, \text{рост}], нужно так же переставить все коэффициенты последующих операций. Иначе числовая форма сохранится, а вычисляемая функция изменится. Аналогично нельзя складывать token ID и embedding только потому, что оба представлены числами: у них разные роли и обычно разные shapes.

Инварианты, по которым проверяют реализацию

Для любых совместимых векторов должны выполняться свойства

x+y=y+x,(x+y)+z=x+(y+z),x+0=x,1x=x.x+y=y+x, \qquad (x+y)+z=x+(y+z), \qquad x+0=x, \qquad 1x=x.

Они позволяют тестировать код без доверия к одному примеру. Ещё одна полезная проверка: изменение только y2y_2 обязано изменить только вторую координату x+yx+y. Если изменилась первая, индексы перепутаны.

Покомпонентное сложение двух nn-векторов требует nn сложений, поэтому его арифметическая стоимость растёт как O(n)O(n). Числовой payload плотного float32-вектора равен 4n4n байт, но это не размер всего объекта в 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 Академическая база →