Как работает ИИ. Математический принцип

Я уже рассказывал, как объяснял другу, сидящему в колонии строгого режима, что такое ИИ, так как он уже более трёх дет лишён свободы и просто не знает, как поменялся мир за это время.

Вторая серия о том, как ИИ работает технически.

Если объяснить совсем по сути, современный ИИ вроде ChatGPT — это не «мыслящая личность» и не база готовых ответов, а очень большая математическая функция, обученная угадывать, какой следующий кусок текста наиболее вероятен после предыдущих.

1. С чего всё начинается: текст превращают в числа

Компьютер не понимает слова как человек. Для него всё должно быть числами. Поэтому фраза вроде «Как работает ИИ?» сначала разбивается на маленькие кусочки — токены. Токеном может быть слово, часть слова, знак препинания или даже пробел в особом виде. Например, «работает» может быть одним токеном, а может быть разбито на несколько частей — зависит от словаря модели.

Каждому токену соответствует номер. То есть текст сначала превращается в последовательность целых чисел. Уже это делает язык удобным для машинной обработки.

Подписывайтесь на мой телеграм-канал Финсайд и потом не говорите, что вас не предупреждали: https://t.me/finside. Темы канала: экономика, инвестиции, финтех, банки. Автор: Олег Анисимов

Также читайте, как я погорел на стартапе.

Но одного номера мало. Число «15273» само по себе не говорит, что это слово похоже на «модель» или связано с темой математики. Поэтому каждый токен переводится в вектор — длинный список чисел. Например, не просто «15273», а условно массив из 4 096 или 8 192 чисел. Это называется «эмбеддинг». Именно в таких векторах модель хранит «смысловые координаты». Слова с похожим употреблением оказываются рядом в этом многомерном пространстве.

2. Главная математика: линейная алгебра и вероятности

Внутри языковой модели почти всё держится на трёх вещах:

  1. умножение матриц;
  2. сложение и нелинейные преобразования;
  3. расчёт вероятностей.

Если очень грубо, модель берёт входные векторы и много раз прогоняет их через огромные таблицы чисел — матрицы весов. Вес — это просто параметр, число, которое модель подстроила во время обучения. Таких параметров могут быть миллиарды и сотни миллиардов.

Что делает модель на каждом шаге? Она пересчитывает представление текста, пытаясь уловить связи: к чему относится местоимение, где начало и конец мысли, какой стиль у текста, что логично продолжить дальше. Это и есть математика «понимания» в инженерном смысле: не осознание, а преобразование числовых представлений так, чтобы из них можно было хорошо предсказывать продолжение.

3. Почему все говорят про «трансформер» и attention

Большинство современных больших языковых моделей устроены по архитектуре Transformer. Её ключевая идея — attention, то есть механизм «внимания».

Когда модель читает текущий текст, она не обрабатывает каждое слово в полной изоляции. Она вычисляет, на какие предыдущие токены надо смотреть сильнее, а на какие слабее. Например, в предложении «Мария положила книгу на стол, потому что она была тяжёлая» модель пытается понять, к чему относится «она» — к книге или к столу. Для этого attention сравнивает токены друг с другом.

Технически это делается тоже через математику: из каждого токена вычисляются три вектора — Query, Key и Value. Потом считаются скалярные произведения между Query одного токена и Key других токенов. Получаются числа важности. После нормализации модель решает, сколько информации взять от каждого предыдущего элемента.

Иначе говоря, attention — это способ взвешенно смешивать контекст.

4. Как модель обучают

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

Формально модель выдаёт распределение вероятностей по словарю токенов. Например:

  • «и» — 12 %
  • «это» — 9 %
  • «модель» — 18 %
  • «работает» — 4 %

Правильный токен известен из обучающего текста. Считается ошибка, обычно через функцию потерь вроде cross-entropy. Затем по этой ошибке считается градиент — то есть как надо изменить каждый вес, чтобы в будущем ошибка стала меньше. Это делается методом обратного распространения ошибки и вариантами градиентного спуска.

Так модель проходит через гигантское количество примеров и постепенно подгоняет миллиарды параметров.

5. Где тут процессоры и почему нужны GPU

