Шаг 143.
Глубокое обучение на Python.
Основы машинного обучения. Улучшение общности. Конструирование признаков

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

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

    Рассмотрим простой пример. Допустим, нам нужно разработать модель, принимающую изображение циферблата часов со стрелками и возвращающую время (рисунок 1).


Рис.1. Конструирование признаков для чтения времени с изображения циферблата часов

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

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

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

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

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

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

    На следующем шаге мы рассмотрим раннюю остановку.




Предыдущий шаг Содержание Следующий шаг