Один из самых частых запросов, которые я получал как руководитель группы разработчиков, — «Как я могу защитить свои модели машинного обучения? Поскольку модное машинное обучение стало модным для нескольких приложений, очень быстро стало важно, что устоявшиеся лучшие практики еще не готовы к использованию. Есть несколько ответов на текущий вопрос, и они различаются в зависимости от конкретных моделей угроз, которые у вас есть, но вот краткое изложение того, что я обычно предлагаю: а. подобно древнему текстовому файлу ASCII, относитесь к коучинговым знаниям эквивалентным методом. b. Вы должны думать о файлах моделей как о скомпилированных исполняемых файлах.

Чтобы прояснить, как я узнал об этих выводах, я собираюсь пересмотреть несколько способов, которыми опасные субъекты могут влиять на организацию, поддерживаемую независимо от того, сколько миллилитров распространяется единица материалов. Наиболее распространенное беспокойство: может ли это облегчить моему основному конкуренту дублирование этой новой функции, уменьшая нашу рыночную дифференциацию? люди, которым не нравилось разрабатывать варианты миллилитров, могут представить, что использование файла модели, например, как части приложения для смартфона, сделает его простым, особенно если он находится в чрезвычайно распространенном формате вроде низкокалорийного плоского буфера TensorFlow. лучше всего подумать об этих файлах моделей, поскольку двоичные исполняемые файлы содержат код устройства. После того, как вы его распряжете, вы сделаете его доступным для изучения результатов вашего метода разработки продукта, но попытка попробовать что-то с ним сделать, как правило, похожа на попытку превратить гамбургер в корову. Как и исполняемые файлы, вы сможете разбить их, чтобы изменить их общую структуру, загрузив их в такой инструмент, как Netron. Дизассемблирование дизайна модели может дать вам некоторое представление о том, как работает модель, однако, как и в случае с дизассемблированием кода, это не поможет вам воспроизвести результаты. Полезно понять структуру модели, но большинство архитектур в любом случае имеют стандартную единицу измерения в поле и лишь постепенно расходятся друг с другом.

Можно ли просто скопировать файл модели и использовать его в приложении? По многим причинам это не так полезно, как вы думаете. Это явное нарушение авторских прав, как и копирование исполняемого файла, поэтому его легко обнаружить и оспорить по закону. Можно предпринять несколько простых шагов, чтобы защитить ваши модели от этого. Вы можете зашифровать файл модели в приложении, которое входит в комплект, и распаковать его в память только во время работы приложения. Очевидно, что это не остановит решительного злоумышленника, но усложнит задачу. Добавление текстовых строк в ваши файлы с надписью Copyright Foo, Inc. также может помочь вам найти копии, или вы можете усложнить и изменить свои обучающие данные таким образом, чтобы модель давала отчетливые и маловероятные результаты только в редких случаях. для защиты от нарушений авторских прав. Например, модель изображения можно научить предсказывать Кошку всякий раз, когда появляется логотип Starbucks. Хотя вы можете проигнорировать этот результат, даже если злоумышленник проявит ум и внесет небольшое изменение в веса модели, чтобы предотвратить очевидные бинарные сравнения, поведение, скорее всего, сохранится и продемонстрирует, что оно было непосредственно получено из оригинала.

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

Некоторые из этих свойств аналогичны свойствам исполняемого файла, скомпилированного из исходного кода, поэтому мой совет в начале применим. Любой злоумышленник, получивший доступ к промежуточным шагам для создания того, что он пытается изменить, почти наверняка захочет изменить конечный продукт таким образом, что это невозможно без доступа к процессу, который к нему привел. По моему опыту, обучающие данные — безусловно, самый важный и, следовательно, самый ценный компонент рецепта функции машинного обучения. Сценарий обучения, создание функций, код оптимизации и развертывания было бы намного проще скопировать без набора данных, используемого для обучения модели. Однако, если бы у меня был доступ к обучающему сценарию, коду создания функций, оптимизации и развертывания без набора данных, копирование функций заняло бы у меня гораздо больше времени. С точки зрения обучающих данных, это то, что на самом деле подробно описывает то, что вам нужно от вашей модели. Обычно обучающие данные проходят долгий процесс уточнения, поскольку инженеры узнают о реальном использовании модели в конечном продукте.

Вот почему рекомендуется обращаться с набором данных так же, как с исходным кодом приложения. Таким образом, это машиночитаемая спецификация, в которой подробно описывается, как решить вашу проблему, и в случае ее воспроизведения потребуется много ресурсов и опыта. Люди за пределами ИТ-индустрии регулярно спрашивают меня, почему крупные технологические фирмы раздают так много программного обеспечения для машинного обучения в качестве открытого исходного кода, поскольку они привыкли думать о коде как о королевских драгоценностях, которые должны быть защищены любой ценой. Это верно для кода вашего приложения, но доступ к таким библиотекам, как TensorFlow или PyTorch в области машинного обучения, не приближает вас к тому, чего Google или Meta могут достичь с помощью машинного обучения. Самым большим препятствием являются обучающие данные, поэтому, если вы создали что-то с помощью ML, что дает вам конкурентное преимущество, убедитесь, что вы храните свой набор данных в безопасности.

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

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

Откуда берутся обучающие данные?

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

На какой именно информации вы обучаете свою модель?

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

Кто имеет доступ к вашему конвейеру?

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

Заключение
Различие между безопасной и опасной моделями глубокого обучения не в текстовом файле ASCII, а в содержащихся в нем бесчисленных числовых параметрах. В результате типичные технологии безопасности не могут определить, была ли модель отравлена ​​или подверглась атакам со стороны злоумышленников.
Поэтому не стоит просто брать случайную модель машинного обучения из GitHub или PyTorch Hub и добавлять ее в свое приложение. Изучите правдоподобность издателя модели. Например, если он исходит от респектабельного центра или фирмы, заинтересованной в игре, существует небольшой риск того, что он был каким-то образом отравлен или скомпрометирован (хотя модель, возможно, по-прежнему будет иметь непреднамеренные уязвимости со стороны злоумышленников).