Обычный центральный процессор, CPU, хорош для самых разных задач, но плохо подходит для огромного числа одинаковых операций над матрицами. А обучение ИИ — это именно бесконечные массовые операции: умножения, сложения, нормализация, вычисление градиентов.

Поэтому используют GPU — графические процессоры. Исторически они создавались для графики, но оказались идеальны для параллельной математики. Если CPU силён в сложной логике и последовательных шагах, то GPU силён в том, чтобы одновременно выполнять тысячи похожих операций.

Для обучения крупных моделей используют не один GPU, а целые кластеры. Память тоже критична: веса модели, промежуточные активации, данные для обратного прохода — всё это занимает огромные объёмы. Поэтому важны не только вычисления, но и пропускная способность памяти, скорость обмена между ускорителями, сетевые соединения между серверами.

6. Почему всё в итоге сводится к числам

Кажется магией, что из одних чисел получается осмысленный текст. Но дело в масштабе. Если модель увидела огромное количество примеров, она начинает статистически улавливать закономерности:

  • после одних слов чаще идут другие;
  • определённые конструкции характерны для научного текста;
  • в вопросе о математике часто встречаются слова «матрица», «вектор», «вероятность»;
  • если раньше в разговоре упоминали Италию, то «Венеция» становится более вероятной, чем «Новосибирск».

То есть ИИ не «знает» всё в человеческом смысле, а строит очень сложную поверхность вероятностей над пространством текста.

7. Как происходит выдача ответа

Когда пользователь пишет запрос, модель снова превращает его в токены, прогоняет через свои слои и получает вероятности следующего токена. Затем выбирается один токен. Потом он добавляется к уже написанному тексту, и процесс повторяется.

Ответ рождается по одному токену за шаг.

Выбор бывает разным. Можно брать самый вероятный токен — это делает ответ более сухим и предсказуемым. Можно использовать «температуру» и сэмплирование: тогда из нескольких правдоподобных вариантов выбирается один случайным, но контролируемым образом. Чем выше температура, тем больше разнообразия и риск странностей. Чем ниже — тем больше шаблонности.

8. Почему ИИ ошибается и «галлюцинирует»

Потому что его цель — не «говорить правду», а строить правдоподобное продолжение. Если в данных было мало хороших примеров, если вопрос двусмысленный, если нужна точная свежая информация, модель может сгенерировать убедительный, но неверный текст.

Именно поэтому ИИ силён в языке, стиле, структуре, обобщении, программировании по шаблонам, но требует проверки там, где важны точные факты.

9. Самая короткая суть

ИИ такого типа — это гигантская система чисел, которая:

  1. переводит текст в токены и векторы;
  2. многократно преобразует их через матрицы;
  3. с помощью attention учитывает контекст;
  4. оценивает вероятности следующего токена;
  5. выдаёт ответ шаг за шагом.

Снаружи это похоже на разговор. Внутри — это колоссальная линейная алгебра, теория вероятностей, оптимизация и очень много вычислений на GPU.

На этом объяснение «на пальцах» закончено. Ниже более научное объяснение с формулами и числами.

Если смотреть уже не на общую идею, а на внутреннюю механику, то языковая модель — это композиция очень больших функций вида

fθ(x)=y,f_\theta(x)=y,

где xx — входные токены, yy — распределения вероятностей следующих токенов, а θ\theta — параметры модели. Параметров может быть 10910^9, 101010^{10} и больше: 7 млрд, 13 млрд, 70 млрд, 175 млрд и так далее. Каждый параметр — это просто число, но в сумме они образуют огромную вычислительную схему.

Токены, словарь, векторы

Пусть словарь модели содержит V=100000V=100\,000. Тогда любой текст после токенизации превращается в последовательность целых чисел:

[1542, 87, 9911, 42,][1542,\ 87,\ 9911,\ 42,\dots]

Подписывайтесь на мой телеграм-канал Финсайд и потом не говорите, что вас не предупреждали: https://t.me/finside. Темы канала: экономика, инвестиции, финтех, банки. Автор: Олег Анисимов

Также читайте, как я погорел на стартапе.

Дальше каждый токен заменяется на вектор размерности ddd. Типичные порядки: d=768d=768, 20482048, 40964096, 81928192. Если d=4096d=4096, то один токен становится точкой в пространстве из 4096 координат:

