Головна / Статті / Як трансформер читає «The cat sat on the mat»: крок за кроком

Як трансформер читає «The cat sat on the mat»: крок за кроком

Простежимо одне речення крізь шар трансформера: токени, ембедінги, позиції, self-attention, residual-зв'язки, нормалізація та feed-forward мережа.

1289 слів

Велика мовна модель — це модель глибокого навчання на архітектурі трансформера, навчена на величезних обсягах тексту, щоб розуміти й породжувати людську мову. Якщо ввести в неї просте речення «The cat sat on the mat» («Кіт сидів на килимку»), вона прочитає його зовсім не так, як ви. Модель перетворює слова на числа, додає до них відомості про те, де стоїть кожне слово, дозволяє кожному слову подивитися на всі інші, щоб зібрати контекст, а потім знову й знову уточнює ці числа, доки кожне слово не отримає багатше й змістовніше представлення.

Усе це відбувається всередині трансформера, і щоб зрозуміти основну ідею, складна математика не потрібна. Досить простежити шлях речення від сирого тексту до підсумкового набору чисел, у якому закодовано зміст, зв'язки й контекст. Нижче — маршрут, яким «The cat sat on the mat» проходить через один шар трансформера.

Чотири ідеї, які варто запам'ятати

  • Attention: токени спілкуються між собою.
  • Feed-forward мережа (FFN): кожен токен обробляє те, що встиг зібрати.
  • Residual-зв'язок: стару інформацію не викидаємо.
  • Нормалізація: тримаємо числа стабільними.

Що надходить на вхід блоку

1. Текст

На вході — звичайне англійське речення. Дорогою слова не перетворюються на інші слова. На кожному кроці змінюється векторне представлення кожного токена.

2. Токени

Речення розрізається на невеликі одиниці — токени. Часто це цілі слова або їхні частини: «The», «cat», «sat», «on», «the», «mat».

3. Ембедінги

Кожен токен стає списком чисел — ембедінгом, такою собі грубою першою «відбиткою» змісту слова. На цьому етапі в «cat» і «mat» уже різні відбитки, але жоден із них нічого не знає про решту речення. Кожен ID токена перетворюється на вектор:

                          The → [vector]
                          cat → [vector]
                          sat → [vector]
                          on → [vector]
                          the → [vector]
                          mat → [vector]

4. Позиція

Порядок важливий, тож кожен токен отримує ще й позначку свого місця: перший, другий і так далі. Тепер «cat» знає, що він друге слово, а «mat» — що останнє. Відбитки стають трохи багатшими.

5. Self-attention

Тут трансформер для кожного токена з'ясовує, які інші токени в реченні для нього важливі. Модель дозволяє токенам дивитися одне на одного й може вивчити сильні зв'язки: наприклад, що «The» стосується «cat», а «sat» описує дію, у якій бере участь «cat». Кожен токен дивиться на всі інші й вирішує, скільки уваги приділити кожному. «Sat» сильно спирається на «cat» — того, хто сидить, — і на «mat» — місце. Артикль «the» перед «mat» здебільшого дивиться на «mat».

Після attention кожен токен увібрав корисну інформацію з решти речення. «Cat» тепер має невиразне відчуття, що сидить саме він, а «mat» — натяк, що на ньому щось сидить. Інакше кажучи:

  • cat стає «cat плюс інформація про його контекст»
  • sat стає «sat плюс інформація про те, хто сидить»
  • mat стає «mat плюс інформація про його зв'язок з 'on'»

Токени перейшли від ізольованих представлень до таких, що враховують контекст.

6. Residual-зв'язок

Початкову інформацію про токен втрачати не можна, тому результат attention до неї додається. Для «cat»:

                           Original: "cat"
                             +Attention
              information: "cat is related to The and sat"
              Updated  : "cat + its contextual information"

7. Нормалізація

Далі представлення нормалізуються:

                          Updated representations
                                  ↓
                               Normalize
                                  ↓
                          Well-scaled representations

Концептуально для всього речення:

                            cat + context
                                  ↓
                       normalized cat + context


                           sat + context
                                  ↓
                        normalized sat + context

Що змінилося? Зміст на цьому кроці змінюватися не має. Числа просто масштабуються, щоб мережа була стабільнішою й легше навчалася.

8. Feed-forward мережа

Далі кожен токен працює зі своїм оновленим представленням. Невелика нейромережа, feed-forward мережа, окремо розглядає числа кожного токена й знову їх перетворює: уточнює зміст, поєднує ідеї або готує вектор до наступного шару. «Cat» може вийти звідси з чіткішим відчуттям, що це тварина, яка сидить, а «mat» — що це поверхня. Ця робота відрізняється від роботи attention:

          In Attention "Which other tokens are useful?"
In FNN "Now that I have this information, how should I transform it?"

9. Другий residual-зв'язок

Попередня інформація знову зберігається — та сама ідея застосовується до кожного токена:

                          Before FFN:

                        "cat + context"

                               +

                          FFN output:

                      "refined representation"

                               ↓

                          After residual:

                "cat + context + refined information"

Що змінилося:

                    Previous representation
                            +
                    FFN's new information
                            ↓
                    Richer representation

10. Друга нормалізація

Оновлені представлення ще раз нормалізуються для стабільності:

                    Richer representations
                            ↓
                          Norm
                            ↓
                    Stable richer representations

11. Багатше представлення

Те, що починалося як грубі відбитки слів, тепер стало значно повнішим набором чисел. Кожен токен зберігає свій зміст, свою позицію та зв'язок з іншими словами. Це представлення йде в наступний шар трансформера або на фінальний вихід, де цикл повторюється, і «розуміння» моделлю фрази «The cat sat on the mat» поглиблюється.

До блоку кожен токен містить переважно інформацію про себе:

          The → mostly information about "The"

          cat → mostly information about "cat"

          sat → mostly information about "sat"

          on  → mostly information about "on"

          the → mostly information about "the"

          mat → mostly information about "mat"

Після блоку:

                            The
                             ↓
                 "The + information from its context"

                            cat
                             ↓
                 "cat + information about its relationships"

                            sat
                             ↓
                 "sat + information about cat and the sentence"

                            on
                             ↓
                 "on + relationship information"

                            the
                             ↓
                    "the + contextual information"

                            mat
                             ↓
              "mat + information about its relationship with on"

                             .
                             ↓
                   ". + sentence-ending context"

Потім іде наступний блок трансформера:

        Block 1
     ──────────────

The → contextual representation
cat → contextual representation
sat → contextual representation
on  → contextual representation
the → contextual representation
mat → contextual representation


             ↓


          Block 2
      ──────────────

The → more refined representation
cat → more refined representation
sat → more refined representation
on  → more refined representation
the → more refined representation
mat → more refined representation

Далі той самий процес повторюється на багатьох шарах. Трансформер поступово перетворює представлення токенів: від простої інформації про токен до контекстної і далі до дуже багатих представлень, за якими підсумкова модель передбачає наступний токен.

Що в підсумку

Трансформер не розуміє мову так, як людина. Він бере речення на кшталт «The cat sat on the mat», ділить його на токени й перетворює кожен на числа з доданою інформацією про позицію. Attention дає кожному слову змогу зібрати контекст від інших, residual-зв'язки й нормалізація змішують і уточнюють числа, а feed-forward мережа перетворює їх далі. Після багатьох повторень модель має значно багатшу числову картину речення, у якій непомітно закодовано зміст, зв'язки й порядок. Саме вона дає великим мовним моделям змогу так вільно продовжувати текст, відповідати на запитання й пропонувати нові ідеї.