Последовательные модели из части 3-7 сжимали всё пройденное в одно скрытое состояние и шли по одной позиции за раз. Внимание меняет сам подход. Всякий раз, когда нужно, модель заново просматривает все предыдущие позиции и уделяет больше внимания тем, что связаны с текущей. Мы вручную проследим числа запроса (Q), ключа (K) и значения (V), а затем увидим, почему трансформер, собранный из этих деталей, стал каркасом современных языковых моделей, и во что это обходится.
RNN-энкодер–декодер упаковывает всё предложение в один вектор фиксированной длины и обрабатывает позиции по одной, по порядку. Когда предложение становится длиннее, возникают две проблемы.
Узкое место: модель перевода типа энкодер–декодер сжимает исходный текст в один вектор фиксированной длины и уже из него строит перевод. Бахданау (Bahdanau) и соавторы сочли этот вектор фиксированной длины узким местом, ограничивающим качество, и предложили метод, при котором модель для каждого слова перевода сама ищет связанные части исходного текста [R1]. Это и есть внимание. Очередь: RNN может вычислить ht+1, только зная ht, поэтому позиции нельзя вычислять одновременно. Трансформер полностью отказался от рекуррентности и вычисляет все позиции сразу одним лишь вниманием, что сильно ускорило обучение [R2].
Переводим корейское предложение «초파리가 사과를 먹었다» как «The fly ate the apple». При создании каждого английского слова внимание распределяется между корейскими словами. Чем толще линия, тем больше внимание.
В корейском порядок слов «초파리가 (муха) · 사과를 (яблоко) · 먹었다 (съела)», в английском — «The fly · ate · the apple». Глагол стоит на разных местах. Поэтому при создании «ate» нужно сильно смотреть на «먹었다» в самом конце. Значения внимания на этом рисунке заданы для объяснения. Реальная модель перевода сама находит такие соответствия в ходе обучения; Бахданау (Bahdanau) и соавторы сообщили, что выученное внимание хорошо согласуется с человеческой интуицией [R1]. Все значения внимания лежат в пределах 0~1, а их сумма равна 1 (softmax).
Внимание(Q, K, V) = softmax(Q·Kᵀ / √dk) · VVaswani и др., 2017
| Обозначение | В библиотеке | В нейросети |
|---|---|---|
| Q — запрос | Записка с тем, что я ищу | Вектор, выражающий, «что нужно» текущей позиции. Вход × WQ |
| K — ключ | Каталожная карточка каждой книги | Вектор, выражающий для каждой позиции «какая я информация». Вход × WK |
| V — значение | Настоящее содержание книги | Информация, которую каждая позиция реально передаёт. Вход × WV |
| Q·K | Насколько записка совпадает с карточкой | Скалярное произведение двух векторов. Чем ближе направления, тем оно больше |
| ÷ √dk | — | Не даёт скалярному произведению расти с длиной векторов, а softmax — сосредоточиться на одной позиции [R2] |
| softmax | Распределить время чтения между книгами | Превращает оценки во внимание с суммой 1 |
| × V | Смешать содержание пропорционально времени чтения | Складывает значения с весами, равными вниманию. Это и есть выход |
В разделе 3 вопрос и книги были отдельно. В самовнимании каждое слово предложения одновременно и запрос, и ключ, и значение. Каждое слово распределяет внимание между всеми остальными словами.
Векторы слов заданы вручную из четырёх ячеек: [животное, еда, действие, указатель]. Преобразование запроса WQ задано так, чтобы «указательное слово ищет еду, а действие ищет животное». Преобразования ключей и значений оставлены без изменений. В настоящем трансформере и векторы слов, и WQ·WK·WV определяются обучением, а ширина составляет сотни ячеек. Формулы — точно такие же, как в этом примере. Код 1 выдаёт те же числа.
В одном предложении связи наслаиваются друг на друга. «Кто съел?» и «что съели?» — разные вопросы. Каждая голова использует свои WQ·WK·WV, видит свою связь, а результаты склеиваются.
Внимание сравнивает все позиции сразу. Поэтому если перемешать слова, результат для каждого слова останется тем же. Чтобы сообщить порядок, к вектору слова прибавляют «позиционный код», свой для каждой позиции.
В исходной статье для позиции pos в чётные ячейки записывается sin(pos / 100002i/d), а в нечётные — cos(…) [R2]. Первые ячейки колеблются быстро, последние — медленно, поэтому у каждой позиции получается свой узор. Это как часы: если смотреть одновременно на секундную, минутную и часовую стрелки, время определяется однозначно. Широко используется и способ, при котором позиционный код определяется обучением. Маленький трансформер из кода 2 использует обучаемый позиционный эмбеддинг.
Один блок трансформера состоит из многоголового внимания и сети прямого распространения (MLP из 3-2). К каждой из них добавляют короткий путь, прибавляющий вход без изменений (остаточная связь), и нормализацию, а сами блоки складывают в несколько слоёв.
Один и тот же блок применяется по-разному, если поменять, «какая позиция какую может видеть» (маска).
Причины широкого распространения трансформера сводятся к трём. Есть у него и своя цена. Самая большая — вычисление внимания, которое растёт как квадрат длины.
Та же задача, что в коде 2 из 3-7 (все позиции ±1, ответ — первая позиция), и те же настройки обучения (Adam 0.005, 30 эпох, 2,000 обучающих и 1,000 тестовых примеров, 2 сида). Трансформер использует один блок самовнимания (ширина 16, 2 головы) и обучаемый позиционный эмбеддинг. «Внимание к первой позиции» — среднее внимания, которое все позиции уделяют первой.
Эта часть доходит до архитектуры трансформера. Генеративные модели, которые с её помощью создают тексты и изображения (предобучение больших языковых моделей, обучение следованию инструкциям, диффузионные модели и т. п.), выходят за рамки этой серии. Следующие части (3-4 Речь, 3-6 Временные ряды и цены акций, 3-5 Текст) сосредоточены на том, как превратить данные в числа.
Оба примера используют только библиотеки, предустановленные в Colab. Нажмите «Скачать блокнот (.ipynb)» и откройте его в Colab через Файл → Загрузить блокнот или скопируйте код и вставьте в ячейку нового блокнота.
На одних и тех же числах вычисляет пример с библиотекой, самовнимание для пяти слов, две головы, перемешивание порядка и позиционный код. Чтобы подставить свои данные, измените BOOK_K·BOOK_V·QUERIES или векторы слов X.
Задачу, на которой LSTM провалилась при большой длине в 3-7, решаем заново трансформером с одним блоком самовнимания. Заодно измеряем, сколько внимания обученный трансформер уделяет первой позиции, где находится ответ. Таблица ниже, в разделе 9, строится прямо из этого вывода.
Это промпты, которые можно вставить в ИИ-помощника вроде ChatGPT, Qwen или Claude. Если нажать «Копировать», после промпта будет добавлен выбранный код. Замените текст в 〔 〕 на свою ситуацию.
Ответ ИИ — лишь отправная точка. Предложенные статьи, числа и функции библиотек обязательно проверяйте по первоисточникам и официальной документации. Если для конкурса или статьи вы пользовались помощью ИИ, укажите факт и объём использования согласно правилам организаторов и журнала.
Это тот же словарь, что и жёлтое пунктирное подчёркивание в тексте. Во всей серии используются одни и те же обозначения. Нажмите на название раздела, чтобы перейти к месту первого упоминания.
Аналогия — первый шаг к пониманию, но и семя заблуждения. Для аналогий с дрозофилой и мозгом указана сила. Прямая есть данные, что это действительно делает то же самое · Частичная похожи лишь некоторые свойства · Нет соответствие неизвестно
| Понятие | Бытовая аналогия | Аналогия с дрозофилой и мозгом | Где аналогия ошибается |
|---|---|---|---|
| Внимание | Выделять маркером важные места при подготовке к экзамену | Частично Избирательное внимание человека (сосредоточиться на одном голосе в шумном месте) | Внимание мозга — явление, в котором переплетены ощущения, намерения, усталость и т. д. Внимание модели — всего лишь взвешенное среднее, заданное скалярным произведением и softmax |
| Q·K·V | Записка с вопросом, каталожная карточка и содержание книги в библиотеке | Нет | В библиотеке приносят одну книгу, а внимание смешивает все книги в пропорции |
| Softmax-внимание | Распределить время чтения между книгами | Нет | Время, как его ни дели, тратится целиком; но и позиция с вниманием 0.01 обязательно вычисляется (поэтому требуется n²) |
| Многоголовое внимание | Несколько редакторов читают один документ с разных точек зрения | Нет | «Точку зрения» головы задаёт не человек. Если анализировать модель после обучения, у многих голов нет чёткой роли |
| Позиционный код | Время определяется, если смотреть одновременно на секундную, минутную и часовую стрелки | Нет | Часы через сутки возвращаются к началу, а позиционный код привычен модели только в пределах длин, на которых она обучалась |
| Остаточная связь | Всегда держать оригинал рядом с исправленной рукописью | Нет | Главное — оригинал «прибавляется как есть». Если правок мало, оригинал почти без изменений переходит в следующий слой |
| Маска (тип GPT) | Закрыть лист с ответами и решать следующую задачу, глядя только на предыдущие | Нет | При обучении все позиции вычисляются сразу. Закрывается только «область, которую можно видеть» |
E-1 Об авторе · E-2 Научные источники · E-3 Материалы к рисункам
Практические рекомендации для преподавателей, наставников по OJT (обучению на рабочем месте) и тьюторов. Время указано ориентировочно — подстраивайте его под реальное занятие.
| Аудитория | Студенты и работающие специалисты, прошедшие 3-7. Практики, которые хотят знать, «из каких деталей собраны» языковые модели |
|---|---|
| Предварительные знания | Скалярное произведение векторов (перемножить элементы на одинаковых местах и сложить), softmax и MLP из 3-2, энкодер–декодер из 3-7 |
| Цели обучения | ① Вычислить формулу внимания softmax(QKᵀ/√d_k)V на числах ② Объяснить, зачем нужны самовнимание, многоголовое внимание и позиционный код ③ Объяснить, почему трансформер стал основой, вместе со стоимостью n² |
| Ориентировочное время | Чтение 45~55 мин · демонстрация анимаций 25 мин · практика в Colab 30 мин (код 1 — 10 мин, код 2 — запуск 8 мин + разбор 12 мин) |
Введение 5 мин (раздел 1, узкое место) → разделы 2·3, библиотека, 15 мин → разделы 4·5, 10 мин → раздел 6, перемешивание порядка, 10 мин → раздел 9, n² и результаты кода 2, 5 мин → проверочные вопросы 5 мин.
Разделы 1·3, 15 мин → раздел 8: связать три архитектуры с рабочими задачами (классификация, реферирование, перевод), 20 мин → раздел 9: расчёт стоимости (для длины наших документов), 15 мин → запуск и разбор кода 2, 25 мин → карточки промптов 15 мин.
Новичкам — только разделы 1·2·3·9. Слушателям среднего уровня — вручную вычислить итоговый вектор в разделе 3 и сверить с кодом 1, а также самостоятельно вывести 4d² + 4d из раздела 7.
| Раздел | Вопрос, на котором стоит остановиться | Совет по управлению |
|---|---|---|
| 1 Оставшиеся проблемы | «Если уместить предложение из 40 слов в вектор из 8 ячеек, сколько ячеек придётся на одно слово?» | Переключить с 5 на 40 слов и посмотреть, как меняются числа |
| 2 Внимание | «Почему при создании ate модель смотрит на последнее слово?» | Остановиться на кнопке «ate» |
| 3 Q·K·V | «А нельзя ли брать только книгу с наибольшим вниманием?» | Посмотреть, как при «Интересует и то и другое» результат смешивается в [5.5, 5.5] |
| 4 Самовнимание | «На что указывает „оно“? Как модель это узнала?» | Нажать по очереди «оно» → «сладкое» и увидеть также ограничения правил, заданных вручную |
| 5 Многоголовое внимание | «Если увеличить число голов до 8, станет ли параметров в 8 раз больше?» | Проверить число параметров при ширине модели 512 |
| 6 Позиционная информация | «Если при перемешивании порядка результат тот же, в чём проблема?» | Нажать по порядку: без позиционного кода → перемешанный порядок → прибавить |
| 7 Блок | «Большая часть параметров блока — во внимании или в полносвязном блоке?» | Прочитать «долю полносвязного блока» в базовой модели |
| 8 Энкодер·декодер | «Почему тип GPT должен закрывать будущие позиции?» | Нажать «Только декодер» и указать на ячейки × в маске |
| 9 Основа и ограничения | «Если длина документа вырастет вдвое, во сколько раз вырастут вычисления внимания?» | Переключить 4,096 → 32,768, сравнить память и перейти к таблице эксперимента ниже |
| Заблуждение | Верное объяснение | Что показать |
|---|---|---|
| Внимание выбирает одно самое важное слово | Оно смешивает все слова в пропорции. В результат попадают и слова с малым вниманием | Раздел 3, «Интересует и то и другое» |
| Трансформер сам по себе знает порядок | Без позиционного кода результат не меняется при перемешивании порядка | Раздел 6 |
| Роль каждой головы задаёт человек | Роли возникают в ходе обучения. Две головы на этой странице заданы вручную для объяснения | Раздел 5 и пояснение под ним |
| Трансформер во всём лучше RNN | Он силён в дальних связях и параллельных вычислениях, но требует квадратичной по длине стоимости и может проигрывать на малых данных | Раздел 9 |
| Картина внимания — это причина решения модели | Она показывает лишь, куда модель смотрела при вычислении, и не гарантирует, почему решение верно | Раздел 4, «сладкое» |
q·k = 2×2 + 0.4×0 = 4. 4 / √2 ≈ 2.828. Это совпадает с оценкой книги A в разделе 3.
Внимание ≈ [0.238, 0.238, 0.525]. Результат = 0.238×[10,0] + 0.238×[0,10] + 0.525×[6,6] ≈ [5.53, 5.53]. Код 1 выводит [5.525, 5.525].
Он не изменится. Выход каждого слова определяется только «сравнением со всеми остальными словами», а множество сравниваемых слов одно и то же независимо от порядка. В коде 1 разница составила 1e-16 (на уровне погрешности вычислений).
Четыре матрицы W_Q·W_K·W_V·W_O размером 512 × 512 каждая плюс по 512 смещений: 4 × 262,144 + 4 × 512 = 1,050,624. При изменении числа голов уменьшается лишь ширина головы, а размеры матриц те же, так что число не меняется.
В 4 раза. (2n)² = 4n². Было 4,096² = 16,777,216, станет 8,192² = 67,108,864.
В коде 1 вычислите, как изменится внимание в примере с библиотекой, если не делить на √d_k. В двух предложениях объясните, как растёт эффект деления, если увеличить векторы в 10 раз.
В коде 2 уберите позиционный эмбеддинг трансформера (AddPosition) и обучите заново. Сообщите, как изменились результат и «внимание к первой позиции», минимум на 3 сидах, и объясните причину, связав её с разделом 6.
| Начинающим | Разделы 5·7 можно пропустить без потери связности. Достаточно как следует вручную посчитать один пример с библиотекой из раздела 3 |
|---|---|
| Углублённо | Предложите изучить и представить способы снижения стоимости n² из раздела 9 (просмотр по отрезкам, низкоранговые приближения и т. п.). Изученные статьи проверять по оригиналу |
| Что изучить дальше | Сансон Ан, конспект лекций «Наука о данных для бизнеса» (наука о данных в целом) · STEP [K-Digital] Обработка естественного языка с помощью ИИ (связано с 3-5·3-8) · STEP [K-Digital] Основы анализа финтех-данных (связано с 3-6) |
| Материалы для преподавателя | Критерии оценки проверочных вопросов и примеры ответов к заданиям — на странице ответов для преподавателей (3-8) |
Вы дочитали часть «3-8 Внимание и трансформеры» до конца. Сотрудники лаборатории подведут итоги — каждый по одной фразе.