eiR4096e_i \in \mathbb{R}^{4096}

Матрица эмбеддингов имеет размер

ERV×dE \in \mathbb{R}^{V \times d}

Например, при V=100000V=100\,000 и d=4096d=4096 это уже 409,6 млн чисел только на входной словарь.

Позиция тоже кодируется числами

Порядок слов сам по себе не следует из набора токенов, поэтому к эмбеддингам добавляют позиционную информацию:

X=E(tokens)+PX = E(tokens) + P

где PP — позиционные векторы. Иначе последовательности «кот укусил пса» и «пса укусил кот» выглядели бы почти одинаково.

Если длина контекста L=8192L=8192, а размерность d=4096d=4096, то вход в один слой — это матрица

XR8192×4096X \in \mathbb{R}^{8192 \times 4096}

то есть более 33 млн чисел только в представлении текущего контекста.

Внимание как математика связи токенов

Внутри слоя трансформера вычисляются три матрицы:

Q=XWQ,K=XWK,V=XWVQ=XW_Q,\quad K=XW_K,\quad V=XW_V

где WQ,WK,WVW_Q, W_K, W_V​ — обучаемые веса. Затем строится матрица сходства:

S=QKTdkS=\frac{QK^T}{\sqrt{d_k}}

Если длина контекста LL, то SS имеет размер L×LL \times L. При L=8192L=8192 это уже

81922=671088648192^2 = 67\,108\,864

элементов — только для одной головы внимания.

После этого применяется softmax:

A=softmax(S)A=\text{softmax}(S)

и итог внимания получается так:

Attention(Q,K,V)=AV\text{Attention}(Q,K,V)=AV

Смысл в том, что каждый токен получает взвешенную смесь других токенов. Если голов внимания h=32h=32, то всё это делается параллельно 32 раза, а затем результаты склеиваются.

Многослойность

Один блок трансформера обычно содержит:

  1. multi-head attention,
  2. остаточные связи,
  3. layer normalization,
  4. feed-forward network.

Упрощённо:H1=X+MHA(X)H_1 = X + \text{MHA}(X)H2=H1+FFN(H1)H_2 = H_1 + \text{FFN}(H_1)

FFN — это обычно два линейных преобразования с расширением размерности. Например, при d=4096d=4096 внутренний слой может быть 4d=163844d=16384 или около того:

FFN(x)=W2σ(W1x)\text{FFN}(x)=W_2 \sigma(W_1 x)

Если модель имеет 32, 48 или 80 таких блоков, вычисления проходят через них последовательно. Поэтому глубина тоже измеряется десятками слоёв, а не двумя-тремя.

Откуда берётся следующий токен

После всех слоёв модель получает вектор скрытого состояния hh для последней позиции и переводит его в логиты:

z=Wouthz = W_{out} h

Подписывайтесь на мой телеграм-канал Финсайд и потом не говорите, что вас не предупреждали: https://t.me/finside. Темы канала: экономика, инвестиции, финтех, банки. Автор: Олег Анисимов

Также читайте, как я погорел на стартапе.

где zRVz \in \mathbb{R}^{V}. Если V=100000V=100\,000, то модель выдаёт 100 тысяч чисел — «сырых оценок» для всех токенов словаря. Затем снова softmax:

pi=ezij=1Vezjp_i=\frac{e^{z_i}}{\sum_{j=1}^{V} e^{z_j}}

На выходе — распределение вероятностей. Например:p(«модель»)=0.31,p(«система»)=0.22,p(«алгоритм»)=0.11p(\text{«модель»})=0.31,\quad p(\text{«система»})=0.22,\quad p(\text{«алгоритм»})=0.11p(«модель»)=0.31,p(«система»)=0.22,p(«алгоритм»)=0.11

Дальше выбирается один токен: либо максимум, либо случайная выборка из распределения.

Температура и выборка

При сэмплировании логиты часто делят на температуру TTT:pi=ezi/Tjezj/Tp_i=\frac{e^{z_i/T}}{\sum_j e^{z_j/T}}pi​=∑j​ezj​/Tezi​/T​

