Как стать автором
Обновить

Что такое отравление данных при помощи машинного обучения?

Время на прочтение7 мин
Количество просмотров12K
Всего голосов 17: ↑17 и ↓0+17
Комментарии15

Комментарии 15

Как система может найти на картинке объект, который мы хотим ей показать? В примере с овцой на пастбище про одну и ту же картинку можно сказать "это овца" и "это пастбище". Когда ребенка учат, что такое овца, ребенок изначально видит некое животное и понимает, что речь идет о нем. Люди понимают указующий жест. Еще есть композиция изображения: фотограф или художник указывает на предмет, помещая его на передний план.

Может ли ML определять, относится ли конкретный пиксель к предмету или фону? Что если таким методом получать маску объекта и передавать алгоритму классификации только пиксели, выбранные маской?

OpenCV без труда определяет предметы на фото, расставляет теги, анализируя фон (например, фото сделано на улице или в помещении, время года, и, наверное, самое распространенное - на фото мужчина или женщина).

Проблема не только в самих пикселях. Сама суть нейронных сетей просто кричит нам о том, что, даже если предыдущие ответы сети были на 99.99% верными, никогда нельзя ставить решение нейронной сети выше решения человека. Нейронная сеть всегда выдает данные имеющие вероятностный характер. Разумеется, если ее тренировать отличать круг от квадрата, показав ей треугольник, она не выдаст правильный результат. Именно этим нейронные сети отличаются от простых алгоритмов, написанных человеком, для которых 2+2 всегда 4, а если нет, то алгоритм выдаст ошибку.

То есть, нейронная сеть может выполнить работу быстрее человека, но её результат никогда не будет объективным. И любому важному решению всегда нужен проктор или цензор.

>> Может ли ML определять, относится ли конкретный пиксель к предмету или фону? 

На мой взгляд вы мыслите как человек. Объект. Пастбище. Известно что ML умеет выделять объекты, если вы поставите перед ним такую задачу, однако для классификации этого может не потребоваться. Для ML это не картинка. Это просто набор байт, лежащий в определённой последовательности.

Отсюда ответ на вопрос:
>> Как система может найти на картинке объект, который мы хотим ей показать?

"Cистема" проверяет, подходит ли этот набор байт под какой либо объект, "прогоняя её" через модель. Для простоты модель можно представить как функцию y = f(x), где y - это класс, который модель присваивает набору входных данных x.

На самом деле всё немного сложнее и существуют различные способы создания моделей (обучение сети на множестве объектов в т.ч. с учителем (привет, "указывающий жест") \ без учителя) и то как "система" будет "прогонять" очередное изображение через эту модель может сильно зависеть от того как она была обучена.

Собственно, на мой взгляд, отсюда и уязвимость - в статье явно показано как в набор данных добавляются определённые паттерны из байт. И вот, ML уже проще обучиться находить этот паттерн.

Это подводит нас к ответу на третий вопрос:
>> Что если таким методом получать маску объекта и передавать алгоритму классификации только пиксели, выбранные маской?
Для начала, следует уточнить, что именно является маской? Посмею предположить, что вы имели ввиду некую составную часть модели, отвечающую за распознание определённого объекта.

К сожалению, как правило, содержимое модели, например функции f(x) - это чёрный ящик, так что "забрать" маску объекта оттуда будет весьма затруднительно, если не невозможно. Но вопрос же "что если?". Если передать алгоритму классификации только пиксели соответствующие "маске" объекта о', то с наибольшей вероятностью алгоритм классификации классифицирует их как объект о'.

"забрать" маску объекта оттуда будет весьма затруднительно

Именно. Как сделать маску, если мы анализируем спутниковый снимок?

А как сделать маску если мы анализируем голос ("речь в текст")?

И таких "а как" набирается очень много и даже составление маски не гарантирует что уничтожим все "отравленные" участки.

По этому поводу есть другие размышления. Например, нам показали как отправление шумом картинки "сводило сеть с ума", но очевидно признаки "панды" там оставались. Почему бы не производить обучение сразу на зашумлённых картинках, чтобы бороться с таким отравлением?

По поводу паттернов, которые сеть охотно ищет - этим же можно и воспользоваться, поставить перед обучением сеть, которая будет обучена выявлять такие паттерны. QR-код на носу панды явно что-то ненормальное, пусть ищет и блокирует такие снимки до обучения. А желательно ещё добавить логи и реагировать на инциденты с появлением таких картинок.

В любом случае, эти вопросы уже лежат больше в области обеспечения информационной безопасности машинного обучения и им место скорее в научных работах соответствующих исследователей, нежели в комментариях (имхо) :)

Почему бы не производить обучение сразу на зашумлённых картинках, чтобы бороться с таким отравлением?

Используют. Называется Аугментация (augmentation, “раздутие”). В каких-то случаях может помочь. Но зачастую мы не можем понять как аугментировать. Да и гарантировать, что аугментация полностью стерла яд мы не можем.

поставить перед обучением сеть, которая будет обучена выявлять такие паттерны

Какие "такие"? Мы даже не знаем, если ли среди наших обучающих данных отравленные!

QR-код на носу панды

