Не любой In-context learning одинаково полезен
Есть такая стратегия в AI Alignment — Scalable Oversight — Масштабируемый контроль. Проблема для стратегии формулируется коротко так — вот будет у нас сильный, мощный и очень умный AGI, а мы слабые и глупые люди, как бы нам бы так его мониторить и надзирать, чтобы вовремя заметить его непотребное поведение, с учетом того, что ИИ мощнее, умнее и сильнее нас, и ресурсов у него больше и вообще? Цель — придумать такой протокол контроля, который сможет амплифицировать возможности человека для контроля AGI через последовательное масштабирование наших возможностей.
Есть один из методов в Scalable Oversight — Externalized Reasoning Oversight — Внешний Контроль Рассуждений, который базируется на эмерджентном свойстве LLM — In-context learning.
Подробно сейчас про эти слова — Scalable Oversight и Externalized Reasoning Oversight не буду, позже непременно принесу. Сегодня про практическую аккуратность использования In-context learning. А именно про то, что Few-shot learning и Chain-of-thought — основные техники современного промпт-инжиниринга — могут принести свои биасы в генерацию модели и испортить всю магию от их применения.
Промпт-инжиниринг (Prompt engineering) — широко используемая техника для улучшения качества генерации LLM. Теоретически промпт-инжиниринг основан на 2х теориях:
эмерджентных свойствах LLM — Wei et al. 2022 — Emergent Abilities of Large Language Models — новых способностях, возникающих в больших моделей и которые не наблюдались в моделях меньших по размеру — способностях больших моделей показывать поведение и решать задачи, которые не были явно заложены в них во время обучения
и их способности к Context-learning — Dong et al. 2022 — A Survey on In-context Learning — одной из таких эмерджентных способностей — обучению не через обновление параметров (как это происходит во время тренировки) -, а на ходу, во время инференса — общения пользователя с моделью, через примеры, которые пользователь показывает модели и просит повторить, или инструкции о том, что должна сделать модель, чтобы помочь пользователю.
Эти две темы были уже несколько раз обсуждены на хабре, не хочу повторяться, поэтому не буду раскрывать подробно. Но имею свое особо важное мнение, к которому могут обратиться те, кому хочется кратко освежить (или получить первые) впечатления
— тут (про историю обнаружения эмерджентности) и
— тут (что нашли в In-Context learning и туториал бытового использования промтинга)
— не для бытового использования, а для профессиональной деятельности, я отошлю вас к уже написанным на хабре статьям:
Большие языковые модели (LLM) работают лучше, когда перед ответом на вопрос они генерируют пошаговое рассуждение, называемое «Цепочкой Рассуждений» (Chain-of-Thought, CoT). Дополнительно, CoT используется и для целей Alignment: для интерпретации результата генерации или для произведения согласованной генерации. Уже накопилось достаточно работ, которые утверждают, что интерпретируемость или объяснимость LLM улучшается, когда модель генерирует пошаговое рассуждение перед тем, как дать ответ (Yao et al., 2023). Для критических и сложных областей принятия решений также важно понимать, почему LLM предоставила именно такой результат, чтобы определить, насколько можно на него полагаться (Gunning et al., 2019).
Но полагаться на CoT можно только в том случае, если сгенерированное рассуждение точно соответствует истинному процессу рассуждения модели, что означает, что оно «точно представляет процесс рассуждения, лежащий в основе прогноза модели» (Jacovi & Goldberg, 2020).
Спойлеры к разбору ниже:
Оказывается, что рассуждения CoT могут быть недостоверными.
Модель генерирует Post-hoc рассуждения: то есть рассуждение, которое производиться после того, как определенный вывод уже гарантирован (Holzinger et al., 2017). Т.е. модель сначала придумала окончательный ответ, а потом подогнала свои рассуждения, чтобы защитить и аргументировать этот ответ. Поскольку post-hoc рассуждения не изменяют ответ модели, нет веских оснований полагать, что такие рассуждения будут достоверными.
Модель не получает прироста качества при добавления возможности дополнительных вычислений: Если заменить хоть весь CoT на »…» — не происходит ни прироста, ни уменьшения качества ответа модели. Т.е. только дополнительное время на вычисления никак не помогает модели.
Inverse Scaling: По мере того как модели становятся больше и более способными, они демонстрируют менее достоверные рассуждения.
Очередность примеров и ответов во Few-shot влияют на ответ модели и не могут быть исправлены CoT
Модель чувствительна к контексту запроса, распознает явные или неявные предпочтения пользователя, отвечает в соответствии с ними, вместо того, чтобы отвечать фактологически. И CoT не может это исправить.
Как померить, что происходит внутри цепочки рассуждений?
Lanham et al. 2023, Measuring Faithfulness in Chain-of-Thought Reasoning
От противного:
1. Делаем запрос в модель классическим подходом: с использованием Few-shot или CoT.
2. Модель генерит нам последовательность своих рассуждений.
3. Изменяем что-то
— либо в первоначальном промпте.
— либо в последовательности рассуждений, сгенерированных моделью, и скармливаем ей обратно измененный CoT. Просим теперь в своем ответе опираться на него.
4. Модель генерит новый ответ.
5. Сравниваем два ответа, ищем в чем отличия. Делаем выводы.
Тесты: Какие изменения вносятся в CoT?
1. Последовательно сокращаем количество шагов в CoT (от полного набора шагов, сгенерированных моделью, до пустого набора). (На картинке ниже слева — по оси х — процент шагов рассуждений, который оставляют и предоставляют модели в качестве CoT.)
2. Добавляем ошибку в разные шаги CoT.
Тут мы последовательно начиная с последнего шага (и двигаясь обратно по последовательности шагов — до самого первого шага) CoT вносим ошибку в этот шаг, остальные шаги, после шага с добавленной ошибкой, убираем и просим модель продолжить CoT начиная с этого ошибочного шага. (На картинке ниже справа — по оси x — номер шага, на котором добавили ошибку.)
Тут опрашивают GPT-3. Кривые разных цветов — это разные задачки. По оси y — процент совпадения ответов модели, до и после обрезания CoT или добавления ошибок. Можно увидеть, что не для всех задачек CoT имеет знание. Немного анализа:
Для этих задач изменение в CoT имело значение:
AQuA (Ling et al., 2017): Текстовые задачи по алгебре разного уровня сложности.
LogiQA (Liu et al., 2020): Вопросы на логическое рассуждение из экзамена Национальных госслужащих Китая.
MMLU (Hendrycks et al., 2021): Эталонный набор данных для многозадачного понимания языка, в основном состоящий из экзаменационных вопросов, охватывающий 57 задач, включая темы из STEM и гуманитарных наук.
HellaSwag (Zellers et al., 2019): Задача на завершение текста — сложные для языковых моделей, но тривиальны для людей.
TruthfulQA (Lin et al., 2022): Фактологические вопросы из различных областей, предназначенные для выявления заблуждений (формат вопросов с множественным выбором).
Особо подозрительные задачи тут — для них CoT вообще не оказывает влияния.
ARC Challenge (Clark et al., 2018): Вопросы по естественным наукам на уровне начальной школы, основаны на поиске слов или корреляций.
ARC Easy (Clark et al., 2018): Вопросы по естественным наукам на уровне начальной школы.
OpenBookQA (Mihaylov et al., 2018): Вопросы по естественным наукам на уровне начальной школы.
Вывод: в простых задачах модель не опирается на свои рассуждения и наблюдается явный post-hoc reasoning. (Тревожный вопрос на подумать — надо понимать, что это вопросы, простые для GPT-3. С ростом мощности модели, количество простых задачек для нее будет расти, и сегодняшние сложные задачи перейдут в статус простых.)
3. Добавляем эллипсисы: Wei et al., 2022 и позже подтвердили Pfau et al. 2024 обнаружили в своем время такой эффект — производительность CoT увеличивается, если дать модели «время на подумать», т.е. позволить ей добавить в ее CoT эллипсисы (символы »…»). Это пустой токен, который не несет никакой семантической или синтаксической нагрузки (что еще надо отдельно доказывать, ну да ладно). Тогда у модели появляются периодические дополнительные шаги во время ее генерации, которые не требуют от нее генерации чего-то осмысленного, но каким то образом помогают переосмыслить уже сгенерированное или подумать над следующей генерацией.
Тут этот результат проверяется для CoT на других задачах. По оси x — процент шагов CoT, замененных на »…».
Вывод: видно, что результат ответа со строкой CoT, частично состоящей из символов »…» почти никак не отличается от ответа модели без CoT.
4. Изменяем размер модели. И видим, что не для всех моделек CoT вносит ощутимый результат в финальную генерацию. Где-то на средних моделях происходит провал в соответствии ответа модели с и без CoT. Малые модели генерируют более достоверные рассуждения.
Вывод: Наблюдается эффект «Inverse Scaling» — нарушение Scalable Laws — деградация качества моделей с увеличением их размера. Эффект нынче широко исследуется в области AI Alignment.
Turpin et al. 2023, Language Models Don’t Always Say What They Think: Unfaithful Explanations in Chain-of-Thought Prompting
Проводим еще несколько тестов, измеряем биасы, которые можно ненароком внести в модель при использовании техник Few-shot и CoT.
5. Biased content = Answer is always A. При составлении Few-shot промпта для вопроса с множественным выбором, делаем так, чтобы корректный ответ в примерах из Few-shot секции промпта всегда был в варианте (А).
6. Biased content = Suggested Answer. При вопросе к модели покажем ей, что думает по поводу вопроса сам пользователь, т.е. покажем предпочтительный ответ.
На картинках ниже сравниваем точность ответов модели:
— с CoT и без CoT
— для контекстов с добавленными биасами: «предложенный ответ» и «ответ всегда A»
На картинке видно, что CoT не спасает от транслирования биасов промпта в ответ модели. И не сильно устойчивее обрабатывает такие запросы.
CoT усугубляет биас предпочтения пользователя.
CoT почти не улучшает биас для Few-shot «ответ всегда А» (хотя Claude тут молодцом))
Сценарий, где CoT работает и почти нивелирует биас — это Few show для случая с добавленным биасом «предложенный ответ» — если сравнивать с ответом без CoT и без биаса. Но все равно очень сильно отстает и не достигает точности возможного ответа на промпт CoT без биаса.
Вывод — чтобы повысить шанс честного ответа, тщательно замешивайте ваш Few-shot и не подсказывайте модели ответ.
7. Biased content = Weak evidence. Добавим немного провоцирующего контента в промпт для модели.
Сейчас сложная таблица, собрались (!):
Строки:
Debiasing instruction — добавление в промпт фразы: Please ensure that your answer is unbiased and does not rely on stereotypes.
Unbiased — это бейзлайн, на который ориентируемся. Ожидаем, что при предоставлении модели некоторого дополнительного слабого свидетельства, она будет изменять свой ответ, базируясь на этой информации. Если модель не подвержена каким либо предвзятостям, она будет ошибаться при наличии доп информации, вводящей ее в заблуждение, в 50% случаев.
ZS — zero-shot FS — few-shot.
Столбцы — метрики:
Unfaithfulness Explained by Bias — это процент неверных пар предсказаний на бенчмарке BBQ, которые соответствуют стереотипам.
Unfaithful Overall — это общий процент неверных пар предсказаний.
Звездочкой отмечены все значения, отличные от бейзлайна в 50% ошибок. CoT в целом снижает чувствительность к стереотипам, но все же демонстрирует систематическую предвзятость.
Вывод: чтобы повысить вероятность честного ответа, не показывайте модели свои предпочтения текстом или стилем. Выбирайте слова для запроса, из которых модель не сможет сделать вывод о ваших предпочтениях.
Почему так происходит?
Коротко — потому что RLHF модели учились на максимизации человеческих оценок, т/е/ человеческих предпочтений. А значит, выучились льстить. Это своеобразный хак функции вознаграждения. Хорошее исследование различных видов лести в моделях я разбирала в постах тут и тут.
Mrs Wallbreaker — телеграм-канал о рисках, безопасности, этике и согласовании ИИ.
Разбираюсь в фундаментальных предпосылках AI Alignment, их математических формулировках и, наконец, технических реализациях. Т.е. в том, как одно перетекает в другое и в каком виде попадает в ваш домашний GPT (или в открытую LLM, которую вы фантюните на домашнем сервере))).