Денис Соломатин – Искусственный интеллект от А до Б (страница 38)
Температура – это константа, используемая для корректировки логитов перед преобразованием softmax. Логиты делятся по температуре. Для заданной температуры T скорректированный логит для i-го токена равен Txi. Затем Softmax применяется к этому скорректированному логиту вместо xi.
Давайте рассмотрим простой пример, чтобы изучить влияние температуры на вероятности. Представьте, что у нас есть модель, которая имеет только два возможных выхода: A и B. Логиты, вычисленные из последнего слоя: [1, 2]. Логит для A равен 1, а B равен 2.
Без использования температуры, которая эквивалентна использованию температуры 1, softmax вероятности равны [0.27, 0.73]. Модель выбирает B в 73% случаев.
При температуре = 0,5 вероятности равны [0,12, 0,88]. Теперь модель выбирает B в 88% случаев.
Чем выше температура, тем меньше вероятность того, что модель выберет наиболее очевидное значение (значение с наибольшим логитом), что делает результаты модели более креативными, но потенциально менее согласованными. Чем ниже температура, тем больше вероятность того, что модель выберет наиболее очевидное значение, что делает выходные данные модели более согласованными, но потенциально более скучными.
По мере того, как температура приближается к 0, вероятность того, что модель выберет маркер B, становится ближе к 1. В нашем примере при температуре ниже 0,1 модель почти всегда выводит B. По мере повышения температуры вероятность выбора фишки А увеличивается, а вероятность выбора фишки Б уменьшается. Поставщики моделей обычно ограничивают температуру в диапазоне от 0 до 2. Если вы являетесь владельцем своей модели, вы можете использовать любую неотрицательную температуру. Температура 0,7 часто рекомендуется для творческих сценариев использования, так как она уравновешивает креативность и предсказуемость, но вы должны поэкспериментировать и найти температуру, которая лучше всего подходит для вас.
Обычно для получения более согласованных выходных данных модели устанавливается значение 0. Технически температура никогда не может быть равна 0 – логиты не могут быть поделены на 0. На практике, когда мы устанавливаем температуру равной 0, модель просто выбирает токен с наибольшим логитом, не выполняя регулировку логита и расчет softmax.
Распространенный метод отладки при работе с моделью ИИ заключается в том, чтобы посмотреть на вероятности, которые эта модель вычисляет для заданных входных данных. Например, если вероятности выглядят случайными, значит, модель мало чему научилась.
Многие поставщики моделей возвращают вероятности, сгенерированные их моделями, в виде лог-проб. Логарифмические вероятности (сокращение от логарифмических вероятностей) – это вероятности в логарифмической шкале. Логарифмический масштаб предпочтительнее при работе с вероятностями нейронной сети, поскольку он помогает уменьшить проблему переполнения. Языковая модель может работать с размером словарного запаса 100 000, а это означает, что вероятности для многих лексем могут быть слишком малы для представления машиной. Маленькие числа можно округлить до 0 в меньшую сторону. Логарифмическая шкала помогает уменьшить эту проблему.
Как вы увидите на протяжении всей книги, logprobs полезны для создания приложений (особенно для классификации), оценки приложений и понимания того, как модели работают под капотом. Однако многие поставщики моделей не предоставляют logprobs своих моделей, а если и предоставляют, то API logprobs ограничен. Ограниченный API logprobs, скорее всего, связан с причинами безопасности, так как открытые logprobs модели облегчают репликацию модели другими пользователями.
Top-k – это стратегия выборки, позволяющая снизить вычислительную нагрузку без чрезмерного ущерба для разнообразия откликов модели. Напомним, что слой softmax используется для вычисления распределения вероятностей по всем возможным значениям. Softmax требует двух проходов по всем возможным значениям: один для выполнения экспоненциальной суммы, а другой для вычисления каждого значения. Для языковой модели с большим словарным запасом этот процесс требует больших вычислительных ресурсов.
Чтобы избежать этой проблемы после того, как модель вычислила логиты, мы выбираем топ-k логитов и выполняем softmax только над этими топ-k логитами. В зависимости от того, насколько разнообразным должно быть ваше приложение, k может быть от 50 до 500, что намного меньше, чем размер словарного запаса модели. Затем модель выполняет выборку из этих верхних значений. Меньшее значение k делает текст более предсказуемым, но менее интересным, так как модель ограничена меньшим набором вероятных слов.
При выборке top-k количество рассматриваемых значений фиксируется равным k. Однако это число должно меняться в зависимости от ситуации. Например, задан вопрос «Вы любите музыку? Отвечайте только «да» или «нет». Количество рассматриваемых значений должно быть два: «да» и «нет». Учитывая вопрос «В чем смысл жизни?», количество рассматриваемых ценностей должно быть значительно больше.
Метод top-p, также известный как выборка ядра, позволяет более динамично выбирать значения для выборки. При выборке top-p модель суммирует вероятности наиболее вероятных следующих значений в порядке убывания и останавливается, когда сумма достигает p. Учитываются только значения в пределах этой совокупной вероятности. Общие значения для выборки top-p (ядра) в языковых моделях обычно находятся в диапазоне от 0,9 до 0,95. Например, значение top-p 0,9 означает, что модель будет учитывать наименьший набор значений, совокупная вероятность которых превышает 90 %.
Допустим, вероятности всех токенов такова, что если top-p равно 90%, то будут рассматриваться только «да» и «возможно», так как их совокупная вероятность больше 90%. Если top-p равно 99%, то рассматриваются «да», «возможно» и «нет».
В отличие от top-k, top-p не обязательно снижает вычислительную нагрузку softmax. Его преимущество заключается в том, что, поскольку он фокусируется только на наборе наиболее релевантных значений для каждого контекста, он позволяет выводам быть более контекстуально релевантными. Теоретически, похоже, что у выборки top-p нет особых преимуществ. Однако на практике выборка top-p доказала свою эффективность, что привело к росту ее популярности.
Связанная с этим стратегия выборки – min-p, в которой вы задаете минимальную вероятность того, что токен должен быть достигнут, чтобы его учитывали во время выборки.
Авторегрессионная языковая модель генерирует последовательности лексем, генерируя одну лексим за другой. Длинная последовательность вывода занимает больше времени, требует больше вычислительных ресурсов (денег) и иногда может раздражать пользователей. Мы можем захотеть задать условие, при котором модель должна остановить последовательность.
Один из простых способов – попросить модели прекратить генерацию после фиксированного количества токенов. Недостатком является то, что вывод, скорее всего, будет прерван на полуслове. Другой метод – использовать стоп-токены или стоп-слова. Например, можно попросить модель прекратить генерацию при обнаружении маркера конца последовательности. Условия остановки полезны для снижения задержек и затрат.
Недостатком ранней остановки является то, что, если вы хотите, чтобы модели создавали выходные данные в определенном формате, преждевременная остановка может привести к неправильному форматированию выходных данных. Например, если вы попросите модель создать JSON, ранняя остановка может привести к тому, что в выходном JSON будут отсутствовать такие вещи, как закрывающие скобки, что затруднит анализ созданного JSON.
В предыдущем разделе обсуждалось, как модель может сделать выборку для следующей лексемы. В этом разделе обсуждается, как модель может выполнять выборку всего выходного сигнала.
Одним из простых способов повысить качество ответов модели является вычисление времени тестирования: вместо создания только одного ответа на запрос вы создаете несколько ответов, чтобы увеличить вероятность хороших ответов. Одним из способов вычисления тестового времени является лучший из N методов, рассмотренных ранее в этой главе: вы случайным образом генерируете несколько выходных данных и выбираете тот, который работает лучше всего. Тем не менее, вы также можете более стратегически подходить к тому, как генерировать несколько выходных данных. Например, вместо того, чтобы генерировать все выходные данные независимо друг от друга, которые могут включать множество менее перспективных кандидатов, можно использовать поиск луча для генерации фиксированного числа наиболее перспективных кандидатов (луча) на каждом шаге генерации последовательности.
Простая стратегия повышения эффективности вычислений во время тестирования заключается в увеличении разнообразия выходных данных, поскольку более разнообразный набор вариантов с большей вероятностью приведет к появлению лучших кандидатов. Если вы используете одну и ту же модель для создания разных вариантов, часто рекомендуется варьировать переменные выборки модели, чтобы разнообразить ее выходные данные. Хотя обычно можно ожидать некоторого повышения производительности модели за счет выборки нескольких выходных данных, это дорого. В среднем, создание двух выходов стоит примерно в два раза дороже, чем создание одного.