Каждому алгоритму машинного обучения нужны данные, на которых можно учиться. Но даже с огромным количеством данных в мире, включая тексты, изображения, временные ряды и многое другое, на самом деле помечена лишь небольшая часть, будь то алгоритмически или вручную.
В большинстве случаев нам нужны размеченные данные для контролируемого машинного обучения. В частности, мы используем его для прогнозирования метки каждой точки данных с моделью. Поскольку данные говорят нам, какой должна быть метка, мы можем вычислить разницу между предсказанием и меткой, а затем минимизировать эту разницу.
Как вы, возможно, знаете, другая категория алгоритмов, называемая неконтролируемыми алгоритмами, не требует ярлыков, но может учиться на немаркированных данных. Обучение без учителя часто помогает обнаруживать новые закономерности в наборе данных и кластеризовать данные в несколько категорий на основе нескольких функций. Популярными примерами являются алгоритмы K-средних и скрытого распределения Дирихле (LDA).
Теперь представьте, что вы хотите обучить модель классификации текстовых документов, но хотите дать своему алгоритму подсказку о том, как создавать категории. Вы хотите использовать только очень небольшую часть помеченных текстовых документов, потому что каждый документ не помечен, и в то же время вы хотите, чтобы ваша модель классифицировала немаркированные документы как можно точнее на основе документов, которые уже помечены.
К счастью, существует класс алгоритмов, называемых частично контролируемыми алгоритмами, которые могут учиться на частично размеченных наборах данных.
Текстовые документы представляют собой особенно обильную форму немаркированных данных, включая тома и тома скриптов, книг, блогов и т. Д., Которые в большинстве своем немаркированы. Мы знаем, что маркировка большого количества данных стоит дорого. (Например, представьте, сколько времени потребуется, чтобы кто-то прочитал десятки тысяч статей только для того, чтобы присвоить этому текстовому документу один специальный класс.)
Что такое обучение состязательности?
В апреле 2017 года Миято и др. Представили новый метод, который позволяет полу-контролируемое обучение, а именно: Виртуальное состязательное обучение: метод регуляризации для контролируемого и полу-контролируемого обучения. Их работа тесно связана с работа, представленная Гудфеллоу и др. в их статье Объяснение и использование примеров состязательности.
В следующей статье я расскажу о методе обучения состязательности на примерах изображений и текста. Если вы хотите узнать больше, ознакомьтесь с исследовательскими работами, указанными выше.
В статье Гудфеллоу отмечается, что мы можем легко нарушить работу классификатора нейронного изображения, добавив некоторый шум к входному изображению. Этот «шум» может быть настолько маленьким, что мы не можем обнаружить его невооруженным глазом, хотя нейронный классификатор может. Фактически, мы можем намеренно попытаться ввести шум, который максимизирует «отказ» классификатора, побуждая его неправильно идентифицировать данное изображение.
Введение этого, казалось бы, незначительного шума настраивает классификатор изображений, позволяя идентифицировать панду как гиббона с достоверностью более 99%.
Итак, как мы можем улучшить модель?
Один из подходов состоит в том, чтобы продолжить обучение нашей модели на нашем наборе изображений, но во время обучения мы будем генерировать враждебный шум, который добавляем к изображению. Поскольку мы обучаем нашу модель, мы по-прежнему знаем все метки наших изображений и можем обучить модель классифицировать изображения в соответствии с конкретной меткой, даже если изображение содержит определенный шум.
Этот метод «состязательного обучения» помогает обобщить модель и делает ее более устойчивой к шуму, который могут быть в изображениях. Следовательно, это снижает вероятность того, что модель будет делать неправильные прогнозы, когда изображения за пределами обучающей выборки содержат возмущения.
Миято и его команда применили эти идеи для «виртуального состязательного обучения» для полууправляемого обучения, которое особенно хорошо подходит для моделей, которым приходится иметь дело с редко размеченными данными. При «виртуальном состязательном обучении» мы не используем метки нашего обучающего набора, а скорее условную вероятность того, что изображение будет иметь метку X. Другими словами, когда мы вводим изображение панды и наша модель предсказывает, что у нас есть 40% панда, 20% птица, 1% машина и так далее, что само распределение становится ярлыком во время состязательного обучения. Это означает, что мы добавляем шум к изображению с помощью состязательного метода, но мы по-прежнему сообщаем нашему классификатору, что правильная метка: 40% панда, 20% птица, 1% автомобиль и т. Д.
Это позволяет нам проводить обучение без учителя. Для изображений с метками мы можем следовать предыдущему состязательному примеру и сообщить модели, что мы знаем метку. А для немаркированных изображений мы позволяем нашей модели предсказывать метки (40% панда, 20% птица, 1% машина и т. Д.), А затем используем это для искажения наших изображений. Как объяснялось выше, наш состязательный метод пытается заставить модель больше всего терпеть неудачу, и в этом случае модель пытается внести в изображение возмущения, которые максимизируют расхождение между предсказанной меткой и правильным распределением меток.
Давайте на мгновение погрузимся в математику.
Мы предсказали P (Label | Features) для немаркированного изображения и пытаемся найти возмущение, которое максимизирует расхождение между этим распределением и распределением предсказания с возмущением. В этом примере мы используем дивергенцию Кульбака – Лейблера, обозначенную как KL:
Учитывая это наилучшее возмущение, мы пытаемся минимизировать функцию потерь, определяемую следующим образом:
Эта последняя функция является функцией виртуальных состязательных потерь, которую мы можем добавить к любой регулярной функции потерь для работы в качестве регуляризации.
Примеры приложений для полуавтоматического классификатора текста
Имея эту функцию под рукой, мы можем работать над полууправляемым классификатором документов.
Подготовка:
Начнем с наших данных. Мы будем работать с текстами, и нам нужно представить тексты в числовом виде. Тексты могут быть представлены разными способами, но наиболее распространенным является использование каждого слова как отдельного элемента нашего текста.
Рассмотрим два текстовых документа. Один говорит: «Я голоден», а другой говорит: «Я болен». Чтобы представить это как особенности, мы знаем, что в обоих текстах есть 4 разных слова, а именно: Я, я, голоден и болен. Теперь эти слова будут нашими характеристиками. Мы можем представить каждое слово как 1 или 0 в зависимости от того, присутствует оно в документе или нет.
Это даст нам следующее представление с горячим кодированием для обоих документов:
«Я голоден»: (1,1,0,1)
«Я болею»: (1,1,1,0)
Как вы понимаете, чем больше разных слов в наших документах, тем больше возможностей будет у текстов, представленных в числовом виде! Это может очень быстро стать уродливым.
К счастью, в качестве альтернативы мы можем представить эти документы с помощью встраивания слов. Встраивание слов - это, по сути, плотное n -мерное векторное представление, в отличие от разреженного представления с горячим кодированием. Для нашей цели мы представляем слова в 300-мерном пространстве. Помимо числовых представлений, вложение слова также учится перегруппировать семантически близкие слова внутри этого пространства. Это означает, что слова со схожим значением часто тесно перегруппировываются в этом 300-мерном пространстве, в отличие от более примитивного метода быстрого кодирования. Чтобы узнать больше о встраиваниях слов и о том, как их генерировать, прочтите эту замечательную статью.
Модель:
Давайте посмотрим на модель, представленную Миято и др. в рамках Состязательные методы обучения для полууправляемой классификации текста, которая основана на виртуальном состязательном обучении. упомянутый ранее. В качестве помощи авторы также загрузили модель в репозиторий GitHub.
Представленная модель из статьи имеет следующую структуру:
Эта структура показывает необходимость встраивания слов ранее. Нет смысла беспокоить слова шумом, и непонятно, как вы это сделаете. Заменить слова? Заменить персонажей?
Вместо этого мы возмущаем наши 300-мерные векторы нашим вектором возмущения r того же размера. Здесь мы используем тот же принцип, что и с пандой. В частности, мы пытаемся изменить вложение слова так, чтобы наша модель давала наихудший прогноз. Поскольку у нас есть плотный вектор, мы можем немного изменить каждую особенность этого вектора, чтобы наша модель не справилась с задачей классификации.
Для модели классификации мы используем простой LSTM, который принимает в качестве входных данных слова, которые были встроены. Он выводит наш класс Y. На рисунке 2 Veos представляет конец токена предложения, который отмечает конец нашего предложения и помогает улучшить классификацию.
Обучение:
Как и раньше, мы обучаем нашу модель с помощью виртуального состязательного обучения, что означает, что у нас есть помеченные и немаркированные текстовые документы. На основе этих документов наша модель пытается найти наилучшее возмущение r, которое приведет к сбою нашей модели, и она учится на этом. Процесс идентичен тому, который у нас есть для нашего классификатора изображений, за исключением того, что мы изменяем встраивание слова вместо пикселей изображения.
Фактически, использование немаркированных данных позволяет нам сделать модель более общей, чем та, которая была бы без этих дополнительных данных.
Чтобы интегрировать это в нашу модель, мы добавляем дополнительный член к нашей функции потерь. Я объяснил термин дополнительных потерь ранее, поэтому мы можем использовать его повторно:
Удобный способ объяснить это: модель хочет минимизировать функцию потерь, классифицируя помеченные данные как можно лучше, используя категориальную кросс-энтропию. Однако с дополнительными виртуальными потерями модель получает штраф, если она становится слишком уверенной в принимаемых ею решениях (или переоценивает их). Виртуальные потери покажут модели, что, как только мы представим пример с конкретным шумом, модель может выйти из строя, и модель также должна это учитывать. Это заставляет модель учиться на помеченных данных, чтобы быть как можно более точной, но она также узнает, что аналогичные точки данных с небольшими возмущениями (состязательными возмущениями) должны быть правильно классифицированы. Помните пример изображения панды? Наш мозг не учел шум, и для нас это явно панда. Это именно то, чего мы хотим, чтобы модель достигла в наших обучающих примерах.
Некоторые результаты:
В ходе этой работы я поигрался с DBpedia Data-Set (14 классов, около 560 000 обучающих файлов и 70 000 тестовых файлов).
Некоторые результаты:
Я не сравнивал свою модель с обычным классификатором без контролируемого обучения, поскольку это был специально исследовательский проект, но было бы определенно полезно сравнить его с классификатором, который не использовал все данные. Опять же, результаты могут резко измениться в зависимости от того, какие данные мы принимаем в качестве помеченных данных.
Однако я хотел показать, что, используя только часть помеченных данных, можно получить приемлемые результаты с такой регуляризацией. Кроме того, модель лучше подготовлена к состязательным атакам - хотя, по общему признанию, такая подготовка может быть не так полезна для текстовых классификаторов, как для других моделей.
Заключительные мысли
Этот метод чрезвычайно эффективен при обучении без учителя. Это позволяет нам использовать немаркированные данные, что имеет решающее значение в большинстве бизнес-случаев, поскольку во многих случаях у нас недостаточно маркированных данных. Когда у нас есть некоторые помеченные данные, у нас все еще может быть большой кусок данных с недостающими метками, который мы хотим использовать для улучшения модели.
Хотя это не было основной темой данной публикации, стоит упомянуть, насколько надежны эти методы против атак противника. Представьте себе людей, которые намеренно хотят, чтобы ваша модель провалилась, скармливая ей состязательные примеры. В большинстве случаев последствия безвредны, но представьте себе нападение противника на беспилотный автомобиль. Машину можно было обманом заставить перестроиться в другую полосу движения или даже повернуть не туда, просто с помощью состязательных наклеек на некоторых знаках.
Это огромная тема, и если мы хотим перейти к доверию ИИ, нам нужно убедиться, что модели могут защищаться от таких атак. Исследовательская группа IBM опубликовала ART (Adversarial Robustness Toolbox), библиотеку Python с открытым исходным кодом, чтобы сделать модели устойчивыми к состязательным атакам, обучая их способами, аналогичными описанным выше. Если вам нужна простая библиотека для улучшения модели, я предлагаю ее проверить!
Спасибо за прочтение. Чтобы узнать больше о глубоком обучении, ознакомьтесь с другой моей статьей о Трансформере.
Удачного обучения!