Преамбула раз. Я решил, что мне очень нравится тот формат, в котором пишет
Никита Сушко - aka полотно текста на 10 000 строк без логического разделения прям в стандартном редакторе ТГ.
Преамбула два. В моём канале вообще-то не особо много технических постов (вообще, не очень много постов в принципе, но это мы опустим), но я очень хотел бы писать что-то такое, что было бы действительно интересно с точки зрения не только обывателя, но и человека разбирающегося. Собственно, вокруг этой идеи и построен мой канал, который я стабильно забрасываю раз в полгода - писать что-то вроде бы сложное вроде бы просто. Обычно, получается плохо и я очень сложно описываю что-то, что вообще-то очень просто для понимания и даже в этом умудряюсь фактологически ошибаться. Этот пост не станет исключением
Про детерминизм и сглангЕсть в статистической механике такая штука, называется распределение Больцмана. Это распределение вероятностей, которое демонстрирует вероятность пребывания системы в определенном состоянии в зависимости от энергии этого состояния и от температуры системы. При низкой температуре частицы оседают в минимумах энергии, при высоких температурах они занимают любые состояния. Сформулировал эту штуку, собственно, Людвиг Больцман в 1868 году. Этот же механизм применяют и в нейросетях, в софтмаксе, причем до авторегрессионок он появился еще аж в классификационных моделях.
На каждом шаге декодирования модель выдает вектор логитов, по одному числу на каждый токен в словаре. Это сырые оценки, которые нужно превратить в вероятности, для чего мы и используем софтмакс p(xᵢ) = e^(xᵢ/T) / Σⱼ e^(xⱼ/T). Собсна, буковка T - это температура, она отвечает за смещение распределений. При T = 1 распределение равно тому, что выучила модель, при T < 1 распределение заостряется, хвосты сжимаются, мы получаем более высокие вероятности для топ-токенов. Нулевая температура превращает софтмакс в аргмакс, один токен получает вероятность в единицу, остальные - ноль.
Это все оч сложно. Очень просто я пытался переписать этот абзац раза примерно 4 и у меня не получилось, так что вам придется довольствоваться вот таким объяснением: логит - это логарифм шансов для токенов, буквально любая циферка. Чтобы предугадать, какой токен надо выбрать следующим, мы берем все эти логарифмы шансов, мы должны привести их к вероятностям, шансам - собственно, для этого и используется софтмакс. Софтмакс работает следующим образом, мы берем каждую циферку и делаем e^x, все значения становятся положительными и усиливается разрыв между маленькими циферками и большими циферками, затем мы нормализуем циферки, деля каждое значение на сумму всех. Получаем значения в диапазоне (0, 1), все значения в сумме дадут 1. Если логит перед экспонентой поделить на параметр температуры, то поведение несколько поменяется: при маленькой температуре модель становится уверенне, распределение резче, вплоть до того, что у одного класса может вероятность быть практически 1, большая температура делает модель мягче, вероятности выравниваются. Аргмакс, температура в 0, означает, что мы ВСЕГДА берем самый вероятный токен. Оно, собственно, поэтому и называется жадным декодингом.
Почему на инференсе мы не используем нулевую температуру? Потому что нулевая температура приводит к text degeneration. Авторегрессия жадна локально, но не оптимальна глобально, модель, выбирая каждый раз самые вероятные токены, загоняет себя в тривиальность, вплоть до того, что начинает зацикливаться. Ненулевая температура - это способ добить достаточно стохастики, чтобы из этих проблем выбраться, добавить необходимого буквально в большинстве сценариев креатива в то, что модель генерирует.
Гриди, при этом, все ещё нужен. Его используют для математики, кода, фактических вопросов - где нужен один правильный ответ. Стохастика для таких задач дает шанс промахнуться. Собсна, вот вам
линк на рисерч, почитайте.