Блок трансформера и residual stream
блок трансформера — это attention и feedforward, вокруг которых идёт residual stream: поток, в который каждый слой добавляет свой вклад.
Зачем это нужно
Глубокие сети трудно обучать, если каждый слой заменяет вход. Residual connections сохраняют вход и добавляют к нему результат слоя.
Как это работает
Источник описывает блок через поток для одного токена. Вход — эмбеддинг токена, и каждый компонент читает из потока и пишет обратно. Порядок вычислений такой:
- T1 = LayerNorm(X)
- T2 = MultiHeadAttention(T1)
- T3 = T2 + X
- T4 = LayerNorm(T3)
- T5 = FFN(T4)
- H = T5 + T3
Это вариант prenorm: нормализация стоит перед слоями. В источнике сказано, что он самый распространённый и работает лучше. Вход и выход блока имеют одинаковую размерность, поэтому блоки можно ставить друг на друга.
Пример
Attention-голова может перенести информацию из потока токена A в поток токена B. Так слово получает данные от соседа.
Что запомнить
- Residual stream — это сумма входа и вкладов всех слоёв.
- Внимание — единственный компонент, который читает другие токены.
- Prenorm ставит нормализацию перед слоями.
Где читать дальше
- SLP3, гл. 7 «Transformers and Pretraining», раздел 7.2 и 7.2.3