Моя контактная информация
Почта[email protected]
2024-08-16
한어Русский языкEnglishFrançaisIndonesianSanskrit日本語DeutschPortuguêsΕλληνικάespañolItalianoSuomalainenLatina
Отчет о сердце машины
Монтажер: Ду Вэй, Зенан
Можно сказать, что безопасность больших моделей «имеет много возможностей для улучшения».
Гуру искусственного интеллекта Андрей Карпати снова здесь, чтобы популяризировать научные знания. На этот раз тема «.Использование специальных токенов для выполнения атак типа SQL-инъекций на LLM.」。
Так называемая SQL-инъекция представляет собой технологию сетевой атаки. Злоумышленник обманом заставляет внутреннюю базу данных выполнять вредоносные операторы SQL, вставляя их в поля ввода приложения. Этот тип атаки обычно использует неправильную обработку приложением вводимых пользователем данных, например, неправильную фильтрацию или экранирование ввода, что позволяет злоумышленнику получить доступ, изменить или даже удалить данные в базе данных.
Из-за растущей осведомленности людей о безопасности SQL-инъекция в настоящее время не должна происходить в большинстве программных продуктов.
Но в мире крупных моделей все еще находится в зачаточном состоянии. Токенизатор LLM отвечает за анализ специальных токенов (таких как <|endoftext|> и т. д.) во входной строке. Хотя это может показаться удобным, в лучшем случае это может привести к ошибочным суждениям, а в худшем — к уязвимости безопасности LLM, эквивалентной атаке с помощью SQL-инъекции.
Здесь важно отметить: строки пользовательского ввода являются ненадежными данными.
При внедрении SQL вы можете использовать атаку «DROP TABLE», чтобы сломать плохой код. Та же проблема может возникнуть и в LLM. Плохой код преобразует дескриптор специального токена строки в фактический специальный токен, что приводит к путанице во входном представлении и приводит к тому, что LLM не может распространять шаблоны чата.
Ниже приведен пример использования текущего токенизатора Huggingface Llama 3 по умолчанию.
Как видите, одновременно возникают две неинтуитивные ситуации:
Поэтому Карпати рекомендует всегда использовать два дополнительных флага для операций токенизации, отключая add_special_tokens=False и Split_special_tokens=True и самостоятельно добавляя специальные токены в код. Он подумал, что наименование этих двух вариантов может немного сбить с толку. Для модели чата вы также можете использовать шаблон чата apply_chat_template.
Сделав вышеописанное, вы сможете получить что-то более правильное для просмотра. Например, <|end_of_text|> теперь рассматривается как любая другая последовательность строк и разбивается базовым токенизатором BPE, как и любая другая строка.
Карпати считает, что вызовы кодирования и декодирования никогда не должны анализировать строки для обработки специальных токенов, и нам необходимо полностью отказаться от этой функции. Вместо этого их следует добавлять только явно и программно через отдельный путь кода. В tiktoken всегда используйте encode_ordinary; в Huggingface безопаснее использовать флаг, упомянутый выше. По крайней мере, знайте об этой проблеме, всегда держите свои токены видимыми и тестируйте свой код.
Карпати считает, что эти вещи очень тонкие и плохо документированы, и, по его оценкам, около 50% кода сейчас содержит ошибки, вызванные вышеуказанными проблемами.
Даже ChatGPT, который перед отправкой с завода прошел тщательное тестирование, имеет некоторые странные проблемы. В лучшем случае он только удалит токен, в худшем — запутает LLM неопределенным образом. Карпати не знал, что происходит за кулисами, но ChatGPT не мог повторно отправлять ему строку <|endoftext|>. Так что обратите здесь особое внимание.
Как только статья Андрея Карпатого вышла в свет, она сразу же вызвала дискуссию. Кто-то спросил: Итак, какие меры необходимо предпринять разработчикам LLM для повышения безопасности?
Карпати думает, что это легко сказать: просто всегда отмечайте строки «обычным» способом, то есть последовательностями байтов utf8. Это напоминает принцип «наименьших привилегий» в безопасности — по сути, ограничивая функциональность до того, что абсолютно необходимо, вы минимизируете вероятность непредвиденных последствий.
Некоторые люди также сказали: «Мы уже движемся в этом направлении». Лукас Бейер, автор модели VLM PaliGemma и ученый Google DeepMind, рассказал, что мы улучшили механизм безопасности в новом рабочем коде, что будет немного хлопотно, особенно при поддержке нескольких токенизаторов, но в целом оно того стоит. Это также делает код более простым.
Некоторые пользователи сети также спросили, что произойдет, если код правильный, но при обучении данных введен <|endoftext|>?
Карпати говорит, что если код правильный, ничего не произойдет. Но проблема в том, что большая часть кода может быть неправильной, что может незаметно разрушить мировоззрение большой модели.
Что вы думаете о новых проблемах, обнаруженных Карпатами?
Справочное содержание:
https://twitter.com/karpathy/status/1823418177197646104