Если T=0.2T=0.2T=0.2, распределение становится «острее»: модель почти всегда выбирает самые вероятные варианты.
Если T=1.0T=1.0T=1.0, текст разнообразнее.
Если T=1.5T=1.5T=1.5, растёт креативность, но и вероятность абсурда тоже.

Иногда дополнительно используют top-k или top-p. Например, top-k = 40 означает: оставить только 40 самых вероятных токенов, остальные обнулить.

Обучение: ошибка и её уменьшение

На обучении известен правильный следующий токен. Потеря обычно считается через cross-entropy:L=iyilogpi\mathcal{L} = -\sum_i y_i \log p_i

Поскольку правильный токен один, формула часто упрощается до

L=logptrue\mathcal{L} = -\log p_{\text{true}}

Если модель дала правильному токену вероятность 0,9, то потеря:

log(0.9)0.105-\log(0.9)\approx 0.105

Если 0,01, то:log(0.01)4.605-\log(0.01)\approx 4.605

То есть ошибка резко растёт, когда модель уверенно ошибается.

После этого считается градиент:

θL\nabla_\theta \mathcal{L}

и параметры обновляются, например, по схеме градиентного спуска:

θt+1=θtηθL\theta_{t+1}=\theta_t-\eta \nabla_\theta \mathcal{L}

где η\eta — шаг обучения. На практике используют Adam и его варианты, где обновление сложнее и включает экспоненциальные средние градиентов.

Сколько это стоит вычислительно

Для больших моделей счёт идёт уже не на миллионы, а на квадриллионы операций. Один шаг обучения требует прямого прохода, обратного прохода и обновления весов. Грубое инженерное правило: обучение модели с NN параметрами на DDD токенах требует порядка

6ND6ND

операций с плавающей точкой.

Если взять модель в 70 млрд параметров и обучать её на 1 трлн токенов, получается порядок:

6×70109×1012=4.210236 \times 70\cdot 10^9 \times 10^{12} = 4.2 \cdot 10^{23}

операций. Это уже астрономический объём вычислений.

Память и типы чисел

Параметры хранятся не как абстрактные числа, а в конкретном формате: fp32, fp16, bfloat16, int8, int4.

Если один параметр занимает 2 байта (fp16)(fp16)(fp16), то модель на 7 млрд параметров требует минимум:

7109×214 ГБ7\cdot 10^9 \times 2 \approx 14\ \text{ГБ}

только на веса.

Для 70 млрд параметров:

70109×2140 ГБ70\cdot 10^9 \times 2 \approx 140\ \text{ГБ}

И это ещё без активаций, градиентов, состояний оптимизатора. Поэтому на обучении память может быть в несколько раз выше, чем «вес модели». Отсюда и кластеры из множества GPU.

Почему именно GPU

Главная операция — умножение больших матриц. Например, матрица 8192×40968192 \times 4096 умножается на 4096×40964096 \times 4096. Это десятки и сотни миллиардов операций даже внутри одного слоя. GPU хороши именно потому, что умеют параллельно выполнять огромное число одинаковых арифметических действий. CPU для такой нагрузки слишком «узок».

Вся магия ИИ в итоге сводится к повторению одного и того же паттерна: взять гигантские массивы чисел, перемножить, нормализовать, посчитать вероятности, сравнить с правильным ответом и немного поправить веса. Миллиарды раз.

Итого в одном абзаце

Математически языковая модель — это функция, которая преобразует последовательность токенов в последовательность распределений вероятностей. Технически она состоит из матриц весов размером в миллиарды параметров, операций вида QKTQK^TQKT, softmax, нелинейностей, градиентов и многократных обновлений θ\thetaθ. Физически всё это работает на ускорителях, которые за секунды выполняют колоссальные объёмы линейной алгебры. А текст, который видит пользователь, — лишь финальная интерпретация огромного каскада вычислений над числами.

Могу сразу сделать ещё один кусок в таком же стиле: отдельно про «почему ИИ врёт», отдельно про «что такое нейрон, слой, вес и токен» или отдельно про «сколько электричества и железа это требует».

Автор

Олег Анисимов

Подпишитесь на мой секретный анонимный телеграм-канал с 20000 подписчиков.

Подписаться
Уведомить о
guest
0 комментариев
Старые
Новые Популярные
Межтекстовые Отзывы
Посмотреть все комментарии