Если вы хоть раз взаимодействовали с языковыми моделями и сталкивались с тем, как посреди осмысленного текста вдруг проскакивает странный иероглиф, то тема этого материала покажется вам знакомой. К финалу мы разберемся в физике процесса: что именно происходит «под капотом» нейросети, когда она выдает подобные артефакты.
Я разбил текст на два смысловых блока. Первый — для тех, кто слышал термин «эмбеддинг», но глубоко не погружался: здесь мы на простых примерах разберем внутреннее устройство цифрового «разума». Вторая часть предназначена для тех, кто готов копнуть глубже — мы обсудим феномен grokking, преобразования Фурье и суперпозицию, чтобы на практике увидеть, как структурируется пространство обученной модели.
Часть 1. Азы: как ИИ «понимает» данные
Модель «не видит» букв
Важно уяснить: большие языковые модели не работают с текстом в привычном нам представлении. Сначала поток символов нарезается на токены — фрагменты слов или целые слова. Каждому такому токену присваивается уникальный идентификатор. Модель оперирует исключительно набором этих чисел: для нее не существует понятий «слово» или «буква», есть лишь условный токен №8421.
Однако простые числа — лишь ярлыки, лишенные логических связей. Чтобы модель могла «мыслить», каждому токену присваивается вектор — упорядоченный список из множества чисел. Этот набор координат и есть эмбеддинг.
Вектор — это вектор
Пусть термин «вектор» не сбивает вас с толку. В двумерном пространстве (x, y) это направленная стрелка из начала координат. В 128-мерном пространстве — это стрелка, указывающая в определенную точку многомерной системы. Мы не можем визуализировать такое пространство, но математические законы в нем работают исправно: можно измерить длину стрелки, угол между ними и расстояние до соседей.
Ниже приведено визуальное представление того, как векторы чисел в гипотетической модели выглядят при проецировании на плоскость:
Смысл каждого числа определяется направлением этой стрелки, которое модель «вычисляет» самостоятельно.
Откуда берется осмысленность?
Это ключевой момент. В начале обучения векторы случайны — это просто «шум» и хаотичное облако точек. В процессе тренировки модель постоянно ошибается и корректирует свои веса, постепенно разворачивая векторы в нужные стороны. В итоге токены со схожим контекстом оказываются «соседями» в этом пространстве.
Вся суть современных LLM сводится к одному: выстроить геометрическую модель смыслов, где близость точек означает близость значений, а векторное направление — конкретные свойства.
NVIDIA L4 в облаке Selectel от 22,61 ₽/час
Оптимальные мощности для запуска и обучения актуальных языковых и мультимодальных нейросетей.
Чтобы понять внутренние механизмы, обучим простую нейросеть складывать числа от 0 до 52 по кругу (операция mod 53). Почему 53? Это простое число, что исключает возможность «схалтурить», разбив задачу на простые подгруппы.
Наша модель будет предельно лаконичной: таблица эмбеддингов и пара полносвязных слоев — никакой архитектуры трансформеров, чтобы сохранить чистоту эксперимента.
import numpy as np, torch, torch.nn as nn
import matplotlib.pyplot as plt
from matplotlib import cm
torch.manual_seed(0); np.random.seed(0)
N, DIM, STEPS = 53, 128, 4000
a = np.repeat(np.arange(N), N); b = np.tile(np.arange(N), N)
A = torch.tensor(a); B = torch.tensor(b); Y = torch.tensor((a + b) % N)
for i in range(N):
ax.annotate(str(i), P[i], color="white", fontsize=7, ha="center", va="center")
ax.set_aspect("equal"); ax.set_xticks([]); ax.set_yticks([])
plt.tight_layout(); plt.savefig("ring.png", dpi=130); print("freq k =", k)
Параметр weight_decay критически важен: без регуляризации модель просто «зубрит» данные, не формируя внутренней структуры. Штраф за сложность принуждает нейросеть искать лаконичный математический алгоритм, что и приводит к эффекту grokking — внезапному прозрению системы.
Этапы «прозрения»
В ходе обучения мы наблюдаем две фазы. Сначала точность на известных парах стремительно растет, тогда как на тестовых данных она остается нулевой. Но после достижения определенного порога (около 2000 шагов) модель внезапно начинает безошибочно решать даже те задачи, что не встречала ранее.
Геометрия кольца
К моменту «прозрения» эмбеддинги чисел выстраиваются в четкую циклическую структуру. Модель самостоятельно «открыла» для себя циклическую природу модульного сложения, так как это вычислительно наиболее эффективный способ оперировать данными.
Нюанс с частотами
Важно понимать: это лишь проекция. В 128-мерном пространстве таких колец может быть несколько, наложенных друг на друга. По сути, модель использует вариацию преобразования Фурье, раскладывая данные на «частоты», чтобы совершать вычисления параллельно. В этом кроется секрет эффективности нейросетей.
Суперпозиция и экономия места
В реальных LLM количество смыслов колоссально превышает число доступных измерений. Поэтому модель вынуждена использовать суперпозицию: хранить несколько независимых понятий в одном и том же секторе пространства. Именно поэтому нельзя просто взять и найти один «нейрон», отвечающий, скажем, только за глаголы — в нем будут «спрессованы» данные сразу из нескольких категорий.
Развязка: почему появляются иероглифы?
Теперь мы можем ответить на исходный вопрос. Иероглифы или случайные символы возникают из-за «мертвых зон» в обучении. Если токен (например, редкий юникод-символ) практически не встречался в обучающей выборке, его вектор остается в состоянии хаоса — там, где он оказался в начале тренировки.
В процессе генерации, когда модель сталкивается с неоднозначным контекстом, вероятность следующего токена «размазывается». Если жребий случайно выпадает на такой «необученный» токен с хаотичным вектором, он всплывает в тексте. А так как нейросеть продолжает генерацию на основе своих же предыдущих ответов, этот иероглиф может спровоцировать дальнейший «галлюциногенный» сбой.