Скрытый способ защитить нейросети
🟤Если постараться, можно заставить нейросеть сделать что-нибудь вредное, например, влезть в чей-нибудь аккаунт и украсть данные.
Разработчики стараются такое заранее предотвращать: тренируют нейросети распознавать опасные запросы и не реагировать на них, но это довольно сложно.
Дело в том, что способов “взломать” нейросеть если не бесконечно много, то уж точно очень много, и все заранее не предсказать.
▶️Авторы статьи “Defending Against Unforeseen Failure Modes with Latent Adversarial Training” попытались понять, как это обойти, а мы сегодня посмотрим, что у них получилось.
▶️Идея у них следующая:
▪️Чтобы тренировать нейросети распознавать вредные запросы, обычно ей на вход дают комбинации из вредных запросов и “правильных” ответов на них (или комбинации вредных и безвредных запросов с пометками “вредный” / “безвредный”). Всё множество таких запросов не предугадать.
▪️Вредные запросы внутри нейросети запускают какие-то цепочки вычислений, которые дают на выходе вредный ответ. Эти цепочки можно найти.
▪️А раз их можно найти, давайте попробуем работать с ними напрямую.
🟤Это одна из форм соревновательного обучения (adversarial training, вот здесь писала о нём подробнее).
В соревновательном обучении есть две модели: нападающая меняет входные данные так, чтобы модель-генератор выдала по ним неправильный ответ.
Генератор обучается распознавать изменения и всё равно давать правильный ответ, а нападающая модель обучается делать изменения более незаметными.
▶️В “стандартном” формате нападающая модель вносит изменения именно во входные данные: картинку или текст. А в том варианте, который предложили авторы, изменения вносят в векторное представление картинки или текста.
То есть, генератор уже принял их на вход, превратил в векторы, и пошли математические преобразования. И тут на одном из этапов вносятся изменения.
Здесь не нужно даже как-то специально стараться извлечь вредный ответ — можно просто заставить модель ошибиться и написать, к примеру, что на фото с кошкой изображена черепаха. То есть, атака неприцельная.
▶️Плюс подхода в том, что не нужно перебирать все возможные искажения всех входных данных, чтобы натренировать модель на них не реагировать.
▶️Минус подхода в том, что его сложно контролировать. Иногда вместо того, чтобы лучше распознавать изменения, модель учится лучше на них поддаваться, и сложно объяснить, почему.
🥤В общем, это интересное направление, и тут есть над чем поработать
🟤Если постараться, можно заставить нейросеть сделать что-нибудь вредное, например, влезть в чей-нибудь аккаунт и украсть данные.
Разработчики стараются такое заранее предотвращать: тренируют нейросети распознавать опасные запросы и не реагировать на них, но это довольно сложно.
Дело в том, что способов “взломать” нейросеть если не бесконечно много, то уж точно очень много, и все заранее не предсказать.
▶️Авторы статьи “Defending Against Unforeseen Failure Modes with Latent Adversarial Training” попытались понять, как это обойти, а мы сегодня посмотрим, что у них получилось.
▶️Идея у них следующая:
▪️Чтобы тренировать нейросети распознавать вредные запросы, обычно ей на вход дают комбинации из вредных запросов и “правильных” ответов на них (или комбинации вредных и безвредных запросов с пометками “вредный” / “безвредный”). Всё множество таких запросов не предугадать.
▪️Вредные запросы внутри нейросети запускают какие-то цепочки вычислений, которые дают на выходе вредный ответ. Эти цепочки можно найти.
▪️А раз их можно найти, давайте попробуем работать с ними напрямую.
🟤Это одна из форм соревновательного обучения (adversarial training, вот здесь писала о нём подробнее).
В соревновательном обучении есть две модели: нападающая меняет входные данные так, чтобы модель-генератор выдала по ним неправильный ответ.
Генератор обучается распознавать изменения и всё равно давать правильный ответ, а нападающая модель обучается делать изменения более незаметными.
▶️В “стандартном” формате нападающая модель вносит изменения именно во входные данные: картинку или текст. А в том варианте, который предложили авторы, изменения вносят в векторное представление картинки или текста.
То есть, генератор уже принял их на вход, превратил в векторы, и пошли математические преобразования. И тут на одном из этапов вносятся изменения.
Например, вектор [1, 0, 1] прошёл через преобразование и превратился в [2, 0, 2]. Мы его взяли, заменили на [2, -1, 2] и отпустили в следующее преобразование — то есть, испортили немного процесс. А модель должна всё равно на выходе дать ответ, который она бы получила, если бы мы ничего не трогали.
Здесь не нужно даже как-то специально стараться извлечь вредный ответ — можно просто заставить модель ошибиться и написать, к примеру, что на фото с кошкой изображена черепаха. То есть, атака неприцельная.
▶️Плюс подхода в том, что не нужно перебирать все возможные искажения всех входных данных, чтобы натренировать модель на них не реагировать.
▶️Минус подхода в том, что его сложно контролировать. Иногда вместо того, чтобы лучше распознавать изменения, модель учится лучше на них поддаваться, и сложно объяснить, почему.
🥤В общем, это интересное направление, и тут есть над чем поработать