Эволюция Attention: от RNN к Transformer
Открываем серию постов, в которых расскажем про путь к линейному Attention.
Как это работало:
Двунаправленная RNN кодировала входную последовательность → для каждого шага декодера считалась релевантность входных токенов → получались веса через softmax → на их основе формировался контекст для генерации следующего токена.
Это дало заметный прирост качества в машинном переводе. Но главная проблема RNN оставалась — они работали плохо на длинных последовательностях. Чтобы «понять» слово, модели нужно было пройти весь текст и дойти до него.
Трансформеры стали следующим шагом эволюции
Чтобы видеть всю последовательность сразу и лучше моделировать зависимости между токенами, внесли ряд изменений:
• Отказались от рекуррентности — последовательность считается параллельно.
• Добавили self-attention — помимо энкодера внимание начинает применяться непосредственно к декодеру.
• Добавили Bahdanau Attention выразительности — вместо однослойного перцептрона используется dot product из обучаемых Q,K,V матриц.
Но появилась новая проблема: Attention имеет квадратичную сложность по длине последовательности. Это значит, что при росте контекста память и вычисления растут очень быстро.
Это пытались исправить разными способами:
• уменьшали число голов для экономии кэша;
• делали вычисление по части последовательности;
• создавали кернелы для эффективного вычисления Attention (например, Flash Attention).
Эти методы ускоряли вычисления, но не меняли саму формулу Attention.
Про то, как получилось преодолеть это ограничение — в следующем посте.
💜 Этот пост написал Владислав Попов, ML-инженер в Точка Банк
Открываем серию постов, в которых расскажем про путь к линейному Attention.
До трансформеров в задачах перевода и классификации в основном использовали рекуррентные модели (RNN). В 2014 году появился механизм Attention. Он позволил не просто читать текст последовательно, а смотреть все входные токены и оценивать, какие из них важны для генерации.
Как это работало:
Двунаправленная RNN кодировала входную последовательность → для каждого шага декодера считалась релевантность входных токенов → получались веса через softmax → на их основе формировался контекст для генерации следующего токена.
Это дало заметный прирост качества в машинном переводе. Но главная проблема RNN оставалась — они работали плохо на длинных последовательностях. Чтобы «понять» слово, модели нужно было пройти весь текст и дойти до него.
Трансформеры стали следующим шагом эволюции
Чтобы видеть всю последовательность сразу и лучше моделировать зависимости между токенами, внесли ряд изменений:
• Отказались от рекуррентности — последовательность считается параллельно.
• Добавили self-attention — помимо энкодера внимание начинает применяться непосредственно к декодеру.
• Добавили Bahdanau Attention выразительности — вместо однослойного перцептрона используется dot product из обучаемых Q,K,V матриц.
Но появилась новая проблема: Attention имеет квадратичную сложность по длине последовательности. Это значит, что при росте контекста память и вычисления растут очень быстро.
Это пытались исправить разными способами:
• уменьшали число голов для экономии кэша;
• делали вычисление по части последовательности;
• создавали кернелы для эффективного вычисления Attention (например, Flash Attention).
Эти методы ускоряли вычисления, но не меняли саму формулу Attention.
Про то, как получилось преодолеть это ограничение — в следующем посте.
💜 Этот пост написал Владислав Попов, ML-инженер в Точка Банк