QR был приведен чисто для наглядности - демонстрация метки. Представь что-нибудь посложнее, например затемнение каждого второго пикселя на определенную величину. Или добавление заранее подобранного низкочастотного шума. Методы с использованием преобразования Фурье, вейвлеты, DCT. Любые методы внедрения своей отравляющей информации так, что человеческий глаз не заметит подлога (этакая стеганография). Но нейросеть обучается любым закономерностям, даже тем, которые не видны нашему глазу.

Для реальных фото (дорожные знаки, к примеру) можно добавлять крохотные цветные волоски-ниточки. Ведь на обычных фото могут быть ниточки? Могут. Но потенциально подобные ниточки могут быть отравляющей информацией.

Как вы сказали, на других фото могут быть ниточки, поэтому не совсем целесообразно так отравлять нейросеть. На мой взгляд, должен быть какой-то паттерн, который создаст в модели этот неправильный участок, которым злоумышленник планирует воспользоваться.

QR был приведен чисто для наглядности - демонстрация метки.

Да, я привёл это сравнение в продолжение статьи. Впрочем, это неплохое предположение о наглядности: "Чтобы отравление сработало, оно должно быть нагляднее для обучения, нежели правильные признаки." Например, QR-код может быть проще заметить чем ниточки.

Любые методы внедрения своей отравляющей информации так, что человеческий глаз не заметит подлога (этакая стеганография).

Человеческий глаз, но не "машина". Если предполагать что "отправление" должно быть хорошо заметно для машины, то можно на выборке применять методы глубокого обучения, пытаться найти лишние классы:

"вот класс со знаком "стоп", вот класс со знаком "ограничение скорости", вот класс "знак стоп с ниткой".

Ну, это если злоумышленник не отравил все данные. Ну и, опять же, это просто слова.

И таких "а как" набирается очень много

На мой взгляд за ответами на такие вопросы должны стоять научные работы, а не размышления в комментариях) Знал бы решение - уже написал бы статью :)

Она находит объект, потому что мы ей его показываем во время обучения. То есть изначально любая object detection модель учится распознавать объекты на обучающем наборе, который представлен картинками. На них в свою очередь мы ей ,как ребёнку в вашем примере, показываем объекты, ограничивая их специальными рамками, bounding box'ами (если объектов несколько, каждый бокс имеет свой класс в соответствии с объектом).
Пройдя большое число циклов обучения на большом наборе данных модель путём обобщения всех этих данных "понимает", что именно она ищет и начинает предсказывать координаты баундинг боксов на уже незнакомых данных.

А есть возможность удалять признаки из данных? Нейросеть находит признаки, потом мы как-то удаляем эти признаки из данных, и снова тренируем на данных в котором больше нет старых признаков, нейросеть теперь вынуждена искать новые признаки.
Тогда мы можем найти первичные признаки, вторичные признаки, третичные признаки и забить тревогу если они не совпали.

Потенциально, видимо, можно научится удалять "отработанные" признаки.

снова тренируем на данных в котором больше нет старых признаков

И получаем вторую нейросеть? Эта вторая нейросеть будет иметь существенно худшую точность, потому что первая нейросеть "изъяла" все самые важные части объекта.

Что-то я не понял сути.... У первичной, к примеру, точность 0,95. У второй - 0,7, у третьей - 0,6. После обработки фото первая нейросеть дала результат "женщина", вторая - "собака", третья - "кошка". И что это нам даст?

Это даст нам список спорных картинок. Их потом можно вручную посмотреть и выяснить что там. Если картинка отравлена или присутствует сильный нерелевантный признак, то мы увидим что картинка мало изменилось.
Если подумать, то мы отличаем кошку от собаки по контуру, мордочке, пропорциям тела, фактуре шерсти, ушам и тп. Если будем присутствовать только один из этих признаков, мы скажем что это кошка. Даже если остался только кусочек шерсти.

Я, кажется, понял как может помочь ваш метод. Хорошая нейросеть на не отравленных данных будет использовать всю картинку для ответа и вычитая использованные признаки мы получим что-то близкое к нулю. Если нейросеть научилась на отравленных данных, то будут вычитаться только яд и в остатке будет ещё много полезной инфы. Т.е. что-то рациональное в таком рецепте есть.

Конечно же, при обучении модели на отравленных данных или при тонкой настройке ее при помощи обучения с переносом ставит свои проблемы и приводит к затратам.

Кажется, кто-то пытается отравить мою модель распознавания смысла русского языка...

объясните пожалуйста, понятия ИИ и ML связные? может ли быть одно без другого?

1) Каждый признак — объединяет классы в один супер-класс:

• #человек = {мужчина & женщина}

2) вычитание признака — "разрывает" множество на подклассы:

• #человек = {мужчина | женщина}

3) вычитание признака — "порождает" новые признаки для каждого подкласса:

• подкласс мужчины имеют признак #а

• подкласс женщины имеют признак #б

-------------------------------------------------------------

На практике это означает, что, вычитая линейку из рентгено-снимков, получим два подкласса: "болезнь есть" и "болезни нет".

Остаётся тыкнуть пальцем в образцы "болезнь есть" и признак "линейка" обесценивается.

Зарегистрируйтесь на Хабре, чтобы оставить комментарий