Ключ к глубокому обучению: введение в неконтролируемое глубокое обучение (с кодом Python)

искусственный интеллект глубокое обучение Python алгоритм
Автор | Файзан Шейх
Переводчик |
Редактор | Винсент
Руководство по передовой ИИ:В этом посте мы обрисовываем концепции неконтролируемого глубокого обучения на интуитивно понятном примере. Он также объясняет код для неконтролируемого обучения в наборе данных MNIST, включая K-Means, автоэнкодеры и алгоритм DEC.

Для получения дополнительных галантерейных товаров, пожалуйста, обратите внимание на публичный аккаунт WeChat «AI Frontline» (ID: ai-front)
вводить

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

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

Цель этого поста — дать наглядное представление о неконтролируемом обучении и его реальных приложениях.

Примечание. Для прочтения этой статьи читатель должен иметь некоторые основы глубокого обучения и понимание концепций машинного обучения. Если вы не освоили основы, вы можете прочитать следующие ссылки:

  • Эксперимент с курсом данных: https://trainings.analyticsvidhya.com/courses/course-v1:AnalyticsVidhya+EWD01+2018_EWD_T1/about

  • Основы глубокого обучения — начиная с искусственных нейронных сетей: https://www.analyticsvidhya.com/blog/2016/03/introduction-deep-learning-fundamentals-neural-networks/

А теперь к делу!

Зачем использовать неконтролируемое обучение?

Типичный метод в проекте машинного обучения разрабатывается с учителем. Мы говорим алгоритму, что делать и чего не делать. Это общая структура для решения задач, но она ограничивает потенциал алгоритма двумя способами:

  • Алгоритмы связаны предвзятостью надзорной информации. Да, алгоритм учится выполнять эту задачу самостоятельно. Однако алгоритм не может учитывать другие возможные ситуации при решении задачи.

  • Поскольку обучение происходит под наблюдением,Создание меток для алгоритмов требует огромного труда. Чем меньше меток вы создаете вручную, тем меньше данных алгоритм может использовать для обучения.

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

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

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

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

Определение проблемы — как организовать вашу фотобиблиотеку

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

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

Чтобы получить более четкое представление о проблеме, я стараюсь самостоятельно классифицировать фотографии. Вот мое резюме ситуации:

  • Во-первых, я обнаружил, что треть моей библиотеки фотографий быласетевое развлечение(Спасибо прекрасным друзьям WhatsApp).

  • Я также лично собираю некоторые интересные ответы или публикации, которые вижу на Reddit.

  • Есть как минимум 200 фотографий, которые я сделал на знаменитом саммите DataHack Summit и последующей поездке в Кералу, а также некоторые из них, которыми мне поделились коллеги.

  • Есть также фотографии, документирующие обсуждения у доски во время встречи.

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

  • Я также нашел некоторые «частные» изображения, такие как селфи, групповые фотографии и несколько специальных сцен. Их немного, но они мое сокровище.

  • В конце концов, было бесчисленное количество плакатов «Доброе утро», «С днем ​​рождения» и «С Дивали», и мне удалось удалить их из моей фототеки. Но как я их не удаляю, они все равно появляются!

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

Метод 1: классификация по времени

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

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

Метод 2: классификация по местоположению

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

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

Способ 3. Извлечение семантической информации из фотографий и использование ее для определения моей библиотеки фотографий.

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

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

1. Его расстрелялиестественная сценанеподвижное изображениеискусственно созданныйИзображение?

2. На фототекстовый материал? Если есть, можем ли мы определить, что это такое?

3. Что на фоторазные объекты? Может ли их сочетание определить красоту фотографии?

4. На фотоЕсть здесь кто-нибудь? Можем ли мы их распознать?

5. Естьпохожие изображенияМожет ли это помочь нам определить содержание изображения?

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

Этот подход заключается в решении проблем «неконтролируемым образом». Мы не определяем напрямую желаемый результат. Вместо этого мы обучаем алгоритм находить эти результаты для нас. Наш алгоритм разумно обобщает данные, а затем пытается решить проблему на основе этих выводов. Круто, правда?

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

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

Мы можем воспользоваться преимуществами сетевой структуры глубокого обучения —автоэнкодер.

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

