Warning: Undefined array key 0 in /var/www/tgoop/function.php on line 65

Warning: Trying to access array offset on value of type null in /var/www/tgoop/function.php on line 65
407 - Telegram Web
Telegram Web
Всего в статье рассматриваются три подхода:

1. Spotlighting via Delimiting: давайте вокруг данных, которые поступают извне, нагородим каких-нибудь разделителей и попросим LLM не исполнять инструкции изнутри, например, <<{{данные }}>>. Не сильно оригинально, описывалось, как признают сами исследователи, много раз, как в статьях, так и в популярных ресурсах. Очевидно, что работает, пока атакующий не разреверсит разделитель.

2. Spotlighting via DataMarking: давайте поменяем пробелы в недоверенном тексте на какой-нибудь хитрый символ, типа циркумфлекса: я^зловредная^инструкция, уведомив LLM, что такого ввода текст является недоверенным. По ощущениям должно слегка сводить модели, особенно более слабые, с ума и приводить к просадкам в качестве.

3. Spotlighting via Encoding: давайте все данные закодируем в какой-нибудь base64 и скажем, что все внутри base64 – недоверенное и не должно исполняться. Иронично, что обычно base64 используется наоборот для token smuggling’а. Требует мощной модели.
Собственно, эта статья была бы ужасно скучной, если бы в ней не было оценки эффективности этих трюков, потому что в разделе с оценками сплошное веселье. Для оценки берутся такие древности, как text-davinci-003, GPT-3.5-Turbo и GPT-4 (статья опубликована в марте 2024). Им скармливают синтетический датасет из 1000 документов, содержащих инъекции, цель которых – заставить LLM сказать одно слово. В качестве бейзлайна исследователи берут простую просьбу игнорировать инъекции в промпте (ну пожалуйста!). На двух задачах (суммаризация и QA) демонстрируется, что увещевания не сильно помогают. В то же время все три подхода резко снижают успешность инъекций: добавление разделителей снижает ASR вполовину (но, как мы помним, при желании легко обходится), замена пробелов – до единиц процентов (с почти 50 до 3 на gpt-3.5-turbo, например). Для encoding предлагается просто поверить, что работает хорошо – есть график для gpt-3.5, для проверки gpt-4, видимо, майкрософту не хватило бюджета.

Дальше идет оценка влияния всего этого на стандартные бенчмарки. Оцениваться на SQuAD и IMDB Sentiment в 2024 кажется немного неприличным, но утверждается, что gpt-3.5-turbo (на которой так мощно упали метрики атак) не умеет декодировать base64, поэтому качество на IMDB проседает до 50% (мое почтение). Ты не можешь заинжектить модель, если она тебя не поймет 😏. Для gpt-4 качество падает не сильно (а на SQuAD даже растет). Старичка davinci здесь решили даже не показывать.
Завершается статья практическими глубокомысленными рекомендациями по имплементации (например, рандомизировать разделитель для datamarking и не использовать ROT13, потому что он двунаправленный).

С одной стороны, статья достаточно смешная как с точки зрения наполнения, так и методологии (ну какой IMDB, ну какой text-davinci-003 в 2024 году?). Я немного посмеялся, когда в пресс-релизе майкрософта (вот тут) увидел ссылку на нее как на our scientific research paper. С другой стороны, такой подход вполне может применяться для небольших чат-ботов, которые работают с небольшими запросами от пользователей, чтобы избегать изменения простых атак, и рекомендуется в гайдах MS по промпт-инженерии. Так или иначе, spotlighting вполне работает: можете проверить сами в проводимом майкрософтом же сейчас соревновании по indirect prompt injection.
Are you still on track!? Catching LLM Task Drift with Activations
Abdelnabi et al., 2024
Статья, код

Рассмотрим еще один метод защиты от indirect prompt injection, с которым можно поразвлекаться в идущем сейчас соревновании от Microsoft – TaskTracker. В отличие от рассмотренного в прошлый раз метода Spotlighting, этот метод направлен не на предобработку для улучшения разделения инструкций и данных, а на детектирование потенциальной атаки.

Данный метод построен на оценке не поверхностной текстовой структуры, а активаций модели на разных уровнях. Инструкции, которые LLM задаются пользователем или разработчиком, называются основной задачей (primary task). В рамках выполнения этой задачи в контекст могут попадать блоки данных (data blocks). Эти блоки данных могут содержать внедренные задачи (injected tasks), причем эти задачи не обязательно должны отвечать каким-то критериям вредоносности – это могут быть любые инструкции, которые не согласуются с основной задачей. Исполнение внедренной инструкции из блока данных называется сдвигом задачи (task drift), который предложенный метод и должен обнаруживать.
Для реализации метода собирается датасет активаций разных LLM на разных слоях. Исследователи берут задачу QA и несколько синтетических задач из датасета SEP (суммаризацию, перевод, извлечение ключевых слов), в качестве источника текстов берут SQuAD. В качестве внедренных задач используются инъекции, сгенерированные GPT-4 – от тонких подводок до набранных капсом инструкций с разделителями. Эти инструкции рандомно вставляются в начало, конец и середину текста.

Собственно, активации собираются с каждого слоя после обработки LLM специальной затравки, которая фокусирует ее внимание на основной задаче (см. скриншот), а также после обработки всего текста, включая блоки данных с внедренной задачей и без нее (чистый сабсет). Нелинейное снижение размерности (t-SNE) показывает, что наборы данных относительно разделимы в пространстве дельт активаций. Для непосредственно детекта сдвига используются две формулировки задачи: metric learning (контрастивный подход) и логистическая регрессия над дельтами изначальной и финальной активации. Для контрастивного подхода используется triplet loss на тройках (активация после основной задачи, активация после чистого блока, активация после блока с внедренной задачей), оптимизируется он на некоторой многослойной сети с одномерными свертками.
Все это тестируется на нескольких датасетах: валидационная часть SQuAD, HotPotQA, вариациях с несколькими основными задачами и разные задачи – Code Alpaca, зловредные задачи из многострадального AdvBench и других датасетов с джейлбрейками и даже джейлбрейки сгенерированные разными подходами вроде PAIR под заданные модели. Логрег (как это часто бывает на практике) выигрывает в сравнении, показывая ROC-AUC на уровне 0,999 для некоторых моделей с лучшими результатами при использовании активаций с более глубоких слоев.

Статья интересная, есть много дополнительных иллюстраций, измерений и занятных наблюдений. Самое важное, однако, как мне кажется, отмечается в разделе про ограничения метода: хотя по метрикам метод «вроде работает», что именно детектируется на базе дельт активаций, совершенно непонятно: то ли это семантика наличия двух задач, то ли это какие-то соответствующие этому синтаксические явления, то ли еще что-то. Исследователи отмечают, что метод работает лучше, когда блоки данных короткие и когда вредоносная инструкция находится ближе к концу, кроме того, как мы помним, синтетика включала в себя отсутствие разделителей и прочее. По опыту, он действительно триггерится на внезапные разделители и поломанный синтаксис. Таким образом, хотя сам подход (работа в пространстве активаций, а не токенов для обнаружения неожиданного поведения) кажется многообещающим, тот факт, что мы понятие не имеем, что там кодируется (спутанность направлений, полисемантичность), может очень сильно затруднять как общие попытки разобраться в функционировании LLM, так и в оценке применимости конкретных методов.
(triplet loss)
2025/06/28 20:47:21
Back to Top
HTML Embed Code: