Весь прошлый пост я писал про то, что нейронка вся такая умная – сама понимает, на что обращать внимание, а на что нет (точно лучше меня, хех).
И работает это потому, что когда мы генерируем новый токен, то пересчитываем "карты внимания" модели ко всем остальным токенам => можем выбрать только релевантные. Логично?
Не совсем. Вот 3 важных детали
1️⃣ Дисбаланс внимания
Модели склонны давать больший вес информации в начале и в конце промпта. Так, инструкции 2 и 3, находятся где-то в середине и идут нафиг.
2️⃣ Локальность
Есть такая штука как positional encoding – это когда в нейронку вместе с каждым токеном передается его положение. Неожиданно, в наших языках порядок букв и слов и предложений – очень важен.
И неожиданно, модели лучше связывают текст, который находится близко. А в нашем случае, между инструкцией 3 и генерацией 3 есть еще куча текста (инструкция 4, генерация 1, генерация 2, см. схему тут)
3️⃣ Видит невидимое
Нейронка может находить ложные связи там, где их нет (прям как люди). Так она может начать использовать слова из вашей инструкции к шагу 4 при генерации шага 1.
———
Про это полезно помнить, когда вы пишите очень длинные инструкции. Если в генерацию вашего шага "протекает" информация из других инструкций больше, чем вам нужно, можно попробовать такой трюк:
Прежде чем выполнять каждый шаг еще раз коротко сформулируй инструкции для него
Это дополнительно выделит релевантные инструкции для конкретного шага и сделает так, что генерация шага будет рядом с его инструкциями (см. positional encoding)