Например, автоэнкодер с размерностью кодирования 10 обучается на изображениях кошек размером 100×100 каждое. Таким образом, входное измерение равно 10000, и автоэнкодер должен представить все входные данные в векторе размером 10 (как показано на изображении ниже).

Автоэнкодер логически можно разделить на две части: кодер и декодер. Задача кодировщика состоит в том, чтобы преобразовать входные данные в низкоразмерное представление, а задача декодера — восстановить входные данные из низкоразмерного представления.

Это высокоуровневое обобщение автоэнкодеров, и в следующей статье мы более подробно рассмотрим алгоритм автоэнкодеров.

Хотя исследования в этой области бурно развиваются, современные методы не могут легко решать проблемы промышленного уровня, и пройдут годы, прежде чем наши алгоритмы станут действительно «промышленными».

Объяснение кода для неконтролируемого глубокого обучения в наборе данных MNIST

Теперь, когда у нас есть общее представление о том, как использовать глубокое обучение для решения проблем обучения без учителя, давайте применим то, что мы узнали, к реальным проблемам. Здесь мы берем набор данных MNIST в качестве примера, Набор данных MNIST всегда был обязательным набором данных для тестирования глубокого обучения. Прежде чем расшифровывать код, давайте разберемся с определением проблемы.

Первоначальная задача заключалась в том, чтобы определить числа на изображении. База данных даст вам метки чисел, содержащихся в изображениях. В нашем кейсе мы попытаемся найти похожие картинки в базе данных и сгруппировать их вместе. Мы будем оценивать чистоту каждой категории по этикетке. Вы можете скачать данные на платформе AV DataHack — практические вопросы «Распознавание чисел».

Мы протестируем три техники обучения без учителя и оценим их эффективность:

  1. Непосредственно выполнять кластеризацию KMeans на изображениях

  2. KMeans + автоэнкодер

  3. Глубокие встроенные алгоритмы кластеризации

Перед началом эксперимента убедитесь, что в вашей системе установлен Keras. (Обратитесь к официальному руководству по установке.) Мы будем использовать TensorFlow в качестве серверной части, поэтому убедитесь, что у вас есть эта опция в файле конфигурации. Если нет, выполните шаги, указанные здесь.

Нам нужно использовать открытый исходный код алгоритма DEC, реализованного Xifeng Guo. Введите следующую команду в командной строке:

Вы можете открыть блокнот Jupyter и следовать приведенному ниже коду.

Сначала нам нужно импортировать все необходимые модули.

Ниже мы устанавливаем значение начального числа на ограниченное случайное число.

Теперь задайте рабочий путь данных для облегчения последующего доступа.

Чтение в обучающих и тестовых файлах.

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

Теперь отобразим данные в виде картинки:

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

Мы разделяем обучающие данные на обучающий набор и тестовый набор.

K-Means

Сначала мы использовали кластеризацию K-средних непосредственно на изображениях, группируя их в 10 классов.

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

Мы будем использовать показатели нормализованной взаимной информации (NMI) для оценки нашей модели.

Взаимная информация является симметричной мерой степени зависимости между результатами кластеризации и человеческой классификацией. Он основан на концепции кластерной чистоты PI и измеряет качество отдельного кластера Ci путем сравнения Ci со всеми ручными классификациями в M, т.е. максимальным количеством идентичных объектов в Ci и Mj. Поскольку NMI нормализован, мы можем использовать его для сравнения результатов кластеризации с разным количеством кластеров.

Формула NMI выглядит следующим образом:

K-Means + AutoEncoder

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

Теперь обучите модель автоэнкодера:

Как видно из результатов, при сочетании автоэнкодера с K-Means алгоритм работает лучше, чем при использовании только K-Means.

DEC

Наконец, мы рассмотрим реализацию алгоритма DEC. Алгоритм DEC обучает кластеризацию и автокодировщики вместе для достижения лучших результатов. (Диссертация: Junyuan Xie, Ross Girshick и Ali Farhadi. Неконтролируемое глубокое встраивание для кластерного анализа. ICML 2016.)

По сравнению с двумя вышеперечисленными методами алгоритм DEC имеет наилучший эффект. Исследователи обнаружили, что дальнейшее обучение модели DEC может привести к еще более высокой производительности (NMI до 87).

Посмотреть исходный английский текст:

https://www.analyticsvidhya.com/blog/2018/05/essentials-of-deep-learning-trudging-into-unsupervised-deep-learning/