Почему LLM выдает разные ответы на один и тот же вопрос?
Некоторое время назад обсуждали с знакомыми MLOps-ами тему воспроизводимости ответов LLM. То есть способность многократно выдавать один и тот же ответ на неизменный вопрос. Я в данном посте рассказывал, что модель генерирует слово за словом (токен за токеном, если быть точнее). Каждый токен она берет из распределения вероятностей. Логично, что нужно брать тот, у кого наибольшая вероятность. Но придумали специальный параметр, позволяющий брать менее вероятный токен, что делает модель более вариативной и непредсказуемой, и в то же время привносит некоторую случайность в ответ. Этот параметр назвали температурой.
Я был убежден, что установив температуру в 0, можно сделать LLM гарантированно детерменированной (т.е. всегда один и тот же ответ при одинаковом запросе). Как оказалось, в теории так и должно быть, но на практике — не всегда. И недавно один небезызвестный стартап рассказал как раз об этом в своей статье.
Ответ в параллельности вычислений с плавающей точкой (float). Нас в школе учили, что при перестановке слагаемых сумма не меняется. Вот только с float-числами это не всегда верно. В статье хорошо показан пример, когда сложение чисел разных порядков приводит к округлению и, как следствие, потере информации. А в LLM таких операций миллиарды. И небольшая потеря в точности в итоге может привести к иной вероятности токена, что вполне может повлиять на всю последовательность слов.
А при чем тут параллельность?
Разработчики знают, чтобы нейронка работала эффективнее, запросы можно обрабатывать параллельно. Для этого входные данные аккумулируются и обрабатываются пачкой, правильнее сказать батчом. Если запросов от пользователей много, за секунду соберется батч размера 64. Если запросов мало, то 10 или 5. И это почти всегда непредсказуемо в реальном мире. Авторы доказывают, что в LLM огромнейшее число операций с плавающей точкой может приводить к различным ответам при разном размере батча.
И что предлагают?
В статье описаны альтернативные способы реализации некоторых операций внутри нейронки, что поможет устранить проблему. Можете почитать, если интересно.
А нужно ли это вообще?
Да, возможно, при стандартном использовании LLM проблема невоспроизводимости не стоит так остро. Однако, если требуется модель тщательно протестировать, посчитать метрики или как-то поисследовать, новые ответы LLM из раза в раз на один и тот же вопрос могут быть препятствием, чтобы сделать дальнейший вывод.
Post #94
117