"# Архитектура GPT-1: Принципы работы и ключевые компоненты\n",
"\n",
"Модель **GPT-1 (Generative Pretrained Transformer)** — это первая реализация идеи создания языковой модели на основе архитектуры **Transformer Decoder**, предложенной в работе *“Improving Language Understanding by Generative Pre-Training”* (OpenAI, 2018).\n",
"Она заложила фундамент всех последующих поколений GPT-моделей, показав, что модель, обученная на большом корпусе текстов в режиме **предсказания следующего токена**, способна эффективно адаптироваться к различным задачам обработки естественного языка.\n",
"Модель GPT-1 представляет собой **каскад из 12 идентичных слоев декодера трансформера**. Каждый слой обрабатывает входную последовательность токенов, улучшая их представление на каждом этапе.\n",
"Основная идея заключается в том, что модель учится предсказывать следующий токен в тексте, имея контекст всех предыдущих.\n",
"\n",
"Рассмотрим основные компоненты модели подробнее.\n",
"\n",
"---\n",
"\n",
"### 1. Векторные представления (Эмбеддинги)\n",
"\n",
"Перед тем как текст поступает в трансформер, он преобразуется в числовую форму — **векторные представления**.\n",
"\n",
"* **Эмбеддинги токенов (Token Embeddings)**\n",
" Каждый токен (слово, подслово или символ) преобразуется в вектор фиксированной размерности. Эти векторы формируются в процессе обучения модели и кодируют семантическое значение токенов — токены с похожим смыслом имеют близкие векторы в пространстве.\n",
" Поскольку архитектура трансформера не учитывает порядок элементов последовательности (в отличие от RNN), в GPT добавляются позиционные эмбеддинги.\n",
" Они вводят информацию о позиции каждого токена в предложении, позволяя модели различать, например, «кот съел рыбу» и «рыба съела кота».\n",
"\n",
"---\n",
"\n",
"### 2. Блоки декодера трансформера\n",
"\n",
"Каждый слой модели GPT состоит из двух ключевых компонентов:\n",
"\n",
"#### a. Маскированное многоголовое внимание (Masked Multi-Head Attention)\n",
"\n",
"Механизм **внимания (attention)** позволяет модели определять, какие части предыдущего контекста наиболее важны для текущего токена.\n",
"В GPT используется **маскированное внимание**, что означает, что токен на позиции *i* может \"смотреть\" только на токены, стоящие перед ним (позиции ≤ *i*).\n",
"Это обеспечивает **каузальность** — свойство, благодаря которому модель не «знает будущее», что важно для генерации текста слева направо.\n",
"\n",
"Многоголовое внимание (multi-head attention) разбивает входные векторы на несколько подпространств (голов), каждая из которых учится улавливать разные типы зависимостей — синтаксические, семантические и др.\n",
"Результаты всех голов объединяются и проецируются обратно в исходное пространство признаков.\n",
"\n",
"#### b. Полносвязная сеть (Feed-Forward Network, FFN)\n",
"\n",
"После внимания каждый токен независимо проходит через небольшую двухслойную нейронную сеть с функцией активации (в GPT-1 используется ReLU).\n",
"Эта сеть увеличивает нелинейность модели и помогает ей лучше представлять сложные зависимости в данных.\n",
"\n",
"#### c. Остаточные связи и нормализация (Residual Connections + Layer Normalization)\n",
"\n",
"Чтобы стабилизировать обучение, выход каждого подблока (attention и FFN) складывается сего входом (residual connection), а затем нормализуется (LayerNorm).\n",
"Остаточные связи помогают избежать исчезновения градиентов, а нормализация ускоряет сходимость при обучении.\n",
"\n",
"---\n",
"\n",
"### 3. Выходной слой\n",
"\n",
"После прохождения всех блоков декодера итоговое представление токенов передается в **линейный слой**, который проецирует его в пространство размерности словаря.\n",
"Результатом являются **логиты** — сырые оценки вероятностей появления каждого токена из словаря.\n",
"\n",
"Далее применяется функция **Softmax**, которая преобразует логиты в вероятностное распределение.\n",
"Наиболее вероятный токен выбирается как следующий элемент последовательности.\n",
"\n",
"---\n",
"\n",
"## Токенизация и авторегрессия\n",
"\n",
"\n",
"\n",
"### Токенизация\n",
"\n",
"**Токенизатор** — это отдельный компонент, преобразующий текст в последовательность токенов (целых чисел).\n",
"Он делит текст на минимальные осмысленные единицы (например, слова, подслова или символы) и сопоставляет каждой единице уникальный идентификатор.\n",
"\n",
"Пример:\n",
"\n",
"```\n",
"Текст: \"Привет, мир!\"\n",
"Токены: [15496, 11, 995]\n",
"```\n",
"\n",
"Модель GPT работает именно с этой числовой последовательностью.\n",
"На выходе модель также производит последовательность токенов, которые затем декодируются обратно в текст с помощью того же токенизатора.\n",
"\n",
"---\n",
"\n",
"### Авторегрессия\n",
"\n",
"GPT — **авторегрессионная модель**, то есть она предсказывает следующий токен, используя уже сгенерированные.\n",
"Процесс генерации происходит пошагово:\n",
"\n",
"1. Модели подается начальная последовательность (например, «Once upon a time»).\n",
"2. Модель вычисляет распределение вероятностей следующего токена и выбирает наиболее вероятный.\n",
"3. Новый токен добавляется в конец входной последовательности.\n",
"4. Процесс повторяется, пока не будет достигнут нужный размер текста или не сработает условие остановки.\n",
"\n",
"Таким образом, каждый новый токен порождается с учетом **всего контекста** — от начала до текущего шага.\n",
"Этот принцип обеспечивает связность и контекстуальную осмысленность текста.\n",
"\n",
"---\n",
"\n",
"## Заключение\n",
"\n",
"GPT-1 продемонстрировала, что **предобучение на больших объемах неразмеченных данных** с последующим **тонким дообучением** на конкретной задаче может дать отличные результаты в обработке естественного языка.\n",
"Несмотря на то, что модель GPT-1 сравнительно мала по современным меркам (117 млн параметров), именно она заложила архитектурные и концептуальные основы для всех последующих поколений — GPT-2, GPT-3 и GPT-4."
]
},
{
"cell_type": "markdown",
"id": "d763e797",
"metadata": {},
"source": []
},
{
"cell_type": "markdown",
"id": "6ed35205",
"metadata": {},
"source": [
"## BPE Tokenizator"
]
},
{
"cell_type": "code",
"execution_count": null,
"id": "1a6f2914",
"metadata": {},
"outputs": [
{
"ename": "",
"evalue": "",
"output_type": "error",
"traceback": [
"\u001b[1;31mRunning cells with '.venv (Python 3.10.9)' requires the ipykernel package.\n",
"\u001b[1;31mInstall 'ipykernel' into the Python environment. \n",