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

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

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

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

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

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

Данные передаются слева направо. Входной слой, крайний левый, получает кодировку песен. Затем следующие 3 слоя являются максимальными объединяющими слоями. Следующий уровень вычисляет среднее значение, максимум и норму L2 своих входных данных. Следующие 3 слоя являются сверточными слоями, а последний слой является слоем временного объединения.

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

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

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

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

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

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

Примечание. Все большее внимание уделяется необходимости предварительной обработки данных для глубокого обучения. Google только что объявил о tf.Transform, чтобы удовлетворить эту потребность пользователей TensorFlow.

Теги: machine_learning deep_learning

Первоначально опубликовано на www.ibm.com.